MobileMe replacement June 17, 2011
Posted by steve in Uncategorized.add a comment
Given the impending demise of MobileMe’s iDisk capabilities announced by Steve Jobs at the 2011 WWDC, I have been investigating the alternatives. I do realize that most Apple apps (iWork, iLife) will use the new “Documents in the Cloud” feature, but I wanted something more generic and usable regardless of the platform. Rather than use a grab-bag of tools, I decided to just buy some web hosting and try to use that.
First, I got hosting (from GoDaddy) and I have added several apps that can be automatically installed using the GoDaddy application management console. They include:
- A blog (WordPress)
- A forum (SimpleMachines)
- A wiki (MediaWiki)
- A content management system (Drupal)
- A URL shortener (YOURLS)
The URL shortener is kinda cool, check this out: http://thenerdis.me/u/1
I am currently still looking for something to replace the iDisk feature. I am a DropBox user (free account), and I have a hard time with the idea of paying $120 a year for 50GB of storage. This GoDaddy hosting account gave me 150GB with unlimited bandwidth and cost $144 for TWO years. Not including the ability to host applications and the theNerdIs.me domain name- it seems like a much better bargain than DropBox.
So, stay tuned… I will post again about how the search for an iDisk/DropBox replacement goes. Hopefully, I will be able to use the PHP/WebDAV extension…
Innotek VirtualBox November 8, 2007
Posted by steve in Uncategorized.add a comment
VirtualBox rocks!After spending a lot of time fiddling with WINE on Ubuntu trying to get
the Full Tilt Poker client running so I can “get my gamble on” while
running Ubuntu, I decided to abandon it, since it doesn’t work, nobody
else seems to be able to get it to work, etc. etc.
Since then, I stumbled upon Innotek VirtualBox.
This software is nothing new, similar to VMWare, but the
licensing allows you to use it for personal use for free, so I gave it
a try. Literally less than an hour after starting the
download of VirtualBox, I was playing poker on my Ubuntu desktop.
Since then I have tried the Windows version of VirtualBox and
it is just as easy and free as the Ubuntu version. Now I can
run Ubuntu in a VM on my windows desktop.
VirtualBox is a great way to try new OSes…. Hmmm..
Maybe I need to give gOS a try…
I’ve found the best way to use VirtualBox is to have ISO installer files for your OS. If you have a Windows install CD, you can use ripping software to create an ISO file from it. From that point, you can use VirtualBox to “mount” the ISO file as a CD drive to the VM. When you first start it up, the boot order will cause the VM to boot the installer CD image. By having the ISO image file instead of the installer, it makes it easier to install it multiple times / reinstall / etc, without having to deal with the physical CD and the slow speed.
VirtualBox – It’s worth every penny!
User Group 2.0 (Problem) October 11, 2006
Posted by thenakedsingularity in Uncategorized.add a comment
Ever been to one of those technology user groups around town? Let me guess, you went for a couple of times, maybe had some interesting discussions, might even learned a thing or two, but have not been back since. Close?
That’s probably the experience that the majority of us can relate to. I, for one, certainly can. There are around 20-30 user groups in the city I live in and there is not a single one that I go to consistently. True, sometimes I am just too busy or too lazy to go, but most of the times I just didn’t feel that I could get a lot out of the experience.
Is there something that most user groups are lacking or am I just too picky?
Well, I’ll go ahead and gripe and you be the judge.
1) Many user groups lack substance; they tend to be a front for networking or other ulterior motives. Most professionals go to user group hoping to have the opportunity to learn from each other and exchange ideas/problems/solutions with their peers. If a user group stray away from the main goal, many professionals lose their interests. Sure, networking is certainly useful and welcome in such functions, but don’t forget what they come for in the first place.
2) Sometimes, more often than not, the presentations in the user groups are high-level, abstract, and academic. There is a big gap between what is presented and what participants encounter in their daily lives. Very often, user group participants cannot relate and apply what they learn from the presentations to their problems at work – they are always different. Therefore, you might leave there knowing a couple more terminologies, but still without a solution to your problem, and worse yet, without any “real” learning.
3) Most user group are for specialized interests. Linux, Java, .NET, Unix are just a few examples. Granted, it is cool to go and hang out with fellow Java programmers, but now days how many pure Java programmers are there? Most professionals I know have their hands in everything – software engineering, architecture, infrastructure, process management, leadership, project management, and the list goes on and on. Very often, we are interested in everything under the Sun, because solutions to the problems we solve often comprise innovations from multiple fields and dimensions. Going to a one-dimensional user group is often insufficient to my learning. What I want to learn is not how to use Java correctly, but how to use Java correctly with the rest of the technologies, under the context/domain I am in.
4) Lack of continuity. Real learning is a continuous process with feedback and re-enforcements. You don’t just go to a one hour presentation and come back with internalized knowledge. Sometimes a presentation goes really well and generates a lot of active discussions among participants, so they go back to work and apply what they learned, and figure out what works and what does not. At this juncture, it is critical for them to revisit the subject and enrich it with feedback from the real world experiences. This process is highly conducive to real learning. Unfortunately, most user groups tend to jump from topic to topic without connecting the dots or provide adequate room for reflection.
I have more but here are the main ones. In the next post I’ll suggest a radical approach that looks at user group somewhat differently. Will it be something that you might be interested in going, more than a couple of meetings? I don’t know, you be the judge.
uma comunicação October 11, 2006
Posted by thenakedsingularity in Uncategorized.add a comment
What is communication?
Wikipedia simply defines communication as “the process of sharing informaton.” Webster says communication is “a process by which information is exchanged between individuals through a common system of symbols, signs, or behavior.”
Sounds reasonable, right?
Recently I was looking at the work carried out by two Chilean biologists: Humberto Maturana and Francisco Varela. These two guys did some influential work on cognition and collaboration; the latter gave me some insight about communication that I didn’t have before.
Maturana and Varela made two fundamental observations:
1) Everything said is said by an observer. We are what we observe. How we think, what we say, how we feel, all are culturally and environmentally specific.
2) All knowing is doing, and all doing is knowing. An organism’s thought processes are closely tied to its physical nature. So, to understand a creature’s actions, we must discern its form – that is, understand its physical make-up.
From these insights, Maturana and Varela introduced the concept of autopoeisis. An autopoeitic system is self-producing and self-organizing – it continually regenerates its own components and its internal processes for a specific goal (e.g, survival.)
Bare with me, we are getting to the communication part, I promise.
In autopoeitic terms, the defining responsibility of a system is to maintain its internal processes. This dictates how systems collaborate with each other. They must do it in such a way so that both of their internal processes will be preserved. Sometimes a small deviation is okay, as long as the deviation does not have a permanent damage.
So, let’s look at communication again. First of all, communication is not in fact the transmission of knowledge from one party to another, since, well, both parties already have different perspectives on life and everything else and will make up their own minds about any information that is passed on to them.
So why communicate?
Autopoeitic theory asserts that communication is all about the transmission of intent. The purpose is to encourage the all parties to synchronize their behaviors so that an interaction can proceed without interrupting each party’s internal processes.
Translation: in human speeches, it implies that what you say is not all that crucial, but how you say it is.
For example:
a) Provide the right mechanism to allow the parties to engage conveniently.
b) Be congenial to prevent relations breaking down.
c) Indicate clearly the intentions of the parties involved, so as to permit coordination of individual behaviors.
Interesting, no?
Blogging is a form of communication. Does this theory apply here? Is this forum used by us to transmit some type of intent?
hmm…
Dimensions of Time October 7, 2006
Posted by steve in Uncategorized.1 comment so far
In the spirit of the post about the light cone, I thought I would post about a problem that I have been thinking about lately, but it is really a concern for most applications, and that is the storage and processing of entities that have one or more time dimensions. I will call these ‘temporal entities’.
To provide a domain to have examples for discussion, consider a payroll system. In particular, suppose the system’s Employee objects have attached to them a ‘salary’ property. This example will help illustrate the multi-dimensional time aspects. Suppose an Employee receives a paycheck in June based on the salary, which was $100 at the time. When the Employee gets a raise, the system must capture the new salary amount so the new check for $125 is sent in July.
So far, we have one temporal dimension- the ‘perfect world’ scenario where the system and the users do everything perfectly. How the system accomplishes the management of this information is up to the reader, but I suppose it could have multiple ‘snapshots’ of an Employee with an associated effective date. To find the salary for a point in time, you might retrieve the record that was “in effect” at the time in question. This seems to be a reasonable approach at first blush.
Now consider the situation where we are “in the wild”- at a particular customer’s installation of our payroll system:
1. Jim Bob gets his check in June for $100. Everything’s going great and Jim Bob’s supervisor, Betty Sue, tells him he will get a raise to $125 in July.
2. Betty Sue forgets to update Jim Bob’s Employee object in the payroll system.
3. The system cuts a check to Jim Bob for $100 for July. Jim Bob complains to Betty Sue.
4. Betty Sue comes in on July 4th and updates Jim Bob’s salary to $125 for July. She also cuts a new check for $25 as a “correction” to the payroll.
Now, this is where it gets interesting. If we were to query the system and supply the effective date in June, we would see $100 for salary. A query for July would show $125. We would naturally assume that the check cut to Jim Bob in July was for $125, but we see the the transaction log that it was in fact not $125, but $100 on July 1st, and changed to $125 on July 4th along with the correction.
Whew. Ugly, nasty business, payroll systems are. Imagine systems (not payroll) where the above situation is the norm rather than the exception. The point I am driving at here is: what is the most natural, elegant, intuitive way to think about or model objects that have this sort of behavior “built-in”? Is there a clean approach, or is it just necessarily ugly? Managing temporal relationships has been a topic of heavy research in database systems for some time. But are there patterns that help us in the object world? And how do object-relational mappings work when temporal objects are persisted in relational databases? Inquiring minds want to know.
The Light Cone October 2, 2006
Posted by steve in Albert Einstein.1 comment so far
“Gather ’round, everyone”, said the tortoise to Achilles, who happened to be the only person present. “I’m going to talk about something very profound – something known as Einstein-Minkowski Spacetime. Draw nigh!”
“In this case, I offer to you this wonderful color illustration:
“I love ice cream” mumbled Achilles, as the Tortoise appeared not to hear and continued his pontification:
“This illustrates the principle of the light cone. Notice that there are in fact two cones, and the point where they touch is here and now. Since anything we do is ultimately slower than light, it makes sense that we ignore humans, gods and reptiles and simply talk about the past and future of light. The upper cone represents the possible paths of light from the here and now. Since time moves forward (in the positive Y axis [up]), and since light has a limit to how fast it can travel, it stands to reason that light cannot ‘move’ outside of the cones. It can travel to any point contained within the cone, but cannot (without breaking the fundamental theory that the speed of light is a constant) travel to points outside of the cone.”
Achilles began to glaze over and stare at clouds…
“The lower cone represents the past, so any light that arrives at the here and now had to come from within the lower cone (and not any point outside of it). The blue lines represent rays of light that come from the past, travel through the here and now and continue into the future.”
Achilles heaved a great sigh and said “Yes, but what is your point?”, clearly growing weary of the theoretical discussion. “Feh!” exclaimed the tortoise, “Pearls before swine!”, losing interest… “If you care at all about this, just read this article about it… But mark my words.. This subject will come up again!”
“The L Word” gets graphical October 1, 2006
Posted by thenakedsingularity in Graphviz.add a comment
No. Not like that.
One of my friends’ sister-in-law used to watch the ShowTime series “The L Word” religiously. For those of you like myself who don’t follow the show, it is about the lives and relationships of a group of twenty- to thirty- somethings who live in LA. There is a plethora of interesting and odd characters and their intertwined experiences make for good television.
One of the main characters, Alice, decided to map all the affairs around her to a whiteboard in her apartment. This map is refered to on the show as “The Chart.” As the series advances, the Chart becomes increasingly bigger and more complex, as you can imagine.
See the original chart here.
No different from the old six degree of separation social networking deal, but I still find it interesting.
Inspired by my friend’s posting on Graphviz, I thought, why not?
Five minutes later – that’s literally how long it took – I am adding names in the config file and Graphviz cranks out “The Chart” in a split second.
It’s fun!
Neat,eh? I like this better than the original one. But here is the question, does the picture tell you anything useful?
For example, why is Dana Fairbanks on the top of the Chart? Is she the center of that little clique? Does she have anything special that make it all tick? Is she all that?
//Sidenote: she is all that, but that’s a different story.
//Sidenote 2: Graphviz has different engines that construct the images differently. I am using “dot” here. “neato”, for example, does not output the hierarchy in the same way.
I thought it might have something to do with the sequence of the config file. So I stuck Dana at the very bottom this time, and guess what, the output is exactly the same.
Hmmm, Okay, let’s push the envelope a bit more.
What would happen, if…
She dies???
I am not being morbid, turns out in the last season finale, our beloved hero Dana, the top of the social pyramid, bit the big one.
What happens to the pyramid now?
Now it looks a bit awkward. Lara Perkins is not even a main character. We have Tonya and Melissa hanging out there all by themselves like some lost souls. The pyramid lost some of its symmetry.
Bring Dana back!
I am not sure if it means anything after using it for twenty minutes or so. It is a very easy tool to use and the images are interesting to look at. I need to look into how to tweak some options.
Can you see anything from the Chart? Where is that next link going to be? I can’t wait for the next season, I mean, hear from my friend’s sister-in-law.
Graphviz September 29, 2006
Posted by steve in Graphviz.1 comment so far
Have you ever had a problem that you felt you could solve if only you could get a sense of the ‘big picture’? Ever needed help visualizing some complex relationships? How about a simple, free, open-source graphing application that produces highly-customizable output? Well, you should give Graphviz a try.
Suppose you would like to visualize the following relationships:
X -> Y;
Y -> Z;
X -> Z;
( I know this is trivial, but use your imagination). The above is almost exactly the input to Graphviz. Simply wrap the above into a ‘digraph’ structure and save it in a text file:
digraph G {
x -> y;
y -> z;
x -> z;
}
Running Graphviz and choosing the ‘dot’ layout engine results in this:
Pretty cool, don’t you think? Graphviz was developed by AT&T Labs and has a wide variety of uses. If you just need a quick visualization, you can do something like I have shown above. But if you want to ‘tweak’ the output a little more (like adding boxes, grouping nodes, labeling edges, etc), Graphviz can accomodate you. Check out the Graphviz web site for examples of some of the more sophisticated graphs you can create. There is also a sub-project called “Grappa” that is a Java package for Graphviz. There are Windows, Linux, OS/X and other OS executables available, or you can build your own using the source.
Echo2, GWT, et al. September 29, 2006
Posted by steve in echo2.add a comment
I describe in the openarchitectureware post about how I generate code from a model. This process is better and more completely described in the OAW 4.1 EMF Tutorial. Onward to what I have generated:
As a reminder, I created a meta-model that represented a web-based user interface. The model is basically a set of containers:
Scenarios contain Pages. Pages contain Sections. Sections can contain other sections
or Widgets. Widgets can be output text, input fields, menus, calendars, links to other pages, etc.
So, my first workflow creates a Java Server Faces (JSF) application. The macros generate all JSP files and all pagecode Java files. The web.xml and faces-config.xml files are also generated, including the navigation rules between the pages.
My second workflow creates HTML documentation and a input file to graphviz (which is a great free tool from AT&T for quick-and-easy graphing and I highly recommend you play with it). <blogPost topic=”graphviz” todo=”true”/>
After much work on the JSF workflow (due to the requirement to produce a real working application), I have now moved on to an evaluation phase. I am looking at more Ajaxy/Web 2.0-type applications. (aknowledging that you can do Ajax with JSF).
My third workflow creates an Echo2 application. Echo2 is an excellent framework from NextApp. Tod Liebeck, the lead developer of Echo2, has an interesting article comparing GWT and Echo2 on theserverside.com. In order to generate the Echo2 code, I made the assumption that a “Page” model class mapped to a WindowPane in the Echo2 framework. The result is a MDI (multiple document interface) application, where there is a menu bar along the top of the page and the various ‘pages’ popup as movable/resizable windows. I am currently working on producing a single-document interface page that will give people something to compare with the MDI approach.
I think the MDI interface is somewhat dated looking, although many modern desktop applications work this way.
After I complete the SDI look, I will move to developing a GWT implementation workflow.
openarchitectureware September 29, 2006
Posted by steve in Eclipse, EMF, MDE, OAW.1 comment so far
I have been using openarchitectureware for several months now and I am becoming a convert to MDA/MDE and code generation. Here are the basic steps I have taken to create a user interface tool using Eclipse:
- Created an Ecore (EMF) model that represented the UI meta-model. This model includes classes like “webapp”, “page”, “field”, “checkbox”, etc.
- Generated an EMF “GenModel” from the ecore. This is an automated step.
- Generated Java classes and an Eclipse editor for the model. Again, a right-click and “generate all” – no extra effort.
- Installed the editor into Eclipse. This default editor lets you edit your domain-specific model in a tree-view / property sheet kind of editor that you frequently see in Eclipse.
- Created a domain-specific model (using cool new editor) to represent a sample application. Create some pages, insert some sections, fields, buttons, etc. (All these things are classes in the meta-model).
So far so good? Everything I have described to this point is basic Eclipse with EMF. Now enters openarchitecureware (OAW):
OAW introduces the concept of a “workflow”, which is an XML doc that describes the steps to be taken in the workflow. A basic workflow is:
- Parse the model XML using an OAW-supplied XmiReader.
- Run a Check that incorporates custom validation of the model.
- Run code generation using the OAW-supplied “Xpand2″ template language.
- Enjoy fruits of labor.
Before you can complete step 4, however, you must write the code generation macros in the Xpand2 language. Xpand2 is a very powerful template language that can produce pretty much any textual output (e.g. Java source code, XML, HTML, Javascript, etc., etc. ) Xpand2 supports polymorphism in that you may supply macros for a type and then overload the macro for subtypes. Quite powerful and very enjoyable to work with. OAW also supplies a language called Check that can be used for validation and Xtend that can be used to integrate with Java when you need custom logic that you cannot write in Xpand2.
As a further note, EMF is not the only form of meta-model that OAW can operate on- it also supports a Java Bean model, but I have only used EMF.
