I made my first commit to Crimson Comet, the code name for this flash card web service. It was quite simple with just a .gitignore file and an NPM package.json file. I’m not sure how much more I’ll get done today since it is Saturday and we have a bunch of activities to attend to but this is the kind of progress I’m looking for. Even on a light day I do something to move Crimson Comet forward.

A couple months back I started a simple iOS project that would display flash cards for Luther’s Small Catechism. It seemed like a good opportunity to really focus on learning Swift and do a project that would be edifying for the church. What bothered me was that the app would be iOS only. The Triglotta app is iOS only and I do get requests for an Android version but I don’t have any interest in working in Java for a side project since I get plenty of exposure to it at work. At the same time I’ve been studying Node.js and the frameworks built on top of it like Angular 2 and Ember.js. This got me thinking about building a flash card web service. I could then build a web front end using a JavaScript framework and I could also build an iOS native app as well. I could also expose the API someone else could build an Android native client if they wanted to.

Once again I’m starting off in a new direction. My current thinking is to build the web service using Node.js and Ember.js with a MySQL database. I would use Angular 2 to develop the web front end and eventually build an iOS native client in Swift. I’m going to commit to using BDD to develop the whole thing. I’m going to work on it every day in some way, and I’m going to blog about it in some way every day. Vacations might be an exception, but I’m going make every effort to make some progress and blog about it even then.

I am almost a complete newbie when it comes to using Node.js and all the other JavaScript frameworks I’m planning to use for this project. I used JavaScript for some web apps pre-jQuery and a little bit of Ajax stuff using jQuery, but I don’t have any experience with modern JavaScript or how it is used on the server side.

I’m also going to be trying to BDD everything which I’ve done a little bit of and found helpful, but I’ve always ditched it mid-project because it would get hard to keep the discipline when UI elements entered the picture or a new concept would cause me to rewrite old tests. I’m hoping that documenting these difficulties will help me think through the difficulties and maintain the discipline.

I plan to make better use of Git as well. I’ve tried to adhere to branching for each new feature on several projects, but it always suffers the same fate as BDD. I just want to keep moving and the discipline to maintain a branching strategy goes out the window. I’m going to try to use GitFlow and I’m hoping once again that documenting my experience will help me maintain my discipline.

Lastly, consistently carving out time to work on this project will be difficult. Besides my wife and daughters, I have my work commitments of course, I have serveral offices and obligations with my church, and I’m a Warriors fan in middle of another playoff run. In this area I’ll also be writing about how I’m fitting everything in.

I’m really looking forward to all these challenges. I want to test and improve my focus and my skills.

I’m approaching my 25th year as a software developer and I still love it. When I think about what I would do with my time if I could do anything I would study Lutheran theology and develop software. In fact, I would combine the two and develop software that required me to study Lutheran theology. However, as I get older there are several barriers that make it hard for me as a long-time member of the software development community to keep pace.

Enthusiasm of Youth

I’m not talking about how excited I am about working on software projects, I’m referring to the enthusiasm of jumping on the latest and greatest new technology. When I was young I would jump on anything that seemed new and hot. Forays into OpenDoc, Copeland, Dylan, Java Applets, DHTML, Swing apps, Facebook apps, Google App Engine, the Semantic Web, XSLT, SOAP, etc. have made me weary of pour my time and energy into technologies that end up going nowhere. Also, my definition of knowing a technology has changed. In my youth, if I wrote a toy program using a technology I would consider myself knowledgable. Now I would have to have used it in several projects and know the major strengths, weaknesses, and gotchas before I would say I knew a particular technlogy.

[Something about overcoming this]

Time

Having two daughters, a wife, and a diversity of interests leaves me with less time to experiment with techology than 15 years ago. A Friday night that used to be spent staying up late and working on a side project has become squeezing in a half an hour to read a few pages in a programming book between the Friday night school fundrasier and going to bed so I can get up early ti take one of the girls to an activity Saturday morning.

[SOmething about overcoming this]

So Much New Stuff

[All the stuff I’m learning Angular, TypeScript, MyBatis, Node.js, Express.js, microservices, BDD, AWS]

[How do I choose which to use]

In Java there is the idea of [100% Pure Java}](http://www.javacoffeebreak.com/faq/faq0006.html). Put simply it is the idea that your code contains no OS native calls. This idea came from the desire to have completely portable programs. As Swift migrates to different platforms I wonder if we will see this desire come to it. I assume this would be useful for server apps built with Swift. Also, it depends on the language itself. Does Swift and its standard library lend themselves to writing platform agnostic code. If the facilities to write server apps aren’t built into Swift and the standard library (like I/O or concurrency or whatever) then people will have to write and link in platform specific code which ends that dream.

I’m guessing that the easiest work is done in that there are Mac OS and Linux implementations of Swift which I assume means that 100% Pure Swift is possible on *nix based systems. I’m not sure how well the language plays with Windows since Apple hasn’t provided a Windows port.