Every time I try to get out, they pull me back in...
http://www.health.mil/mhscio/downloads/article150544-1.pdf
Saturday, September 05, 2009
Interesting iphone stuff
Got code? http://code.google.com/p/metasyntactic/wiki/NowPlaying
More yummies: http://github.com/jpick/twitterfon/tree/master
various libs - http://code.google.com/p/touchcode/w/list
Joe Hewitt's new lib for native iphone - http://groups.google.com/group/three20/
java to objective-c cross compiler - http://www.cokeandcode.com/aboidblog
Wordpress Plugin for StackOverflow look and feel?
I am thinking this might be a good start? I couldn't find anything like StackEngine for Wordpress or WPMU...
All the hacking I think it will take is to add a link to add to the number, a "vote", and then sort the comments (grouped by threads of course) by number. Add a dash of Ajax and it should be suitable. I'll try to post an example later if anyone's interested (and I actually get to it).
Reading List for This Week
http://java.ociweb.com/mark/clojure/article.html?
http://en.wikipedia.org/wiki/Fixed_point_combinator
http://alisothegeek.com/wordpress-plugins/simple-map/
- http://blog.mudy.info/2009/04/my-varnish-vcl-for-wordpress/
- http://www.technologydigest.us/blog/featured/wordpress_video_solution_framework.html
http://mitpress.mit.edu/sicp/full-text/book/ (ok, just for fun)
Friday, September 04, 2009
Interview Question For Clojure
Draw, label, and in other ways explain this in terms of Clojure:
"Clojure is based on the idea that immutability and functional
programming are more important contributors to program robustness
than is static typing." - Rich Hickey
Thursday, September 03, 2009
Seeking Clojure
This is just a post of some links and references I went through as I start looking at Clojure during the HackerDojo Clojure Meetup. Some of these were explicitly discussed, and some were just tangents sparked in my mind by the discussion.
Example toy program: n of k marbles problem, how many combinations?
NOTE: I think this was the problem under discussion...there was some ambiguity as to exactly what the problem was :) I thought this should be solved by the standard formula for the binomial coefficient, but maybe I misunderstood the problem?
Other links of interest to me relevant to Clojure (and more generally functional programming languages and parallel programming:
Example toy program: n of k marbles problem, how many combinations?
NOTE: I think this was the problem under discussion...there was some ambiguity as to exactly what the problem was :) I thought this should be solved by the standard formula for the binomial coefficient, but maybe I misunderstood the problem?
Other links of interest to me relevant to Clojure (and more generally functional programming languages and parallel programming:
- Definition of the problem (as I heard it): http://en.wikipedia.org/wiki/Combination
- Naieve C++ solution for comparison: http://www.brpreiss.com/books/opus4/programs/pgm14_13.cpp
- Discussion of recursion and dynamic programming: http://www.csc.liv.ac.uk/~ped/teachadmin/algor/dyprog.html
- This is just too funny, my favorite part being that there are 4 responses, with totally different approaches, and 3 different answers! http://javajeff.blogspot.com/2009/07/grails-springsource-and-clojure.html
- Discussed memoization for speed-up : http://en.wikipedia.org/wiki/Memoize
- Lots of confusion/discussion/attempts at clarification of atoms vs. agents vs. dosync vs. refs: http://clojure.org/refs, http://clojure.org/concurrent_programming, http://stackoverflow.com/questions/1028318/clojure-mutable-storage-types
- Discussions about TCO and trampolining: http://en.wikipedia.org/wiki/Tail_call, http://lambda-the-ultimate.org/node/3106
- One of the audience had some good fun with beer and Clojure: http://github.com/wrightmikea/wright-clojure-examples/tree/master
The above are not specific posts mentioned in the meetup...just my list of pertinent articles for your amusement and further reading.
Some toy problems to practice with:
- http://en.wikipedia.org/wiki/Selection_algorithm (toy problem)
- http://mark.reid.name/sap/online-learning-in-clojure.html (looking more real-world if you like learning algorithms, SVM, empirical risk minimization...who doesn't??)
- http://news.ycombinator.com/item?id=772808 and http://www.infoq.com/articles/flightcaster-clojure-rails - aaahhh, now this is more like the real world clojure I was looking for :) If you haven't guessed my interests yet, well...come back again some time for more clues. Also, as a student pilot, I'm wondering if I can apply their idea to calculating the probability that I will pass my FAA check ride before 2010 :)
Monday, May 25, 2009
Ruby and Python - Let the Market Decide
I was recently putting together a simple app that will fix a small problem. It will no doubt morph into a large app that someone will eventually try to make into a monster and (try to) solve everybody's problems. As such, I always take these as opportunities to revisit my selection of tools, and try to pick the one that not only does the job best, but also recognizes that other people, whom I have never met (and may never meet), will likely need to maintain this code.
As I have presented before at various times, I often use the job market to determine overall support and commercial interest in a language/tool. Take any of the popular job sites, I like Dice as it's really focused on contractors who don't have time for religion, and search for Ruby and the Python. (Just for kicks, search Java and .NET for a comparison.)
Python dwarfs Ruby by 2:1 in most cases. Further, I recognize more of the companies using Python, not that I would have recognized Google in 1998.
Perhaps the most emotional response I had was that many of the Ruby posts call for "stellar", "rock star" or other embellished qualifications. Python posts are typically "senior" or "experienced". Call me jaded, but I have worked with too many rock stars and frankly, they are more flash than work. Sure, we all enjoy the show, and they are brilliant performers, but give me a room full of hard working, senior engineers working as a team, over a gaggle of self-focused rock stars any day (end rant).
So, while I was actually HOPING to finally find a reason to build something again in Ruby, I actually chose Python. (Just for full disclosure, I have equal experience in both.)
Lambdas here I come...
As I have presented before at various times, I often use the job market to determine overall support and commercial interest in a language/tool. Take any of the popular job sites, I like Dice as it's really focused on contractors who don't have time for religion, and search for Ruby and the Python. (Just for kicks, search Java and .NET for a comparison.)
Python dwarfs Ruby by 2:1 in most cases. Further, I recognize more of the companies using Python, not that I would have recognized Google in 1998.
Perhaps the most emotional response I had was that many of the Ruby posts call for "stellar", "rock star" or other embellished qualifications. Python posts are typically "senior" or "experienced". Call me jaded, but I have worked with too many rock stars and frankly, they are more flash than work. Sure, we all enjoy the show, and they are brilliant performers, but give me a room full of hard working, senior engineers working as a team, over a gaggle of self-focused rock stars any day (end rant).
So, while I was actually HOPING to finally find a reason to build something again in Ruby, I actually chose Python. (Just for full disclosure, I have equal experience in both.)
Lambdas here I come...
Friday, April 18, 2008
GoGrid For Facebook Quick Start
For new Facebook developers, especially those who have never had the need to host their own server, getting started often represents an unwelcome learning curve. MotivePath and GoGrid have created a tool to assist in getting up and running quickly.
A Facebook application has essentially 3 ingredients:
When you create a GoGrid for Facebook server node, you must select a public IP.

Let's assume this is 208.113.123.123. Once the server is started, in a browser visit:

Now, to link the Facebook site to your new content, create a Facebook Developer account, set the Callback URL in the Facebook Developer application settings to the full URL to your new GoGrid server's default Facebook application:
That's it! To create additional application content, you can then edit the files in the /mynewapp/ folder. For example:
A Facebook application has essentially 3 ingredients:
- The configuration Facebook needs to link their site to your application content
- The application content itself, including the Facebook API
- Somewhere to host the content
When you create a GoGrid for Facebook server node, you must select a public IP.
Let's assume this is 208.113.123.123. Once the server is started, in a browser visit:
- http://208.113.123.123:8080/ (note port 8080 for the configuration portal)
Now, to link the Facebook site to your new content, create a Facebook Developer account, set the Callback URL in the Facebook Developer application settings to the full URL to your new GoGrid server's default Facebook application:
That's it! To create additional application content, you can then edit the files in the /mynewapp/ folder. For example:
- C:\inetpub\mynewapp\ (for Windows)
- /usr/local/httpd/htdocs/mynewapp (for Linux)
- http://208.113.123.123/mynewapp/coolNewApptorial.php
Sunday, April 13, 2008
Shameless Plug
We can show you how to use interactive video to enhance your campaign.
The main features to notice:
Next demo, we'll hook this into an interactive mobile campaign where users can get the videos mobile by scanning something in print, or on a billboard, or even on a PC (e.g. at a co-worker's desk).
Finally this could be an interactive kiosk and/or large screen at a venue. Imagine users voting on the action in real-time via SMS or by IVR/DTMF.
The main features to notice:
- The watermark overlay of the advertiser, in this case GreatOutdoors.com
- Highlights on either the action or the products
- links on location to Google Maps custom POIs that show location info (and link back). NOTE: I have no idea if this is Mt. Bachelor or not :)
Next demo, we'll hook this into an interactive mobile campaign where users can get the videos mobile by scanning something in print, or on a billboard, or even on a PC (e.g. at a co-worker's desk).
Finally this could be an interactive kiosk and/or large screen at a venue. Imagine users voting on the action in real-time via SMS or by IVR/DTMF.
Friday, February 08, 2008
Yet Another Razoo for an XPrize
I rarely go to web sites, especially Web 2.0 glossy sites ;) and sign up and immediately start using it. But then there's a site like www.razoo.com which adds value to the human condition. Love it!
The challenge is to define XPrize ideas. See my previous post in October 2006. Here's another:
(see http://beta.razoo.com/acts/YourXPRIZE )
Another XPrize should go to the organization that "open sources" medicine to solve the problems of healthcare (at least in the US.) By creating an economy based on merit and quality, through free education based on ability, support through nurturing, sensible work practices, compensation based on a truly open marketplace where an open source solution actually competes without unfair advantage against the traditional system.
It all starts with the physicians -- if physicians are given an education without creating an insurmountable mountain of debt, they might be more empowered to make changes.
If pharma were open sourced, imagine the impact.
But it must work within the reality of a free market and where "greed is good". It has to be better, so it actually wins on merit, leaving the commercial options to survive in what niche they will.
Kudos to Joe Solomon for finding Razoo!
See Joe at: http://www.netsquared.org/blog/joesolomon/part-1-how-find-volunteer-web-developer
The challenge is to define XPrize ideas. See my previous post in October 2006. Here's another:
(see http://beta.razoo.com/acts/YourXPRIZE )
Another XPrize should go to the organization that "open sources" medicine to solve the problems of healthcare (at least in the US.) By creating an economy based on merit and quality, through free education based on ability, support through nurturing, sensible work practices, compensation based on a truly open marketplace where an open source solution actually competes without unfair advantage against the traditional system.
It all starts with the physicians -- if physicians are given an education without creating an insurmountable mountain of debt, they might be more empowered to make changes.
If pharma were open sourced, imagine the impact.
But it must work within the reality of a free market and where "greed is good". It has to be better, so it actually wins on merit, leaving the commercial options to survive in what niche they will.
Kudos to Joe Solomon for finding Razoo!
See Joe at: http://www.netsquared.org/blog
Saturday, August 18, 2007
PHP vs. RoR or Python
First: size matters.
As I understand it, and correct me if I am wrong, PHP was designed for relatively small, simple web applications and as such is reflected in its small, simple core.
Ruby, and RoR, as well as Python are true 3GL languages with applications across web and non-web domains.
Then there are frameworks, but that is another post.
Second: productivity
Related to size, how fast do you want something functional? Sure, as fast as possible, but at what cost and risk level? You can have your cake, but it's awfully darn expensive cake!
Third: runtime performance and scalability
I link these two, though you can have a fast application that doesn't scale and a slow application that scales huge. Both might be useful for some niche purposes, but for my world, most applications fall between the 2.
Feel free to chime in...my gut feel is that PHP suffices for projects that are 1) rather small, where small let's assume is less than 500 FPs, 2) rather static, where static doesn't mean like static HTML, but rather, a single purpose app that will undergo changes, but not be more than 1 or 2 things.... I DO expect lots of small tweaks, and in fact, that's why I'd pick PHP over Java since it's light and simple to change/hack 3) mostly UI, not much back end analytics or algorithmic code, and 4) interconnected to other web services and sites.
Oh sure, Java folks will beat me up, but I've earned my rank in Java and seen what it is good for and not, and still use it today. So let's not go there.
Your comments, data, facts, figures, observations are most welcome.
As I understand it, and correct me if I am wrong, PHP was designed for relatively small, simple web applications and as such is reflected in its small, simple core.
Ruby, and RoR, as well as Python are true 3GL languages with applications across web and non-web domains.
Then there are frameworks, but that is another post.
Second: productivity
Related to size, how fast do you want something functional? Sure, as fast as possible, but at what cost and risk level? You can have your cake, but it's awfully darn expensive cake!
Third: runtime performance and scalability
I link these two, though you can have a fast application that doesn't scale and a slow application that scales huge. Both might be useful for some niche purposes, but for my world, most applications fall between the 2.
Feel free to chime in...my gut feel is that PHP suffices for projects that are 1) rather small, where small let's assume is less than 500 FPs, 2) rather static, where static doesn't mean like static HTML, but rather, a single purpose app that will undergo changes, but not be more than 1 or 2 things.... I DO expect lots of small tweaks, and in fact, that's why I'd pick PHP over Java since it's light and simple to change/hack 3) mostly UI, not much back end analytics or algorithmic code, and 4) interconnected to other web services and sites.
Oh sure, Java folks will beat me up, but I've earned my rank in Java and seen what it is good for and not, and still use it today. So let's not go there.
Your comments, data, facts, figures, observations are most welcome.
Thursday, July 05, 2007
Facebook App In Progress
Looking over the open source F8 app by NewsCloud. I may post a UML diagram if I have some time to kill, but essentially it breaks into these parts:
Item 2 is stock F8 code, with some commercial-grade checking and error handling.
Item 3 is a big switch statement, keyed on the HTTP request input. The main cases correspond to pages: home, search, news, video, etc. Why they chose this over a true MVC framework is probably to simplify their life, since this is a relatively small app. Something like Cake or Symfony I am guessing would have been overkill. I like it; it's simple and clear and easy to understand, even if a bit hardcoded. Sometimes hardcoded is good. That's what they don't teach everyone ;)
What I really wanted to see was the fbml tags they were using, and how, and how they were formatting stuff. The tags they use are:
In addition the the F8 logic, some controller code is required. NewsCloud puts this into a process.php file.
Now, to understand more about how to MARKET a F8 app once you've created it....that's for next time!
- init tasks
- Facebook input processing
- Response processing
Item 2 is stock F8 code, with some commercial-grade checking and error handling.
Item 3 is a big switch statement, keyed on the HTTP request input. The main cases correspond to pages: home, search, news, video, etc. Why they chose this over a true MVC framework is probably to simplify their life, since this is a relatively small app. Something like Cake or Symfony I am guessing would have been overkill. I like it; it's simple and clear and easy to understand, even if a bit hardcoded. Sometimes hardcoded is good. That's what they don't teach everyone ;)
What I really wanted to see was the fbml tags they were using, and how, and how they were formatting stuff. The tags they use are:
- tabs
- tab-item
- message
- notif-subject
- iframe
- req-choice
- swf
- friend-selector
- share-button
- userlink
- wide
- if-can-see
- profile-pic
- name
- header
- buildNav - navigation dashboard div
- buildStyles - adding CSS defs
- buildSWF - for their video feeds
- getNews/buildStoryLink - uses their templater class to build out the data from the DB...essentially this would be the heart of your service...getFoo()
- getYourFriends - Got Viral? This is where you win big on the community angle - see what my friends are doing with this app
- buildStory - Viral++ a bit of a misnomer, this builds the sharing link for the content...a must have for social capitalists
- buildCommentThread - let yoru voice be heard, and those of others
- getCloudList/fetchCloudStories - their concept of categories/groups
- getClips/fetchClips/buildVideoLink - video clips
- recordAction - keep a record of what the user is doing, a F8-ish concept as well as useful for mining
- updateProfileBox/buildProfileBox/buildActionList/listActions - builds the fbml for the F8 profile widget; I would assume a necessary F8 component
- getFriendsNews - related to the profile list, virulent strain
- fetchSearchResults - search box
- getWhatsHot - or not
- friendsUsingApp/friendsNotUsingApp (and getInviteList/addToInviteList/updateLastInvite) - a.k.a. VP-Marketing-killer...why hire an MBA when the user can market your wares for you?
- lookupFacebookUser - for invites
- setInstalled/isAppInstalled - fql to see if we are installed
- mapUser - they tie their users to F8 users; hmm OpenID anyone??
- fetchAd - Aaah, need to pay the bills, eh?
- buildGettingStarted/buildLeftIntro - the F8 add app call to action
- setupTemplates - calls into the NC library of goodies and uses DB+minimal templates
- Parse out the info sent back by Facebook
- template the responses
- separate logic from presentation code (MVC)
- follow key Facebook styles and concepts - dashboard, profile, friend list, etc.
In addition the the F8 logic, some controller code is required. NewsCloud puts this into a process.php file.
Now, to understand more about how to MARKET a F8 app once you've created it....that's for next time!
Wednesday, July 04, 2007
OnMyList List
Check it out:
OnMYList - My Save the Planet list
Congrats to Noah and the team for a decent UI and an addictive idea.
OnMYList - My Save the Planet list
Congrats to Noah and the team for a decent UI and an addictive idea.
Thursday, June 21, 2007
PHP SYMFONY (a.k.a. Have you seen my CRUD?)
OK, so I looked at RoR and had some fun; now a headlong excursion into the YAML-y goodness of PHP Symfony. http://www.symfony-project.com
10:08 PM
Forgive me if I seem short tempered...I hurt my back this week, and it is excruciating. So I will tolerate very little from the gods of software in terms of framework lunacy. Either it works or it doesn't!
10:09 PM
Downloaded Symfony already ( http://www.symfony-project.com/get/symfony-stable.tgz ).
Then went to the My First App. RTFM? Ha!
10:10 PM
http://www.symfony-project.com/tutorial/my_first_project.html
OK, so I tried downloading the tgz. Uh, seems broken, guys. OK, well I'm sure my web sites have broken links. Fair enough.
10:11 PM
Found the sandbox on the download page. http://www.symfony-project.com/get/sf_sandbox.tgz
Unpacking....done. Gee, I hope it doesn't care that my Apache2 is in Program Files....spaces seem to stymie the open source folks. I guess that is for commercial apps only.
10:14 PM
http://localhost/sf_sandbox/web/index.php/
Great. Ugly URL, I guess they don't expect to use it for anything consumer oriented. OK, I won't rant on this again. Now what...reate a schema.yml file in sf_sandbox/config/ oh, YAML-icious!! Just what I need....ANOTHER way to screw up my app with an extra whitespace. Hooray! Thanks! Did I mention before that I was pre-Med in college? What was I thinking getting into software....
Anyhow...
10:17 PM
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>C:\php\p
hp.exe symfony propel-build-model
PHP Warning: PHP Startup: Unable to load dynamic library './php_pdo.dll' - The
specified module could not be found.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './php_pdo_sqlite.dll'
- The specified module could not be found.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './php_sqlite.dll' - T
he specified module could not be found.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './php_xsl.dll' - The
specified module could not be found.
in Unknown on line 0
Yeah, I could have predicted that. OK, so maybe my PATH variable isn't set with c:\php correctly. fine fine fine!
10:25 PM
OK, well PHP's install set the wrong ext dir for Win32 (I know, I know....USE UNIX). OK, tangent here: I TRIED using SuSe Linux first! Apache wouldn't install! Ha! So, as much as I love *Nix and BSDs, sadly, if everything looks like a nail...
10:32 PM
Well, these Base* classes seem interesting. Guess it's time to look at exactly what propel is (I remember it when I looked at ORM for PHP awhile back, but for some reason long forgotten I opted for something else.)
http://propel.phpdb.org/trac/
All sounds good. One thing I always look at is the support mail lists. Hmmmm...all told, 5090 posts for Propel. Looking at Hibernate, just for fun, 132K! (And that's ignoring the German and Chinese user forums!) So, either Hibernate really sucks, and Propel is flawless...OR....well, if you want a job as a programmer, DON'T be a PHP (or Ruby or Python) developer. Java just has more jobs. (See related post on Java job counts.) And for those of you who, like me, use offshore engineers...don't even bother with PHP, Ruby, Python. Java may have its limitations, but 1B Chinese and Indian engineers can be a powerful reason to stay!
Of course, if reading my blog doesn't convince you that software engineering is a dead-end job, then I don't know how to help you. I guarantee, if I catch my daughtr within 30 feet of gcc, I'm taking away her stock options...and her pony!
10:43 PM
Back to Symfony.
propel-create-sql --- great. worked like a charm
propel-insert-sql next...
propel > insert-sql:
[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql
[propel-sql-exec] Our new url -> sqlite://./../../../../data/sandbox.db
[propel-sql-exec] Executing file: C:\Program Files\Apache Software Foundation\Ap
ache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql
[propel-sql-exec] Failed to execute:
DROP TABLE [weblog_post]
[propel-sql-exec] Could not execute update [User Info:
DROP TABLE [weblog_post]]
[propel-sql-exec] Failed to execute:
DROP TABLE [weblog_comment]
[propel-sql-exec] Could not execute update [User Info:
DROP TABLE [weblog_comment]]
[propel-sql-exec] 2 of 4 SQL statements executed successfully
BUILD FINISHED
Total time: 1.0381 second
>> file- C:\Program Files\Apache Softwar...box\config\generated-schema.xml
HAHAHAAH. I guess I should have expected that! Well, my back is killing me so I don't have much patience for this now. I will pick this up in the AM when the Advil has done its job. For now, I leave you all with this thought: your finances are in the hands of software 'engineers' who aren't licensed or required to pass any competency review of any kind....good stuff, huh? Well, on that note, I shall ice may spine and drown my sorrows in Isle of Jura. Oh I highly recommend it! TTFN!
NEXT DAY:
1:21 PM
After a fun morning of business, it's time to get down to this PHP business.
Rather than focusing on getting sqllite working, since I am actually interested in prototyping something real, I will try switching to MySQL which is what I will use for my real application, at least as a prototype. This is the last chance, Symfony, else I switch back to Ruby on Rails.
1:23 PM
http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layer#Database%20Connections
1:40
Getting an error on MySQL:
propel > insert-sql:
[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql
[propel-sql-exec] Our new url -> mysql://foo:bar@localhost/sandbox
Execution of target "insert-sql" failed for the following reason: C:\Program Fil
es\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\lib\symfony\vendor\pro
pel-generator\build-propel.xml:296:1: [wrapped: connect failed [Native Error: C
an\'t connect to MySQL server on \'localhost\' (10061)] [User Info: Array]]
[phing] C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sand
box\lib\symfony\vendor\propel-generator\build-propel.xml:296:1: [wrapped: conne
ct failed [Native Error: Can\'t connect to MySQL server on \'localhost\' (10061)
] [User Info: Array]]
BUILD FINISHED
Let me try a simple PHP->MySql on this box, since I haven't done so before (clean install).
.........................................................................
.........................................................................
LATER THAT DAY.......................................
Well, after considerable debugging, including attaching VS to the apache httpd process just to make sure all the right DLLs were getting loaded (no ldd or truss on Win32, although Depends.exe comes in handy in such cases)....I was able to deduce (OK, actualy powers of deduction would have landed me here 4 hours ago...) that my MySQL was running on a non-standard port 3333 for some inane reason. After reading all the posts, and trying untold different experiments, I was able to connect. The trigger? I used a different client tool, Heidi SQL, which failed to connect!! So the cmd line mysql has cached the port. Once Heidi failed, I netstat'd and lo and behold, the solution. Although even after that, I almost shot myself in the foot, cause I was using some bad mysql syntax...unfortunately, PHP didn't give me helpful error messages, so I almost concluded that the port was not the issue, or at least not the only issue. But in the end, I won (if you can call wasting the better part of a beautiful day banging your head against Google "winning"). Med school is looking pretty fun right now...even proctology!
Just FYI - here's my PHP hellow world code that I used to verify basics:
mysqli_close();
?>
But I digress...onwards and upwards!
10:47 PM (yep, really...ok I had breaks for dinner and story time for the daughter)
Now I can at least, readlly get back to where we were just about 24 hours ago.
propel > insert-sql:[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql[propel-sql-exec] Our new url -> mysql://xxxx:yyyyyy@localhost/sandboxExecution of target "insert-sql" failed for the following reason: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\lib\symfony\vendor\propel-generator\build-propel.xml:296:1: [wrapped: mysql extension not loaded [User Info: Array]] [phing] C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\lib\symfony\vendor\propel-generator\build-propel.xml:296:1: [wrapped: mysql extension not loaded [User Info: Array]]
OK, well this is true, I enabled mysqli, cause that's what the manual said to!! So, I can enable both (I hope)...
10:52 PM
propel > insert-sql:[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql[propel-sql-exec] Our new url -> mysql://xxxxx:yyyyy@localhost/sandbox[propel-sql-exec] Executing file: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql[propel-sql-exec] 6 of 6 SQL statements executed successfully
HOLY GUACAMOLE! And even my hello world (changed the $database="sandbox"):
sandbox
weblog_comment
weblog_post
well. About time!
10:55PM
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>php symfony propel-generate-crud frontend post Post>> dir+ C:\Program Files\Apache Softwar...s/frontend/modules/post\actions>> file+ C:\Program Files\Apache Softwar.../post\actions\actions.class.php>> dir+ C:\Program Files\Apache Softwar...frontend/modules/post\templates>> file+ C:\Program Files\Apache Softwar.../post\templates\editSuccess.php>> file+ C:\Program Files\Apache Softwar.../post\templates\listSuccess.php>> file+ C:\Program Files\Apache Softwar.../post\templates\showSuccess.php>> tokens C:\Program Files\Apache Softwar.../post/actions/actions.class.php>> tokens C:\Program Files\Apache Softwar.../post\actions\actions.class.php>> tokens C:\Program Files\Apache Softwar.../post\templates\editSuccess.php>> tokens C:\Program Files\Apache Softwar.../post\templates\listSuccess.php>> tokens C:\Program Files\Apache Softwar.../post\templates\showSuccess.php>> file+ C:\Program Files\Apache Softwar...al/frontend/postActionsTest.php>> tokens C:\Program Files\Apache Softwar...al/frontend\postActionsTest.php>> file- C:\Program Files\Apache Softwar...oPost\templates\showSuccess.php>> file- C:\Program Files\Apache Softwar...oPost\templates\listSuccess.php>> file- C:\Program Files\Apache Softwar...oPost\templates\editSuccess.php>> dir- C:\Program Files\Apache Softwar...293669c9388e\autoPost\templates>> file- C:\Program Files\Apache Softwar...oPost\actions\actions.class.php>> dir- C:\Program Files\Apache Softwar...68293669c9388e\autoPost\actions>> dir- C:\Program Files\Apache Softwar...73dc2a7d68293669c9388e\autoPost
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>php symfony propel-generate-crud frontend comment Comment>> dir+ C:\Program Files\Apache Softwar...rontend/modules/comment\actions>> file+ C:\Program Files\Apache Softwar...mment\actions\actions.class.php>> dir+ C:\Program Files\Apache Softwar...ntend/modules/comment\templates>> file+ C:\Program Files\Apache Softwar...mment\templates\editSuccess.php>> file+ C:\Program Files\Apache Softwar...mment\templates\listSuccess.php>> file+ C:\Program Files\Apache Softwar...mment\templates\showSuccess.php>> tokens C:\Program Files\Apache Softwar...mment/actions/actions.class.php>> tokens C:\Program Files\Apache Softwar...mment\actions\actions.class.php>> tokens C:\Program Files\Apache Softwar...mment\templates\editSuccess.php>> tokens C:\Program Files\Apache Softwar...mment\templates\listSuccess.php>> tokens C:\Program Files\Apache Softwar...mment\templates\showSuccess.php>> file+ C:\Program Files\Apache Softwar...frontend/commentActionsTest.php>> tokens C:\Program Files\Apache Softwar...frontend\commentActionsTest.php>> file- C:\Program Files\Apache Softwar...mment\templates\showSuccess.php>> file- C:\Program Files\Apache Softwar...mment\templates\listSuccess.php>> file- C:\Program Files\Apache Softwar...mment\templates\editSuccess.php>> dir- C:\Program Files\Apache Softwar...5913509f4\autoComment\templates>> file- C:\Program Files\Apache Softwar...mment\actions\actions.class.php>> dir- C:\Program Files\Apache Softwar...4a5913509f4\autoComment\actions>> dir- C:\Program Files\Apache Softwar...2bad135b4a5913509f4\autoComment
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>php symfony clear-cache>> file+ C:\Program Files\Apache Softwar...cs\sf_sandbox/frontend_prod.lck>> chmod 777 C:\Program Files\Apache Softwar...cs\sf_sandbox\frontend_prod.lck>> file- C:\Program Files\Apache Softwar...he\frontend\prod\config\VERSION>> file- C:\Program Files\Apache Softwar...les_default_config_view.yml.php>> file- C:\Program Files\Apache Softwar...default_config_security.yml.php>> file- C:\Program Files\Apache Softwar...s_default_config_module.yml.php>> file- C:\Program Files\Apache Softwar...efault_config_generator.yml.php>> file- C:\Program Files\Apache Softwar..._default_config_filters.yml.php>> file- C:\Program Files\Apache Softwar...\config\config_settings.yml.php>> file- C:\Program Files\Apache Softwar...d\config\config_routing.yml.php>> file- C:\Program Files\Apache Softwar...\prod\config\config_php.yml.php>> file- C:\Program Files\Apache Softwar...d\config\config_logging.yml.php>> file- C:\Program Files\Apache Softwar...prod\config\config_i18n.yml.php>> file- C:\Program Files\Apache Softwar...config\config_factories.yml.php>> file- C:\Program Files\Apache Softwar...config\config_databases.yml.php>> file- C:\Program Files\Apache Softwar...fig\config_core_compile.yml.php>> file- C:\Program Files\Apache Softwar...\config_config_handlers.yml.php>> file- C:\Program Files\Apache Softwar...onfig_bootstrap_compile.yml.php>> file- C:\Program Files\Apache Softwar...\config\config_autoload.yml.php>> file- C:\Program Files\Apache Softwar...\prod\config\config_app.yml.php>> file- C:\Program Files\Apache Softwar...cs\sf_sandbox/frontend_prod.lck
Seems OK....I guess. Would be nice to know what all that is doing, so I'll want to take a deeper look (after med school). OK, well, of couse something will break and I'll have to look at it sooner than that.
10:58PM
Well, just about 24 hours later, and much scotch, and a bad back to boot...we finally have our CRUD. I am definitely changing careers. This is lunacy. Well, I'm off to make some tea and refresh myself on Organic Chemistry...SN2 baby! It's all about SN2!
Ciao! Zai Jian!
10:08 PM
Forgive me if I seem short tempered...I hurt my back this week, and it is excruciating. So I will tolerate very little from the gods of software in terms of framework lunacy. Either it works or it doesn't!
10:09 PM
Downloaded Symfony already ( http://www.symfony-project.com/get/symfony-stable.tgz ).
Then went to the My First App. RTFM? Ha!
10:10 PM
http://www.symfony-project.com/tutorial/my_first_project.html
OK, so I tried downloading the tgz. Uh, seems broken, guys. OK, well I'm sure my web sites have broken links. Fair enough.
10:11 PM
Found the sandbox on the download page. http://www.symfony-project.com/get/sf_sandbox.tgz
Unpacking....done. Gee, I hope it doesn't care that my Apache2 is in Program Files....spaces seem to stymie the open source folks. I guess that is for commercial apps only.
10:14 PM
http://localhost/sf_sandbox/web/index.php/
Great. Ugly URL, I guess they don't expect to use it for anything consumer oriented. OK, I won't rant on this again. Now what...reate a schema.yml file in sf_sandbox/config/ oh, YAML-icious!! Just what I need....ANOTHER way to screw up my app with an extra whitespace. Hooray! Thanks! Did I mention before that I was pre-Med in college? What was I thinking getting into software....
Anyhow...
10:17 PM
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>C:\php\p
hp.exe symfony propel-build-model
PHP Warning: PHP Startup: Unable to load dynamic library './php_pdo.dll' - The
specified module could not be found.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './php_pdo_sqlite.dll'
- The specified module could not be found.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './php_sqlite.dll' - T
he specified module could not be found.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './php_xsl.dll' - The
specified module could not be found.
in Unknown on line 0
Yeah, I could have predicted that. OK, so maybe my PATH variable isn't set with c:\php correctly. fine fine fine!
10:25 PM
OK, well PHP's install set the wrong ext dir for Win32 (I know, I know....USE UNIX). OK, tangent here: I TRIED using SuSe Linux first! Apache wouldn't install! Ha! So, as much as I love *Nix and BSDs, sadly, if everything looks like a nail...
10:32 PM
Well, these Base* classes seem interesting. Guess it's time to look at exactly what propel is (I remember it when I looked at ORM for PHP awhile back, but for some reason long forgotten I opted for something else.)
http://propel.phpdb.org/trac/
All sounds good. One thing I always look at is the support mail lists. Hmmmm...all told, 5090 posts for Propel. Looking at Hibernate, just for fun, 132K! (And that's ignoring the German and Chinese user forums!) So, either Hibernate really sucks, and Propel is flawless...OR....well, if you want a job as a programmer, DON'T be a PHP (or Ruby or Python) developer. Java just has more jobs. (See related post on Java job counts.) And for those of you who, like me, use offshore engineers...don't even bother with PHP, Ruby, Python. Java may have its limitations, but 1B Chinese and Indian engineers can be a powerful reason to stay!
Of course, if reading my blog doesn't convince you that software engineering is a dead-end job, then I don't know how to help you. I guarantee, if I catch my daughtr within 30 feet of gcc, I'm taking away her stock options...and her pony!
10:43 PM
Back to Symfony.
propel-create-sql --- great. worked like a charm
propel-insert-sql next...
propel > insert-sql:
[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql
[propel-sql-exec] Our new url -> sqlite://./../../../../data/sandbox.db
[propel-sql-exec] Executing file: C:\Program Files\Apache Software Foundation\Ap
ache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql
[propel-sql-exec] Failed to execute:
DROP TABLE [weblog_post]
[propel-sql-exec] Could not execute update [User Info:
DROP TABLE [weblog_post]]
[propel-sql-exec] Failed to execute:
DROP TABLE [weblog_comment]
[propel-sql-exec] Could not execute update [User Info:
DROP TABLE [weblog_comment]]
[propel-sql-exec] 2 of 4 SQL statements executed successfully
BUILD FINISHED
Total time: 1.0381 second
>> file- C:\Program Files\Apache Softwar...box\config\generated-schema.xml
HAHAHAAH. I guess I should have expected that! Well, my back is killing me so I don't have much patience for this now. I will pick this up in the AM when the Advil has done its job. For now, I leave you all with this thought: your finances are in the hands of software 'engineers' who aren't licensed or required to pass any competency review of any kind....good stuff, huh? Well, on that note, I shall ice may spine and drown my sorrows in Isle of Jura. Oh I highly recommend it! TTFN!
NEXT DAY:
1:21 PM
After a fun morning of business, it's time to get down to this PHP business.
Rather than focusing on getting sqllite working, since I am actually interested in prototyping something real, I will try switching to MySQL which is what I will use for my real application, at least as a prototype. This is the last chance, Symfony, else I switch back to Ruby on Rails.
1:23 PM
http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layer#Database%20Connections
1:40
Getting an error on MySQL:
propel > insert-sql:
[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software
Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql
[propel-sql-exec] Our new url -> mysql://foo:bar@localhost/sandbox
Execution of target "insert-sql" failed for the following reason: C:\Program Fil
es\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\lib\symfony\vendor\pro
pel-generator\build-propel.xml:296:1: [wrapped: connect failed [Native Error: C
an\'t connect to MySQL server on \'localhost\' (10061)] [User Info: Array]]
[phing] C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sand
box\lib\symfony\vendor\propel-generator\build-propel.xml:296:1: [wrapped: conne
ct failed [Native Error: Can\'t connect to MySQL server on \'localhost\' (10061)
] [User Info: Array]]
BUILD FINISHED
Let me try a simple PHP->MySql on this box, since I haven't done so before (clean install).
.........................................................................
.........................................................................
LATER THAT DAY.......................................
Well, after considerable debugging, including attaching VS to the apache httpd process just to make sure all the right DLLs were getting loaded (no ldd or truss on Win32, although Depends.exe comes in handy in such cases)....I was able to deduce (OK, actualy powers of deduction would have landed me here 4 hours ago...) that my MySQL was running on a non-standard port 3333 for some inane reason. After reading all the posts, and trying untold different experiments, I was able to connect. The trigger? I used a different client tool, Heidi SQL, which failed to connect!! So the cmd line mysql has cached the port. Once Heidi failed, I netstat'd and lo and behold, the solution. Although even after that, I almost shot myself in the foot, cause I was using some bad mysql syntax...unfortunately, PHP didn't give me helpful error messages, so I almost concluded that the port was not the issue, or at least not the only issue. But in the end, I won (if you can call wasting the better part of a beautiful day banging your head against Google "winning"). Med school is looking pretty fun right now...even proctology!
Just FYI - here's my PHP hellow world code that I used to verify basics:
";
// Show all information, defaults to INFO_ALL
phpinfo();
$database = "mysql";
$link = mysqli_connect("localhost", "xxxxx", "yyyyyyy", $database, 3333);
/* check connection */
if (!$link) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
echo "
- ";
- ".$database;
// for each database, get table list and print
$query2 = "SHOW TABLES FROM ".$database;
$result2 = mysqli_query($link, $query2) or die ("Error in query: $query2. ".mysqli_error());
echo "- ";
- ".$row2[0];
}
echo "
while ($row2 = mysqli_fetch_array($result2)) {
echo "
echo " - ".$row2[0];
echo "
mysqli_close();
?>
But I digress...onwards and upwards!
10:47 PM (yep, really...ok I had breaks for dinner and story time for the daughter)
Now I can at least, readlly get back to where we were just about 24 hours ago.
propel > insert-sql:[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql[propel-sql-exec] Our new url -> mysql://xxxx:yyyyyy@localhost/sandboxExecution of target "insert-sql" failed for the following reason: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\lib\symfony\vendor\propel-generator\build-propel.xml:296:1: [wrapped: mysql extension not loaded [User Info: Array]] [phing] C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\lib\symfony\vendor\propel-generator\build-propel.xml:296:1: [wrapped: mysql extension not loaded [User Info: Array]]
OK, well this is true, I enabled mysqli, cause that's what the manual said to!! So, I can enable both (I hope)...
10:52 PM
propel > insert-sql:[propel-sql-exec] Executing statements in file: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql[propel-sql-exec] Our new url -> mysql://xxxxx:yyyyy@localhost/sandbox[propel-sql-exec] Executing file: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox\data\sql\lib.model.schema.sql[propel-sql-exec] 6 of 6 SQL statements executed successfully
HOLY GUACAMOLE! And even my hello world (changed the $database="sandbox"):
sandbox
weblog_comment
weblog_post
well. About time!
10:55PM
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>php symfony propel-generate-crud frontend post Post>> dir+ C:\Program Files\Apache Softwar...s/frontend/modules/post\actions>> file+ C:\Program Files\Apache Softwar.../post\actions\actions.class.php>> dir+ C:\Program Files\Apache Softwar...frontend/modules/post\templates>> file+ C:\Program Files\Apache Softwar.../post\templates\editSuccess.php>> file+ C:\Program Files\Apache Softwar.../post\templates\listSuccess.php>> file+ C:\Program Files\Apache Softwar.../post\templates\showSuccess.php>> tokens C:\Program Files\Apache Softwar.../post/actions/actions.class.php>> tokens C:\Program Files\Apache Softwar.../post\actions\actions.class.php>> tokens C:\Program Files\Apache Softwar.../post\templates\editSuccess.php>> tokens C:\Program Files\Apache Softwar.../post\templates\listSuccess.php>> tokens C:\Program Files\Apache Softwar.../post\templates\showSuccess.php>> file+ C:\Program Files\Apache Softwar...al/frontend/postActionsTest.php>> tokens C:\Program Files\Apache Softwar...al/frontend\postActionsTest.php>> file- C:\Program Files\Apache Softwar...oPost\templates\showSuccess.php>> file- C:\Program Files\Apache Softwar...oPost\templates\listSuccess.php>> file- C:\Program Files\Apache Softwar...oPost\templates\editSuccess.php>> dir- C:\Program Files\Apache Softwar...293669c9388e\autoPost\templates>> file- C:\Program Files\Apache Softwar...oPost\actions\actions.class.php>> dir- C:\Program Files\Apache Softwar...68293669c9388e\autoPost\actions>> dir- C:\Program Files\Apache Softwar...73dc2a7d68293669c9388e\autoPost
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>php symfony propel-generate-crud frontend comment Comment>> dir+ C:\Program Files\Apache Softwar...rontend/modules/comment\actions>> file+ C:\Program Files\Apache Softwar...mment\actions\actions.class.php>> dir+ C:\Program Files\Apache Softwar...ntend/modules/comment\templates>> file+ C:\Program Files\Apache Softwar...mment\templates\editSuccess.php>> file+ C:\Program Files\Apache Softwar...mment\templates\listSuccess.php>> file+ C:\Program Files\Apache Softwar...mment\templates\showSuccess.php>> tokens C:\Program Files\Apache Softwar...mment/actions/actions.class.php>> tokens C:\Program Files\Apache Softwar...mment\actions\actions.class.php>> tokens C:\Program Files\Apache Softwar...mment\templates\editSuccess.php>> tokens C:\Program Files\Apache Softwar...mment\templates\listSuccess.php>> tokens C:\Program Files\Apache Softwar...mment\templates\showSuccess.php>> file+ C:\Program Files\Apache Softwar...frontend/commentActionsTest.php>> tokens C:\Program Files\Apache Softwar...frontend\commentActionsTest.php>> file- C:\Program Files\Apache Softwar...mment\templates\showSuccess.php>> file- C:\Program Files\Apache Softwar...mment\templates\listSuccess.php>> file- C:\Program Files\Apache Softwar...mment\templates\editSuccess.php>> dir- C:\Program Files\Apache Softwar...5913509f4\autoComment\templates>> file- C:\Program Files\Apache Softwar...mment\actions\actions.class.php>> dir- C:\Program Files\Apache Softwar...4a5913509f4\autoComment\actions>> dir- C:\Program Files\Apache Softwar...2bad135b4a5913509f4\autoComment
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\sf_sandbox>php symfony clear-cache>> file+ C:\Program Files\Apache Softwar...cs\sf_sandbox/frontend_prod.lck>> chmod 777 C:\Program Files\Apache Softwar...cs\sf_sandbox\frontend_prod.lck>> file- C:\Program Files\Apache Softwar...he\frontend\prod\config\VERSION>> file- C:\Program Files\Apache Softwar...les_default_config_view.yml.php>> file- C:\Program Files\Apache Softwar...default_config_security.yml.php>> file- C:\Program Files\Apache Softwar...s_default_config_module.yml.php>> file- C:\Program Files\Apache Softwar...efault_config_generator.yml.php>> file- C:\Program Files\Apache Softwar..._default_config_filters.yml.php>> file- C:\Program Files\Apache Softwar...\config\config_settings.yml.php>> file- C:\Program Files\Apache Softwar...d\config\config_routing.yml.php>> file- C:\Program Files\Apache Softwar...\prod\config\config_php.yml.php>> file- C:\Program Files\Apache Softwar...d\config\config_logging.yml.php>> file- C:\Program Files\Apache Softwar...prod\config\config_i18n.yml.php>> file- C:\Program Files\Apache Softwar...config\config_factories.yml.php>> file- C:\Program Files\Apache Softwar...config\config_databases.yml.php>> file- C:\Program Files\Apache Softwar...fig\config_core_compile.yml.php>> file- C:\Program Files\Apache Softwar...\config_config_handlers.yml.php>> file- C:\Program Files\Apache Softwar...onfig_bootstrap_compile.yml.php>> file- C:\Program Files\Apache Softwar...\config\config_autoload.yml.php>> file- C:\Program Files\Apache Softwar...\prod\config\config_app.yml.php>> file- C:\Program Files\Apache Softwar...cs\sf_sandbox/frontend_prod.lck
Seems OK....I guess. Would be nice to know what all that is doing, so I'll want to take a deeper look (after med school). OK, well, of couse something will break and I'll have to look at it sooner than that.
10:58PM
Well, just about 24 hours later, and much scotch, and a bad back to boot...we finally have our CRUD. I am definitely changing careers. This is lunacy. Well, I'm off to make some tea and refresh myself on Organic Chemistry...SN2 baby! It's all about SN2!
Ciao! Zai Jian!
In Memoriam
Julia T. Ficcaglia passed away peacefully in her sleep at age 92 during the early morning hours of Tuesday, June 5, 2007 from complications brought about by severely advanced arthritis. Julia was born in Far Hills, New Jersey on September 19, 1914 and came to Phoenix in late December 1942 to marry Raymond Ficcaglia at what is now St. Mary's Basilica in downtown Phoenix on December 31, 1942 and remained a resident of Arizona through her passing. Julia is survived by her younger sister, Mary McGowan in New Jersey, her twin sons, 5 grandsons, one great grandson and one great granddaughter, Julia Ruth Ficcaglia. Julia was a charter member of the Ladies Sodality at St. Thomas the Apostle Catholic Church, 2312 E. Campbell Ave. in Phoenix, where her Funeral Mass will be celebrated Friday morning, June 15, 2007 at 10:00 A.M. Visitation will be held the evening before at Whitney & Murphy Funeral Home, 4800 E. Indian School Rd., from 6:00 - 8:00 P.M. with Scripture Service at 7:00 P.M. Julia will be interred with her husband at St. Francis Catholic Cemetery in Phoenix following the Mass. Donations may be made to the Arthritis Foundation, 1313 E. Osborn Rd. #200, Phoenix, AZ 85014 in her name in lieu of flowers.
Published in The Arizona Republic on 6/13/2007.
There is much more to her story than this brief epilogue. Hers was one of the world's purest love stories, as she waited faithfully for over 30 years after the death of her one and only love. We can now comfort ourselves with the notion that now, finally, Julia and her Raymond are once again reunited in some unknown dimension. Perhaps Feynman would concur that Love is the strangest force of Nature, a timeless energy inscrutable by scientific inquiry. Let us all hope we can experience an energy that clean and pure in our own lives.
We will miss you Grandma Julie!
Published in The Arizona Republic on 6/13/2007.
There is much more to her story than this brief epilogue. Hers was one of the world's purest love stories, as she waited faithfully for over 30 years after the death of her one and only love. We can now comfort ourselves with the notion that now, finally, Julia and her Raymond are once again reunited in some unknown dimension. Perhaps Feynman would concur that Love is the strangest force of Nature, a timeless energy inscrutable by scientific inquiry. Let us all hope we can experience an energy that clean and pure in our own lives.
We will miss you Grandma Julie!
Monday, February 19, 2007
Some Family History
Recently stumbled upon:
Ficcaglia, Mariantonia
Female
census date 1/10/1824
Parents:
Fater - Ficcaglia, Errico
Mother - Aspromonte, Maria
Paternal gradfather - Ficcaglia, Domenico
father's occupation - water-man (probably a river boat captain!)
Record Number: 5
Piccirelli, Mariantonia b. ABT 1779 Family:
Marriage: ABT 1799Spouse: Ficcaglia, Domenico b. ABT 1770
Children:
Ficcaglia, Enrico
Testa, Domenicantonio b. ABT 1700 Palena, Chieti, Italy
Family:
Marriage: ABT 1811 Palena, Chieti, Italy
Spouse: Ficcaglia, Rachela b. ABT 1788 Palena, Chieti, Italy
Children:
Testa, Pietro Maria b. 29 Apr 1812 Palena, Chieti, ItalyTesta, Erminto Giuseppe Maria b. 28 May 1824 Palena, Chieti, ItalyTesta, Giuseppe Maria b. 25 Jan 1827 Palena, Chieti, ItalyTesta, Michele Arcangelo Maria b. 31 Jan 1829 Palena, Chieti, Italy
Ficcaglia, Giustino
Male
5/19/1829
Birth
PArents:
Ficcaglia, Errico (father)
Aspromonte, Maria (mother)
Ficcaglia, Domenico (paternal grandfather)
Aspromonte, Donato (maternal gf)
proprietor (father's occupation)
73
Teti, Mariantonia
F
11/15/1829
Birth
Teti, Domenico
Ficcaglia, Felice
Teti, Francesco
Note--Listed as Mariantonia Ficcaglia in baptism portion of birth record, but as Mariantonia Teti in index.
dyer
121
Since I have never met a Ficcaglia I wasn't related to, I assume these are famiglia!
Ficcaglia, Mariantonia
Female
census date 1/10/1824
Parents:
Fater - Ficcaglia, Errico
Mother - Aspromonte, Maria
Paternal gradfather - Ficcaglia, Domenico
father's occupation - water-man (probably a river boat captain!)
Record Number: 5
Piccirelli, Mariantonia b. ABT 1779 Family:
Marriage: ABT 1799Spouse: Ficcaglia, Domenico b. ABT 1770
Children:
Ficcaglia, Enrico
Testa, Domenicantonio b. ABT 1700 Palena, Chieti, Italy
Family:
Marriage: ABT 1811 Palena, Chieti, Italy
Spouse: Ficcaglia, Rachela b. ABT 1788 Palena, Chieti, Italy
Children:
Testa, Pietro Maria b. 29 Apr 1812 Palena, Chieti, ItalyTesta, Erminto Giuseppe Maria b. 28 May 1824 Palena, Chieti, ItalyTesta, Giuseppe Maria b. 25 Jan 1827 Palena, Chieti, ItalyTesta, Michele Arcangelo Maria b. 31 Jan 1829 Palena, Chieti, Italy
Ficcaglia, Giustino
Male
5/19/1829
Birth
PArents:
Ficcaglia, Errico (father)
Aspromonte, Maria (mother)
Ficcaglia, Domenico (paternal grandfather)
Aspromonte, Donato (maternal gf)
proprietor (father's occupation)
73
Teti, Mariantonia
F
11/15/1829
Birth
Teti, Domenico
Ficcaglia, Felice
Teti, Francesco
Note--Listed as Mariantonia Ficcaglia in baptism portion of birth record, but as Mariantonia Teti in index.
dyer
121
Since I have never met a Ficcaglia I wasn't related to, I assume these are famiglia!
Saturday, December 02, 2006
Java Architecture Exercise
"Architecture is a science, arising out of many other sciences, and adorned with much and varied learning: by the help of which a judgement is formed of those works which are the result of other arts."
---Vitruvius, Roman architect circa 40BC (requoted from Wikipedia)
Whever anyone asks me to review or define an architecture, the first thing I am reminded of is something Grady Booch said in a lecture I attended once: " What is an architect? An architect is someone who thinks up really cool ideas and gets someone else to create them!"
Hmmm...very often the "genius" of the architect gets lost in translation, and I end up reviewing code that leaves me thinking that an architect is someone who causes trouble...well, at least in software engineering.
To me an architect is someone who can create, critique, compare, contrast, measure, quantify, qualify, rareify, etc. etc., an "architecture". So what is an architecture (in software)? Again, to cite Grady: "Every system has an architecture. Some are not so pretty." In other words, there is no system without an architecture, and conversely, no architecture without a system. One cannot exist without the other.
As an aside, let's consider the most well-known architectural disciplines --- that of building construction. Here, architects are legends and architectures are obvious! No one would ask: What is the architecture of the White House, or the Empire State Building, or even my house. There are categories, and periods, and patterns, and styles that define an architecture for buildings in telescoping detail. As much or as little detail as is needed for the discussion. If you are a constrcution engineer, the architect drops detailed and standardized (digitized) drawings. If you are an interior decorator, you need only define the style and period perhaps. But everyone knows what it is and why and what makes something a good architecture, and what makes it bad (though taste and preference come into play, anyone can articulate WHY they prefer one to another.)
None of this is true today in software. So back to the question: what is a software architecture. The short answer: the set of constraints on a system's design, and therefore code. The long answer: it depends.
Today's exercise will be one of those "depends" cases. Someone dropped a huge pile of Java code on me and asked me to 1) define its architecture, and 2) redefine a better architecture. Note, that there was no definition of what "better" was. So join me if you will on this excursion through time and space...(check back soon)
---Vitruvius, Roman architect circa 40BC (requoted from Wikipedia)
Whever anyone asks me to review or define an architecture, the first thing I am reminded of is something Grady Booch said in a lecture I attended once: " What is an architect? An architect is someone who thinks up really cool ideas and gets someone else to create them!"
Hmmm...very often the "genius" of the architect gets lost in translation, and I end up reviewing code that leaves me thinking that an architect is someone who causes trouble...well, at least in software engineering.
To me an architect is someone who can create, critique, compare, contrast, measure, quantify, qualify, rareify, etc. etc., an "architecture". So what is an architecture (in software)? Again, to cite Grady: "Every system has an architecture. Some are not so pretty." In other words, there is no system without an architecture, and conversely, no architecture without a system. One cannot exist without the other.
As an aside, let's consider the most well-known architectural disciplines --- that of building construction. Here, architects are legends and architectures are obvious! No one would ask: What is the architecture of the White House, or the Empire State Building, or even my house. There are categories, and periods, and patterns, and styles that define an architecture for buildings in telescoping detail. As much or as little detail as is needed for the discussion. If you are a constrcution engineer, the architect drops detailed and standardized (digitized) drawings. If you are an interior decorator, you need only define the style and period perhaps. But everyone knows what it is and why and what makes something a good architecture, and what makes it bad (though taste and preference come into play, anyone can articulate WHY they prefer one to another.)
None of this is true today in software. So back to the question: what is a software architecture. The short answer: the set of constraints on a system's design, and therefore code. The long answer: it depends.
Today's exercise will be one of those "depends" cases. Someone dropped a huge pile of Java code on me and asked me to 1) define its architecture, and 2) redefine a better architecture. Note, that there was no definition of what "better" was. So join me if you will on this excursion through time and space...(check back soon)
Friday, November 03, 2006
Is OpenID Snake Oil?
Of course not, but here's a concern that the very enthusiastic proponents of this (and other) schemes don't seem to worry about.
So, if i register as Bill Gates on OpenID, post a blog with a picture I scraped from Wikipedia, and then start blogging on how much I love BSD and how I was forced to work at Microsoft all those years by aliens...then users of your system could detect that this is phony, and really NOT bill gates?
I now control billgates.pip.verisignlabs.com. I opened an account on LiveJournal. Now, I can post whatever I want and as long as the users don't explicitly apply a healthy amount of scrutiny, what's to stop me from influencing world events? And how often do the consumers of mass media scrutinize what they're reading?
So, here comes a very reasonable, and laudable project - OpenID - that wishes to make it "easier" to trust id through Diffe-Hellman shared secrets. Interesting? Yes. Open and therefore fully trustworthy? NO!
People trust authority. People want to trust governments and companies. They can't, but they want to. People trust what people see other people doing. Therefore, if OpenID is successful, and governments and companies do rely on them, then abuse of this scheme could cause trouble via mistaken or deliberately stolen urls/ids/etc:
* lost Jobs
* lost business
* lost credibility
Employers are now searching candidates on Google and blogs. Imagine "John Smith"...what if there are 5 of them in your town? What if one of them is a Neo-Nazi? What if the employer HR person doesn't have 30 minutes per candidate to scrutinize all these blogs and verify true human identity? What if their HR system AUTOMATICALLY trusts OpenIDs!!
Paranoia? Of course. Should be be concerned? I think so. Is it better than what's out there? Probably, but I reserve judgment.
Reprise:
Kim Cameron has a concise, brilliant synopsis of a valid and useable id system:
"Whatever it is, a real identity system needs us to do a lot better. In particular, the identity system must extend to and integrate the human user.
The Law of Human Integration
The universal identity system MUST define the human user to be a component of the distributed system, integrated through unambiguous human-machine communications mechanisms offering protection against identity attacks.
One of the people who has thought long and hard about these issues is Carl Ellison. He has coined the term Ceremony for interactions that span a mixed network of human and cybernetic system components. Carl worked on this idea when he was at Intel and I interview him about his work here." -- KC's blog
So, if i register as Bill Gates on OpenID, post a blog with a picture I scraped from Wikipedia, and then start blogging on how much I love BSD and how I was forced to work at Microsoft all those years by aliens...then users of your system could detect that this is phony, and really NOT bill gates?
I now control billgates.pip.verisignlabs.com. I opened an account on LiveJournal. Now, I can post whatever I want and as long as the users don't explicitly apply a healthy amount of scrutiny, what's to stop me from influencing world events? And how often do the consumers of mass media scrutinize what they're reading?
So, here comes a very reasonable, and laudable project - OpenID - that wishes to make it "easier" to trust id through Diffe-Hellman shared secrets. Interesting? Yes. Open and therefore fully trustworthy? NO!
People trust authority. People want to trust governments and companies. They can't, but they want to. People trust what people see other people doing. Therefore, if OpenID is successful, and governments and companies do rely on them, then abuse of this scheme could cause trouble via mistaken or deliberately stolen urls/ids/etc:
* lost Jobs
* lost business
* lost credibility
Employers are now searching candidates on Google and blogs. Imagine "John Smith"...what if there are 5 of them in your town? What if one of them is a Neo-Nazi? What if the employer HR person doesn't have 30 minutes per candidate to scrutinize all these blogs and verify true human identity? What if their HR system AUTOMATICALLY trusts OpenIDs!!
Paranoia? Of course. Should be be concerned? I think so. Is it better than what's out there? Probably, but I reserve judgment.
Reprise:
Kim Cameron has a concise, brilliant synopsis of a valid and useable id system:
"Whatever it is, a real identity system needs us to do a lot better. In particular, the identity system must extend to and integrate the human user.
The Law of Human Integration
The universal identity system MUST define the human user to be a component of the distributed system, integrated through unambiguous human-machine communications mechanisms offering protection against identity attacks.
One of the people who has thought long and hard about these issues is Carl Ellison. He has coined the term Ceremony for interactions that span a mixed network of human and cybernetic system components. Carl worked on this idea when he was at Intel and I interview him about his work here." -- KC's blog
Thursday, November 02, 2006
A RoR-ing Good Time
Minute By Minute Log of the Very First RoR Exploration
8:00 PM
Dinner's done; Top Chef on Tivo skimmed. Ready to dive in.
8:03
Laptop finally Loads. I hate XP. Where's my old Fedora laptop anyway?
8:04
http://www.rubyonrails.org/docs
Seems like a good place to start.
Tutorials...hmm, ok. http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html
OK, download stuff. No problem.
8:12
http://rubyforge.org/frs/?group_id=167
58.1Kb/sec! Comcast is blowie.
Ruby One Click still downloading...
Sure, it's about time I get a good UI for MySQL...why not
http://www.heidisql.com/
8:20
Ruby *finally* installing. Select all options. Disks are cheap.
meanwhile...reading on...http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html?page=2
Hmmm...cooking metaphors...well, coincidentally I love to cook, but as with food, I never follow recipes to the letter...so let's change this one as we go.
8:25
Ah! Ruby install finished. Pop the stack and install the MySql GUI.
8:26
Cannot watch installer any longer...back to tutorial...
gem install rails --remote
8:28
OK, got me a Heidi GUI....create connection to my'SQL
8:31
Heidi looks good. Nothing fancy, nothing too complex. Brilliant. OK, back to the main thread...rails still installing...Y, Y, Y all dependencies...sheesh! Note to RoR maintainers...add an All option to gem.
...sigh...still installing rails...
8:40
Yikes, I thought I had apache on this machine. Hmmm...Tomcat....JBoss....hmmm, Java anyone? Well, time to download...Apache or something else. Let's see...
http://people.apache.org/~rbowen/presentations/apacheconEU2005/hate_apache.pdf
Too funny!
http://trac.lighttpd.net/trac/wiki/PoweredByLighttpd
OK, well good enuf for YouTube billions, good 'nuf for me.
8:55
Hey, I cannot find a valid link to a Windows lighttpd! What gives. OK OK, right, so I shouldn't be using Windows ;) Well, back to Apache for now.
8:57
Apache installing. Sheesh, this is why software development is in the stone ages...it takes an hour to just get your tools ready. Imagine if it took an hour for your doctor to get productive and ready to work...but I digress!
9:01
Dammit Jim! Skype uses port 80, too. Fine fine fine.
9:03
Hmmm...the tutorial assumes WEBrick...need the HOWTO for Apache integration.
9:07
Yikes. http://blog.duncandavidson.com/2006/01/deploying_rails.html
Hmmm...so not only do I need to venture out from my happy Java (ok and PHP) world, now I've gotta ditch my ol' feathery friend?! Sigh..times they are a changin'.
Well, then I see http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/
OK, so now 2 people mention a "proxy rails requests" approach. Hmm...gotta say, so far, installing Tomcat and deploying WARs seems like fun compared to this stuff...or better yet, PHP...still, remain calm and take a deep cleansing breath.
9:11
Let's try Mongrel. Why? Well I like the name better.
http://mongrel.rubyforge.org/
Hey, and it uses that nify gem thingy:
gem install mongrel
I dig it! Now I remember why I like consoles and not GUIs...well until my fingers cramp.
9:14
C:\temp\rails>gem install mongrel
Bulk updating Gem source index for: http://gems.rubyforge.org
Select which gem to install for your platform (i386-mswin32)
1. mongrel 0.3.13.4 (ruby)
2. mongrel 0.3.13.3 (mswin32)
3. mongrel 0.3.13.3 (ruby)
4. mongrel 0.3.13.2 (ruby)
5. mongrel 0.3.13.2 (mswin32)
6. mongrel 0.3.13.1 (ruby)
etc...
Huh? I guess what's behind door #1?
9:18
Uh, guess I chose poorly:
Building native extensions. This could take a while...
ERROR: While executing gem ... (RuntimeError) ERROR: Failed to build gem native extension.Gem files will remain installed in c:/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.4 for inspection.
Let's try door #2...
OK, now we're cooking! Install as service.
Done! Beautiful.
9:21
Uh oh. Lot's of mongrel errors.
Hmm..where did I go wrong....Aha! a little further down the page...http://mongrel.rubyforge.org/docs/win32.html
Well, ok this then points back to where I was. Does anyone ever proof read these!? C'mon guys. Well, I'll figure it out.
9:26
OK, mongrel_service installed.
Now where was I...oh yes, the tutorial. I should have been a doctor. Over an hour and still no progress.
9:27
C:\temp\rails>mongrel_rails service::install -N activation -c C:\temp\rails -p 4444 -e development!!! The path you specified isn't a valid Rails application.service::install reported an error. Use mongrel_rails service::install -h to get help.
Well, I'll admit that installing an empty project seems silly. But that's what the tutorial said to do (well ok, but not using mongrel, so I'm on my own at this point.) Fine. Deep breath. Think happy thoughts.
Let's just carry on and assume that the empty project installed and ran. After all, what is the sound of one hand clapping?
9:31
"Rails knows where to find things it needs within this structure, so you don't have to tell it. Remember, no configuration files!"
Laudable...until of course you need to change something...but let's not go there for now.
Back to the tutorial...
9:33
"First, it's important to understand how controllers work in Rails and how URLs map into (and execute) controller methods."
Uh, ok. First --- I *do* understand what these frameworks should do, shouldn't do, can do, cannot do, MVC, MVC2, AJAX (when it was just called Javascript and XML!), patterns, etc. etc....
BUT...WHY should I NEED to know? To me, the entire point of a framework is to get up and running and focus on the problem domain and solution space. Period. If I *need* to understand the evolution of flyweights, adapters, and mix-in classes, then the barrier to entry is high. Forget sending this off to junior programmers...god forbid that an MBA with an idea tries to prototype it on their own!
Of course, I suspect that to follow recipes, you don't really need to know this, well, insofar as you can shoot yourself in the foot. Still, I dislike already that I need to know so much about software to make this all work...but I digress.
9:48
Found my happy spot. Trouble running script\generate, but after some contemplation, realized I was off by one dir. Now I remember why I hate console UIs :)
Continuing with tutorial....
Oh wait! That's probably the reason Mongrel couldn't install the app before! Aha! Neurons are still firing and axons continue to myelinate! Neurotransmitters all 'round!
9:57
Recognition errors....what!? What's this underscore nonsense??? Uh, ok. Well, now I get some syntax error...oh yes, a typo. How surprising. Gee, and we wonder why static typing and a compiler is useful...but hey, as some article said, just write unit tests. Uh, sure. Unit test Hello World. Whatever.
Now I am getting really cranky. 2 hours, I FINALLY have Hello World. So far, I cannot understand why anyone likes this RoR stuff unless they never bothered to learn real programming. OK, well, let's go get some tea and calm down. After all, all these kids can't be completely wrong...there must be SOMETHING useful here. Remember, you also hate PHP for the same reason and you use that for some things. Relax. Deep breath....tea.
BACK IN 15
10:15
OK, so I checked on something tangential:
http://superhappydevhouse.org/
By complete coincidence, it's tomorrow night! Spooky. Maybe fate?
And forgot my tea.
10:24
OK, back online. Create the database and configure rails:
"Rails lets you run in development mode, test mode, or production mode, using different databases. This application uses the same database for each."
Well, now that IS useful. So my persnickety diatribe was perhaps a bit premature.
OK, well since I am deviating from the recipe and actually trying to create a useful service (much as I enjoy cookbooks), I need to pause and sketch out the data model. Ignoring all sorts of analysis and architecture, so it seems. Hmmm...well I don't presume that ANY framework that exists today is an ARCHITECTURAL framework. But I digress...
Today, in a StartupCamp session, the problem of viral user acquisition and "critical mass" was discussed. So I figure one nifty service would be to connect service providers with service consumers who can help them reach the necessary "activation" energy. So, why not create a site that tracks the viral "energy" for a site - both in terms of individual energy and group kinematics. I guess this would be like trackbacks, but rather than links, the "energy" is determined by ratings. The site allows services to embed a tool on their sites that let users anonymously or (for fun and profit) identifiably rate the service across one or more dimensions (some standard, some created by the service provider, some created by the users). Then the site also connects the users by allowing them to refer a friend in the embedded tool.
The idea is meant as a means, not an end, so don't tell me why it's a bad idea. I don't care. I just want something potentially interesting and more importantly, real enough and complex enough to put RoR through its paces. Mmmmm, tea.
10:42
OK, that will suffice for "business modeling" and "use case analysis". Skip ahead to data design.
I'll need a SQL database of the following (NOTE: I AM NOT A DBA OR DB DEVELOPER OF ANY SKILL):
users : id(primary key), uid(string) - ignoring security for now
assets: id(pk), content(string)
targets: id(pk), name(string)
ratings: id(pk), score(integer)
...now here's where it gets tricky...
graph: id(pk), edgetype(choice:directed, undirected)
nodes: id(pk) , color(string), data(string)
edges: id(pk), weight(float), source(int), target(int)
11:13
OK, try my new Heidi GUI...
11:16
enough GUI nonsense; I'll script it later! Taking too long. Let's get back to the tutorial with our new database.
11:38
Well
http://localhost:4444/user/new
Now I have a db, a model class, a controller class...and hey...no HTML written, and I get a form for all the basic CRUD! Pretty cool. Still, it's pretty brain dead simple at this point. Let's see how we continue.
"We now have an amazing amount of functionality, by merely building a database table and typing in a single line of code. It may not be pretty yet, but we'll fix that soon enough."
Well, I'm a bit more prosaic, but yes, I always like a free lunch.
11:47
I always like to look under the covers...
http://rails.rubyonrails.com/classes/ActionController/Scaffolding/ClassMethods.html
11:48
"Rails tries very hard to present the user with pretty URLs. Rails URLs are simple and straightforward, not long and cryptic."
Hmmm, laudable perhaps, but not really important. I think users are trained to pretty much cut and paste or use the browser or tools to pass around links.
11:51
"Let's create our own view template for the list action that only shows each recipe's title and date."
Oh, boo! Now I am crotchety again.
" If you have worked with JSP or ASP pages, this will look familiar."
Yeah! But that's what I hoped to avoid! Sigh.
12:15
Have finished the tutorial. Skipped all that template code for now; I don't need a fancy LnF for now. Reading:
http://www.slash7.com/articles/2005/1/24/really-getting-started-in-rails
Hmmm, I wonder what ActiveRecord does with table Cacti, or Fungi?
12:29
Well, I completed skimming of partII of the tutorial, looked at some supplementary sites and have my very simple scaffold-y rails app. Overall, it shows promise. Where to go from here? Ruby syntax? Code recipes? HOWTOs? Hmmmm....let's get some sleep and see what the StartupCamp session tomorrow...in 9.5 hours...reveals! Can't wait to get some feedback from real RoR users tomorrow. G'night!
8:00 PM
Dinner's done; Top Chef on Tivo skimmed. Ready to dive in.
8:03
Laptop finally Loads. I hate XP. Where's my old Fedora laptop anyway?
8:04
http://www.rubyonrails.org/docs
Seems like a good place to start.
Tutorials...hmm, ok. http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html
OK, download stuff. No problem.
8:12
http://rubyforge.org/frs/?group_id=167
58.1Kb/sec! Comcast is blowie.
Ruby One Click still downloading...
Sure, it's about time I get a good UI for MySQL...why not
http://www.heidisql.com/
8:20
Ruby *finally* installing. Select all options. Disks are cheap.
meanwhile...reading on...http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html?page=2
Hmmm...cooking metaphors...well, coincidentally I love to cook, but as with food, I never follow recipes to the letter...so let's change this one as we go.
8:25
Ah! Ruby install finished. Pop the stack and install the MySql GUI.
8:26
Cannot watch installer any longer...back to tutorial...
gem install rails --remote
8:28
OK, got me a Heidi GUI....create connection to my'SQL
8:31
Heidi looks good. Nothing fancy, nothing too complex. Brilliant. OK, back to the main thread...rails still installing...Y, Y, Y all dependencies...sheesh! Note to RoR maintainers...add an All option to gem.
...sigh...still installing rails...
8:40
Yikes, I thought I had apache on this machine. Hmmm...Tomcat....JBoss....hmmm, Java anyone? Well, time to download...Apache or something else. Let's see...
http://people.apache.org/~rbowen/presentations/apacheconEU2005/hate_apache.pdf
Too funny!
http://trac.lighttpd.net/trac/wiki/PoweredByLighttpd
OK, well good enuf for YouTube billions, good 'nuf for me.
8:55
Hey, I cannot find a valid link to a Windows lighttpd! What gives. OK OK, right, so I shouldn't be using Windows ;) Well, back to Apache for now.
8:57
Apache installing. Sheesh, this is why software development is in the stone ages...it takes an hour to just get your tools ready. Imagine if it took an hour for your doctor to get productive and ready to work...but I digress!
9:01
Dammit Jim! Skype uses port 80, too. Fine fine fine.
9:03
Hmmm...the tutorial assumes WEBrick...need the HOWTO for Apache integration.
9:07
Yikes. http://blog.duncandavidson.com/2006/01/deploying_rails.html
Hmmm...so not only do I need to venture out from my happy Java (ok and PHP) world, now I've gotta ditch my ol' feathery friend?! Sigh..times they are a changin'.
Well, then I see http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/
OK, so now 2 people mention a "proxy rails requests" approach. Hmm...gotta say, so far, installing Tomcat and deploying WARs seems like fun compared to this stuff...or better yet, PHP...still, remain calm and take a deep cleansing breath.
9:11
Let's try Mongrel. Why? Well I like the name better.
http://mongrel.rubyforge.org/
Hey, and it uses that nify gem thingy:
gem install mongrel
I dig it! Now I remember why I like consoles and not GUIs...well until my fingers cramp.
9:14
C:\temp\rails>gem install mongrel
Bulk updating Gem source index for: http://gems.rubyforge.org
Select which gem to install for your platform (i386-mswin32)
1. mongrel 0.3.13.4 (ruby)
2. mongrel 0.3.13.3 (mswin32)
3. mongrel 0.3.13.3 (ruby)
4. mongrel 0.3.13.2 (ruby)
5. mongrel 0.3.13.2 (mswin32)
6. mongrel 0.3.13.1 (ruby)
etc...
Huh? I guess what's behind door #1?
9:18
Uh, guess I chose poorly:
Building native extensions. This could take a while...
ERROR: While executing gem ... (RuntimeError) ERROR: Failed to build gem native extension.Gem files will remain installed in c:/ruby/lib/ruby/gems/1.8/gems/mongrel-0.3.13.4 for inspection.
Let's try door #2...
OK, now we're cooking! Install as service.
Done! Beautiful.
9:21
Uh oh. Lot's of mongrel errors.
Hmm..where did I go wrong....Aha! a little further down the page...http://mongrel.rubyforge.org/docs/win32.html
Well, ok this then points back to where I was. Does anyone ever proof read these!? C'mon guys. Well, I'll figure it out.
9:26
OK, mongrel_service installed.
Now where was I...oh yes, the tutorial. I should have been a doctor. Over an hour and still no progress.
9:27
C:\temp\rails>mongrel_rails service::install -N activation -c C:\temp\rails -p 4444 -e development!!! The path you specified isn't a valid Rails application.service::install reported an error. Use mongrel_rails service::install -h to get help.
Well, I'll admit that installing an empty project seems silly. But that's what the tutorial said to do (well ok, but not using mongrel, so I'm on my own at this point.) Fine. Deep breath. Think happy thoughts.
Let's just carry on and assume that the empty project installed and ran. After all, what is the sound of one hand clapping?
9:31
"Rails knows where to find things it needs within this structure, so you don't have to tell it. Remember, no configuration files!"
Laudable...until of course you need to change something...but let's not go there for now.
Back to the tutorial...
9:33
"First, it's important to understand how controllers work in Rails and how URLs map into (and execute) controller methods."
Uh, ok. First --- I *do* understand what these frameworks should do, shouldn't do, can do, cannot do, MVC, MVC2, AJAX (when it was just called Javascript and XML!), patterns, etc. etc....
BUT...WHY should I NEED to know? To me, the entire point of a framework is to get up and running and focus on the problem domain and solution space. Period. If I *need* to understand the evolution of flyweights, adapters, and mix-in classes, then the barrier to entry is high. Forget sending this off to junior programmers...god forbid that an MBA with an idea tries to prototype it on their own!
Of course, I suspect that to follow recipes, you don't really need to know this, well, insofar as you can shoot yourself in the foot. Still, I dislike already that I need to know so much about software to make this all work...but I digress.
9:48
Found my happy spot. Trouble running script\generate, but after some contemplation, realized I was off by one dir. Now I remember why I hate console UIs :)
Continuing with tutorial....
Oh wait! That's probably the reason Mongrel couldn't install the app before! Aha! Neurons are still firing and axons continue to myelinate! Neurotransmitters all 'round!
9:57
Recognition errors....what!? What's this underscore nonsense??? Uh, ok. Well, now I get some syntax error...oh yes, a typo. How surprising. Gee, and we wonder why static typing and a compiler is useful...but hey, as some article said, just write unit tests. Uh, sure. Unit test Hello World. Whatever.
Now I am getting really cranky. 2 hours, I FINALLY have Hello World. So far, I cannot understand why anyone likes this RoR stuff unless they never bothered to learn real programming. OK, well, let's go get some tea and calm down. After all, all these kids can't be completely wrong...there must be SOMETHING useful here. Remember, you also hate PHP for the same reason and you use that for some things. Relax. Deep breath....tea.
BACK IN 15
10:15
OK, so I checked on something tangential:
http://superhappydevhouse.org/
By complete coincidence, it's tomorrow night! Spooky. Maybe fate?
And forgot my tea.
10:24
OK, back online. Create the database and configure rails:
"Rails lets you run in development mode, test mode, or production mode, using different databases. This application uses the same database for each."
Well, now that IS useful. So my persnickety diatribe was perhaps a bit premature.
OK, well since I am deviating from the recipe and actually trying to create a useful service (much as I enjoy cookbooks), I need to pause and sketch out the data model. Ignoring all sorts of analysis and architecture, so it seems. Hmmm...well I don't presume that ANY framework that exists today is an ARCHITECTURAL framework. But I digress...
Today, in a StartupCamp session, the problem of viral user acquisition and "critical mass" was discussed. So I figure one nifty service would be to connect service providers with service consumers who can help them reach the necessary "activation" energy. So, why not create a site that tracks the viral "energy" for a site - both in terms of individual energy and group kinematics. I guess this would be like trackbacks, but rather than links, the "energy" is determined by ratings. The site allows services to embed a tool on their sites that let users anonymously or (for fun and profit) identifiably rate the service across one or more dimensions (some standard, some created by the service provider, some created by the users). Then the site also connects the users by allowing them to refer a friend in the embedded tool.
The idea is meant as a means, not an end, so don't tell me why it's a bad idea. I don't care. I just want something potentially interesting and more importantly, real enough and complex enough to put RoR through its paces. Mmmmm, tea.
10:42
OK, that will suffice for "business modeling" and "use case analysis". Skip ahead to data design.
I'll need a SQL database of the following (NOTE: I AM NOT A DBA OR DB DEVELOPER OF ANY SKILL):
users : id(primary key), uid(string) - ignoring security for now
assets: id(pk), content(string)
targets: id(pk), name(string)
ratings: id(pk), score(integer)
...now here's where it gets tricky...
graph: id(pk), edgetype(choice:directed, undirected)
nodes: id(pk) , color(string), data(string)
edges: id(pk), weight(float), source(int), target(int)
11:13
OK, try my new Heidi GUI...
11:16
enough GUI nonsense; I'll script it later! Taking too long. Let's get back to the tutorial with our new database.
11:38
Well
http://localhost:4444/user/new
Now I have a db, a model class, a controller class...and hey...no HTML written, and I get a form for all the basic CRUD! Pretty cool. Still, it's pretty brain dead simple at this point. Let's see how we continue.
"We now have an amazing amount of functionality, by merely building a database table and typing in a single line of code. It may not be pretty yet, but we'll fix that soon enough."
Well, I'm a bit more prosaic, but yes, I always like a free lunch.
11:47
I always like to look under the covers...
http://rails.rubyonrails.com/classes/ActionController/Scaffolding/ClassMethods.html
11:48
"Rails tries very hard to present the user with pretty URLs. Rails URLs are simple and straightforward, not long and cryptic."
Hmmm, laudable perhaps, but not really important. I think users are trained to pretty much cut and paste or use the browser or tools to pass around links.
11:51
"Let's create our own view template for the list action that only shows each recipe's title and date."
Oh, boo! Now I am crotchety again.
" If you have worked with JSP or ASP pages, this will look familiar."
Yeah! But that's what I hoped to avoid! Sigh.
12:15
Have finished the tutorial. Skipped all that template code for now; I don't need a fancy LnF for now. Reading:
http://www.slash7.com/articles/2005/1/24/really-getting-started-in-rails
Hmmm, I wonder what ActiveRecord does with table Cacti, or Fungi?
12:29
Well, I completed skimming of partII of the tutorial, looked at some supplementary sites and have my very simple scaffold-y rails app. Overall, it shows promise. Where to go from here? Ruby syntax? Code recipes? HOWTOs? Hmmmm....let's get some sleep and see what the StartupCamp session tomorrow...in 9.5 hours...reveals! Can't wait to get some feedback from real RoR users tomorrow. G'night!
Startup Camp: Anti-Mashup
This is a topic I proposed for Startup Camp: Anti-Mashup
Build a new web service from scratch in days...for fun and profit?
(a.k.a. Startups for the hyper-impatient)
(a.k.a. "Stealth mode" is for weenies!)
Topics include:
* Which framework(s)
* Which language(s)
* What skills required
The goal is not to lecture but to listen to real-world examples, hear tales from the trenches, and provide starting points for those interested in bringing a new service to the web...NOW.
Some data.
I did a simple search on HotJobs (keyword, 94043), first as a job seeker:
Ruby - 80 jobs
(Ruby Rails - 26 jobs)
PHP - 419
Python - 387
Java - 2342
(Java Spring - 100)
(J2EE - 886)
Web 2.0 - 150
Is Web 2.0 a good financial bet for engineers? Hmmmm....ok, now the demand side. (I have an employer account.) Search for keyword, Mountain View, CA and metro area, resumes from last 30 days:
Ruby - 36
(Ruby Rails - 7)
PHP - 353
Python - 93
Java - 1000 (hmmm, this seems like too round a number...perhaps their search only returns 1000 max?)
(Java Spring - 868)
(J2EE - 1000, ok now I *know* that something's funny. Fine, assume Java >>1000)
Web 2.0 - 1000 (again)
So, unfortunately HotJobs won't cooperate. If I get a chance, I'll try Dice. But still, to me, as an employer OR an engineer, the financial incentive to move from Java to Web 2.0 seems murky at best. Let's see what the group thinks.
If the short answer is: use rails stupid. Then perhaps we can take this forward through an exercise. To facilitate this, I propose the following... We take a hypothetical service idea, sketch the design, and then debate the architecture. Here are the rules I have in mind:
1. Must require data (what service doesn't)
2. Must require mass market UI appeal for web browsers
3. Must scale (architecturally and design, not business model) to >10M users within 3 months
4. Must allow for user content creation
5. Must have a "reasonable" chance of implementation within 48-96 hours
6. There are no other rules beyond these.
To start, I will propose the following hypothetical idea, but others can be presented and majority rules.
Idea 1: A site for startups to post projects to developers to work on for free in exchange for royalty payments if and when they are successful. Think of it as a site for "Venture Technologists" --- engineers who have knowledge capital, but no money. Startups who have ideas, but no engineers and no money, promise to reward participants for their contributions when/if they generate *Revenue*. (I think we all know profits are so pre-Web 2.0!)
Let's not get into legal details, business plans, etc.; let's focus on the architecture and tools in this session.
Here's a bootstrap list of frameworks I know of and have looked at...some briefly...some painfully over months of labor...please add more!
Build a new web service from scratch in days...for fun and profit?
(a.k.a. Startups for the hyper-impatient)
(a.k.a. "Stealth mode" is for weenies!)
Topics include:
* Which framework(s)
* Which language(s)
* What skills required
The goal is not to lecture but to listen to real-world examples, hear tales from the trenches, and provide starting points for those interested in bringing a new service to the web...NOW.
Some data.
I did a simple search on HotJobs (keyword, 94043), first as a job seeker:
Ruby - 80 jobs
(Ruby Rails - 26 jobs)
PHP - 419
Python - 387
Java - 2342
(Java Spring - 100)
(J2EE - 886)
Web 2.0 - 150
Is Web 2.0 a good financial bet for engineers? Hmmmm....ok, now the demand side. (I have an employer account.) Search for keyword, Mountain View, CA and metro area, resumes from last 30 days:
Ruby - 36
(Ruby Rails - 7)
PHP - 353
Python - 93
Java - 1000 (hmmm, this seems like too round a number...perhaps their search only returns 1000 max?)
(Java Spring - 868)
(J2EE - 1000, ok now I *know* that something's funny. Fine, assume Java >>1000)
Web 2.0 - 1000 (again)
So, unfortunately HotJobs won't cooperate. If I get a chance, I'll try Dice. But still, to me, as an employer OR an engineer, the financial incentive to move from Java to Web 2.0 seems murky at best. Let's see what the group thinks.
If the short answer is: use rails stupid. Then perhaps we can take this forward through an exercise. To facilitate this, I propose the following... We take a hypothetical service idea, sketch the design, and then debate the architecture. Here are the rules I have in mind:
1. Must require data (what service doesn't)
2. Must require mass market UI appeal for web browsers
3. Must scale (architecturally and design, not business model) to >10M users within 3 months
4. Must allow for user content creation
5. Must have a "reasonable" chance of implementation within 48-96 hours
6. There are no other rules beyond these.
To start, I will propose the following hypothetical idea, but others can be presented and majority rules.
Idea 1: A site for startups to post projects to developers to work on for free in exchange for royalty payments if and when they are successful. Think of it as a site for "Venture Technologists" --- engineers who have knowledge capital, but no money. Startups who have ideas, but no engineers and no money, promise to reward participants for their contributions when/if they generate *Revenue*. (I think we all know profits are so pre-Web 2.0!)
Let's not get into legal details, business plans, etc.; let's focus on the architecture and tools in this session.
Here's a bootstrap list of frameworks I know of and have looked at...some briefly...some painfully over months of labor...please add more!
- Java - Spring, ServiceMix, Sails, Tapestry
- PHP - CakePHP, PRADO, Zend, Code Igniter
- Ruby - Rails
- Perl - Catalyst
- Python - Pylons
- Content Management Systems (in some apps, I consider these frameworks) - Drupal
Relevant links:
http://javaboutique.internet.com/reviews/ruby/
http://www.onjava.com/pub/a/onjava/2005/11/16/ruby-the-rival.html?page=1
NOTE: for the above idea, I hereby declare that any and all participants who contribute code will share equally in any proceeds if the service is actually developed and coded. Who knows!? I reserve final judgment to adjust allocations for those who contribute materially in non-code ways, or people I find amusing or entertaining. And myself of course :)
Subscribe to:
Posts (Atom)