My wording was ambiguous. I meant hosting as they meant in the original post, shared web hosting, not hosting as in co-location of an actual server. For the latter case, your points are correct.
VPSs have gotten so cheap and full-featured, I don't know why anyone who has IT knowledge would host any more.
I am legacy hosting on Dreamhost for $10 a month. My MySQL instance has become so slow, I have removed it from my Nagios check. Their old in-house mail web interface is slow as anything (new accounts go to Google Mail, they may have a migration option). Server load can exceed 100, server load is usually many multiples of the number of processors. Dreamhost was considered one of the good web service providers.
Meanwhile for $16 plus bandwidth I get my own VPS on Rackspace, 20 gigs disk space, 512MB RAM, I can install whatever I want. Linode - 1024MB RAM, first 2 TB of bandwidth free, 24 gig hard drive. I put my own Apache in, my own MySQL. I even run BIND 8 on them. Right now I'm using Perl on the server, but I'm free to use whatever I want. And if $16 is too rich for you a month, you can find even cheaper VPSs. Linode and Rackspace have had a decent QoS, and my business is profitable, so I pay a little more.
"But given how eagerly Dalvik disposes of anything connected to a process that'S not in the foreground I wouldn't consider using it to do anything important."
Dalvik has specifications and documented behavior and Dalvik follows that behavior pretty well. You do not see Dalvik disposing of anything connected with a process that is state that it supposed to save. Some state is ephemeral and documentation states it is ephemeral. I have yet to see an object held by a running Service to be arbitrarily destroyed by Dalvik. Offscreen Activity objects might be destroyed, but Android API documentation explains this up front. If you want to hold state in a process outside of the current onscreen Activity, you put it in a Service or like class, not in the Activity object. Activity objects are supposed to be short-lived when they go off-screen.
Dalvik has no problems holding state if you hold state properly in a Service object. If you try to hold state in offscreen Activity objects then you shouldn't be surprised when Dalvik doesn't hold it. It's not supposed to.
Phones like the Samsung Galaxy S2 LTE was available to customers in places like Canada toward the end of 2011. I watched the September 2012 video in which the iPhone 5 is introduced. At one point the speaker (Phil Schiller?) says the iPhone 5 will have LTE support, which is followed by a big round of applause. By then, there were a variety of Android phones in customer hands already with LTE, in a number of countries - and Android users had been using LTE phones since 2011.
I remember older iPhone presentations where they really were announcing new features - not playing catch up to something there had been Android phones out with the year before. That said, the iPhone is a good phone, and they've generally kept pace with the cutting edge of technology.
The Simple Directmedia Library (SDL) is a cross-platform library which there are many apps for, especially games. These games are ofte cross platform for Windows, Mac and Linux, and there are some fairly popular ones.
There is a lot of software out there under SDL 1.2 and before. SDL 1.3 and on was completely rewritten, relicensed and there is not anywhere near as much software out there using it. There are ports of both to Android - the SDL team did a 1.3 and on port, a fellow named Sergii Pylypenko ported SDL 1.2 to Android, as well as a lot of supporting libraries, as well as a number of games.
The best of them is the Quake III Arena clone OpenArena. It was just release and still has a little cleanup to do, but is not that buggy and has a 4.0 rating. He has been fixing it up more and those problems are sure to be dealth with. He has other ports of popular open source games to Android as well - OpenTTD, and GemRB (Baldur's Gate engine). Gerhard Stein has put out some of these - Free Heroes and VCMI (Heroes of Might and Magic engine), Commander Genius and OpenTyrian.
I have done a few of these open source SDL ports as well, with two on Google Play right now. One is an anime-style puzzle game Lily Hop, based off the open source Hex-a-hop game. I think the port came out well, although it is not popular and even if it was I am not exactly sure how I would monetize it even with ads.
Another open source SDL port I did is of the popular Linux math game Tux of Math Command, which I call Free Math Games for Kids. That one is more popular - it has been downloaded over 35,000 times since the summer, and gets several hundred downloads a day. It could probably be more popular if I did more work on it - the original has translations to many languages, but I only offer it in English and Spanish currently. I have just been too busy to implement the other translations.
"I started looking into local community colleges and universities, and much to my dismay, they offer neither nighttime or online courses for computer science."
I don't know where you live, but I would look into this more. I am not sure what you mean exactly either. Do you mean no local colleges have a computer science course where all classes are 100% at night or on weekends? Or that all classes are during the day on weekdays?
I would take a second look at your local community colleges and colleges and universities. They don't have any night or weekend courses? Also, how local is your definition of local? Let's say there was a college 50 miles from you where you could graduate doing weekend courses - that would be an option - you could drive an hour on a weekend afternoon, take a class, and drive back. My college is nearby, but I know people who commute a long way to get to it.
I would map out colleges and universities by distance from you, then see which ones have a CS program. Then go through their class requirements for a CS Bachelors, and see what prerequisites for each class are (some 300 level classes I took had nine prerequisite classes). Then see when classes are offered. My experience has been the initial level 100 math and CS classes tend to have more schedule flexibility (i.e. more classes are offered at more times) then some of the required 300 level classes. You may be able to get half your credits on nights or weekends before having to worry about a required 200 or 300 level class which is only offered during the week in the daytime.
I would start with one class a semester and see how that goes. If you think you can do two classes a semester and full-time work, try that after seeing how the one goes.
In 2006, I went back to school to get a Bachelors in CS, starting with night and weekend classes. Initially, one of the larger reasons for taking the classes was so that I could show potential employers that I have a Bachelors. This kind of thinking has receded as I have learned more CS and have gotten better at programming. For example, I have a side project where I write Android apps - so far this month I've made $1100 on my Android apps. I would have never have been able to do this if I hadn't learned about algorithms, data structures, Java, and so forth at college. So my thinking now is a little bit less, I need a piece of paper that I can show someone else when I need a job, and is more, what can I do with this knowledge I have gained?
Do you have a Bachelor's degree? I began working as a systems administrator before completing my Bachelor's degree. I have always done some amateur programming, but wanted to improve my skills to where I really was a "programmer". So I killed two birds with one stone and started taking one course a semester at a local college. I would go either at night, or on the weekend. Some semesters I took more than one course.
As I said, I already had written programs. I did not have the deeper understanding to write better, bigger and more complex programs though. The computer science program laid a foundation of calculus, statistics, and discrete mathematics. Then it went deeper into graph theory, and the theory of computation. Then we began learning C++. Then we learned more advanced C++, how algorithms and recursion and so forth worked. Then we learned Java. Then we learned about data structures, and the relationship between data structures and algorithms.
If you just want to learn a little Perl to write some simple scripts, you don't need to do all of this. It sounds like you want to have a deeper understanding of programming though. So this is necessary. I think it is best done at a college, although theoretically someone can learn much of this on their own.
I think the idea of learning programming by "I want to learn one language well" is an amateur mistake. Our learning initially was almost purely mathematical. If you read volume I of "The Art of Computer Programming", he doesn't get into (M)MIX programming until pretty far into the book, the beginning is math. The cursory learning of a programming language was just a byway to then teach us about recursion, backtracking and the like. We immediately moved onto Java instead of going deeper into C++, to see that there were different ways of doing programming by different languages. We later learned radically different languages using different paradigms like logical programming (Prolog), functional programming (Lisp) on top of the object-oriented programming (C++, Java) languages we had already learned.
Eric Raymond once said "Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." Other experienced programmers have agreed with this sentiment. As you said you're still an amateur, it's probably beyond your capacity right now to understand why someone should "waste time" learning a language like Scheme Lisp which they might end up never using. An ounce of prevention is worth a pound of cure though. The opinion of most expert programmers is that understanding the core ideas of computer science and programming is more important than domain expertise in a particular language. You say "I'll be setting aside an hour every day to devote to learning a new language, in the eventual hope that I can leave this company (take a sabbatical) and hop into the private sector for a few years." You should ask yourself if this is enough. Yes, knowing at least one commonly used programming language is important to get a job as a programmer. You will never really understand that language, and its limitations and advantages, until you learn some other languages, and some of the general concepts behind all programming and computer science. You said you were a novice programmer, and I think putting too much emphasis on learning one language well is an amateur mistake. There's a lot of steps you should be doing before deciding to become an expert in one language.
I'll give a personal example. I do a lot of Android (Java-like) programming. I also need a web API for some of the programs. A server-side Java solution is just too expensive for what I'm doing - sites like Bluehost and Dreamhost don't really support Tomcat and the like for $9 a month. So I use other languages for my web API than Java. Do a Google, or more importantly, a Craigslist job search for "full s
One point others have not made much is this: if you are in IT and can skip college, yes, you can be a good help desk employee. You might be a good database/systems/network administrator. You can even code Javascript or PHP to start putting together a simple website. You are not going to be able to program the type of advanced, complex systems that someone with a BSCS (or Masters, or Doctorate) can though. The only way to do that is to have a foundation of discrete and continuous mathematics, an understanding of statistics, graph theory, computability and computational complexity and so forth. An understanding of how algorithms and data structures interact. How mutual exclusion works. Of how things are fed to the ALU, of how floating point numbers are stored.
If you're going to spend the hours and days and weeks and months and years it takes to study these things, you might as well hook up with a CS program of a decent school, a public school if money is an issue, and learn it there. Most professors know their subjects well (although ones who know their subject well and are great communicators and teachers are rarer). Your classmates are often doing interesting things. Some people say you can study these things outside of college, but why not just go to a public college for 90 minutes, two nights (or on the weekend) a week and get a diploma cheaply? Also, I've never met anyone who has not gone to college, who has learned calculus by themselves, and then studied how limits work for big-O algorithm notation by themselves. They may be out there, but I have not met them.
One of the big problems for people without any college is that they don't know what they don't know. Solutions which will be obvious to someone who has studied computer science over four years (or more) will never even occur to someone who has been putting Javascript together. I tried to write a program in C many years ago which needed threading, mutual exclusion and so forth when I had only the vaguest idea of what those things were. It was a complete mess. Nor did I know it would be a mess when I tried to put it together without understanding mutual exclusion. Which reminds me of an interview question I got wrong many years ago - what is the difference between a process and a thread? I knew a process was more "robust" but could not explain why. And so on. It may be true that school is not the right thing at the right time for someone at some point in their life, but it should be considered in a rational fashion.
Ri-li is a game very young children might enjoy. It has a toy train running around the track, and there's not much to do - just click the button to switch the train tracks if you think it might crash. It has lots of motion and train noises, and is simple. I have heard from more than one parent that their child really enjoys playing it.
I wrote (forked, really) a book reader for Android earlier this year which has had over one million downloads since then. So I am obviously Android biased, but I also have looked into the field somewhat.
The main question is, why would you want to get something other than an Android tablet (or "phablet") as a reader? The main reason would be electronic paper - usually using eInk technology, like those Kindle's with eInk technology have. The Amazon Nook also has eInk, and other companies put out electronic paper products as well - Sony, Kobo etc. It is supposed to be easier to read, easier on the eyes, readable in bright sunlight etc. You can go to a store and try it out. Other people have commented about this technology, I have tried it but not on a regular basis. I don't know of any Android e-Ink products unfortunately, although the Microsoft/B&N Nook is a fork of Android.
Then there are Android tablets and phablets. One thing about them is you can choose different book readers - you can choose my book reader, or Google Play books, or the Kindle Android app, or the Kobo Android app, or apps like Aldiko, Moon Reader, Cool Reader, or the open source app I forked from - FBReader. Google Play is getting big on selling regular books like Harry Potter or Suzanne Collins or the like. You can buy them from apps like Kindle Android as well.
Then there's plenty of free apps with free books. My app is free and has free ePub format books in different languages - English, Spanish, German, Dutch, Portuguese, French and Spanish. I will probably be adding more languages in the coming months. All of my ePub books which are free are in the public domain. Most, if not all, of them were published before 1923 and are thus public domain - Mark Twain, H.G. Wells and the like are popular English language books.
Plus, you can use your Android tablet/phablet for things other than book reading. You can buy a 7 inch Google Nexus 7 tablet, which people love. I have a Samsung Tab 10.1 which is 10 inches which I have been happy with. Try them out in a store, see how big they are and how much they weigh. If you are on a sofa or bed reading, how heavy will the tablet be on your stomach? The Samsung Tab 10.1 is 1.25 pounds, which is about the weight of a 500 page hardcover book. Since the weight is more evenly distributed, and not concentrated in the center like a book, it feels even lighter. But there are smaller and lighter tablets/phablets out there as well.
Slashdot has always been a fan of free software, and in terms of my app, it works out well in all directions. I have contributed back to my fork upstream, in the form of things like language translations. My app is on an open source framework - Android. While the app handles more than one book format, it concentrates on the book format which is the standard open one - ePub. My app primarily traffics in public domain, pre-1923 books in a variety of languages, so the content is free-as-in-beer/free-as-in-speech. The app made me over $430 in ad revenue last month. The ads are non-intrusive - originally I had ads over books while you were reading, but when testing it I found it annoying and distracting, so I put up ads before a book opened and hoped that I would still make money even though the ads were not as visible all the time, and it has worked out. Over time I will continue expanding languages, and sending those to my code upstream, FBReaderJ, and perhaps make other improvements and send those upstream as well. It is a free software ecosystem where the benefits flow back and forth in all directions and that has worked out for everyone.
I'm hyping my own projects here, but over the past weeks I've been porting free software games over to Android. Specifically, games that use the Simple DirectMedia Layer (SDL) library. Most of the games are written in C++, and the OpenGL (OpenGL ES in the case of Android) functionality is handled via the SDL library. I have had a good response so far for some of the games.
I have the games as different branches from my tree on Github. My tree is a fork of Sergii "Pelya" Pylypenko's port of SDL 1.2 to Android. One branch is a (partial) port of the popular educational game Tux Math. Another branch is of the game Circus Linux, which I felt did not translate well to Android (at least as I did it) so I never published it to Google Play. I should be putting a few more branches up on Github soon - ports of Ri-li, Hex-a-hop, Ice Breaker and so forth. The Ri-li source will probably be the next one that I will put up.
You say: "I find it a painful process to go back to an Android or iPhone for some obscure app not yet supported on WP."
The apps which already have Android and/or iOS support, which you also want WP support for, may be obscure in terms of the ones you as a person are particularly looking for. However, there are a whole host of non-obscure apps supported on Android and iOS, which are not supported for Windows Phone yet.
Angry Birds Space. Temple Run. A banking app for Chase Manhattan bank. Instagram. Any Zynga app - Words with Friends, Draw Something etc. Pandora.
Dropbox is an app whose whole point is to be cross-platform. That they don't think WP is worthy of a port yet is a sign.
There's a Nook app for iOS and Android but not yet for Windows Phone, although I'm sure the $300 million deal Microsoft made with Barnes and Noble six weeks ago will change that. At the moment, Lumia owners are still out of luck due to the deal. It just goes to show that popular apps are not written overnight.
Is there a database app that can handle Microsoft Access files on Windows Phone? AFAIK, there is not. There is one for iPhone and Android. I should know, I wrote the one for Android. If you want to search through a Microsoft Access database file on a mobile phone - with Microsoft Access being included in most of the Microsoft Office suites I've found at large companies and universities - you have to buy an Android or iPhone.
All of these are all popular apps on iPhone and Android which are not on Windows Phone. Then there apps which have been ported to Windows Phone, but which reviewers say are much worse than their iPhone and Android versions. Rdio is one example, according to Techcrunch and Gizmodo reviewers - they love the Android and iPhone version, but think the WP port is sub-par.
Continuing on the usability theme, I find that trackball like middle button difficult to handle. Doing things on an iPhone or Android (or even WinPhone) is just so much easier.
The Lumia 900, #7, was released last month in the US. The Galaxy S II Epic 4G Touch, #4, was released in September of last year.
The Lumia 900 is more than six months newer than the Galaxy S II Epic 4G Touch which, with the rate smartphone innovation is going, is half a lifetime. Yet that older S2 release with its older specs is beating the 900. What is going to happen to the 900 when phones like the Samsung Galaxy S III become available? The S3 is going to become available in Europe at the end of this month, and will soon be available in the US as well.
I have a relative around that age who knows a lot about the Xbox and iPad. I remember from my Commodore 64 days how these machines were not "walled gardens" and how I could start programming in BASIC as soon as I turned my Commodore 64 on. So I looked for some programming books for him.
I looked at a lot of books. I suggest cursorily flipping through the first few chapters of books you consider. It came down to two books, I don't recall what the second choice would have been. I picked Invent your own Computer Games with Python. Why? Because Python is a good tool to teach kids a language, but it is also used for real stuff out in the world, it is not a toy language like BASIC. Because kids are interested in games at that age, and with this they can program their own. And because it is basically written for kids and beginners - it is not a "learn Python" book for someone like me, who already knows C, C++, Java, PERL etc. and is just picking up one more language.
I bought a hard copy of the book, but it is also online for free on their website. He mainly uses an iPad, so I installed a free SSH client for iPad so he can ssh into an account I created on my web server and run Python. My web server had an old version of Python, so I installed a local copy of the latest Python and redid the PATH for the account to hit the local python binary first.
I'm still mulling how he can edit programs. I used nano (and vi) when I first was showing him, but might download scp for iPad and an editor for iPad, so he can scp the programs. I want to make it as easy as possible, and he can learn harder stuff later.
Aside from the book needing Python 3, which just made me have to do a little work, so far so good with the book.
Last year Linux celebrated its 20 year anniversary, as Linus began writing it in 1991 and released it that same year. For myself, I'd have to think more deeply about it to determine exactly what year I first started using Linux, but it was definitely between 1993 and 1995. I installed my first Linux on a non-brand-name laptop with the Slackware distribution. It required many, many 3.5 inch disks to install (I forget how many disks it was if you wanted to install X-Windows - it was a lot). It used LILO as the boot loader.
My next Linux desktop I began using in February 1996. It was at a small startup - so small actually that initially the machine doubled not only as my desktop, but as a server of sorts. The machine had a pre-1 kernel, but the previous sysadmin upgraded it to Linux 1.X the first day I began working. The/proc/meminfo file in Linux had recently had a cached column added to it, which broke top and some other things, although the previous sysadmin dealt with that snag as well. FVWM was my window manager. The machine was susceptible to the "ping of death", and this was before firewalls, NAT, iptables and the like were widespread in use.
Linux as a desktop has come a long, long way since then. Even in the past few years, the Linux desktop has come a long way. A lot of people have done work on this, but Ubuntu has been a big part of this, and is what I currently use on my desktop. One example - when installing my new Ubuntu system, it sets up what is necessary to get the disks and network connection in order, and then it simultaneously starts downloading needed packages from the Internet while I go through the rest of the system setup menus. If I finish all the setup before everything is finished downloading, I can cycle through a promo which shows me which features Ubuntu has. This is the kind of thinking that has been needed for Linux on the desktop - every previous Linux install I remember consists in me doing system setup, and then I have to wait for the downloads to start and finish. Even though it is a little more of a pain to implement from the developer's point of view, Ubuntu gets those downloads started as soon a possible, and I don't have to wait that extra time that I'm doing the rest of the system setup - and if I finish before the downloads, I have a promo to look through where I can learn about the system. Not a big thing, but an example of the kind of thinking needed.
To a point others have addressed - nowadays there is server, desktop, laptop, tablet and smartphone. Linux is dominant on smartphone, and has a very healthy-sized chunk of tablets. With the Nook, the Kindle Fire, as well as the pure Android tablets like the Samsung Galaxy Tabs, the Xoom etc., and this year Ice Cream Sandwich tablets coming out, I'm confident Android (and thus Linux) will grab more of the tablet market. What I have not seen mentioned here (maybe I missed it) is that tablets sales have been cannibalizing desktop sales, and the traditional desktop is growing less relevant over time for the average consumer. Just like people here are saying desktop Linux is mostly only relevant for techies like us, in the future desktops may become mostly relevant only for techies like us, or people doing things like 3d modeling and the like. With a Bluetooth keyboard (foldable or solid) and a tablet, you can already do a fraction of what the desktop can do, and that will only increase with more powerful tablets, new software and so forth. And Linux is a big player in this domain. I think the efforts to improve desktop Linux are good, but I think efforts to promote Linux are currently more productive in the areas where it already has a significant position: servers, smartphones and tablets.
Right now Apple and Android are in a real race for dominance over smartphones and tablets, and Windows is throwing its hat in the ring with Windows 8. I think Microsoft realizes it has lost the smartphone race for the next few years, and will be concentrating on tablets, where the
With regards to the ticketing system - if someone posts a ticket for a problem, see if you can reproduce the problem with their particular version. See if the problem still exists in the head of the latest code trunk. See if the problem is a duplicate of another problem. See if the problem is with the program, or somewhere upstream, say, a library that the program depends on. If so, report the problem upstream.
Core developers are busy, and most projects can use people who deal with and clean up tickets, leaving only real problem tickets to deal with. Also, sometimes a program or library from Gnome or freedesktop.org will have tickets in the trouble ticket systems of Debian, Ubuntu, Fedora, SLES, Gentoo etc. Someone doing a little coordination will be helpful.
The thing is, even top notch programmers unfamiliar with a large program are initially at a disadvantage to a middling programmer who is well-familiar with a large program. Everyone is initially at a disadvantage when a program breaks, no matter what the skill level. But even if your programming skill level is very low, most projects can benefit from extra help. Even if you just confirm a bug exists on your system too, or that you can't reproduce a bug - this helps core developers save time.
There is something of a slope of what FLOSS in an organization is, from Richard Stallman, who is a purist, all the way to companies which will use (but not contribute) Apache/BSD source in their code, or run a GPL application.
I've used FLOSS associated with my job for a long time. From the mid 1990s on this was as a Unix Systems Administrator. I've installed Linux (and back then, FreeBSD also) servers at companies since the mid 1990s. I've installed open source software like Apache, BIND for DNS, and Tomcat. Various mail packages like sendmail, exim, qmail. Some of the comments mention small companies, but I've installed and/or maintained open source tools in everywhere from small startups to Fortune 50 companies.
Also, over the past year I have learned the Android API better, and Android is, of course, an open source platform. My entire development process for Android is very open source based. I do development on an Ubuntu Linux desktop with the open source IDE Eclipse. I also often include Apache code in my code, or sometimes LGPL, or sometimes even GPL code. I even released Android open source - I was building a spreadsheet, got pre-2007 Microsoft Excel (.xls) loading OK, but hit a snag with Excel 2007/2010 (.xlsx), so I open sourced what I had so far ( https://github.com/dennis-sheil/android-spreadsheet ) and will do some more work on it if I have the time.
I released several of my own Android apps over the past year. You're talking about making money on this - I made over $15 in ad views yesterday. Not enough to earn a living, but an extra couple of hundred dollars a month does not hurt. Some independent Android developers have put up blogs, like Droid Blog, or Kreci, or others, they've been doing it longer than me and are making thousands a month, not hundreds.
Plenty of people have written advice on how to push for open source solutions at a company. Just suggesting often it isn't going to do the trick, you have to package it in a certain way, get buy-in from the stakeholders and so forth. You might not always succeed, but sometimes you will.
...on smartphones and tablets, particularly Android and its derivatives.
Cut the Rope is 99 cents with at least half a million downloads. There are two unknown factors - how many returns were there (downside) and how many over 500k are they (upside). So they've made around $500,000 on this app.
GTA III on Android - 4.99 and over 100,000 downloads - another $500,000 in revenue. And a lot of the graphics and engine code was already written.
I had a chat with one of the Big Mountain Snowboarding developers ($2.99 times 5000+ is $15,000, plus an ad-based Android version with over 500,000 users) who told me that over 85% of the C++ and OpenGL code from their iPhone version could be reused in their Android version. Companies with an existing C++/OpenGL code base don't have to re-invent the wheel to get on Android.
Fruit Ninja : $1.26 * 500,000+ = $630,000. Doodle Jump: $0.99 * 500,000+ = $500,000. Madden NFL 12: $4.99 * 100,000+ = $500,000. And so on. Then there's the money games make on their free, ad-based versions. As I said, many of these games have existing C++/OpenGL code on another platform, so the half million in sales, plus more in ads, that they've made thus far, is money they made just for the port. Which also helps keeping you in the game if some competitors want to take these established games on in this newer platform.
Android is a Linux kernel, with the rest of its code open source. Tim Bird and others recently started an effort to bring the Android developers and Linux closer together, so hopefully that will bear fruit.
I develop for Android and own a Samsung 10.1" Galaxy (Android) tablet. I know someone who owns an iPad.
Several months ago, I wanted to give them SSH access to a server. So I looked at what iPad had to offer. I could find no free SSH client (as of a few months ago). Not even an ad-supported one. The best I could come up with was a nagware one - it allowed you 500 or so SSH keystrokes and then logged out and asked you to buy the client.
Meanwhile on my Android tablet, I have a free SSH client. It doesn't even have ads, it's open source! ConnectBot. There are other free Android ssh clients as well, but ConnectBot works for me so that's what I know.
Admittedly, I know more about Android than iPad. But the one thing I ever needed from iPad, I couldn't get for free. On Android I could. So which would I want to own more?
And as I said, I develop Android apps. If there was no good free SSH app for Android, I could have developed one. But there was one - ConnectBot. ConnectBot has no ads, but I would have been perfectly happy to have used a free SSH app with ads.
There are many revenue models for applications. Most of the top free apps have various alternative methods of getting revenue - and not just the apps like Facebook or ESPN Sportscenter. Ads are just one method, there's also upselling, and other revenue models.
At the end of the day, the real question is not what's good for the developer, but what's good for the customer? We have a platform that is developer-friendly but not user-friendly, it's called the Linux desktop. I like platforms that are good to developers, but there are many ways Android is good to developers that Apple is not. It costs me $25 for life to publish and Android app, without any application approval process (not $99 to $299 a year like Apple). I can publish the app anywhere, not just Apple's walled garden App Store. I can write and compile my app on Linux, Windows, Mac or whatever - I don't have to buy a Mac and then get Xcode. And it's not no one ever buys Android apps - some apps have made millions of dollars in sales (that we can see - in-app sales, ad revenue etc. is less visible). The revenue model just depends on the particular app.
1) You can develop from any platform. I develop on my Ubuntu 11.10 desktop. But you can also develop on Windows, MacOS or other Linux flavors. With iOS, you have to buy a Mac to start developing
2) It costs $25 to publish on Android Market for life. And you don't even have to - there's no "walled garden" like iOS has. The App Store has an annual fee which is $99 - with an even larger fee for the "enterprise program" whatever that is. (Speaking of Android's $25 fee, Admob just sent its first check to my Paypal account today for $22.95. So once they send me another $2.95 I'll be in the black. Actually I've already earned more than that extra $2.95 on my Admob account - they send you the money 6-8 weeks after earning it if you've accumulated $20 or more.
3) With Android, most non-game development is done in Java. A language many people know. With iOS, development is done in Objective C, a language that is not used outside of Apple-world anywhere near as much as Java. Objective C seems obscure to me - I have some written code at one time or another in C, C++, Java, Perl, Python, Common Lisp, Basic, PHP and probably some languages I'm forgetting, but have never had cause to use Objective C. It might be a perfectly fine language, but I'm stuck having to learn not only iOS's SDK, but a new language I'll probably never use again. Java I've used before Android, and would be useful to know even if I stopped programming for Android. Of course, with some wrappers, Android will do C++ (and OpenGL) code just like iOS will.
4) Android is open source. It has derivative products like Cyanogenmod and the Kindle Fire. Instead of just getting hardware one company decides on, we can get a range of products from a number of manufacturers. This has a downside in addition to the upside, but I think the upside outweighs it.
5) Android smartphones have been outselling iPhones in past months. It seems like a trend that has taken hold. As far as the tablets, obviously Apple dominates. But I'm happy with my Samsung Galaxy Tab 10.1". I'm sure the ICS tablets will be even better. As far as Android users spending money, just with some basic math I can see some apps have made millions of dollars. Slingplayer mobile (does DVR stuff) has made at minimum $1.5 million. Beautiful Widgets has made at least $1.4 million. ATOK, which makes a more Japanese-friendly keyboard, has made $1 million. I haven't looked much at the games, I understand some of those have made money as well. The number of people with Android smartphones keeps growing, as do the quality of the phones, as do the quality of the apps - some apps are making millions, but more apps will probably make millions as well.
You are correct that untargeted ads are worth less, and my sense is with yours that game advertising is worth less as people go into a game app to play a game, not click ads.
You imply, or an implication can be drawn, that this is so throughout Android, but I have not found it to be the case. I have two apps that use Admob. One is an app used by many bartenders, bouncers and so forth, and I've found the Admob ads often reflect that line of work. Another app is a database app and I've found the Admob ads often advertise database-related things. So it is somewhat targeted - people who work with databases download my database app, get database-related ads, and click them when the ad interests them enough. I'm sure with Google's purchase of Admob that they're working on future versions which will probably be more targeted - I know they already do targeting by geographical location.
I think I'll take your mention of OpenOffice off on a tangent to do a little plug of my free software project...
A few months ago, I began the process of trying to port Apache POI to Android. For those who don't know, Apache POI is "the Java API for Microsoft Documents". It does Word and Excel, and also tries to implement other Microsoft formats, with various degrees of success.
I decided to start with a spreadsheet. I spent two weeks writing some scaffolding for a spreadsheet in Android. When I got it to where it looked good enough, I began working on loading Excel files with POI. And I could do so - with Excel xls files up to 2007. When I tried to load Excel 2007 and 2010 xlsx files, I ran into some problems...a topic which I'll get back to in a moment. Anyhow, I worked on trying to load Excel 2007/2010 xlsx files for a few more weeks, and when I saw I wouldn't, without luck, make any immediate breakthroughs, I put it aside. A few months later I open sourced my code on Github and cursorily described my 200/2010 problem in the README file. If anyone wants to look at it, feel free. As I said, I worked on features for two weeks and then got hung on one the 2007/2010 xlsx problem. The one big feature I did not include in the spreadsheet is the ability to finger swipe through the spreadsheet rows and columns - you can look around the spreadsheet with the arrow buttons on old, old Android phones and the Android emulator, but I spent all my time working on Excel 2007/2010 xlsx instead of features like that. It's only two weeks worth of work (plus the 2007/2010 xlsx work), and that minus my last six months of Android knowledge, but it's decent enough for what it is.
I sent a message to the POI mailing list after posting the code on Github. One of the POI dev's made a suggestion as to what to do - strip all non-Excel functionality from the schemas file - but that was what I already had for the most part done. I say for the most part because I probably stripped more than 80% of the non-Excel code. Why did I need to do this? Because Android Dalvik executables have a 65,536 method limit, and with all the Apache POI XSSF required libraries to do Excel 2007/2010 xlsx files included, my program would exceed that limit. Now there are two paths to get around this. One is the easier path - strip 100% of the POI stuff unneeded for Excel compatibility from the POI schemas jar. But I already stripped the low hanging fruit of this, and whittled 80+% of that stuff from the schema. Unless the other
Anyhow, back in July, when I stripped 80+% of the low-hanging fruit non-Excel schema and it was still a no-go, I put this aside and began working on other Android projects. In October I began thinking about this, and realized I was not going to get back to it in a while, so I cleaned it up (a little bit) and put it up on Github under the Apache 2.0 license (POI is Apache 2.0 so I figured I'd just use that as well), and posted to the POI mailing list.
I've had enough Android projects, and non-Android projects and things to distract me from returning to this. If my attention was turned to this again, the first thing I would do would be to repeat my 80+% non-Excel POI schema cleaning with the latest POI trunk (or last released jar, or whatever) and make my results public on a web page, or the POI mailing list or something. I would try to get it from 80%+ to 85+% and up to 100% clean of everything unneeded. If that didn't work, I would see if I could strip stuff from some of the other jar's, like xmlbeans or something.
If all of this didn't work, I would go the way of two Dalvik executable files in one Android project. With custom class loading, an interface for each needed method and all of that. An effort I seriously doubt I would start on my own - but who knows? If others were interested in this, I might put some more time and effort into it when I can. It would be nice to have a free software Excel-compatible spreads
...the one-eyed man is king, is something Desiderius Erasmus once said.
You may consider the metric "worthless". But as I said, "Hits to Wikipedia is not a perfect metric, but if anyone knows of a better one I'd like to hear it." I noticed you offered no metrics of your own. People who want metrics would probably settle for Wikipedia statistics over nothing. The only metrics I can find from this article are from the web logs of Distrowatch. I'll choose a metric from the logs of a web site that Alexa says is the 6th most popular in the world over one the logs from a website mostly used by a much smaller number of Linux aficionados.
My wording was ambiguous. I meant hosting as they meant in the original post, shared web hosting, not hosting as in co-location of an actual server. For the latter case, your points are correct.
Just looked again, says $16.06, not $16.00. Link is rackspace.com -> products -> cloud servers -> pricing
VPSs have gotten so cheap and full-featured, I don't know why anyone who has IT knowledge would host any more.
I am legacy hosting on Dreamhost for $10 a month. My MySQL instance has become so slow, I have removed it from my Nagios check. Their old in-house mail web interface is slow as anything (new accounts go to Google Mail, they may have a migration option). Server load can exceed 100, server load is usually many multiples of the number of processors. Dreamhost was considered one of the good web service providers.
Meanwhile for $16 plus bandwidth I get my own VPS on Rackspace, 20 gigs disk space, 512MB RAM, I can install whatever I want. Linode - 1024MB RAM, first 2 TB of bandwidth free, 24 gig hard drive. I put my own Apache in, my own MySQL. I even run BIND 8 on them. Right now I'm using Perl on the server, but I'm free to use whatever I want. And if $16 is too rich for you a month, you can find even cheaper VPSs. Linode and Rackspace have had a decent QoS, and my business is profitable, so I pay a little more.
"But given how eagerly Dalvik disposes of anything connected to a process that'S not in the foreground I wouldn't consider using it to do anything important."
Dalvik has specifications and documented behavior and Dalvik follows that behavior pretty well. You do not see Dalvik disposing of anything connected with a process that is state that it supposed to save. Some state is ephemeral and documentation states it is ephemeral. I have yet to see an object held by a running Service to be arbitrarily destroyed by Dalvik. Offscreen Activity objects might be destroyed, but Android API documentation explains this up front. If you want to hold state in a process outside of the current onscreen Activity, you put it in a Service or like class, not in the Activity object. Activity objects are supposed to be short-lived when they go off-screen.
Dalvik has no problems holding state if you hold state properly in a Service object. If you try to hold state in offscreen Activity objects then you shouldn't be surprised when Dalvik doesn't hold it. It's not supposed to.
Phones like the Samsung Galaxy S2 LTE was available to customers in places like Canada toward the end of 2011. I watched the September 2012 video in which the iPhone 5 is introduced. At one point the speaker (Phil Schiller?) says the iPhone 5 will have LTE support, which is followed by a big round of applause. By then, there were a variety of Android phones in customer hands already with LTE, in a number of countries - and Android users had been using LTE phones since 2011.
I remember older iPhone presentations where they really were announcing new features - not playing catch up to something there had been Android phones out with the year before. That said, the iPhone is a good phone, and they've generally kept pace with the cutting edge of technology.
The Simple Directmedia Library (SDL) is a cross-platform library which there are many apps for, especially games. These games are ofte cross platform for Windows, Mac and Linux, and there are some fairly popular ones.
There is a lot of software out there under SDL 1.2 and before. SDL 1.3 and on was completely rewritten, relicensed and there is not anywhere near as much software out there using it. There are ports of both to Android - the SDL team did a 1.3 and on port, a fellow named Sergii Pylypenko ported SDL 1.2 to Android, as well as a lot of supporting libraries, as well as a number of games.
The best of them is the Quake III Arena clone OpenArena. It was just release and still has a little cleanup to do, but is not that buggy and has a 4.0 rating. He has been fixing it up more and those problems are sure to be dealth with. He has other ports of popular open source games to Android as well - OpenTTD, and GemRB (Baldur's Gate engine). Gerhard Stein has put out some of these - Free Heroes and VCMI (Heroes of Might and Magic engine), Commander Genius and OpenTyrian.
I have done a few of these open source SDL ports as well, with two on Google Play right now. One is an anime-style puzzle game Lily Hop, based off the open source Hex-a-hop game. I think the port came out well, although it is not popular and even if it was I am not exactly sure how I would monetize it even with ads.
Another open source SDL port I did is of the popular Linux math game Tux of Math Command, which I call
Free Math Games for Kids. That one is more popular - it has been downloaded over 35,000 times since the summer, and gets several hundred downloads a day. It could probably be more popular if I did more work on it - the original has translations to many languages, but I only offer it in English and Spanish currently. I have just been too busy to implement the other translations.
"I started looking into local community colleges and universities, and much to my dismay, they offer neither nighttime or online courses for computer science."
I don't know where you live, but I would look into this more. I am not sure what you mean exactly either. Do you mean no local colleges have a computer science course where all classes are 100% at night or on weekends? Or that all classes are during the day on weekdays?
I would take a second look at your local community colleges and colleges and universities. They don't have any night or weekend courses? Also, how local is your definition of local? Let's say there was a college 50 miles from you where you could graduate doing weekend courses - that would be an option - you could drive an hour on a weekend afternoon, take a class, and drive back. My college is nearby, but I know people who commute a long way to get to it.
I would map out colleges and universities by distance from you, then see which ones have a CS program. Then go through their class requirements for a CS Bachelors, and see what prerequisites for each class are (some 300 level classes I took had nine prerequisite classes). Then see when classes are offered. My experience has been the initial level 100 math and CS classes tend to have more schedule flexibility (i.e. more classes are offered at more times) then some of the required 300 level classes. You may be able to get half your credits on nights or weekends before having to worry about a required 200 or 300 level class which is only offered during the week in the daytime.
I would start with one class a semester and see how that goes. If you think you can do two classes a semester and full-time work, try that after seeing how the one goes.
In 2006, I went back to school to get a Bachelors in CS, starting with night and weekend classes. Initially, one of the larger reasons for taking the classes was so that I could show potential employers that I have a Bachelors. This kind of thinking has receded as I have learned more CS and have gotten better at programming. For example, I have a side project where I write Android apps - so far this month I've made $1100 on my Android apps. I would have never have been able to do this if I hadn't learned about algorithms, data structures, Java, and so forth at college. So my thinking now is a little bit less, I need a piece of paper that I can show someone else when I need a job, and is more, what can I do with this knowledge I have gained?
Do you have a Bachelor's degree? I began working as a systems administrator before completing my Bachelor's degree. I have always done some amateur programming, but wanted to improve my skills to where I really was a "programmer". So I killed two birds with one stone and started taking one course a semester at a local college. I would go either at night, or on the weekend. Some semesters I took more than one course.
As I said, I already had written programs. I did not have the deeper understanding to write better, bigger and more complex programs though. The computer science program laid a foundation of calculus, statistics, and discrete mathematics. Then it went deeper into graph theory, and the theory of computation. Then we began learning C++. Then we learned more advanced C++, how algorithms and recursion and so forth worked. Then we learned Java. Then we learned about data structures, and the relationship between data structures and algorithms.
If you just want to learn a little Perl to write some simple scripts, you don't need to do all of this. It sounds like you want to have a deeper understanding of programming though. So this is necessary. I think it is best done at a college, although theoretically someone can learn much of this on their own.
I think the idea of learning programming by "I want to learn one language well" is an amateur mistake. Our learning initially was almost purely mathematical. If you read volume I of "The Art of Computer Programming", he doesn't get into (M)MIX programming until pretty far into the book, the beginning is math. The cursory learning of a programming language was just a byway to then teach us about recursion, backtracking and the like. We immediately moved onto Java instead of going deeper into C++, to see that there were different ways of doing programming by different languages. We later learned radically different languages using different paradigms like logical programming (Prolog), functional programming (Lisp) on top of the object-oriented programming (C++, Java) languages we had already learned.
Eric Raymond once said "Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." Other experienced programmers have agreed with this sentiment. As you said you're still an amateur, it's probably beyond your capacity right now to understand why someone should "waste time" learning a language like Scheme Lisp which they might end up never using. An ounce of prevention is worth a pound of cure though. The opinion of most expert programmers is that understanding the core ideas of computer science and programming is more important than domain expertise in a particular language. You say "I'll be setting aside an hour every day to devote to learning a new language, in the eventual hope that I can leave this company (take a sabbatical) and hop into the private sector for a few years." You should ask yourself if this is enough. Yes, knowing at least one commonly used programming language is important to get a job as a programmer. You will never really understand that language, and its limitations and advantages, until you learn some other languages, and some of the general concepts behind all programming and computer science. You said you were a novice programmer, and I think putting too much emphasis on learning one language well is an amateur mistake. There's a lot of steps you should be doing before deciding to become an expert in one language.
I'll give a personal example. I do a lot of Android (Java-like) programming. I also need a web API for some of the programs. A server-side Java solution is just too expensive for what I'm doing - sites like Bluehost and Dreamhost don't really support Tomcat and the like for $9 a month. So I use other languages for my web API than Java. Do a Google, or more importantly, a Craigslist job search for "full s
One point others have not made much is this: if you are in IT and can skip college, yes, you can be a good help desk employee. You might be a good database/systems/network administrator. You can even code Javascript or PHP to start putting together a simple website. You are not going to be able to program the type of advanced, complex systems that someone with a BSCS (or Masters, or Doctorate) can though. The only way to do that is to have a foundation of discrete and continuous mathematics, an understanding of statistics, graph theory, computability and computational complexity and so forth. An understanding of how algorithms and data structures interact. How mutual exclusion works. Of how things are fed to the ALU, of how floating point numbers are stored.
If you're going to spend the hours and days and weeks and months and years it takes to study these things, you might as well hook up with a CS program of a decent school, a public school if money is an issue, and learn it there. Most professors know their subjects well (although ones who know their subject well and are great communicators and teachers are rarer). Your classmates are often doing interesting things. Some people say you can study these things outside of college, but why not just go to a public college for 90 minutes, two nights (or on the weekend) a week and get a diploma cheaply? Also, I've never met anyone who has not gone to college, who has learned calculus by themselves, and then studied how limits work for big-O algorithm notation by themselves. They may be out there, but I have not met them.
One of the big problems for people without any college is that they don't know what they don't know. Solutions which will be obvious to someone who has studied computer science over four years (or more) will never even occur to someone who has been putting Javascript together. I tried to write a program in C many years ago which needed threading, mutual exclusion and so forth when I had only the vaguest idea of what those things were. It was a complete mess. Nor did I know it would be a mess when I tried to put it together without understanding mutual exclusion. Which reminds me of an interview question I got wrong many years ago - what is the difference between a process and a thread? I knew a process was more "robust" but could not explain why. And so on. It may be true that school is not the right thing at the right time for someone at some point in their life, but it should be considered in a rational fashion.
Ri-li is a game very young children might enjoy. It has a toy train running around the track, and there's not much to do - just click the button to switch the train tracks if you think it might crash. It has lots of motion and train noises, and is simple. I have heard from more than one parent that their child really enjoys playing it.
I wrote (forked, really) a book reader for Android earlier this year which has had over one million downloads since then. So I am obviously Android biased, but I also have looked into the field somewhat.
The main question is, why would you want to get something other than an Android tablet (or "phablet") as a reader? The main reason would be electronic paper - usually using eInk technology, like those Kindle's with eInk technology have. The Amazon Nook also has eInk, and other companies put out electronic paper products as well - Sony, Kobo etc. It is supposed to be easier to read, easier on the eyes, readable in bright sunlight etc. You can go to a store and try it out. Other people have commented about this technology, I have tried it but not on a regular basis. I don't know of any Android e-Ink products unfortunately, although the Microsoft/B&N Nook is a fork of Android.
Then there are Android tablets and phablets. One thing about them is you can choose different book readers - you can choose my book reader, or Google Play books, or the Kindle Android app, or the Kobo Android app, or apps like Aldiko, Moon Reader, Cool Reader, or the open source app I forked from - FBReader. Google Play is getting big on selling regular books like Harry Potter or Suzanne Collins or the like. You can buy them from apps like Kindle Android as well.
Then there's plenty of free apps with free books. My app is free and has free ePub format books in different languages - English, Spanish, German, Dutch, Portuguese, French and Spanish. I will probably be adding more languages in the coming months. All of my ePub books which are free are in the public domain. Most, if not all, of them were published before 1923 and are thus public domain - Mark Twain, H.G. Wells and the like are popular English language books.
Plus, you can use your Android tablet/phablet for things other than book reading. You can buy a 7 inch Google Nexus 7 tablet, which people love. I have a Samsung Tab 10.1 which is 10 inches which I have been happy with. Try them out in a store, see how big they are and how much they weigh. If you are on a sofa or bed reading, how heavy will the tablet be on your stomach? The Samsung Tab 10.1 is 1.25 pounds, which is about the weight of a 500 page hardcover book. Since the weight is more evenly distributed, and not concentrated in the center like a book, it feels even lighter. But there are smaller and lighter tablets/phablets out there as well.
Slashdot has always been a fan of free software, and in terms of my app, it works out well in all directions. I have contributed back to my fork upstream, in the form of things like language translations. My app is on an open source framework - Android. While the app handles more than one book format, it concentrates on the book format which is the standard open one - ePub. My app primarily traffics in public domain, pre-1923 books in a variety of languages, so the content is free-as-in-beer/free-as-in-speech. The app made me over $430 in ad revenue last month. The ads are non-intrusive - originally I had ads over books while you were reading, but when testing it I found it annoying and distracting, so I put up ads before a book opened and hoped that I would still make money even though the ads were not as visible all the time, and it has worked out. Over time I will continue expanding languages, and sending those to my code upstream, FBReaderJ, and perhaps make other improvements and send those upstream as well. It is a free software ecosystem where the benefits flow back and forth in all directions and that has worked out for everyone.
I'm hyping my own projects here, but over the past weeks I've been porting free software games over to Android. Specifically, games that use the Simple DirectMedia Layer (SDL) library. Most of the games are written in C++, and the OpenGL (OpenGL ES in the case of Android) functionality is handled via the SDL library. I have had a good response so far for some of the games.
I have the games as different branches from my tree on Github. My tree is a fork of Sergii "Pelya" Pylypenko's port of SDL 1.2 to Android. One branch is a (partial) port of the popular educational game Tux Math. Another branch is of the game Circus Linux, which I felt did not translate well to Android (at least as I did it) so I never published it to Google Play. I should be putting a few more branches up on Github soon - ports of Ri-li, Hex-a-hop, Ice Breaker and so forth. The Ri-li source will probably be the next one that I will put up.
You say: "I find it a painful process to go back to an Android or iPhone for some obscure app not yet supported on WP."
The apps which already have Android and/or iOS support, which you also want WP support for, may be obscure in terms of the ones you as a person are particularly looking for. However, there are a whole host of non-obscure apps supported on Android and iOS, which are not supported for Windows Phone yet.
Angry Birds Space. Temple Run. A banking app for Chase Manhattan bank. Instagram. Any Zynga app - Words with Friends, Draw Something etc. Pandora.
Dropbox is an app whose whole point is to be cross-platform. That they don't think WP is worthy of a port yet is a sign.
There's a Nook app for iOS and Android but not yet for Windows Phone, although I'm sure the $300 million deal Microsoft made with Barnes and Noble six weeks ago will change that. At the moment, Lumia owners are still out of luck due to the deal. It just goes to show that popular apps are not written overnight.
Is there a database app that can handle Microsoft Access files on Windows Phone? AFAIK, there is not. There is one for iPhone and Android. I should know, I wrote the one for Android. If you want to search through a Microsoft Access database file on a mobile phone - with Microsoft Access being included in most of the Microsoft Office suites I've found at large companies and universities - you have to buy an Android or iPhone.
All of these are all popular apps on iPhone and Android which are not on Windows Phone. Then there apps which have been ported to Windows Phone, but which reviewers say are much worse than their iPhone and Android versions. Rdio is one example, according to Techcrunch and Gizmodo reviewers - they love the Android and iPhone version, but think the WP port is sub-par.
Continuing on the usability theme, I find that trackball like middle button difficult to handle. Doing things on an iPhone or Android (or even WinPhone) is just so much easier.
The Lumia 900, #7, was released last month in the US. The Galaxy S II Epic 4G Touch, #4, was released in September of last year.
The Lumia 900 is more than six months newer than the Galaxy S II Epic 4G Touch which, with the rate smartphone innovation is going, is half a lifetime. Yet that older S2 release with its older specs is beating the 900. What is going to happen to the 900 when phones like the Samsung Galaxy S III become available? The S3 is going to become available in Europe at the end of this month, and will soon be available in the US as well.
I have a relative around that age who knows a lot about the Xbox and iPad. I remember from my Commodore 64 days how these machines were not "walled gardens" and how I could start programming in BASIC as soon as I turned my Commodore 64 on. So I looked for some programming books for him.
I looked at a lot of books. I suggest cursorily flipping through the first few chapters of books you consider. It came down to two books, I don't recall what the second choice would have been. I picked Invent your own Computer Games with Python. Why? Because Python is a good tool to teach kids a language, but it is also used for real stuff out in the world, it is not a toy language like BASIC. Because kids are interested in games at that age, and with this they can program their own. And because it is basically written for kids and beginners - it is not a "learn Python" book for someone like me, who already knows C, C++, Java, PERL etc. and is just picking up one more language.
I bought a hard copy of the book, but it is also online for free on their website. He mainly uses an iPad, so I installed a free SSH client for iPad so he can ssh into an account I created on my web server and run Python. My web server had an old version of Python, so I installed a local copy of the latest Python and redid the PATH for the account to hit the local python binary first.
I'm still mulling how he can edit programs. I used nano (and vi) when I first was showing him, but might download scp for iPad and an editor for iPad, so he can scp the programs. I want to make it as easy as possible, and he can learn harder stuff later.
Aside from the book needing Python 3, which just made me have to do a little work, so far so good with the book.
Last year Linux celebrated its 20 year anniversary, as Linus began writing it in 1991 and released it that same year. For myself, I'd have to think more deeply about it to determine exactly what year I first started using Linux, but it was definitely between 1993 and 1995. I installed my first Linux on a non-brand-name laptop with the Slackware distribution. It required many, many 3.5 inch disks to install (I forget how many disks it was if you wanted to install X-Windows - it was a lot). It used LILO as the boot loader.
My next Linux desktop I began using in February 1996. It was at a small startup - so small actually that initially the machine doubled not only as my desktop, but as a server of sorts. The machine had a pre-1 kernel, but the previous sysadmin upgraded it to Linux 1.X the first day I began working. The /proc/meminfo file in Linux had recently had a cached column added to it, which broke top and some other things, although the previous sysadmin dealt with that snag as well. FVWM was my window manager. The machine was susceptible to the "ping of death", and this was before firewalls, NAT, iptables and the like were widespread in use.
Linux as a desktop has come a long, long way since then. Even in the past few years, the Linux desktop has come a long way. A lot of people have done work on this, but Ubuntu has been a big part of this, and is what I currently use on my desktop. One example - when installing my new Ubuntu system, it sets up what is necessary to get the disks and network connection in order, and then it simultaneously starts downloading needed packages from the Internet while I go through the rest of the system setup menus. If I finish all the setup before everything is finished downloading, I can cycle through a promo which shows me which features Ubuntu has. This is the kind of thinking that has been needed for Linux on the desktop - every previous Linux install I remember consists in me doing system setup, and then I have to wait for the downloads to start and finish. Even though it is a little more of a pain to implement from the developer's point of view, Ubuntu gets those downloads started as soon a possible, and I don't have to wait that extra time that I'm doing the rest of the system setup - and if I finish before the downloads, I have a promo to look through where I can learn about the system. Not a big thing, but an example of the kind of thinking needed.
To a point others have addressed - nowadays there is server, desktop, laptop, tablet and smartphone. Linux is dominant on smartphone, and has a very healthy-sized chunk of tablets. With the Nook, the Kindle Fire, as well as the pure Android tablets like the Samsung Galaxy Tabs, the Xoom etc., and this year Ice Cream Sandwich tablets coming out, I'm confident Android (and thus Linux) will grab more of the tablet market. What I have not seen mentioned here (maybe I missed it) is that tablets sales have been cannibalizing desktop sales, and the traditional desktop is growing less relevant over time for the average consumer. Just like people here are saying desktop Linux is mostly only relevant for techies like us, in the future desktops may become mostly relevant only for techies like us, or people doing things like 3d modeling and the like. With a Bluetooth keyboard (foldable or solid) and a tablet, you can already do a fraction of what the desktop can do, and that will only increase with more powerful tablets, new software and so forth. And Linux is a big player in this domain. I think the efforts to improve desktop Linux are good, but I think efforts to promote Linux are currently more productive in the areas where it already has a significant position: servers, smartphones and tablets.
Right now Apple and Android are in a real race for dominance over smartphones and tablets, and Windows is throwing its hat in the ring with Windows 8. I think Microsoft realizes it has lost the smartphone race for the next few years, and will be concentrating on tablets, where the
With regards to the ticketing system - if someone posts a ticket for a problem, see if you can reproduce the problem with their particular version. See if the problem still exists in the head of the latest code trunk. See if the problem is a duplicate of another problem. See if the problem is with the program, or somewhere upstream, say, a library that the program depends on. If so, report the problem upstream.
Core developers are busy, and most projects can use people who deal with and clean up tickets, leaving only real problem tickets to deal with. Also, sometimes a program or library from Gnome or freedesktop.org will have tickets in the trouble ticket systems of Debian, Ubuntu, Fedora, SLES, Gentoo etc. Someone doing a little coordination will be helpful.
The thing is, even top notch programmers unfamiliar with a large program are initially at a disadvantage to a middling programmer who is well-familiar with a large program. Everyone is initially at a disadvantage when a program breaks, no matter what the skill level. But even if your programming skill level is very low, most projects can benefit from extra help. Even if you just confirm a bug exists on your system too, or that you can't reproduce a bug - this helps core developers save time.
There is something of a slope of what FLOSS in an organization is, from Richard Stallman, who is a purist, all the way to companies which will use (but not contribute) Apache/BSD source in their code, or run a GPL application.
I've used FLOSS associated with my job for a long time. From the mid 1990s on this was as a Unix Systems Administrator. I've installed Linux (and back then, FreeBSD also) servers at companies since the mid 1990s. I've installed open source software like Apache, BIND for DNS, and Tomcat. Various mail packages like sendmail, exim, qmail. Some of the comments mention small companies, but I've installed and/or maintained open source tools in everywhere from small startups to Fortune 50 companies.
Also, over the past year I have learned the Android API better, and Android is, of course, an open source platform. My entire development process for Android is very open source based. I do development on an Ubuntu Linux desktop with the open source IDE Eclipse. I also often include Apache code in my code, or sometimes LGPL, or sometimes even GPL code. I even released Android open source - I was building a spreadsheet, got pre-2007 Microsoft Excel (.xls) loading OK, but hit a snag with Excel 2007/2010 (.xlsx), so I open sourced what I had so far ( https://github.com/dennis-sheil/android-spreadsheet ) and will do some more work on it if I have the time.
I released several of my own Android apps over the past year. You're talking about making money on this - I made over $15 in ad views yesterday. Not enough to earn a living, but an extra couple of hundred dollars a month does not hurt. Some independent Android developers have put up blogs, like Droid Blog, or Kreci, or others, they've been doing it longer than me and are making thousands a month, not hundreds.
Plenty of people have written advice on how to push for open source solutions at a company. Just suggesting often it isn't going to do the trick, you have to package it in a certain way, get buy-in from the stakeholders and so forth. You might not always succeed, but sometimes you will.
...on smartphones and tablets, particularly Android and its derivatives.
Cut the Rope is 99 cents with at least half a million downloads. There are two unknown factors - how many returns were there (downside) and how many over 500k are they (upside). So they've made around $500,000 on this app.
GTA III on Android - 4.99 and over 100,000 downloads - another $500,000 in revenue. And a lot of the graphics and engine code was already written.
I had a chat with one of the Big Mountain Snowboarding developers ($2.99 times 5000+ is $15,000, plus an ad-based Android version with over 500,000 users) who told me that over 85% of the C++ and OpenGL code from their iPhone version could be reused in their Android version. Companies with an existing C++/OpenGL code base don't have to re-invent the wheel to get on Android.
Fruit Ninja : $1.26 * 500,000+ = $630,000. Doodle Jump: $0.99 * 500,000+ = $500,000. Madden NFL 12: $4.99 * 100,000+ = $500,000. And so on. Then there's the money games make on their free, ad-based versions. As I said, many of these games have existing C++/OpenGL code on another platform, so the half million in sales, plus more in ads, that they've made thus far, is money they made just for the port. Which also helps keeping you in the game if some competitors want to take these established games on in this newer platform.
Android is a Linux kernel, with the rest of its code open source. Tim Bird and others recently started an effort to bring the Android developers and Linux closer together, so hopefully that will bear fruit.
I develop for Android and own a Samsung 10.1" Galaxy (Android) tablet. I know someone who owns an iPad.
Several months ago, I wanted to give them SSH access to a server. So I looked at what iPad had to offer. I could find no free SSH client (as of a few months ago). Not even an ad-supported one. The best I could come up with was a nagware one - it allowed you 500 or so SSH keystrokes and then logged out and asked you to buy the client.
Meanwhile on my Android tablet, I have a free SSH client. It doesn't even have ads, it's open source! ConnectBot. There are other free Android ssh clients as well, but ConnectBot works for me so that's what I know.
Admittedly, I know more about Android than iPad. But the one thing I ever needed from iPad, I couldn't get for free. On Android I could. So which would I want to own more?
And as I said, I develop Android apps. If there was no good free SSH app for Android, I could have developed one. But there was one - ConnectBot. ConnectBot has no ads, but I would have been perfectly happy to have used a free SSH app with ads.
There are many revenue models for applications. Most of the top free apps have various alternative methods of getting revenue - and not just the apps like Facebook or ESPN Sportscenter. Ads are just one method, there's also upselling, and other revenue models.
At the end of the day, the real question is not what's good for the developer, but what's good for the customer? We have a platform that is developer-friendly but not user-friendly, it's called the Linux desktop. I like platforms that are good to developers, but there are many ways Android is good to developers that Apple is not. It costs me $25 for life to publish and Android app, without any application approval process (not $99 to $299 a year like Apple). I can publish the app anywhere, not just Apple's walled garden App Store. I can write and compile my app on Linux, Windows, Mac or whatever - I don't have to buy a Mac and then get Xcode. And it's not no one ever buys Android apps - some apps have made millions of dollars in sales (that we can see - in-app sales, ad revenue etc. is less visible). The revenue model just depends on the particular app.
1) You can develop from any platform. I develop on my Ubuntu 11.10 desktop. But you can also develop on Windows, MacOS or other Linux flavors. With iOS, you have to buy a Mac to start developing
2) It costs $25 to publish on Android Market for life. And you don't even have to - there's no "walled garden" like iOS has. The App Store has an annual fee which is $99 - with an even larger fee for the "enterprise program" whatever that is. (Speaking of Android's $25 fee, Admob just sent its first check to my Paypal account today for $22.95. So once they send me another $2.95 I'll be in the black. Actually I've already earned more than that extra $2.95 on my Admob account - they send you the money 6-8 weeks after earning it if you've accumulated $20 or more.
3) With Android, most non-game development is done in Java. A language many people know. With iOS, development is done in Objective C, a language that is not used outside of Apple-world anywhere near as much as Java. Objective C seems obscure to me - I have some written code at one time or another in C, C++, Java, Perl, Python, Common Lisp, Basic, PHP and probably some languages I'm forgetting, but have never had cause to use Objective C. It might be a perfectly fine language, but I'm stuck having to learn not only iOS's SDK, but a new language I'll probably never use again. Java I've used before Android, and would be useful to know even if I stopped programming for Android. Of course, with some wrappers, Android will do C++ (and OpenGL) code just like iOS will.
4) Android is open source. It has derivative products like Cyanogenmod and the Kindle Fire. Instead of just getting hardware one company decides on, we can get a range of products from a number of manufacturers. This has a downside in addition to the upside, but I think the upside outweighs it.
5) Android smartphones have been outselling iPhones in past months. It seems like a trend that has taken hold. As far as the tablets, obviously Apple dominates. But I'm happy with my Samsung Galaxy Tab 10.1". I'm sure the ICS tablets will be even better. As far as Android users spending money, just with some basic math I can see some apps have made millions of dollars. Slingplayer mobile (does DVR stuff) has made at minimum $1.5 million. Beautiful Widgets has made at least $1.4 million. ATOK, which makes a more Japanese-friendly keyboard, has made $1 million. I haven't looked much at the games, I understand some of those have made money as well. The number of people with Android smartphones keeps growing, as do the quality of the phones, as do the quality of the apps - some apps are making millions, but more apps will probably make millions as well.
You are correct that untargeted ads are worth less, and my sense is with yours that game advertising is worth less as people go into a game app to play a game, not click ads.
You imply, or an implication can be drawn, that this is so throughout Android, but I have not found it to be the case. I have two apps that use Admob. One is an app used by many bartenders, bouncers and so forth, and I've found the Admob ads often reflect that line of work. Another app is a database app and I've found the Admob ads often advertise database-related things. So it is somewhat targeted - people who work with databases download my database app, get database-related ads, and click them when the ad interests them enough. I'm sure with Google's purchase of Admob that they're working on future versions which will probably be more targeted - I know they already do targeting by geographical location.
I think I'll take your mention of OpenOffice off on a tangent to do a little plug of my free software project...
A few months ago, I began the process of trying to port Apache POI to Android. For those who don't know, Apache POI is "the Java API for Microsoft Documents". It does Word and Excel, and also tries to implement other Microsoft formats, with various degrees of success.
I decided to start with a spreadsheet. I spent two weeks writing some scaffolding for a spreadsheet in Android. When I got it to where it looked good enough, I began working on loading Excel files with POI. And I could do so - with Excel xls files up to 2007. When I tried to load Excel 2007 and 2010 xlsx files, I ran into some problems...a topic which I'll get back to in a moment. Anyhow, I worked on trying to load Excel 2007/2010 xlsx files for a few more weeks, and when I saw I wouldn't, without luck, make any immediate breakthroughs, I put it aside. A few months later I open sourced my code on Github and cursorily described my 200/2010 problem in the README file. If anyone wants to look at it, feel free. As I said, I worked on features for two weeks and then got hung on one the 2007/2010 xlsx problem. The one big feature I did not include in the spreadsheet is the ability to finger swipe through the spreadsheet rows and columns - you can look around the spreadsheet with the arrow buttons on old, old Android phones and the Android emulator, but I spent all my time working on Excel 2007/2010 xlsx instead of features like that. It's only two weeks worth of work (plus the 2007/2010 xlsx work), and that minus my last six months of Android knowledge, but it's decent enough for what it is.
I sent a message to the POI mailing list after posting the code on Github. One of the POI dev's made a suggestion as to what to do - strip all non-Excel functionality from the schemas file - but that was what I already had for the most part done. I say for the most part because I probably stripped more than 80% of the non-Excel code. Why did I need to do this? Because Android Dalvik executables have a 65,536 method limit, and with all the Apache POI XSSF required libraries to do Excel 2007/2010 xlsx files included, my program would exceed that limit. Now there are two paths to get around this. One is the easier path - strip 100% of the POI stuff unneeded for Excel compatibility from the POI schemas jar. But I already stripped the low hanging fruit of this, and whittled 80+% of that stuff from the schema. Unless the other
Anyhow, back in July, when I stripped 80+% of the low-hanging fruit non-Excel schema and it was still a no-go, I put this aside and began working on other Android projects. In October I began thinking about this, and realized I was not going to get back to it in a while, so I cleaned it up (a little bit) and put it up on Github under the Apache 2.0 license (POI is Apache 2.0 so I figured I'd just use that as well), and posted to the POI mailing list.
I've had enough Android projects, and non-Android projects and things to distract me from returning to this. If my attention was turned to this again, the first thing I would do would be to repeat my 80+% non-Excel POI schema cleaning with the latest POI trunk (or last released jar, or whatever) and make my results public on a web page, or the POI mailing list or something. I would try to get it from 80%+ to 85+% and up to 100% clean of everything unneeded. If that didn't work, I would see if I could strip stuff from some of the other jar's, like xmlbeans or something.
If all of this didn't work, I would go the way of two Dalvik executable files in one Android project. With custom class loading, an interface for each needed method and all of that. An effort I seriously doubt I would start on my own - but who knows? If others were interested in this, I might put some more time and effort into it when I can. It would be nice to have a free software Excel-compatible spreads
...the one-eyed man is king, is something Desiderius Erasmus once said.
You may consider the metric "worthless". But as I said, "Hits to Wikipedia is not a perfect metric, but if anyone knows of a better one I'd like to hear it." I noticed you offered no metrics of your own. People who want metrics would probably settle for Wikipedia statistics over nothing. The only metrics I can find from this article are from the web logs of Distrowatch. I'll choose a metric from the logs of a web site that Alexa says is the 6th most popular in the world over one the logs from a website mostly used by a much smaller number of Linux aficionados.