Sexy Java?!
Ich moechte ja keinem zu nahe treten, aber war das schlau? Sich im Halloween Kostuem mit einer Frage zum sex appeal von Java fotographieren zu lassen?
Auf der anderen Seite ist es aber natuerlich auch etwas befremdlich wenn man auf der suche nach “MAC/OS/X” als ersten Treffer “Ruby on Rails” geliefert bekommt.

komisch, aber verstaendlich wenn man sich die Java PR so anschaut.
have fun
Ich würde Songbird nutzen(wenn ich kein Macbook hätte)
Es gibt eine funktionsfähig Version von Songbird. Inzwischen ist mein Leidensdruck aber nicht mehr so hoch das ich umsteigen müsste. Die finsteren linux-auf-dem-desktop-ist-immer-noch-besser-als-windows zeiten liegen als Macbook User glücklicherweise hinter mir. Zur Zeit reicht mir iTunes, aber ich hab mir Songbird zumindest schon mal installiert, einen flüchtigen Blick riskiert und denke das könnte was werden. Vor allem haben sie nicht den zwanghaften marketing old-scholl reflex mir immer und immer wieder irgendwelchen music-shop mist andrehen zu wollen. Bei iTunes neulich hat es keine 30 sekunden gedauert bis meine siebenjährige Tochter versehentlich bei den Disneykauffilmen gelandet war. Ich hatte ihr gezeigt wo sie auf dem alten laptop, den ich für sie hingestellt habe, ihre Kinder CDs hören kann. Aber nein, schwupps landet man bei Ariel und der Meerjungfrau.
Was Songbird auch noch sehr schön zeigt, ist wie lange es doch dauert vernünftige Software zu bauen. Aber Ende ist das aber der einzig gangbare Weg. Man kann einfach nicht viele User für immer bescheissen. Das geht für wenige für immer oder einmal für viele, aber eben nicht für alle und immer. Und eine erfolgreiches Produkt braucht eben viele User die wirklich von dem Ding überzeugt sind. Firefox hatte einen langen Weg, mal sehen wohin Songbird läuft. Und ja, von Microsoft Produkten sind sehr viele Benutzer wirklich überzeugt. Der Internetexplorer gehört wohl nicht dazu, aber Exchange und Excel zum Beispiel. Mircosoft bashing ist auf jedem Fall einfacher als funktionierende Software zu schreiben, aber das zählt dann nur noch zu der “sich selber belügen” abteilung und die ist nun vollkommen uninteressant.
simpler comandline application context/configs
A couple of days ago i stumbled upon the SimpleConsole. Really a nice piece of software, pretty close to what i was pondering about already for some time. And just two weeks before i did put up (try: gem install app-ctx) my own take on that. App-ctx shares some of the design decisions of SimpleConsole like
- ruby classes as controllers
- automatic method invokation from arguments
- parameter parsing and conversion
still though, app-ctx has some differences, and tries to be just a little simpler(and add some more). You might use classes, similar to SimpleConsole:
class Simple
def add context
a, b = context.argv
puts "#{a} + #{b} = #{a + b}"
end
end
App::run :class => Simple
Argument type conversions are build in, no declarations:
"foo
bar” becomes a string, 23 a int and 3.14 a Float. Same with options: –int=23 –text=”some text here” –float=3.14.But I did not want to force this inheritance thing upon the humble user so she can use her own baseclasses(SimpleConsole::Controller maybe?). Next, i wanted to support blocks, just being more ruby like:
class Simple
# $ ./examples/run_with_block.rb add 1 5
# 1 + 5 = 6
# $
def add a, b
puts "#{a} + #{b} = #{a + b}"
end
# $ ./examples/run_with_block.rb sub 1 5
# 1 - 5 = 6
# $
def sub a, b
puts "#{a} - #{b} = #{a - b}"
end
end
App::run do |context|
puts context
Simple.new.send(context.argv.shift, *context.argv)
end
The general setup of the comand line i wanted to stay good old unix style: <comand> [options] [arguments...] only. I don’t like these: <comand> --foo --bar=1 action --help where there are more options after the last argument.
And than there is the problem with resonable default values. You need configuration and app-ctx defines some clear rules on where to put them. On default, app-ctx pulls a YAML default values file from next to where your application script lives, e.g:
$ ~/bin/my-script.rb
preloads its default values from
~/bin/my-script.yml
Values from the command line then will simply overload setting from your config file and your app can’t distinguish from where the values are actually coming. Thisway you can extract default values from your code an put them in a separate file.
But if you prefer to keep things together instead, you may also set defaults directly from the code:
class Simple
def initialize(context)
context.set_default_values({
:desc => "programatically setting default values",
:port => 1234,
})
end
def show context
puts context
end
end
App::run :class => Simple
app-ctx tries calling a c’tor of your class with a context argument and you can set your default values there. Last but not least, you can define from where to load the config file with a command line option:
~/bin/my-script --config=/tmp/bogus-setup-here show
will not load the
~/bin/my-script.rb but the one you supplied.Thats most of the stuff i could recall right now and if you like it, go ahead use it. In case you do, i might feel challenged to put up some concise online documentation and a little tutorial. ’till then
have fun
whatsyourcommand
function whatsyourcommand ()
{
history | awk ‘{print $2}’ | sort | uniq -c | sort -n | tail -23
}
this little bash function pulls some stats from your history:
3 tar
4 %1
4 %2
4 nmap
5 rake
5 vi
6 irb
7 ./t_graph.rb
7 open
8 dwhatsnew
8 geheim
9 ifconfig
11 mysql
14 pgoogle
17 svn
17 telnet
18 syncdir
20 ping
29 cd
36 j
43 ./t_instant-instance-config.rb
70 ls
98 fg
Good morning, How are you doing?
Heute morgen auf dem Weg zur Arbeit mal wieder einem Amerikaner ueber den Weg gelaufen. Als Tourist leicht zu erkennen bei der Frage nach dem richtigen Ausstieg fuer den Alex. Das touristische Universum ist doch recht eindimensional. Er bekam eine halbwegs korrekte Anwort, ich hab mich aber dann noch ohnen rechten Grund eingemischt, um ihm zu sagen das er besser noch zwei Stationen weiterfaehrt weil er von dort den wesentlich netteren fusweg hat. Soweit so gut. Meine Idee war schlicht, es der typische Art der Amerikaner gleichzutun und mit jedem auf der Strasse einfach mal einen plausch zu halten. Ich hatte wirklich einen sch… Tag, schon frueh am morgen, und die Woche bis dahin war genauso, und die things to come liesen schon jetzt jedes Mass an guter Laune schwinden. Ich dacht mir daher, nutzte die gelegenheit und fuehre das letzte gespraech des heutigen Tages, dass nicht in Streit und Wut endet. Und es war wirklich nett, zwei Stationen und noch ein paar Schritte beim Umsteigen waren freundlich und wir haben ein bisschen die klischehaft oberflaechlichen Floskeln zweier Fremder getauscht, ein bisschen “Where you’re from”, und dann “Good bye and have a nice day”. So einfach kann das sein, ein bisschen freundlichkeit und schon geht’s allen besser. Wer mich kennt, weiss das mir wahrlich keine amerikafreundlichkeit nachgesagt werden kann, aber an dieser Stelle war es mir ganz recht, die mir gut bekannten gepflogenheiten zur eigenen Gefuehlsaaufhellung auszunutzen. So fellow readers, go along, have a smile in your face, und lasst mich endlich in ruhe meinen sch… krempel erledigen.
“…,then they fight you,
…then you win” (Mohandas Gandhi).
Steve Ballmer got smart on OpenSource. What does it tell us? Did we won? Or do we better get scared now?
Open source is not a new technology area. It was a new business model. Open source never goes away as a business model or competitor. We have learned how to compete with open source, and we will compete with it for the rest of time
and even more. Not only did he got the idea of OpenSource, he also understood this software thing:
iPod is a software thing. You just happen to collect the money on the hardware.
challenging times indeed, have a lut of fun cheers
