When I worked for Cerner as a systems engineer, I attended a workshop for a new computer language (open source and from cognitect) called Clojure. For many of us this was the first exposure we had ever had to a dialect of Lisp. My college chose more traditional languages like Java over languages like Lisp, which is a great choice for getting into software development, but unfortunately doesn't allow students to discover the fantastic language that is Lisp. One of the things I loved right away about the language was its package management (for Clojure it's Leiningen and for Common Lisp its QuickLisp). The portability of the language was also attractive. I did find a lot of features of lisp alien (no pun intended, Lispers will get the joke). For exampke Lambdas and lambda calculus was strange to me initially (though some work in Tcl helped me along in this regard) . Other features of the language seemed strange as well such as emphasis on functions over objects (common lisp does have an object system called CLOS and Clojure uses namespaces to achieve organization of code packages). One idea that at first seemed annoying but has later proved invaluable in the understanding of how lisp works was the avoidance of state in lisp. Clojure is extremely dogmatic in this regard even more so than Common Lisp (common lisp uses images to get around this, more on this later). It seemed strange to me that a computer language/system would avoid state since it is often critical in solving problems algorithmically. Eventually I ran across an oddity in Computer history that until recently I was relatively unaware of which was the idea of a Lisp Machine. In almost every modern operating system the Kernel is a combination of assembler for whatever processor the OS is designed for and low-level C language, In the case of a Lisp machine the Kernel is implemented as a compiler and is solely written in Lisp, The Lisp code translates directly to assembler for the hardware. I was stunned by this because similar attempts in the past have failed tremendously. For Example, Sun Microsystems attempted to implement an entire operating system in Java and the result sucked to say the least. In fact every successful Commercial and non-commercial operating system I can think of has their Kernel implemented in various levels of C/Assembly/C++. The lisp machines built entirely to run Lisp such as Symbolics LMs running Genera (there is soon to be a new release of genera) and Xerox and Texas Instruments various Lisp machines. Nowadays most everyone creates a common lisp kernel running on top of the os sometimes called an "image" that can be launched. The image can store state and is essentially a mini OS implemented by the programmer to run atop of the OS. This is often accompanied by the use of Emacs, a subject I will not even touch on in this post. In any case, lisp virtual machines have been gathering steam (I'd argue clojure is a lisp vm implemented on the JVM), In summary, I've been using Lisp images as micro-oses on top of whatever OS I'm using. I have typically chosen to use GNU Common Lisp when possible for some of its niceties, but it uses a bytecode and has some issues on the Mac. On Mac I've used SBCL which is fully native and runs great on OS X.
So I know I haven't updated this blog in a long time, but I have decided to do it today. I am in the process of developing an app for IndyTech that uses the 3D touch interface available in Nougat. Android has had pressure sensitivity for quite some time but "App Shortcuts" are the Google terminology for 3D Touch. I recently purchased the Google Pixel phone and will be looking forward to trying out this feature when I release the 3D IndyTech Launcher.
I tried android runtime fro chrome recently and was able to load (a single android app for now) to my Chrome web browser. This is great for a save-my-time point of view. I already have quite a collection of Android Apps and not having to re-create the will to create local versions for whatever OS your're on is awesome!
China has just built the world's fastest supercomputer using a domestic chip based on the DEC Alpha. China probably decided to build a domestic chip after the US government banned the sale of US chips to China (too little too late). Certain US administrations have a long history of selling sensitive/top secret technologies to China. Several waivers from the Clinton Administration permitted sensitive equipment and technology to be sold to China. Companies like Sun Microsystems, LORAL, IBM, etc were involved.
Microsoft has been spending a lot of effort and time open sourcing much of it's current stack VC++/C#/.NET so that developers can use these technologies. I have been aware for sometime of Mono, but was unaware of a scriptable C# that can be used less formally and ritualistically as compiled C#. I have recently discovered a project call "scriptcs" and have used it to success to automate and script some processes on my work machine.
Isn't it my luck when I finally embrace Android's native development platform (Java) they start talking about migrating. There is a rumor that they may announce the ability to use Swift at this year's I/O. While they may start offering JVM based scripting languages, I don't see google fully embracing Swift (which runs on an Objective-C runtime as far as I'm aware and using LLVM bytecode) without actually abndoning the JVM platform. I'm not sure, even with the hype, that this would be in Google's best interest for Android.
I decided to use the native tools to develop android apps and I'm discovering that they are really good (Android Studio). I haven't done any Java programming for awhile, but it's pretty easy to get back into the swing of it.
I've been revisiting using the Android SDK and using Clojure on Android, which, while not the most feature rich option on Android, is actually most of what I would need for a native option. I'm largely moving towards using Compojure based Clojure apps since they are very easy to build and can be universally accessed from the web. HTML5 makes this option very attractive.
Ok, so I've been doing a lot more Clojure lately. I even decided to start building more web services using Compojure, the clojure web framework. It makes building onto my website easier. While Django remains a great framework and offers an awful lot, I'm finding more and more reasons to use Compojure over it. I have just completed one major project using Compojure and I'm very satified with the results.
I have been using more clojure as of late. I recently used it for a project at work that needed a website for receiving json requests for pre registrations. I found that the project went very smoothly with a framework for clojure called compojure. It's a a great Web framework and offers a ton oof features.
So I decided to go back and play a game that I haven't played (or beaten) in a few years. That game is Diablo by Blizzard. The same company that makes world of warcraft and No, I will never play that game. Anyway, I beat the first one a few weeks back and needless to say, it's a pretty dark game. However, I enjoyed it enough to play the second game which I'm actually finding to be more enjoyable. I haven't gotten very far because this is actually a very long game. However, I am enjoying it immensely.
With the release of VS 2015 Community having the ability to deploy apps for Windows Runtime platform, I decided to order a Lumia 950 and I already have a few apps ready to go. Actually, I can load them to my Surface and see how it runs. Will be checking out the Aync piece of Universal Windows Apps.
I was doing some experimentation with the new Visual Studio Community edition and I was shocked to find that I could compile C#/.NET apps and the new WinRT/Windows Universal apps and ship them with the community edition of Visual Studio. That's very unique and appealing because now instead of spending $500 on visual studio, you can now develop for various Windows platforms for free. Now I don't know if that includes shipping and uploading to the Windows App store, but it definately includes writing applications for your personal devices.
I found my old copy of Visual Studio Professional from School! I'm very happy about that because I can now ship binaries and not have to use a framework like QT (QT is great, but setting up a static build is a nightmare compared to using VS). I love being to use C++ and hit the native Windows and .NET apis. I have to say I really like the Visual Studio IDE.
So I took an interest in using WebGL, which is basically a Web API for rendering images and graphics onto a GPU. I decided to add an application to my webserver to undertake encoding and rendering WebGL graphics.