Value Proposition

While reading about marketing and web site design if found this interesting small post about value proposition This is business centric, since it states why should customers choose you instead of your competition, and every business people should have that clear on their head.

Here it is: Value Proposition: A free worksheet to help you win arguments in any meeting. Don't forget to check the related links. ./M6

.Net Reflector

During a set of web systems migration, things went very wrong and a customer requested me help in setting the systems up again.
One of the systems was developed in the .Net platform, not one of my strongest technologies, and C#.
He was getting really desperate when I started helping, because there was already one technical person looking at it for almost two months...

We performed "pair debugging" in the production environment, since there was no development nor quality environment available.
One of the first things I've detected was that the application that did not work referenced another application, which was not available. Fortunately, that project was available as an assembly, so all that was required was to include the assembly in the configuration file and we were ready for the next challenge.

The next challenge was not easier to detect, since the errors reported mentioned a missing log directory. The problem, though, was not caused by the missing directory. Any error that occurred was logged, but since the log was not working, it reported a directory not found.
Scanning the configuration for the debug location, we tried "./debug", expecting that the debug directory to be relative to project. Unfortunately, that was not the case!
The debug was managed by the previously stated external project, so I needed to see the what the debug code was doing in order to understand how to solve the problem.
The solution came from .Net Reflector, a great tool that allows one to open a library and navigate through its source code.
After a while I was able to understand how the debug file was being written. The programmer that coded the open debug file function was lazy, in a pejorative sense, was did not account for a relative path, forcing one to configure the debug file location with a full path statement, which is not straightforward when one is using a common web hosting service...

Fortunately, soon after, I was able to discover the full path for the application, so we specified the debug path as "c:\..." and things start rolling.

If it wasn't for .Net Reflector, I would have taken a lot more time to find out why the "./debug" value was being ignored and the debug file was trying to be written in "c:\windows\...".
It's a great tool for all serious .Net developers, I truly recommend it.

./M6

PDF generation in Django

Working with Django is very easy. And when it comes to output an PDF instead of an HTML page, simplicity still applies. Check this post: PDF generation with PISA in Django ./M6

Eclipse Application Export Error

Wierd Eclipse export error dependency satisfaction conflict generated by the “Generate metadata repository” option: Eclipse Application Export Error. ./M6

iOS Frameworks

A curated catalog of iOS frameworks and classes for the pragmatic iOS developer: iOS Frameworks.

./M6

Organizational Chart

I've come across with this funny, sarcastic, yet, realistic, organizational chart from Manu:


What's your organization charted?

./M6

Painless Django Kickoff

I'm learning Django and, so far, I'm enjoying it.
But putting it to work, as a simple development environment on my laptop, was harder than I expected. Specially when it came to install the MySQL-Python connector.

If you'r looking for a great step-by-step tutorial, I recommend Starting a Django 1.6 Project the Right Way.

If you're starting with Django, or are having trouble setting Python with MySQL, maybe this will help: Painless Django with MySQL Install.

./M6

Three Things Clients and Customers Want

Here's three things an entrepreneur should always have in mind while developing and selling:

1. Results. If you can offer a return on investment, an engineering solution, more sales, no tax audits, a cute haircut, the fastest rollercoaster, a pristine beach, reliable insurance payouts at the best price, peace of mind, productive consulting or any other measurable result, this is a great place to start.

2. Thrills. More difficult to quantify but often as important, partners and customers respond to heroism. We are amazed and drawn to over the top effort, incredible risk taking on our behalf, the blood, sweat and tears that (rarely) comes from a great partner. A smart person working harder on your behalf than you'd be willing to work--that's pretty compelling.

3. Ego. Is it nice to feel important? You bet. When you greet us at the door with a glass of white wine, put our name in the lobby of the hotel, actually treat us better than anyone else does (not just promise it, but do it)... This can get old really fast if you industrialize and systemize it, though.

The full original post, by Seth Godin: Three things clients and customers want.

./M6

How To Find Ideas For a Startup

A small, but good, text describing How To Pick The Right Idea For Your Startup.

./M6

Pentaho first impressions

I've just went to a Pentaho presentation performed by Xpand IT.
It was the first opportunity I had to get some answers from someone close to the project and I must say, in general, it is what I was expecting.

The presentation was a bit technical, but I think it could not be otherwise since Pentaho is technical. What I mean is that it does not address one of the most important issues on an ETL project: funcional mapping.
Technically, it's all there, but I do feel the transformations could, and should, be easier to define and implement. Point and click is cool when one wishes to sell the product to management, but to do real work, it slows down the development process.
There are just too many clicks involved even for the simplest task, some could be avoided with a GUI revision focused on the user productivity. For instance, recording previous user tree filters, instead of writing the word every time one wishes to filter something, would save a lot of time to the end user.

Another weak point is the lack of rule mapping management and documentation. It does not have a clean nor fast way to see field mappings. If one wishes to see which fields are mapped or what transformation rules are implemented, one has to manually search all the transformations and click on its graphical representation in order to find them.
It's a lot of click when one has hundreds of tables, and thousands of transformation rules defined.
And, obviously, this lack of management reflects on the project documentation because one cannot generate access nor generate rule mapping reports.
This is a serious issue Pentaho should solve. Rule definition is the core of an ETL process and it is totally unacceptable that one cannot access it is a simple, fast and clear way.

On the strong side, Pentaho has a lot of connectors and operators already available. It's entirely written in Java, supports scripting languages and it's open source, through the Kettle project. All this means that it can be easily expanded, either through customization of its core or through the development of plugins.
It can work from the command line, which is excellent because it can be included a shell script, and it has it's own J2EE server, also excellent because it provides out of the box integration solutions. For instance, one can write a transformation that starts when a web service is called or a JMS receives a message.
It comes with some simple, fuzzy, functions that helps to clean data, but don't expect too much out of it.
It seems to scale well, mainly through parallelization, but orchestration can only be achieved manually.

In short, Pentaho can evolve a lot. Specially when it comes to the funcional part of the ETL. But even technically, it misses an orchestrator to help jobs orchestration.
Currently, as a data migration expert, I'm still not convinced that Pentaho can be used on "hard core ETL" projects where the functional mapping management, the development time and the data migration time window are critical points.

./M6

Drupal makes people life harder.

Out of the box Drupal is not very good.
Actually, it is quite over simplistic...

When I see a piece of software, I instantly assume that it will be helpful to some people, but Drupal philosophy is quite the oposite, it deliberately makes people life harder.
When one installs a Drupal site, most people will not get a solution, they'll just get more problems to solve.
Drupal states to be, and I quote, "an open source content management", but after it has been installed, it's totally useless since no one can really manage any content except text. And let's be fair, in the 21st century, supporting only text is extremely limited.
So, in order to support other types of content, one has to install plugins, the same plugins that should already come in the Drupal core system.

Another mistake Drupal makes is it's lack of support for common SEO stuff. In such a competitive world, it's a total fail not to support meta tags out of the box, again, another plugin is required.

Only after a considerable set of plugins has been installed, activated and configured, Drupal starts to be useful.
I consider such philosophy a real mistake because Drupal misses the whole point of software making people life easier. With such a plug-in world, Drupal makes people life harder.
Sometimes it actually states "go and use Joomla!".

./M6

Speaking Avatars

I've found SitePal, a speaking avatar solution.
The text-to-speech option itself is great for demos, videos and presentations.

./M6

Drupal shows only front page

Trocaqui has gone "mad".
It was working fine and, suddenly, it started to show the front page, no matter what link I selected nor what address I inserted in the address bar...
This was so critical that I could't even login into the system to put the system on maintenance mode while fixing the problem...

I've researched and it look to be an Apache mod_rewrite problem.
It started to look like a clean URL problem so I decided to try the non-clean URL format and voilá, Drupal started to responde correctly...
Using the /?q= format I was able to login, set the system in maintenance mode and disable the clean URL format.
By now, I was at least able to manage it.

When in a similar situation, just change the clean URL with the standard Drupal format, it's actually quite easy. Just insert a ?q= between the first / and the following character.
Here's an example: http://www.trocaqui.net/forum is equivalent to http://www.trocaqui.net/?q=forum.

While this was good enough as a starting point, it was not the best solution, thus I continued the quest for the real solution.

I cloned the production site on my testing environment and was able to reproduce the problem, which is a great first step.
While analyzing the problem, I've found out that my .htaccess was broke and tried to fixed it following the steps of others that had .htaccess and Clean URLs problems.
Once the clean URLs were disables, I was unable to set them on again since Drupal tests clean URLs and only allows them to be activated if they will work.

Here's what worked for me, I edited the .htaccess and fixed things by setting the following:
  • RewriteEngine ON
  • RewriteRule "(^|/)\." - [F]
  • RewriteBase /
  • RewriteCond %{REQUEST_FILENAME} !-f
  • RewriteCond %{REQUEST_FILENAME} !-d
  • RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Have special attention to the RewriteEngine ON, it may be case sensitive.

I hope this is helpful for others with a similar problem.
./M6

Starting Up: What I Wish Someone Had Told Me 4 Years Ago

Great post about starting up.
Core message: focus and do it. Need some inspiration? Just think you're Milton from Office Space, tucked in the corner cubicle of Innotech, staring at the red stapler, and waiting for your next pay check.
What I Wish Someone Had Told Me 4 Years Ago

./M6

Automatic FTP

I currently need to upload of some text files via FTP, but since some files are big, over 5Gb, I get a lot timeouts, which stops me from using the FTP mput command.
So, I've developed a small Python script to automate this task and avoid the timeouts.
It has the following features:
  • can be scheduled;
  • accepts file masks;
  • assumes a default local directory where the files to be uploaded are located;
  • supports text files only;
  • opens the connection for each file transfer in order to avoid timeout problems;
Here it is:

# -*- coding: iso-8859-15 -*-
'''
Automatic FTP
'''

import sys
import string
import ftplib
import os
import glob
import datetime

# Server name or IP address
__SERVER = "server.com"
# FTP username
__USER = "username"
# FTP password
__PASSWORD = "password"
# Default local directory were files are located to be uploaded
__DEFAULT_LOCATION = "C:\\ftp\\upload"

#
# Shows the time difference.
#
def showTimeDifference(init):
td = datetime.datetime.now()-init
print "in",td.seconds,"seconds (",td.seconds/60," minutes )."

#
# Transfers the files
#
def transferFile(ftpFile):
ftpInit = datetime.datetime.now()
file = os.path.basename(ftpFile)

print "\tTransfering:",file,

ftp = ftplib.FTP(__SERVER)
ftp.login(__USER, __PASSWORD)

ftp.storlines("STOR " + str(file).upper(), open(ftpFile))

ftp.close()

showTimeDifference(ftpInit)

print ""

#
# Get the files to transfer
#
def getTransferFiles(location, mask):
result = []
for file in glob.glob1(location, mask):
result.append(os.path.join(location, file))

return result

#
# Main
#
def main(args):
fileMask = ""
fileLocation = __DEFAULT_LOCATION
if len(args) == 2:
fileMask = sys.argv[1]
elif len(args) == 3:
fileMask = args[1]
fileLocation = args[2]
else:
print "autoFTP filemask [location]"
sys.exit(0)

print "Transfer files from",fileLocation,"to", __SERVER,"..."
ftpInit = datetime.datetime.now()
for file in getTransferFiles(fileLocation, fileMask):
transferFile(file)

print "Transfer competed",
showTimeDifference(ftpInit)

#
# Main
#
main(sys.argv)

After setting things up for one's needs, it's quite easy to use.
To transfer all .txt files starting with "A" from the default local directory, just:
python autoFTP A*.txt

To transfer all .xml files from a specific directory "Z:\test", just:
python autoFTP *.xml Z:\test


If one needs to adapt this to either get file, i.e. download, or to support binary file, just check the Python ftplib documentation, it's quite easy.

./M6

ZX Spectrum Relaunch!

I belong to the ZX Spectrum generation.
I grew up with a rubber keyboard on the tip of my fingers and I've spent too much hours in a row in front of a black and white small television...

This revolutionary machine is almost 30 years old and to celebrate that there will be a brand new ZX Spectrum 48K, with the same old games and some innovations...

48K rocks! :)

./M6

Fetching Lines From Big Files

Today I had a DB2 bulk loading problem. I got a couple of rejected records on a 2G+ file. These kind of files are too big to be manipulated with conventional text editors, and even text editors that can handle such files are, usually, not very fast.
Since I was in Windows, I've open th MSYS shell, changed into the correct directory and typed
cat -n STPRRIMH.S.ULD.U110115.UN | grep 1943664 > MH.txt
This is an instantiation of a more generic command
cat -n < file > | grep < line >
In a few seconds I had a new file containing exactly the information I needed.

Serious developers can't really live without Unix/Linux tools on their machines...

./M6

Haiku - BeOS Lives

It seems BeOS is still alive and truying to kick.
A new open source project named Haiku is BeOS compatible multimedia oriented as the original project.

./M6