Back-end Frameworks

I have an idea for an experimental project that I am going to do as a learning tool. I am going to do the front-end using a JavaScript framework, but I am still considering what to use for the back-end. Normally, I have done the back-end in PHP and created my own hodge-podge of a framework. It would work well for the project, but wasn’t necessarily the best organized.

For this project, I was going to use PostgreSQL for the database. It has been a while since I used it and I haven’t used some of the newest features available in the latest version. I haven’t settled on a back-end framework yet. Here are some of the ones I am considering:

  • Laravel – This is in PHP which I already know, but I have heard good things about it and it could help create a well-structured back-end. PHP is readily available on lots of hosting services, so it would be easy to set up anywhere. However, I know PHP already and I was wanting this to be a learning experience, so this would not add much to my existing knowledge.
  • Zato – This is written in Python and intended for use in developing back-end APIs which is what I am after. I have read some books and articles on Python and have always wanted to learn it. I also know of some local companies that use Python, so there would be some local help available. The admin interface is developed in Django, so this would also be a chance to get some exposure to Django. This is probably the most intriguing of the choices I am looking at.
  • Ruby – Ruby is actually just a language, but I am interested in looking at Rails and Sinatra as possible frameworks. Ruby gets a lot of press and sounds interesting. I have read a couple of articles and looked at some code. I am not aware of any local companies using it and I don’t know anyone who does use it, so I wouldn’t have as many resources available for help. However, I have always wanted to learn Ruby and Rails, so this is still an option to consider.
  • .NET – Once again, this is more a family of languages and interfaces pushed by Microsoft. They did recently release .NET as open-source so that makes it more intriguing. There is also a large .NET market in the Tulsa area, so that also makes it intriguing. However, I need to do more research to find a framework based on .NET so I would do the roll my own like I have done with PHP in the past.

I would appreciate any feedback or comments. It is still up in the air and getting other people’s opinions would help in narrowing my decision.

Cache Performance Monitoring

We are using Intersystems Cache database on one of the projects I am working on. We were concerned with how do we know if it is performing well. I went through the Cache Monitoring Guide in the documentation provided. It is impressive the number of tools and methods they have implemented to monitor the database. However, they never explain how to interpret the data provided. They have one statistic called “Cache Efficiency”. The description of it is “Number of all global references divided by the number of physical block reads and writes. Not a percentage.”. That is all. There is nothing about how to interpret the number, how to tell if it is good or bad. Nothing. We have 2 systems – production and development. The production server has a number of 480 and the development is 1128. How do those compare?

All I have to say is if you are going to document how to monitor the system, also give guidance on how to interpret the data provided so you can tell if you need to take action.

Knockout.js textInput binding

Knockout.js added the textInput binding in version 3.2. This has been a big improvement over the standard value binding. Both provide two-way data-binding, but the value binding updates after the input field loses focus, while the textInput binding updates instantly. There has been a valueUpdate parameter available for the value binding, but it has not worked reliably for me. I set the valueUpdate parameter to keypress, but it still did not provide a reliable instant update for me. That has been totally resolved with the new textInput binding. The one thing I am not sure about is the performance impact of using textInput over value, so I have only been using it on fields where it is important to get the instant updates. Some of those fields are quantity or price fields so I can dynamically update the extended price and order totals while the user is entering data and not so much on name fields where it doesn’t matter to get the instant update.

Web vs Green Screen Development

Recently, I have been working on some projects requiring traditional green screen development. That is programs that run in telnet windows. In the past, they ran on actual terminals which had green screens which is where the name green screen came from when referencing telnet applications.

I realize how much I enjoy web development over the old style development. With web development, you can easily add fields to a screen and move data around without concerning yourself with the nitty-gritty details. It is much easier than working in a 80 character by 24 row screen. To move a field, you have to be concerned with making sure it will fit in the available space and, it seems like, moving one thing causes a ripple effect of updates to keep everything fitting on the screen. I realize some of these old systems that still use telnet windows have a lot of old data in them, but it really is time to hijack the front end of those systems and implement either web based or windows based data entry.

Siegi’s German Restaurant

My wife and I were in Tulsa a few days ago and decided to try a new restaurant. We ended up going to Siegi’s German Restaurant. It has been around for a while, but we had never been there before. It definitely won’t be the last time. We weren’t sure what to expect and, even after reading the menu, we still weren’t sure what the things were. We don’t have a lot of experience with German food. My wife ordered the Holzfeller which is thin sliced ham and swiss between potato pancakes drizzled with honey. It’s listed under sandwiches, but you will have to use a fork to eat it. I ordered the Kassler Rippchen which is a smoked pork chop, though it was more like a pork steak in size and thickness. Both entrees were great. They also have a meat counter/store which sells fresh made sausages and other meat and German delicacies. As you would expect since they have their own butcher shop, the meat was fresh and well prepared. I would highly recommend trying it out some time.

Knockout.js appreciated

We have been preparing to launch a project to production and I had to go back and rework some features. I realize again how much time Knockout.js saves me. I think the biggest help is the two-way data-binding. I remember in the past implementing my own data-binding and that would add hours to a project and would be tough to maintain. Using Knockout.js has eliminated that from my coding and just provides it out of the box. It has literally saved me hours of time.

It has an active Stack Overflow group as well. I was needing to switch an HTML SELECT to a combo box and found several options on Stack Overflow. Having an active group on Stack Overflow is a must for selecting a viable project to use.

February TAP Meeting

Just went to the TAP (Tulsa Agile Practitioners) Meetup last night. Philip Kin gave a good presentation on Acceptance Test Driven Development. The key is to get the project owner to write the acceptance tests. The acceptance test becomes the development spec so you know what should be developed and, when the tests pass, when it is completed. He showed an example of writing the acceptance tests in SpecFlow/Cucumber. To get this to work you need the project owner to buy in to the concept and participate in writing the tests. This is something I am going to consider, but I don’t think it will work at my current job.

Afterwards, Jason Knight led a great discussion getting everyone’s input on the idea and general discussion regarding agile practices. Jason has also recently started writing the Semper agilis blog. There have been several thought provoking articles already. It is definitely Recommended.

The TAP meetup happens the first Tuesday of every month from 6-8pm. If you are in the Tulsa area, I would recommend making time for it in your schedule. I hope to see you there.

Agile origins presentation

I missed the January TAP meeting. At that meeting, Dale Stewart was giving a presentation on the origins of agile development. Dale made his presentation available online. I recently finished going through the presentation and I wish I had been there for the in-person presentation. Dale included a ton of valuable material. I can highly recommend the presentation. I especially enjoyed the sections on the Cynefin Framework and Kanban. Make sure you watch the videos linked to in those slides. I am going to have to go back and review this presentation again. There is a lot there that I can use to improve how I do things. Thank you Dale for all the hard work you put into compiling this presentation.

OpenCart multi-store problems

I have been continuing to evaluate OpenCart. One of the reasons OpenCart was selected was for its multi-store capability. I would say they have not finished implementing the multi-store capability yet. If you only use what is built into OpenCart and do not directly update the MySQL tables, the multi-store setup is incomplete. You can define multiple stores and define what inventory is available in each store, but that is the extent of what you can do. You cannot define a separate payment processor for each store or define different shipping methods for each store. If you review the MySQL table for the settings, they do support defining things separately for each store, but the front-end has not been defined for it. There is an article in the forums which explains the problem. There is an independently developed plug-in developed called Multi 201 which does provide this capability that is available for $50 AUD. If you are going to be using multiple stores, this plug-in is a necessity.

Edit – 1/25/2015: Found another problem with the multi-store setup in OpenCart. If a customer registers for one store, they just registered in all stores. I think this is a mistake in design. I don’t know of a work-around for this yet.

OpenCart shopping cart software

I have been doing an evaluation of the OpenCart open source shopping cart software. It is implemented using PHP and MySQL. It is still early, but it appears to be a capable shopping cart. I have worked with Magento in the past and OpenCart compares favorably. OpenCart’s file and table layouts seem reasonable. I got lost when I was looking for items in Magento. The biggest thing that appears to be missing from OpenCart is an API for external interaction. With Magento, I was able to use an API for adding new inventory or retrieving new orders. I haven’t found an exposed API for OpenCart yet. However, the table layouts are straightforward and I was able to write an order export script using MySQL commands and accessing the database directly.

Like I said, it is still early in the evaluation process, but I would recommend adding it to your list of packages to investigate.