2015-08-05

10, 100 days challenge

I challenged my kids to a 10 and 100 days challenge of blog post, after 5 days, we are all still there... very exciting to see them post stuff everyday.
check out their blogs at

2015-08-04

3 static web site hosting solutions - Day 3

My three pick for the day are:

  • https://getforge.com/
  • https://neocities.org/
    Very cute UI, super simple, online editor, though the restriction to avoid abuse stopped me form uploading my website which contained sccs files, once deleted, the upload worked with a single drag&drop. After the free tier, there is only one tier at $5 a month, which gives you CNAME (custom domains), generic SSL and remove the restrictions, definitely chromebook friendly - would recommend for 1st time users and kids. But the lack of versioning or automation (beside the webdav mount on the payment tier) is a no-go for developers.
  • https://www.dropbox.com/
    There is a lot of documentation on how to host a website as a shared dropbox folder, but no matter how hard I tried, that feature doesn't seem to be available through the free account setup.

2015-08-03

3 static web site hosting solutions - Day 2

Today I explored:

  • https://www.netlify.com/
    I couldn't get the git integration to work, but drag& drop was great, though they have both github and bitbucket integration
  • https://www.paperplane.io/
    You can login with twitter, facebook of github. The first one to support dropbox, great integration, simple, no docs but it just works! This is my favorite for the day, not because of feature, but because of its simplicity.
  • https://divshot.com/
    Very complete offering, drag&drop of zip files, or custom npm module, it supports environments and promotions between them. I couldn't find a way to restore previous version, but you can download them and redeploy. Though it is missing deploy form git. This is probably the most advanced offering I have explored so far.
URL https://www.netlify.com/ https://www.paperplane.io/ https://divshot.com/
Name netlify Paper Plane DivShot
Tag Line Because static sites are safer, faster, cheaper & simpler Radically simple static hosting. Blazing fast CDN, simple CLI deployment, hassle-free test environments. And much more.
Login GitHub, Bitbucket,email facebook, twitter, github gitHub, email
setup npm install netlify-cli -g dropbox npm install -g divshot-cli
create d&d or push or netlify deploy dropbox or github d&d or client
upload d&d or push or netlify deploy dropbox or push d&d or client
update d&d or push or netlify deploy dropbox or push d&d or client
Free Plan forever but logo forever
1st tier $9/month SSL
$20/month
dynamic tracking no
url scheme http://*.netlify.com http://*.paperplane.io http://*.divshot.io/
http yes yes yes
https 1st Tier no 1st tier
CNAME yes 1st Tier 1st tier
CNAME https yes no 1st tier
notes can't make git work, but nice featureset, forms, proxy, redirect, oauth simple, just works, but no docs environment promotion
Chrome book compatible no no
deployed http://generators.netlify.com/#/ http://generators.paperplane.io/#/ http://generators.divshot.io/#/
Domain http://gen.roumanoff.com/
http://divshot.roumanoff.com/#/

2015-08-02

3 static web site hosting solutions - Day 1

Today I explored three of the provider I listed yesterday:

  • Aerobatic
    This one is actually not free, only in public beta, the publishing is bit complicated, requires a npm package (so nodes and command line) and a special directory structure, but it provides an api gateway, and supports oauth with popular services, and has a simulator mode, so it provides some extra services, but it is cumbersome to setup and your require a GitHub account to sign up.
  • Bitballoon
    This is the simplest one of the lot, just drag and drop your folder and BAM, it's published. I am pretty sure they worked very hard to build this one feature. Sign up with GitHub or Persona (the Mozilla id) - you can automate through a ruby gem or a REST API published at https://github.com/BitBalloon/bitballoon-api. It has some very nice versioning feature (you can restore previous version) and provides some password protection for private site, and collect form data for you.
  • GitHub Pages
    This is by far the most complete solution, but entirely based on git, Though it compatible with Chromebook because you can do all the editing online, in their basic but working editor, using markdown, or just HTML. They have an option to generate a site with templates (using markdown). You can also setup your own domain by editing a CNAME file in the repository.
Comparing those three, I would say BitBalloon wins for it's simplicity, but GitHub wins for it's completeness, I wasn't overwhelmed by Aerobatic if it wasn't for integration with bitbucket which could redeem them - but I have yet to explore more this integration build on the new Atlassian Connect API for BitBucket.

Stay for another three providers review tomorrow!
URL Login setup upload Free Plan 1st tier deployed
http://www.aerobatic.com/ github, then userid and secret key npm install -g yoke-cli yoke deploy free beta for 45 days $30 per month – not public yet http://generator.aerobaticapp.com/#/2
https://www.bitballoon.com/ Persona + GitHub none drag&drop forever $7/month http://generators.bitballoon.com/#/6
https://pages.github.com/ custom online, site generators,git git push forever
https://patrickroumanoff.github.io/generators/#/




2015-08-01

Static hosting of web site

Recently I discovered there was a plethora of services providing free (or nearly free) hosting for static web sites.

Here is the initial list I came up with:

My plan is to explore those services in more details, figuring out to which one is the most free, what feature they provide, how easy is it to get started, to update content, if there is integration with source control system (such as the github one), if they support SSL and custom domain (and both, eg SSL on custom domain)

2015-01-07

My baguette recipe

Having a large number of children, it is always a challenge to find time for recurring activities such as a worm farm, a compost pile, looking after the chicken or making bread everyday. The trick I sue is that anything I do on a regular basis must take no energy for getting ready and no time (ie less than 5 minutes) to complete otherwise I know it's not going to happen. So here is my 5 minutes recipe for fresh baguettes.

Step 0 - Ingredient supply.

Making bread everyday involves having an infinite supply of flour, this means I always need to check that I will have enough flour for the next couple of days. We buy organic flour by bags of 5kg and I use a container I keep on my bench top. Actually I use two container, one for plain flour and on efor wholemeal which allows me to vary the recipe from day to day. I also keep extra 1kg bag of flour in the freezer just in case I run out. You can use any type of flour but a strong flour yield better results (eg > 14KJ , high protein or high gluten)
For the raising agent I use dry yeast, the packet I keep in fridge last a very long time and I always have a spare.
Water is unlimited since I use tap water.
I like to use iodised salt, but really any table salt will do.



Step 1 - Recipe

I use an electronic scale so I can reset the tare at each step. In a large bowl add in order

  • 7g of salt, any baby spoon will hold 7 g so I don't need to weight it
  • 550 to 570g of water depending on my mood or how much fall in the bowl
  • 700g of flour (I use a mix of 200g wholemeal and 500g plain, but anything will do, you can even mix other types of grain as well, the more the wholemeal, the more water you need)
  • 7g yeast
  • optional: 20g of SLA (Sunflower Linseed Almond meal) for taste and color. You can get fancy here eg: raisin, muesli, etc.

Mix until you have a big homogenous blob, cover with a wet towel, wait a few hours (overnight is fine on the kitchen counter)


Step 2 - Cooking



  • preheat oven to maximum temp
  • put flour on workbench, empty dough on flour, cut in 4, shape the dough in baguette, put on baking tray, put a bit of oil on baking tray first if you think it's sticky
  • spray baguettes with water to wet extra flour
  • cut bread with knife/scissors to make pretty marking on bread and avoiding it to crack while cooking
  • put tray in oven, lower temp to 220C (fan forced), throw half a glass of water at the bottom of the oven (this help with the crust)
  • wait 14 minutes (might be longer, depending on the oven)




It happens form time to time that I forget something, if it's the yeast, we get flat bread, which taste like a brick, but the kids love it. If I forget the salt, the bread is tasteless, but you can butter it up.

And sometimes the flour just drops on the floor...



mvnvm available on brew

Thanks to a few people, I managed to push the awesome mvnvm to the homebrew repository. It is now available as part of the standard distribution, all you have to do is:

brew install mvnvm

If you feel like following current development of this tool, you can even use the HEAD feature of brew packages and go for

brew install --HEAD mvnvm

In any case, I strongly recommend mvnvm to manage all you maven versions.

All my code is now on GitHub

For a long time I wasn't very consistent with my open source code hosting. But the past couple years, all the rage is happening on github.com. That's where I put all my open source contribution past and present.

The most active one (ie the one I get the most support request) is the crowd nexus plugin which is a fork form the sonatype plugin they stopped supporting with nexus 1.8 for commercial reasons. And that's fair enough, if you pay for your authentication provider you should pay for the tools using it as well. In my case I got interested in this project to allow my colleagues to keep using Nexus OSS while using crowd. Nexus OSS usage was well established, but management was not yet ready to pay for the commercial version with a weird pricing model.

see nexus-crowd-plugin

2008-12-08

My First Published plug-in on google code

I finally managed to write a (semi) useful plug-in  that helped me understand variables in the context of source provider in the Command Core Expressions Framework. The code is puvlished under the Apache 2.0 license and is available on google code @ http://code.google.com/p/rcprevealsourceprovider/. This plug-in will track all source provider variables and isplay their values in real-time. It took me a while to undersatnd how to work them and hopefully this plug-in or at least the code will be useful to someone. It's been a while since I published anything on this blog, but I have been real busy in the last 18 months, hopefully I am back on a roll and will keep posting more regularly.

2006-10-11

Eclipse Training

I finally managed to put togeteher a web page about my upcoming training session on eclipse RCP. Doing so I found a number of resources for those willing to learn by themselves:

2006-04-11

OWASP & tools

I just had an application security awarness training, and it was quite enlightening. Of course Owasp was mentioned, with the top ten list of vulnerabilities, along with the webGoat webapp. but also tools like
  • fiddler: free win32 http proxy with scripting facilities, no ssl support and based on .net
  • charles: shareware http proxy in java with ssl suport
  • WebSleuth: an ie plugin to edit forms, suddenly hacking got so much simplier
Of course there are firefox plugins to achieve the same set of functionnalities.

WTP 1.0

Of course with each new release of WTP the process describe for WTP 0.7 is less and less successfull. But this comes with no surprise, as those were undocumented and temporary features. For those who wonders, the assembled webapp now resides under your workspace directory in .metadata/.plugins/org.eclipse.wst.server.core/tmpX where X is the number of your server starting at 0. Using this tmp folder clearly indicate that nobody should rely on the files at this location, as they will be regenrated with the build process. Those tmp folders also allows eclipse to build a separate assembly specific to each server, which make a lot more sense than the .deployables directory which was shared amongts all server instances. If you need to explicitely reference this directory, you should probably review your build process (but you are already using Maven, right?).

2005-09-27

WTP 1.0M8 is out

I have tried to applied the method descibed in my previous post de WTP 1.0M8 without must success.
First problem: the builder org.eclipse.wst.common.modulecore.DependencyGraphBuilder and the nature org.eclipse.jst.j2ee.web.WebNature have disappeared. It seems to enough to remove them from .project file
Second problem: my webapps which where deploying seemlessly on WTP 0.7 with Tomcat 5.5 are running like dogs under 1.0M8. Each time I edit a jsp file, it quicks in the builder, and wtp needs to republish the entire webapp to the server, reloading the context in the process. This renders quick editing almost impossible. and I don't event speak about modifying a java class on the fly.
Third problem: saving a jsp or java file is now really slow (probably linked to pb#2)
May be I screwed up my server settings or my projects settings. but I tried a clean eclipse install, a clean server definition, a clean projects checkout, with the same result.
I tried a demo app LowAirFare which works very well and doesn't republish on jsp editing, but does republish on class editing.
I really like to understand why my webapp gets republished when I edit a JSP.
I guess I'll have to revert to 0.7 until those issues are worked out.

2005-07-25

Using Eclipse WTP 0.7RC2 with a maven project

When you want to develop web app on eclise, you have not many choices, but the picture is changing as the WTP project is reaching a stable build by the end of the month.
WTP is a very promising eclipse extension, that seems to have been very well though from the ground up, and from my point of view gives you better control than myEclipse (what I have been using so far).

It took me about a day to be able to use wtp 0.7rc2 with my maven projects. I couldn't find any relevant up to date documentation but some bugzilla entries and some outdated test plans. I am writing this post to not forget what I have been doing so far.

Basically a maven project is a project with the following features:
  • separation of sources by topic java, test, webapp
  • usage of external libraries with a variable (MAVEN_REPO)
  • eclipse project dependency where needed (<eclipse.dependency>true</eclipse.dependency>)
This tutorial only describes how to setup your eclipse project to use WTP to build a deployable webapp using separation of sources, externals jar and project dependencies.

[ArtifactId] will denote the current project name as per maven standards

This is still a very manual process, hopefully either the eclipse maven plugin or the mevenide eclipse plugin will be enabled to generate/edit/synchronize those configuration files.

Setup: eclipse 3.1 + wtp 0.7 RC2 or RC3
Of course you also need to install EMF/GEF/JEM plugins. I highly recommend installing in an extension directory (a directory with an eclipse subfolder and an empty file named .eclipseextension), so it is easy to switch versions and update to the latest version without having to reinstall eclipse from scratch.

I have two kind of projects, libraries and webapps. Libraries are used by webapps. This setup looks exactly like what is described by Integrating existing maven projects in WTP and by Flexible project test plan. But following those instructions written for WTP-M3 won't work with the current release of WTP.

I assume the projects are already setup as standard eclipse projects and compiling. To edit configuration files, you should switch to the resource perspective and disable "build automatically".

Step 1: setup the library projects
Edit .project there should be 3 builders in the following order:
  • org.eclipse.wst.common.modulecore.ComponentStructuralBuilder
  • org.eclipse.jdt.core.javabuilder
  • org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver
Then 2 natures in the following order:
  • org.eclipse.jdt.core.javanature
  • org.eclipse.wst.common.modulecore.ModuleCoreNature
(This step is optional) Edit .classpath (you can also do this through the interface) Change the default output folder to .deployables/[artifactId] for src/java.

Create a .wtpmodules file that contains the following code
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId">
 <wb-module name="[artifactId]">
  <module-type module-type-id="jst.utility"/>
  <wb-resource path="/"/>
 </wb-module>
</project-modules>

Step 2: setup the webapps
Edit .project and add the following builders
  • org.eclipse.wst.common.modulecore.ComponentStructuralBuilder
  • org.eclipse.jdt.core.javabuilder
  • org.eclipse.wst.validation.validationbuilder
  • org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver
  • org.eclipse.wst.common.modulecore.DependencyGraphBuilder
Add also the following natures:
  • org.eclipse.jem.workbench.JavaEMFNature
  • org.eclipse.jst.j2ee.web.WebNature
  • org.eclipse.jdt.core.javanature
  • org.eclipse.wst.common.modulecore.ModuleCoreNature
Edit .classpath so that your ouput folder for src/java is .deployables/[artifactId]/WEB-INF/classes.

Create a file .wtpmodules which reads
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId">
 <wb-module deploy-name="[artifactId]">
  <module-type module-type-id="jst.web">
   <version>2.3</version>
   <property name="context-root" value="[artifactId]"/>
   <property name="java-output-path" value="/bin/"/>
  </module-type>
  <wb-resource source-path="/src/java" deploy-path="/WEB-INF/classes"/>
  <wb-resource source-path="/src/webapp" deploy-path="/"/>

  <dependent-module deploy-path="/WEB-INF/lib"
    handle="module:/resource/[libArtifactId]/[libArtifactId]">
   <dependency-type>uses</dependency-type>
  </dependent-module>
  <dependent-module deploy-path="/WEB-INF/lib"
    handle="module:/classpath/var/MAVEN_REPO/[groupId]/jars/[artifactId]-[version].jar"/>
 </wb-module>
</project-modules>

The handle protocol is as follow:
  • classpath is a classpath reference, the second item on the path can be lib or var (as the kind attribute in the .classpath file)
  • resource is an eclipse flexible project reference, the second item being the project name, and the third item a module within the project. dependency-type can be uses which build the jar for you or consumes which copy the files across.
To generate your .wtpmodules file you can copy/paste the section of .classpath which contains references to external jars and replace [classpathentry kind="var" path="] by [dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/var/]

You can now enable "automatic building", and your webapp should be assembled in the .deployables directory. You can then rigth-click your webapp project icon and Run it on the server of your choice.

This is a very error prone process, as there is no error or warning if you provide a broken .wtpmodules file.

Any comments appreciated.

2003-10-16

How to install Oracle 9i on Linux

This article is totaly irrelevant, it just took me far too long to find it, I am not going to loose this link. (hopefully the next time I'll have to install oracle on linux, it will be version 10g, and hopefully, the install process will be bug free)

Does Java need Checked Exceptions? by Bruce Eckel

A (good) argument against Checked Exception.

Multiple Inheritance in Java

They said it was impossible... on purpose, but you can use multiple inheritance in java.

Half Bean

A nice way of dealing with immutable object