Daily Archives

One Article

Posted by Joel Greene on

Developer Introduction

So to the many *cough* readers I have, I’m sure very few would know that I’m also a developer, sure people like me may call themselves a developer because they have knowledge of HTML and CSS, why wouldn’t they? Running a blog or any website does require at least some knowledge of the subject. I am however a bit more than that but also nothing more than that. I’ve never worked at a fortune 500 company. I’ve simply have been writing code for many years starting from the age of probably around nine. This “adventure” has taught me many things about programming and by no means would I consider myself to be a master programmer like some. Seriously, I’ve seen some source code that has put me in disbelief that someone was able to wrap their heads around it. Either way, I considered that I should make a blog post about my experiences with programming, a developer introduction as I titled it.

I would suggest, if you’re not interested in programming nor in my experiences, you can very easily skip this long read, as I’m mostly putting it up as a sorts of biography.

Anyways. I can remember back to when I first tried typing my very first line of code and… well… let’s say it was not “code” by any means. I seriously had opened up a text file for an old game on Windows 3.1 and thought that changing the contents of the file would “mod” the game. Keep in mind, that I had no idea what modding was at the time and to be honest, I’m not even sure if the word was coined yet. Obviously, it was a total failure as I’m not even sure what that file was but hey you could call it a nine year old kids first attempt at any type of programming.

This all eventually lead to me writing simple batch (bat) and qbasic (bas) scripts. My ultimate favorite qbasic script I wrote was one that could change the command prompt color, I used it several times on my batch scripts. I will admit that I was bit immature and probably nagged this one guy that was a few years older than me probably way to much, but at the time my parents only had dial-up so utilizing particular websites to research answers would have probably been quite painful. I never wrote any super amazing scripts but I did have fun and it taught me the basics of programming.

A couple years later, I had discovered Visual Basic 6.0 by accident. I also discovered a website by the name of PlanetSourceCode and did I ever download every single example project that I ever could get my hands on. I did around this time meet a local business owner that was interested in having me design and program an order management program. It was a bummer as not even a month later a previous programmer he knew called me and wanted to meet because I guess the owner wanted us to work together on the project. Things did not work out well as he was a VB.NET programmer (The next incarnation of Visual Basic 6.0 that I never got into) and there was no way we could program on the same project for more complex reasons and because he basically talked the owner into using him, so I ended up walking away from the project.

So up til maybe sixteen or seventeen, I had almost learned everything I could about VB.  It was around this time that I also discovered Linux, I was largely using Windows much before this point and it was starting to bother me with all the issues and bugs that existed with Windows. Regarding my OS of choice, I flip-flopped OS’s for a few years until finally I saw that the Ubuntu Linux Disto was far enough along that I could make it my permanent OS, with the exception of a lack of Wi-Fi drivers at the time. I would say this is why Linux became my OS of choice on my Desktop and Windows somewhat still remained my OS of choice for my laptops. I’ve been running Linux since then and have had no regrets. Gaming was probably my only thing I missed for a short while but I easily replaced that with console games. Recently with studios like Value having started porting their games to Linux, so I’m really starting to enjoy the hugely improved gaming experience on Linux. Anyways, back to the point. Around sixteen is around when my family first got DSL installed. Rather quickly I learned the very basics of HTML and CSS. Took me a bit of time to wrap my head around the XML styled code in HTML but I quickly wanted more and that’s when I finally heard of PHP!

PHP was were I truly started my journey as a major developer, early on I was not a super great PHP developer, like probably many first timers, as I constantly looked up the API and examples. But little did I know that PHP was teaching me what a more truer programming language looked like. This being because PHP is loosely based on the Perl language. So this is probably where my true journey as a developer begins. I remember downloading a user login example for PHP that I augmented and used for many years following. This eventually lead to me developing my very own PHP framework called Chiori Framework, I decided to develop my own framework after my search for an existing PHP framework did not satisfy my needs. Many other frameworks I had found offering more features than I ever needed and/or were a bit too complex for my understanding. The login example I talked about easier became the general basis to my frameworks login backed by a single MySQL table. Over a few years I added additional features like modules (similar to plugins) and themes, this was probably one of the best features as you only needed to make one theme file and the framework did the rest. If your interested you can checkout my old framework here: https://github.com/ChioriGreene/Chiori-Framework

Also it was around this time I met a distant friend of mine today. His name was Jeremiah and he had landed an opportunity to develop a small social media platform and store for girls of the tween age. He was mostly interested in this gig for one of the women running the website was on the board of Yahoo at the time, he felt that if he could get into the crowd, he might pickup other huge opportunities. I found his post on Craigslist seeking help from another web developer and I contacted him. I did not do very much for him but I fixed several of the code bugs he was incapable of fixing himself. Well, I don’t want to go into details but thinks did not end super well. The lack of coming through on promises by the company and accusations by them that he was not filling his end of the deal lead to a lawsuit. I don’t want to say Jeremiah was a cheater but when he finally got a court ordered payout for the work, the legal fees ate a huge chunk of the cash and he told me he did not get very much to cover even his own work. He promised that as soon as he could he would send me the full amount for the work I did, which at the time totaled $700. Honestly, I felt like I did very little and I did not need the money as I was working for AT&T at the time, so I told him to keep the money.

It was as of maybe… four or five years ago, that I had someone approach me and propose a technology based marketing service idea. Initially the service was going to feature text marketing and then expand to many other avenue that I don’t wish to get into right now. Not even a few months later, I developed a website for us and established a website with a decently built text marketing platform. I launched the text marketing portion of the service in a dozen or so stores on the north side of Chicago. Within a couple months following we learned of a new trend to offer a universal rewards via a table mounted at the counter. After asking a long time family friend who was a mobile application developer, he offered to write and test an application to our needs. I did try my best to indicate that I was hoping he could consider doing it for some sort of special pricing being that we had a long time family friendship, I was totally understanding if he couldn’t but it was mostly because I knew we could not afford to spend a whole lot of money being we just started the company that year. About a couple weeks later after mailing him a tablet for pre-screening and signing a non-disclosure agreement he finally gave me a price and let’s say I was not happy to receive an outright price of around $10,000 and that was just for a basic no special design rewards app. I mean it was not even going to run on mobile devices, only a select few android tablets we bought online. Not to complain but when I asked if any cheaper option existed he offered a pay per location per month option which equated to about 70% of our monthly service fee, which using our business plan would mean he would make well over $60,000 in just two years. Anyways, this was not good news and in one evening I sat down and started reading every piece of documentation I could on Android development since we were targeting Android tablets. The next morning I was knee deep in Eclipse (A programming IDE) and writing some basic Java/Android code. The week later I had an app ready for release.

The months following, I continued to push out app patches here and there to fix small bugs and had plans for a major app redesign that never saw the light of day because sadly, I have to say that because of several changing business models we shutdown the business just a couple years ago. Our largest customer at the time was Dunkin Donuts and their announcement to start offering their own rewards program was probably what finally did it. Around this time, I was also alpha testing a streaming TV program, it was also developed on Android but never fully took off as the upload requirements to maintain a HD stream were never met and the stream would cut out frequently. I have plans to maybe try either our Text Marketing, Rewards or Streaming TV services once again one day but time will tell. The rewards program was good enough, that we had one store that had a tablet present at it’s front counter up until just last month when the tablet finally gave out and stopped booting. If anyone is interested in my Rewards Android App code, here: https://github.com/OpenSpaceDev/AppleBloomLoyalty

In as little as 6 months I learned syntax of Java and probably the basics of it’s API. This is where things start getting a little sticky for more reasons than two. Well first off, I got a random unexpected phone call from Jeremiah, yeah that Jeremiah. I guess he had moved to Colorado and started working as the warehouse manager for an online business. Long story short but he wanted to have me apply to his boss as the new developer for the website. As I understood it, I was probably number 7 to touch the website in a few years and the current one was quitting to start going to school. After getting the job we had plans to revamp the website, which never actually happened but my initial task but developing an rebo-pricer that had two functions. One it would auto price their products on Amazon under their competitor while also taking other figures into consideration and two it would auto price their website prices to be more than the Amazon price, something that is against the Amazon sellers agreement. At the time his entire website and custom CMS (content management system) were written in PHP and I knew with my experience with PHP that it was not going to cut it for several reasons, largely this was because the amount of time each cycle of the script would take to complete. So knowing some about Java at the time, I proposed a Java based program that could continue to run in cycle and have a slight user manageable interface. The owner agreed and I got right to work and within maybe 4 months we had one well developed program. I mean, I was VERY VERY happy with how well it work.

Well again, I don’t want to go into a whole lot of detail but eventually things came to an end. Largely I stopped working for them as the owner wanted the PERFECT website and I told him that we had to start over again to achieve that, well let’s say he was not happy to hear that as I guess he had already rebuilt his website maybe four times already and almost every developer would tell him the same thing, well he had enough and decided he wanted to switch to Magento. Long story short, he hired another four companies to move his website to Magento and fired everyone of them. Last I knew he never transitioned and my friend, Jeremiah, quit because the job was getting to stressful from this guys attitude and demand for performance. I mean the guy was so paranoid that people would cheat him, that I think this is what lead to his website never becoming that PERFECT website. I mean even at one point he accused me of purposely wanting to write the auto-pricer in Java for, AND ONLY SO, he would be stuck continually using me to maintain the code since it’s easier to find a PHP developer over someone who knows Java, I insisted that he was gravely incorrect and he called me a liar, which really is want ended it.

Anyways, trying to get back on subject, during the six months it took to develop his auto-pricer, I fell in love with Java and knew I wanted to started writing web applications in it. But there were a few lacking features of Java that PHP had. More recently I don’t notice these lacking features as much much but they included compiled code that was a bit painful to upload, also there was a lack of simplified syntax, like array(), were probably my most missed. But nevertheless I pushed forward and started learning even more about Java. Now PHP was no perfect web language either, for starters, I had a few issues with PHP required your code would load and unload with each request and getting code to stay loaded was impossible without modding PHP, I also had no control over sessions. Unfortunately Java had not always been a web language and no, Java is not related to Javascript. So I found the ugly truth that Java has only ever been used by… well… Fortune 500 companies to run massive backend applications, the most commonly used pure Java web server was Apache Tomcat but like it’s “Servlet Container” cousins, the server was FAR TOO HEAVY to work with. There were litter version such as Glassfish but still following the same idea and not changing it up. Considering all the reasons I was leaving PHP, I felt like I was just jumping from one boat, right into another as I still had absolutely no control over sessions, in fact my control of sessions was probably even worst. And lastly configuring security features of the server were a pain and when I thought I had it right, it just threw exceptions left and right.

So I finally made a decision to write my very own Web Server!

So finally coming to more recent events, my very first web server commit on GitHub was August 21st 2013 and development has been going decently steady ever since. I just recently hit version 9.3.2, which added a Watchdog subsystem for Linux systems and the ability for the server to auto-reboot when it detects a change in it’s jar file. And boy my code base just recently hit around 66,000 lines of code and around a 26 MB binary.

Honestly my initial work was my most disappointing as I wanted some similar features to PHP and my first priority was building an interpreted language into the server. The first attempt that stuck around for the longest was one know as Quercus, it offered an easy way to run interpreted PHP pseudo code on the server. Early versions of the server served it files up using a wrapped servlet container known as Jetty, which later became Resin. Yeah, unless you don’t know, Jetty is a cousin to Tomcat. Not knowing very much about HTTP protocols in Java, I basically built on top of Jetty. But again I ran into the issues with Sessions and User logins which forced me to find other options. Resin for a while offered more but still was too controlling and that is when I finally found Netty. I looked into Netty after hearing that Minecraft moved to using it for Server and Client TCP communication. In a matter of hours I was able to implementing Netty as a full replacement that immediately offered better and finer control over my connections and sessions. My server had and will most likely continue running Netty as it’s a huge still active community project.

Now turning back to the interpreted code feature, I was having issues with compiled binaries and Quercus properly working. Sadly Quercus had a lot of outdated or lacking documentation and the latest version was already a couple years old. But love came my way when I discovered Groovy! and boy, Groovy is amazing. It’s an extension of Java and incorporates syntax from many other languages. It primarily was used as a compiled language but they recently had interpreted options known as Groovy Shell. Again incorporating this feature took maybe a week but the end result was amazing. I also wrote a custom file parser that would read an HTML and individually run Groovy code blocks thru the Shell. In the end I have a Groovy files known as GSP (Groovy Server Pages, a term borrowed from Grails) that like PHP could be written on the fly but unlike PHP had FULL access to the server API and additional feature that could be added with Plugins, which were inspired by Bukkit’s plugin system. More recently the server also has a full user management and permissions system built-in. Using a GSP script you can request that login is required and check that the user that logged in has say permission “com.example.admin” or “sys.op” which is the built-in permission node for server operators.

For a short time I also gave Ruby on Rails (and Grails a similar project that uses Groovy over Ruby) a try but quickly found the same issues with them as I had with options Tomcat or Jetty, they were far too complicated for hobby developers and much of the security features never gave me much explanation to why something was not working.

So now for my shameless advertisement. Chiori-chan’s Web Server is a project that I’ve working on wholeheartedly for more than three years now, not counting the years it was a a PHP framework and I hope to find developers and beta-testers who can help test and patch my project for bugs and security holes. The project has almost grown to more code than I can control on my own and at the very least, I would like to hear some feedback. I built this project with a focus in incorporating the ease that PHP offers but the maturity of Java. I incorporated several conventions of my own to limit the need of massive configuration out of the box. The project is open-source and released under the Mozilla Public License 2.0.

If anyone if interested in taking a look and discussing my project you can find it on GitHub at https://github.com/ChioriGreene/ChioriWebServer
You can also find tutorial videos for how to use and setup my project at https://www.youtube.com/playlist?list=PL5W-gdSkWP6TOBoL-YDEPZaadwBGXGOyO

Lastly, I do also want to apologize for this freakishly LONG POST!
Your so awesome for sticking with it, you deserve a cookie!