niceideas.ch
Technological Thoughts by Jerome Kehrli

Introduction to mathematical optimization

by Jerome Kehrli


Posted on Monday Mar 26, 2012 at 12:30AM in General


During my MSc studies, I followed an extended set of very interesting lectures related to Mathematical Optimization using basic mathematic concepts and simple algorithms such as the Newton (and/or Newton-based) methods or the simplex algorithm (and/or simplex based such as branch-and-bound, branch-and-cut, etc.).

Quoting Wikipedia:

"In the simplest case, an optimization problem consists of maximizing or minimizing a real function by systematically choosing input values from within an allowed set and computing the value of the function. The generalization of optimization theory and techniques to other formulations comprises a large area of applied mathematics.
More generally, optimization includes finding best available values of some objective function given a defined domain, including a variety of different types of objective functions and different types of domains.
"

I have these days a (very) little more than usual free time and I've compiled a resume of these lectures from my various notes and individual chapters resumes. So I decided to put this document online as it might help some of the future MSc students following any lecture related to Mathematical Optimization by providing them with an introduction to the field.

The resume is available here : resume_optim.pdf.


About linkedin, software architects and a little disappointment

by Jerome Kehrli


Posted on Sunday Oct 30, 2011 at 07:45PM in General


I am really amazed and astonished by a few updates I've been seeing on linkedin recently.

I've been working these ten last years with incredibly gifted people. You know, the kind of guys you discuss with wondering whether you yourself will ever be as good, clever and keen as them. I really think being that good is nothing to be ashamed of so let's assume I can name these guys. The very first one I remember is Thomas Beck (Geneva, Switzerland) . I've been working two years under his supervision (he was the software architect on our project) and I have learn more about the job discussing with him than I ever did reading whatever software architecture or design related book (agile, DDD, whatever). Happily I have learn a lot more since I left him yet I'm quite sure he did even more so I believe I'm still far from reaching his level of mastering of the software architecture business.
Other people I would also mention here are Sebastien Ursini, Sebastien Marc and Thomas Caprez (Geneva and Lausanne / Switzerland). I haven't seen these folks since several years for some of them yet I can still pretty clearly remember what they taught me and there's not one single day where I don't benefit from these teachings in my job.

On the other hand, just as everybody, I really had much more often the occasion to work with terrible software engineers. I principally encountered two categories.

The first one is this kind of people that went to great engineering schools or universities and assume the time they invest in their studies is well enough and exempts them from providing any little additional effort to keep learning since they graduated. These people are fools believing they're great only because of some piece of paper assessing they have once been able to learn something. I hope all my very good french colleagues won't hate me for this but I have to say that specifically french engineers are subject to this bad tendency.
Unfortunately, life doesn't make any gift to anyone and most of them are sooner or later taught the hard way how they're wrong and start kicking their buts to actually start learning the job and make some progress.

The second category is way more dangerous. This is the kind of people that sell themselves as software architects without any real software development experience. These folks read lots of books, follow lots of software architecture blogs and assume that this exempts them from building their own experience before claiming being software architects. I'm not saying reading is not good, but I am pretty sure that it is in no way comparable to experience. Unfortunately, due to poor recruitment processes one one side, and the lack of good software engineers on the market on the other side, these guys manage to find a software architect job and end up taking architecture-level decisions.

I am involved in the recruitment process in my current company (just as I was in my former companies). I take care of the technical assessment. I myself am usually a nice guy (well I think) and yet I show no mercy to candidates. I am pretty well aware that a mistake I make in this process might well lead me to work with bad engineers a few months later and this is a risk I'm not willing to take at all.
I am the guy killing those people. When I see someone coming in front of me with a resume claiming several years of experience in software architecture and not able to answer correctly the very first questions I'm asking him, it usually puts me in such a bad mood that I still keep the guy for the two hours that were planned and bury him 7 feet under ground. Hopefully the guy will work on a resume a little more humble before applying to another position (in another company, needless to say).
Just a word on "answering correctly": there is usually not only one good answer to a design problem or an architectural question, neither do I expect one. But I expect the candidate at least to build a proper conceptual model of the issue I'm presenting and to be able to outline a few solutions.

Now why am I putting all this online ?

Read More

niceideas-commons - v1.1-beta-0.1

by Jerome Kehrli


Posted on Sunday Dec 26, 2010 at 10:03AM in Java


Following the initial release of the niceideas-commons package here : niceideas-commons 1.0-alpha-0.7, the niceideas-commons 1.1-beta-0.1 is released today.

Major changes are :

  • Basic relation mapping support added to the DAO framework
  • More helper and utilities related to resource finding and loading
  • More utilities of various kinds
  • Various bug fixes

Read More

Java - Create enum instances dynamically

by Jerome Kehrli


Posted on Saturday Nov 13, 2010 at 09:08PM in Java


I remember the introduction of the brand new enum type in Java 5 (1.5) was a very exciting announce. However, when I finally switched from 1.4 to 1.5 and actually tried Java's flavoured enum types, I was a bit disappointed.

Before that, I was using Josh Bloch's "Typesafe enum" pattern (effective java) for quite a long time and I didn't really see what was so much better with the new Java native enum construction. Ok, fine, there was the ability to use enum instances in switch - case statements which seemed fine, but what else ?

Besides, what I used to find great with the "typesafe enum" pattern is that it could be tricked and changed the way I wanted, for instance to be able to dynamically (at runtime) add enum instances to a specific typesafe enum class. I found it very disappointing not to be able to do the very same thing easily with the native Java enum construction.

And now you might wonder "Why the hell could one ever need to dynamically add enum values ?!?". You do, right ? Well, let's imagine this scenario:

You have a specific column in a DB table which contains various codes as values. There are more than hundred different codes actually in use in this column. Related to this, you have a business logic which performs different operations on the rows coming from this table, the actual kind of operation applied on the row depends on the value of this code. So there are chance you end up with a lot of if - elseif statements checking the actual value of the code.
I myself am allergic to using string comparison in conditions so I want to be able to map the values from this column to an enum type in Java. This way I can compare enum values instead of strings in my conditions and reduce my dependency on the format of the string value.

Now when there are more than a hundred different possible codes in the DB I really don't have any intent to define them all manually in my enum type. I want to define only the few I am actually using the Java code and let the system add the other ones dynamically, at runtime, when it (the ORM system or whatever I am using for reading the DB rows) encounters a new value from the DB.

Hence my need for dynamically added enum values.

So recently I faced this need once again and took a few hours to build a little solution which enables one to dynamically add values to a Java enum type. The solution is the following :

Read More

Java rocks !

by Jerome Kehrli


Posted on Wednesday Nov 03, 2010 at 08:40AM in Java


I've been facing an interesting problem with string manipulation in Java lately at work. The requirement was the following :

We have a field on some screen where the user can type in a comment. The comment can have any length the user wants, absolutely any. Should he want to type in a comment of a million characters, he should be able to do so.

Now the right way to store this comment in a database is using a CLOB, a BLOB or a LONGVARCHAR or whatever feature the database natively provides to do so. Unfortunately that's not the way it was designed. Due to legacy integration needs, all these advance DB types are prohibited within our application. So the way we have to store the comment consists of using several rows with a single comment field of a maximum length of 500 characters. That means the long comment has to be split in several sub-strings of 500 characters and each of them is stored in a separate row in the DB table. The table has a counter as part of the primary key which is incremented for each new row belonging to the same comment. This way we can easily spot every row part of the same comment.

Now another problem we have is that under DB2 a field defined as VARCHAR(500) can contain 500 bytes max even though the strings are encoded in UTF-8 in the database. That means we might not be able to store 500 characters if the string contains one or more 2 bytes UTF-8 characters. Working in a french environment, this happens a lot.
So we had to write a little algorithm taking care of the splitting of the string in 500 bytes sub-strings.

The very first version of our algorithm was quite stupid and ended up in splitting the string in a quite naive way: we converted the string to a byte array following an UTF-8 encoding and split the byte array instead of the string. Then each of the 500 bytes arrays was converted back to a string before being inserted in the database.
Happily, we figured out quite soon that this doesn't work as it ends up quite often splitting the string right in the middle of a 2 bytes character. The byte arrays being then converted back to strings, the split 2 bytes character was corrupted and could not be corrected any more.

Before writing as smarter version of the algorithm which would manually test the byte length of the character right at the position of the split, we took a leap backward and wondered : "Can it be that Java doesn't offer natively a simple way to do just that ?"

And the answer is yes of course.

Read More

CommunityBoard : a sample multi-module maven / glassfish / eclipse Java EE project.

by Jerome Kehrli


Posted on Sunday Oct 24, 2010 at 10:29PM in Java


CommunityBoard is a sample multi-module maven / glassfish / eclipse Java EE project.

It realizes is a little Forum / Note publishing application. Its main purpose it to act as an introducing laboratory to Java EE programming. As such the functionalities are rather limited. Yet it covers the most fundamental aspects or issues with Java EE programing in the way it show hows to :

  • write entity beans with bi-directional relationship;
  • use these Entity beans in EJBs (Stateless session beans);
  • use other EJBs in EJBs;
  • use EJBs in a servlet or a JSP located in a WAR (i.e. no processing of the @EJB annotation);
  • build a multi-module Java EE maven project with jars, wars, ears;
  • how to write JSPs with the JSTL (Ok I am not very proud of these JSPs yet they do the job) and
  • deploy a multi-module ear within Glassfish and use a container defined datasource

Read More

Funny developer tale

by Jerome Kehrli


Posted on Thursday May 06, 2010 at 11:03PM in Computer Science


I've been working a few years ago on an architectural concept for some very specific piece of software my former company had to develop. The technical challenges were huge and the field was pretty complex. In addition, the timeframe was very little and we have had to rush a lot to get it ready and prototyped in time.

In the end we screwed up ... totally. The concept was miles away from what was required and we pretty much had to start it all over. Months of work were just good enough to be thrown away with the trash.

Not used at all to such failures, I decided to take some time to understand what happened, what went wrong.

My investigations led to the following story, a pretty funny though quite common developer tale.

Read More

DWR : A paradigm shift in web development

by Jerome Kehrli


Posted on Thursday Apr 29, 2010 at 04:57PM in Java


I discovered DWR recently and I believe it to be an amazing breakthrough in the world of HTTP client-server comunications.

First what is DWR ?

DWR stands for Direct Web Remoting - Easy Ajax for Java.

DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible.

Quoting the official website :

"DWR is a RPC library which makes it easy to call Java functions from JavaScript and to call JavaScript functions from Java (a.k.a Reverse Ajax)."
Read this : http://directwebremoting.org/dwr/introduction/index.html.

Read More

Snake ! 0.2-alpha-0.1

by Jerome Kehrli


Posted on Tuesday Feb 23, 2010 at 11:40PM in OpenGL


Snake is a little C++/OpenGL project which shows a snake eating apples on a two dimensional board. It really is very much like the famous Nokia phone game except the snake finds its way on its own.

No nice textures, no sweet drawings yet. The world elements are mostly simple spheres. Trivial OpenGL features such as fog, lightning and shadows are implemented though.
Oh, and the snake it quite stupid at the moment. I wrote the path finding algorithm in an hour or so and I really need to come up with something smarter.

Snake screenshot

Read More

hibernate's not-found="ignore" is buggy as hell

by Jerome Kehrli


Posted on Wednesday Jan 27, 2010 at 07:52PM in Java


I'm working on a java application which makes an extensive usage of hibernate's relation mapping system. The later offers several ways to define association mapping. We mostly use many-to-one relation declarations. The problem comes from the database. It's a pre-relational, pre-transactional, legacy database running on a prehistorical IBM zSeries host. The data on this database is very often dumb or corrupted. The lack of a proper referential integrity support and the foolish design make us end up quite often following non-existent relations.

Happily, hibernate provides a semantic which allow the application not to bother when a relation is missing, just as the legacy app does. This semantic is the not-found="ignore" parameter on the relation definition.

However, the usage of this semantic resumes to open very wide the doors to oblivion.

Read More

Nokia n900 vs. Apple iPhone 3GS vs. HTC (OOpps.. Google) Nexus One

by Jerome Kehrli


Posted on Sunday Jan 24, 2010 at 09:37PM in Geeks-up !


I'm looking for a new phone. The 3 models I found appealing are the ones mentioned in the title of this post. I'm posting here the criterions I ran through when looking at these phones and the reasons that make me choose one or the other.

Read More

Functional programming in Haskell

by Jerome Kehrli


Posted on Sunday Jan 24, 2010 at 05:28PM in Computer Science


Functional programming addicts,

I'm following an Haskell programming course. It was a short course, though we ran pretty much completely through the book "Programming in Haskell" by Graham Hutton. My personal view on this is that Haskell is a great language which offers a concision rarely reached by other languages, even other functional ones. The book sucks though. It's follows a way too much theoretical approach which makes it quite cumbersome and not interesting at all.

I've been told though that Hutton's book is the reference for Haskell programming. On my side I really found the various tutorials I could find online much more useful than the thorough lecture of this book I've been pretty much forced to follow.

Anyway, as usual I made a nifty summary on this book, so help yourself :

Haskell summary

The summary stands on three A4 pages and should serve as a reference for those who are initiated to Haskell programming and seek for a quick programming reference.

Happy reading, HTH.


Introduction to the theory of computation

by Jerome Kehrli


Posted on Saturday Jan 23, 2010 at 11:05PM in Computer Science


I have written a quite amazing summary on the book "Introduction to the theory of computation" by Michael Sipser. It's definitely not a replacement for the book itself as it lacks the basic explanation required to understand the presented concepts. But if you have read this book and you're looking for a short summary standing on 7 A4 pages, there you have it.

The summary focuses on the most important concepts presented by the book and holds the mandatory illustrations going along the various concepts. Well there isn't much more to say about it, so if you have read that book, check out this summary. You should be pretty amazed to see that pretty much everything actually is in it ... in less than 7 pages.

It's worth to mention though that it's quite a big file (3.8 Mb).

Summary Theoretical Computer Science

Good reading, HTH


About

by Jerome Kehrli


Posted on Saturday Jan 23, 2010 at 10:39PM in General


niceideas

A blog about Computer Science, Software Engineering and Disruptive Technologies.

Niceideas.ch is a blog that focuses on providing insights, technical explanations, experience and lessons learned on various technologies, computer sciences in general or software engineering practices.

My name is Jerome Kehrli. I have 15 years of experience in the Software Engineering Business, specialized in architecture of Information System at all levels and latest technologies and trends in Computer Sciences.
My latest interests are related to the blockchain technology and software development practices such as XP, Agile methodologies, DevOps, Lean Startup, etc.

I focus also a lot on Big Data Architecture and related technologies deployments such as NoSQL Databases, Hadoop or Spark clusters as well as machine learning and the latest trends in the field.

Read More