This part of the site is really, really, I mean really, rudimentary. I plan on adding
relevant links to guide students who are interested in these topics but I am only
able to do this on my copious free time ;p
In the meantime, my Sourceforge.net Profile
hosts projects related to grants, research, or simply things I tinker with in order to learn new technologies.
I should mention here that, while I want my students to be equally versed in a wide range of technologies,
my personal preference is for open source technologies.
They have afforded me a freedom to experiment I have not experienced with vendor technologies.
Not mentioning the underlying philosophy put forth by open source developers who contribute
countless hours to make our digital world a better place.
and its plethora of frameworks. However, I find myself often relying on PHP and SQLite for quickly prototyping web apps which
do no require a high level of user-interactivity. I quite enjoy the language for this purpose and might just invest more time
I use web development in most of my undergraduate student projects. I feel these are great opportunities to teach the latest
web technologies in a very hands-on manner. I also regularly leverage web development tools for the software development
parts of my Computing Education Research grants.
illustration of a PHP app.
- This Novice Errors Detection web app writen for the CLUE project is another
good example of this kind of work.
- Web PT
- The most recent, and least polished, of the bunch. Started in summer 2014 as a quick & dirty prototype to help
students leverage peer testing in a programming assignment used in IT Program Design.
Still in the works.
I would recommend the following resources for students interested in learning more about PHP;
As many, I started with JQuery,
tried my hand at some small mobile web app with JQuery Mobile.
Right now I am looking to start a project leveraging AngularJS.
Probably a full rewrite of Sherpa would be a good way to dig into this technology.
students to advanced OOP ideas; e.g. Model-View-Whatever design pattern, dependency injection...
Same goes for functional programming features like closures.
These enable web development to become a motivating playground for our IT students to learn about and tinker
with advanced OOP ideas
My learning of the language led me to write on my spare time a modest programming environment named
Sherpa, alongside a few minor tools.
by David Flanagan, 6/e, O'Reilly publisher, 2011
by Douglas Crockford, O'Reilly publisher, 2008
by Alex McCaw, O'Reilly publisher, 2011
by Christian Johansen, Developer Library, Addison-Wesley, 2010
by Marijn Haverbeke, 2/e, online free edition,
No Starch Press Edition, 2014
- Pro JQuery, by Adam Freeman, 2/e,
Apress Publisher, 2013
- Mastering Web
applications Development with Angular JS,
by Peter Darwin & Pawel Kozlowski, Packt Publishing, 2013
MongoDB, and AngularJS Web Development,
by Brad Dayley, Addison-Wesley Professional, 2014
My previous experience with Linux has been as follows;
Served since 2008 as developer then coordinator for the USF BS in IT Linux Technologies
Taught since roughly the same time our User-Level intro to Linux which is part of the
above-mentioned specialization track.
Served as system administrator for some of my NSF-funded Computing Education Research projects from 2004 to roughly 2009.
Most notably, I have tinkered with load-balancing clustering & automatic provisioning before this
was made trivial by Ubuntu cloud technologies. Fun times. See SOFTICE for details.
Since 2009, I have been mostly doing system administration on Linux virtual machines serving LAMP stacks, web contents,
and custom web applications developed for various research projects.
In 2016, I served as interim lead for the system administration team of the USF Computer Science & Engineering Department.
During this time I mostly explored Docker technology, DNS, NIS and helped virtualize some of the department services.
From 2004 to about 20010, I have used Loadable Kernel Modules as a way to introduce my IT Operating Systems students
to realistic operating system assignments.
Back in 2003 or so, I co-founded with my wife the Polk Linux User Group. We followed its various
incarnations as community-driven group, student association, then joined the Linux Enthusiasts
meet-up group which held its meetings at the USF Lakeland campus for a while.
General Links about Linux
For many students new to Linux, the following provides a good overview of both uses of Linux in
industry and its adoption statistics;
It is a good idea to then move on to some more specialized sites;
Here are links to some of the mainstream Linux distributions;
You will also find websites dedicated to help you look for the distro best suited for your needs;
A particular mention is worth giving to Linux distributions that put a particular focus on preserving your privacy directly
or indirectly by preventing you from installing, without even realizing it, closed-sources software
Similarly, if you are looking for small distributions able to give new purpose to old hardware, or run inside a router, take a look at
Understanding Open Source
These websites will help you gain a better understanding of the open source movement;
Zines related to Linux;
Linux Enthusiasts Web Sites;
Linux User Groups
These are great environment to find other fellow Linux enthusiasts to mingle with.
I will try to keep the list below up to date with LUGs available in central Florida.
Do not hesitate to get in touch to have your LUG added.
Our online students are from everywhere in Florida, helping them find a LUG near them is the point of this list!
Educational Material about Linux
The following are resources providing a more structured approach to learning about Linux
For those of you interested in developing on the Linux platform;
For those of you interested in kernel internals;
Just for fun...
Here are some ideas of topics you might want to explore further just for fun;
Linux distributions each feature repositories.
Android is based on Linux and has the Google Play app market, which is, in essence, a repository.
However, there is more.
Download the F-Droid app and access the F-Droid repository of open source Android apps.
Understanding how an Android installations differ from a traditional Linux distribution.
This is something you may explore by installing the Termux app.
I recommend you do so from the F-Droid repository.
This tool will allow you to interact with your Android system much like you would do with a command line on a regular Linux installation.
I particularly recommend playing with Termux::API which will
allow you to access via the CLI, and therefore scripts, some of the Android specific features; e.g. GPS, TTS, Camera...
Windows 10 marks an interesting development in terms of the relations between the Linux community and Microsoft.
Following in the footsteps of projects like GNU Cygwin, there is now a way to
get a Ubuntu-based overlay on your Windows 10 system and access it via a Bash-powered command line.
For more details, refer to this
or this one,
along with this overview of available features.
A project worth keeping an eye on.
This list would not be complete if I didn't mention the wealth of tutorials and projects revolving around the
Raspberry PI hardware platform or other similarly intended, Linux-powered,
one board computers; e.g. Pine 64
I have enjoyed programming in Java since about 2001.
Daniel Liang's Comprehensive Introduction to Java [website]
This one covers all the fundamentals you should be exposed to throughout an undergraduate degree
Zyante Interactive Textbooks [website].
Another novice-friendly textbook.
Princeton's Interdisciplinary Intro to Java [website]
Yet another novice-friendly textbook with a spin on introducing core computer science concepts while learning Java.
Check out also the authors' Java Programming [Cheat Sheet]
Cay Horstmann's Core Java for the Impatient [website]
This one is not meant for first time programmers but people who are looking for a textbook to learn Java as a second or third
programming language. Good for an undergraduate elective or a graduate-level quick recap on things you might not have seen before.
- Oracle's official Java Documentation
- Oracle's Java Tutorials Trails [website]
- Oracle's Java Certifications [website]
- Java Language & JVM Specifications [website]
If you are just getting started in learning how to program, the following are resources which might help you out;
Integrated Development Environments
These IDEs are generally geared toward novice Java programmers as they offer a clean and easy to learn
interface that does not get in your way of learning the language itself.
Unlike the IDEs listed above, the following provide many more features generally useful to more
seasoned Java programmers;
Java Concurrent Programming;