Feeds:
Posts
Comments

Archive for the ‘Software Development’ Category

I’m currently trying to automate the creation of datasources in ColdFusion server instances, in order to facilitate a number of migrations our machines and applications have to go through. For the record: this turns out to be reasonably simple, once you get the knack of using the ColdFusion Administrator API classes (if I find the time, I’ll write about that later).

One thing slowed me down: a typical error message without much meaning. This is what I received when recreating (or at least trying to recreate) an Oracle RAC datasource:

java.sql.sqlrecoverableexception: IO Error: NL Exception was generated

I wonder why developers often invent error messages that do not tell us what really went wrong. In this case, it turned out that I forgot to copy a single closing parenthesis at the end of the JDBC connection string. Let’s call that a syntax error, Oracle, and please give a significant message if I mess up! Or is it Adobe’s ColdFusion that is hiding more explicit and clear details about what went wrong?

Read Full Post »

I appreciate the fun one can have at building programs and tools that do something thought to be impossible. Running Java code on a Commodore C64 is such a project.

Back to the Future Java (b2fJ) aims at bringing the power of Java to 8-bit home computers of the ’80s. This project provides a toolchain to cross-compile Java programs under Windows.


You’ll find everything about “b2fJ – Back to Future Java” on Github.

Read Full Post »

The language isn’t new: Kotlin was created more than 5 years ago by JetBrains engineers. A preview version was released in 2011. Kotlin is a statically typed programming language for the Java Virtual Machine (JVM). Being crude, you could say that it’s “just another” enhancement of the Java language, just like Groovy or Scala. Nice, but hardly indispensable.

But Kotlin made a name for itself in May 2017, when Google announced “that it is making Kotlin […] a first-class language for writing Android apps” (in the words of Frederic Lardinois on TechCrunch). The Wired website has a bit more info on why the language was developed and why it is so “hot” these days. And the article concludes:

And its applications extend well beyond Google’s platform. Like Java, it can be used to write apps that run on desktops and servers as well. Plus, JetBrains has released tools for translating Kotlin code into code that can run on iOS or even in web browsers. All of which is to say, you can expect to find yourself using apps written in Kotlin more and more often in the coming months and years.

I have not yet written a line of Kotlin, but perhaps I should try that sooner rather than later. Since I’m also looking at Apple’s Swift language, the combination of learning both could be beneficial… or problematic, since someone asserts that both are quite similar (but not the same, of course): see “Swift is like Kotlin” for details.

I still would like to know how the name “Kotlin” was chosen…

Read Full Post »

Of course I’m going to try this out: “Huzzah, Visual Studio for Mac is now available to all“!

Click the image to see more details about the product

Click the image to see more details about the product

Read Full Post »

Last weekend, I spotted two old BMW motorcycles on the road in the port of Antwerp (Belgium). I had my camera in my hands, so I managed a few badly-framed photos – you can see them on Flickr.

By chance, I also spotted an advertisement for a similar bike. I don’t pretend to be a specialist on the subject, but I haven’t seen many BMW R50/2’s in this color scheme (not even on Google Images), and I find this combination quite flattering!

A fine-looking oldie, as seen in one
of the last advertisements on Kapaza

When I said I found this “zoekertje” by chance, I meant that I just had a quick look at the Kapaza website, because the site announced just last week that it will be closing down in a few days. I have visited that site, with its thousands of advertisements for second-hand stuff in many categories, while on the prowl for say another bike or a special lens for my camera. Kapaza is (was) one of the few big Belgian websites that used ColdFusion for at least parts of its site, and that made me pay a bit more attention to it also. This is one more website that won’t last half a century and more, unlike the motorcycle shown here!

Read Full Post »

Last week, I did loose a lot of time in what should have been a quick ColdFusion hack. My colleagues and I were just trying to set up a web service-based solution for a simple problem: they had a JavaScript page that needed a bit of data for which I already had the code in ColdFusion. So I created a new directory in an existing application, whipped up the required code in ‘index.cfm‘ to return a bit of JSON and tested the result from my browser… only to get an “Error 500 - Application index.cfm could not be found“.

Weird, heh? The required file was there, so why could CF11 not find it? Adding an ‘Application.cfm‘ did not help, neither did repackaging the code in a CFC. On CF8, on the other hand, everything worked as expected. So what was going on?

It took some time, but I did find the explanation: CF11 reserves the directory name ‘api’ for special treatment, so you can’t use it like any other directory name – and of course that was the name I had chosen! Adam Tuttle described the situation nicely in 2015:

Funny you should mention that the issue is inside an /api folder. I’m trying to track down the same problem, except I’m directly accessing an index.cfm (sort of — onRequest intercepts the request and redirects to CFCs as appropriate — it’s a Taffy API) and I’ve found that renaming the folder from /api to … literally anything else… works fine. It’s almost as if something in CF has special meaning at /api, like the special /rest mapping does.

Indeed, renaming my directory solved the problem – too bad it took me so long to find the cause. On to the next problem!

PS. Adam Tuttle has more to say on the subject, but his post on the subject has disappeared: the URL ‘http://fusiongrokker.com/post/coldfusion-11-sometimes-chokes-on-api‘ no longer points to the relevant text, but is redirected to another blog also belonging to Adam Tuttle. There, unfortunately, the post is NOT available. I won’t call this a case of linkrot, but it’s not good either. Luckily, the Wayback Machine has a copy of the page, including a few comments…

Read Full Post »

Brent Simmons isn’t a new name in this blog – I have cited his name several times since 2001. A few days ago he wrote:

It’s been years since I could build the Frontier kernel — but I finally got it building.

[…]
The high-level goal is to make that tool available again, because I think we need it.

The plan is to turn it into a modern Mac app, a 64-bit Cocoa app, and then add new features that make sense these days. (There are so many!) But that first step is a big one.

“Frontier Is Interesting”, says Jim Roepcke – click to see what he writes

It’s an interesting development, from several viewpoints. I wrote some of my first “web applications” in Frontier, and that makes that Frontier will always have a special place in my book of tools. It’s also nice to see a relevant piece of software evolve so that it continues to run on modern hardware and OS’s. At some point, I will certainly download and run a copy on my Mac.

But the question is: do I want to go back to developing stuff in Frontier? Do you want to?

Read Full Post »

It’s something I need to remember: how do I install an old PyUSB package on Xubuntu (or a similar Debian-based OS). Why, you ask? Because I need that old version 0.4.3 for the little script that reads the solar energy numbers from the SMA Sunny Beam.

Image of the SMA Sunny Beam monitor for our solar panel installation

The SMA Sunny Beam monitor for our solar panel installation

Luckily, it isn’t too hard to do. This is my context:

Step one is to make sure you have the required header files to compile the PyUSB package. So you open up a terminal session and execute

sudo apt-get install libusb-dev
sudo apt-get install python-dev

Step two: Extract the root folder and all the files from the PyUSB archive, and make that folder your current directory in the terminal session.

Step three: compile and install the package with this command:

sudo python setup.py install

That’s it. When all goes well, you’ll be able to verify the existence of two new files on your system, in a directory called “/usr/local/lib/python2.7/dist-packages“:

usb.so
pyusb-0.4.3.egg-info

Done!

Read Full Post »

More than 8 years ago, I wrote about the Google App Engine as a platform. Much as I liked the concept, I also remarked that it would be… great to have a complete development environment within the browser, coupled to a runtime.

Turns out that Fog Creek, the software company founded by Joel Spolsky, has built just that: “a developer playground for building full-stack web-apps fast“. It’s called Gomix – but it was called HyperDev during the development of the product. That ties in neatly with my reference to HyperCard as an example of a simple tool that allows anyone to built the tool she/he needs. Nice work, Joel !

So here it is, my first “app” in Gomix (just for fun and with lots of tongue in cheek):

gomix.png

Read Full Post »

The InterWikiLinksPlugin, my small addition to JSPWiki is part of the JSPWiki source tree (or at least it was somewhere in 2009). But Pikacode managed to lose the version I installed there, so I am storing it for posterity on this site as well ;-)

Click the image to download the PDF

Click the image to download the PDF

I had to package it as a PDF file here in WordPress.com, but just copying the text content of the file and saving it as a Java file in the JSPWiki Plugins source directory should suffice for a successful compilation.

Read Full Post »

I just spent yesterday afternoon debugging a somewhat older ColdFusion+JavaScript application: some of the administration functions were not working. A partial explanation for my time spent on the issues is that the application was developed in the days of Internet Explorer 5. We’re still running IE6 on a substantial number of the several thousand PC’s in use in the company… in combination with an older version of Chrome. So refactoring the JavaScript code (to make it work in both browsers) was part of the ‘fun‘.

In the end, the real cause of the core problem I encountered was to be found in a few SQL statements that I had neglected to check out, wrongly assuming they had been working in the past. The reason they continued to slip under the radar was simple: the original developer had managed to “hide” that SQL code in a <cftry> statement with an empty <cfcatch>. So there was nothing in the logs, of course.

From the OWASP website

From the OWASP website

Finding the root cause reinforced a lesson I had learned a long time ago: only catch exceptions if you’re going to do something serious and meaningful with them. No, swallowing them whole isn’t meaningful. OWASP summarizes: “Swallowing exceptions is considered bad practice, because the ignored exception may lead the application to an unexpected failure, at a point in the code that bears no apparent relation to the source of the problem“.

This story teaches a second lesson as well. In the future, I will scan code for exception swallowing situations before I start debugging – that could have saved me a lot of time today!

Read Full Post »

Ray Camden wrote about the CF log file enhancements in CF9 a few years ago: “CF901: Logging enhancements“; among other things, he explained the possibility of disabling and enabling logging into particular log files. This is supposed to work in exactly the same manner in CF11. Since then this theme wasn’t discussed much. That’s too bad, because I have a strange problem in CF11, and there are no clues to find on the internet.

Here’s my situation:  I accidentally disabled a custom log file for a Scheduled task, and now I can’t find a way to re-enable this log. I tried hijacking the “disable” link by replacing it with “enable”, but that did not work – not even after a restart of ColdFusion.

I needed some time to figure out that I could go on with my work again by renaming the .cfm file as well as the log file, but that does not really count as a solution. So all advice to get this specific log back to work will be appreciated!

Read Full Post »

Wednesday evening I attended the first meeting of the CFML UserGroup Belgium, which met at the Brussels Adobe offices. The ColdFusion User Group mentioned a few times on this blog in the past clearly is no more, but Guust is taking over the initiative (not the site, unfortunately).

Elisha Dvorak (Solution Consultant, Adobe) gave us a brief overview of what’s new in ColdFusion 2016. She also explained what the API Manager does and how it fits in the CF2016 solution. In short: the API Manager is a separate product, that comes free with the Enterprise Edition of CF2016. It’s not tied in one way or another to ColdFusion, but is offered since Adobe notices that CF is used to develop and run web services (SOAP as well as REST), and the API Manager helps control access to those services.

coldfusion-logo.jpg

As an aside: Adobe is still looking for speakers at the CF SUMMIT in October 2016 in Las Vegas – they will pay your hotel and entrance fee to the conference. Just contact Elisha for details and suggestions!

Guust Nieuwenhuis, organiser of the meeting, then presented a brief overview of Bootstrap 4. After him came Damien Bruyndonckx, creator of the video courses on learning ColdFusion, that are currently available for free on the Adobe website.

Last but not least came Peter De Ranter, managing director of a software development company called Prosteps. He demoed Tilroy, an online POS that handles more than just sales, and which includes a webshop – that’s why Peter talked about “omnichannel“. What interested most attendees, of course, were the underlying technologies. As it turned out, Tilroy is a combination of a frontend running on a CFML engine, a Node.js-based dispatcher/controller/threading engine, and many dozens of Java microservices. The main database is stored in MongoDB, and everything runs on the Amazon cloud infrastructure. An impressive architecture, that probably wasn’t all too easy to set up, since the main focus of the product (apart from its features) is “performance”. And because of that need for speed, Tilroy uses just the Coldbox framework in combination with Bootstrap in the frontend – other frameworks were deemed too slow. Similarly, MongoDB turns out to be a lot faster than SQL Server when searching through hundreds of millions of “rows”.

All in all, I was glad to have assisted at this session – I learned a lot. Let’s see what comes up next time!

Read Full Post »

I recently received an invitation from Microsoft, to assist in a webinar series about the development of Universal Windows Platform apps. You might think Microsoft would present .NET to do so – but you would be wrong.

universal-app-development.jpg

Building a Universal Windows Platform app – without .NET

Call me silly if you want, but isn’t Node.js a way to create really universal applications that also may run on Windows (if you insist) ?

Read Full Post »

As predicted in my previous post, I installed the Ice application from the Peppermint Linux distribution on my Xubuntu PC. Although is part of the PeppermintOS distribution, installation in Xubuntu (and presumably Ubuntu as well) is quite simple. I followed the instructions from the Ubuntu Forums thread “How to get a program called “ice” from Peppermint OS 6“. In a nutshell (make that a real shell in your Terminal, please):

cd ~/Downloads
wget https://launchpad.net/~peppermintos/+archive/ubuntu/p6-release/+files/ice_5.0.1_all.deb
sudo dpkg -i ice_5.0.1_all.deb

For good measure, you should check the latest Peppermint OS release packages to make sure you have the latest stable edition of Ice – just replace ‘ice_5.0.1_all.deb‘ with the name of the latest version.

The link to my PVOutput.org site works OK in Xubuntu. But you must remember that all Ice-generated applications use the same cookies etc. as the Chromium browser they are based on. That may not be 100% what you need, but I haven’t yet found a solution for that problem (other than writing your own application).

Read Full Post »

« Newer Posts - Older Posts »