<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-26164208</id><updated>2011-10-10T09:48:24.793Z</updated><category term='colin powell'/><category term='jscript'/><category term='clientside'/><category term='ecmascript'/><category term='wimax'/><category term='erlang'/><category term='gnash'/><category term='offline'/><category term='adobe'/><category term=':)'/><category term='firefox'/><category term='eclipse monkey'/><category term='ghana'/><category term='Aral'/><category term='fold'/><category term='actionscript'/><category term='2008'/><category term='rant'/><category term='scripting'/><category term='scheme'/><category term='dash'/><category term='scala'/><category term='java'/><category term='AIR'/><category term='macros'/><category term='economy'/><category term='greenmail'/><category term='policy'/><category term='laughs'/><category term='mac book pro'/><category term='endorsement'/><category term='concurrency'/><category term='teams'/><category term='gaming'/><category term='flex'/><category term='wora'/><category term='filter'/><category term='wiser'/><category term='ooxml'/><category term='code maintenance'/><category term='patents'/><category term='preview'/><category term='obama'/><category term='dumbster'/><category term='dojo'/><category term='monkey'/><category term='mbp'/><category term='groovy'/><category term='ict'/><category term='akqa'/><category term='mac'/><category term='RoR'/><category term='onair2007washingtondc'/><category term='swf'/><category term='network'/><category term='ria'/><category term='whatwg'/><category term='testing'/><category term='rich text'/><category term='erlybird'/><category term='&apos;mac daddy&apos;'/><category term='code tools'/><category term='javascript'/><category term='documents'/><category term='DRY'/><category term='web applications'/><category term='map'/><category term='subethasmtp'/><category term='fds'/><category term='javaposse'/><category term='openoffice'/><category term='flexifier'/><category term='console'/><category term='ecma'/><category term='Functional'/><category term='new year'/><category term='wpf/e'/><category term='code'/><category term='neooffice'/><category term='apollo'/><category term='fdt'/><category term='moonlight'/><category term='linux'/><category term='embedded'/><category term='onairbustour'/><category term='util'/><category term='crd'/><category term='zune'/><category term='politics'/><category term='wii'/><category term='flexible'/><category term='lisp'/><category term='syntax highlighting'/><category term='jedit'/><category term='odf'/><category term='actoinscript'/><category term='life'/><category term='tamarin'/><category term='software experiences'/><category term='fotb'/><category term='ipod'/><category term='adobe-reader'/><category term='flash player'/><category term='itoworld'/><category term='career'/><category term='mozilla'/><category term='erlide'/><category term='RIFE'/><category term='obama08'/><category term='metadata'/><category term='aptana'/><title type='text'>~eokyere</title><subtitle type='html'>personal experiences and code :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26164208.post-4141107542685497502</id><published>2011-01-11T04:48:00.009Z</published><updated>2011-01-14T13:52:45.755Z</updated><title type='text'>The Python African Tour's Next Stop is Ghana</title><content type='html'>The Python Africa Tour (PAT) will make a 5-Day stop in Ghana, from 18th to 22nd January 2011. The goal of the tour is to promote modern programming techniques and tools based on the Python language. &lt;br /&gt;&lt;br /&gt;Python is an interpreted, general-purpose high-level programming language whose design philosophy emphasizes code readability. Python aims to combine "remarkable power with very clear syntax", and its standard library is large and comprehensive. [&lt;a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29"&gt;Link&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;The tour's workshop is part of a grassroots effort organized by programmers, educators and open-source software champions. Ghana's Google Technology User Group (GTUG) along with other experts will be instructors during the workshop. The workshop will bring new technology ideas and skills to students and professionals in Ghana.&lt;br /&gt;&lt;br /&gt;The agenda is:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Day 1: Introduction to Python&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Day 2: Introduction to Python (cont.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Day 3: Introduction to Web Development with Python (particularly with Django)&lt;/li&gt; &lt;br /&gt;&lt;li&gt;Day 4: Python Sprint/Hackathon&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Day 5: Python Sprint/Hackathon (cont.)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The tour will be hosted for the tutorial part of the workshop (18-20 Jan 2011) by African University College of Communications (AUCC  - &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=african+university+college+of+communications,+adabraka+accra&amp;sll=37.0625,-95.677068&amp;sspn=43.393645,93.076172&amp;ie=UTF8&amp;hq=african+university+college+of+communications,&amp;hnear=Adabraka,+Osu+Klottey,+Accra,+Accra+Metropolis,+Greater+Accra,+Ghana&amp;ll=5.56013,-0.209727&amp;spn=0.006418,0.011362&amp;z=17&amp;iwloc=A"&gt;Map&lt;/a&gt;) and for the Sprint/Hackathon (21-22 Jan 2011) by Ghana Telecom University College (GTUC - &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=ghana+telecom+university+college&amp;sll=5.56013,-0.209727&amp;sspn=0.006418,0.011362&amp;ie=UTF8&amp;hq=ghana+telecom+university+college&amp;hnear=&amp;ll=5.599265,-0.230284&amp;spn=0.013368,0.022724&amp;z=16&amp;iwloc=E"&gt;Map&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;The tour is coordinated by Kamon Ayeva, and has made previous stops in Nigeria, Senegal and Morocco.&lt;br /&gt;&lt;br /&gt;Sponsors currently include Google, BECATEC, Python Software Foundation, and supported by Fedora Linux Project, Ghana GTUG and Hutspace.&lt;br /&gt;&lt;br /&gt;Contact the PAT Oraganising Team (for more information, sponsorship etc) at  patghana@gmail.com.&lt;br /&gt;&lt;br /&gt;You can also regiser to be part of the tour at: &lt;a href="http://www.pythonafricantour.com/countries/ghana/participate"&gt;http://www.pythonafricantour.com/countries/ghana/participate.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Facebook: &lt;a href="http://www.facebook.com/#!/PythonGhana"&gt;http://www.facebook.com/#!/PythonGhana&lt;/a&gt;&lt;br /&gt;Twitter: &lt;a href="http://www.twitter.com/PATGhana"&gt;http://www.twitter.com/PATGhana&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-4141107542685497502?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4141107542685497502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4141107542685497502'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2011/01/python-african-tours-next-stop-is-ghana.html' title='The Python African Tour&apos;s Next Stop is Ghana'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8591088193271624068</id><published>2009-07-11T20:48:00.007Z</published><updated>2009-09-25T12:35:16.681Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ghana'/><category scheme='http://www.blogger.com/atom/ns#' term='obama'/><title type='text'>obama's message to African youth</title><content type='html'>As I said earlier, Africa's future is up to Africans.&lt;br /&gt;The people of Africa are ready to claim that future. And in my country, African Americans -- including so many recent immigrants -- have thrived in every sector of society. We've done so despite a difficult past, and we've drawn strength from our African heritage. With strong institutions and a strong will, I know that Africans can live their dreams in Nairobi and Lagos, Kigali, Kinshasa, Harare, and right here in Accra. (Applause.)&lt;br /&gt;&lt;br /&gt;You know, 52 years ago, the eyes of the world were on Ghana. And a young preacher named Martin Luther King traveled here, to Accra, to watch the Union Jack come down and the Ghanaian flag go up. This was before the march on Washington or the success of the civil rights movement in my country. Dr. King was asked how he felt while watching the birth of a nation. And he said: "It renews my conviction in the ultimate triumph of justice."&lt;br /&gt;&lt;br /&gt;Now that triumph must be won once more, and it must be won by you. (Applause.) &lt;strong&gt;And I am particularly speaking to the young people all across Africa and right here in Ghana&lt;/strong&gt;. In places like Ghana, &lt;strong&gt;young people make up over half of the population.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;And here is what you must know: The world will be what you make of it. You have the power to hold your leaders accountable, and to build institutions that serve the people. &lt;strong&gt;You can serve in your communities, and harness your energy and education to create new wealth and build new connections to the world.&lt;/strong&gt; You can conquer disease, and end conflicts, and &lt;strong&gt;make change from the bottom up&lt;/strong&gt;. You can do that. Yes you can -- (applause) -- because in this moment, history is on the move.&lt;br /&gt;&lt;br /&gt;But these things can only be done if all of you take responsibility for your future. And it won't be easy. It will take time and effort. There will be suffering and setbacks. But I can promise you this: America will be with you every step of the way -- as a partner, as a friend. (Applause.) Opportunity won't come from any other place, though. It must come from the decisions that all of you make, the things that you do, the hope that you hold in your heart.&lt;br /&gt;&lt;br /&gt;Ghana, freedom is your inheritance. Now, it is your responsibility to build upon freedom's foundation. And if you do, we will look back years from now to places like Accra and say this was the time when the promise was realized; this was the moment when prosperity was forged, when pain was overcome, and a new era of progress began. This can be the time when we witness the triumph of justice once more. Yes we can. Thank you very much. God bless you. Thank you. (Applause.) &lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.huliq.com/1/83403/transcript-obamas-speech-ghana"&gt;http://www.huliq.com/1/83403/transcript-obamas-speech-ghana&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8591088193271624068?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8591088193271624068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8591088193271624068'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2009/07/obamas-message-to-african-youth.html' title='obama&apos;s message to African youth'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-5227530021358791443</id><published>2008-12-01T20:49:00.002Z</published><updated>2009-03-23T17:21:56.870Z</updated><title type='text'>book meme</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;      &lt;blockquote&gt;When a MySpace user visited Samy's page, that user      would execute the attack code.&lt;/blockquote&gt;&lt;p&gt;From"&lt;a href='http://www.amazon.com/Hacking-Exposed-Web-2-0-Solutions/dp/0071494618'&gt;Hacking    Exposed Web 2.0&lt;/a&gt;" by Rich Cannings, Himanshu Dwivedi, ZaneLackey&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Grab the nearest book.&lt;/li&gt;&lt;li&gt;Open it to page 56.&lt;/li&gt;&lt;li&gt;Find the fifth sentence.&lt;/li&gt;&lt;li&gt;Post the text of the sentence in your journal along with these instructions.&lt;/li&gt;&lt;li&gt;Don't dig for your favorite book, the cool book, or the intellectual one: pick the &lt;em&gt;CLOSEST&lt;/em&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;via &lt;a href='http://www.eflorenzano.com/blog/post/book-meme/'&gt;Eric Florenzano's Blog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;ps: testing out &lt;a href='http://buzz.blogger.com/2007/03/emacs-client-for-blogger.html'&gt;emacs-gblogger&lt;/a&gt;&lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-5227530021358791443?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/5227530021358791443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=5227530021358791443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5227530021358791443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5227530021358791443'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/12/book-meme.html' title='book meme'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8707968212059216325</id><published>2008-10-19T14:07:00.005Z</published><updated>2008-10-19T14:22:31.056Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='obama08'/><category scheme='http://www.blogger.com/atom/ns#' term='obama'/><category scheme='http://www.blogger.com/atom/ns#' term='colin powell'/><category scheme='http://www.blogger.com/atom/ns#' term='endorsement'/><title type='text'>powell endorses obama</title><content type='html'>i was just chatting with my dad the other day, about why it is taking so long for colin powell to endorse obama.&lt;br /&gt;&lt;br /&gt;the wait was worth it though:&lt;br /&gt;&lt;br /&gt;“He has both style and substance,” Mr. Powell said, speaking on NBC’s “Meet the Press.” He added, “Obama has displayed a steadiness; showed intellectual vigor. He has a definitive way of doing business that will do us well.”&lt;br /&gt;&lt;br /&gt;“I think that Senator Obama brings a fresh set of eyes, fresh set of ideas to the table. I think that Senator McCain, as gifted as he is, is essentially going to execute the Republican agenda, the orthodoxy of the Republican agenda with a new face and a maverick approach to it, and he’d be quite good at it, but i think we need more than that.”&lt;br /&gt;&lt;br /&gt;Mr. Powell told the reporters outside the studio that he still considers himself a Republican, despite his decision to vote for Mr. Obama. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://thecaucus.blogs.nytimes.com/2008/10/19/powell-endorses-obama/?hp"&gt;http://thecaucus.blogs.nytimes.com/2008/10/19/powell-endorses-obama/?hp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8707968212059216325?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/8707968212059216325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=8707968212059216325' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8707968212059216325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8707968212059216325'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/10/powell-endorses-obama.html' title='powell endorses obama'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-3953452505931568259</id><published>2008-06-04T12:57:00.000Z</published><updated>2008-06-04T12:58:44.566Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='obama'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>a historic nomination</title><content type='html'>&lt;a href="http://edition.cnn.com/2008/POLITICS/06/04/obama.victory/"&gt;http://edition.cnn.com/2008/POLITICS/06/04/obama.victory/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-3953452505931568259?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3953452505931568259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3953452505931568259'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/06/historic-nomination.html' title='a historic nomination'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8419995523120850233</id><published>2008-05-20T02:12:00.003Z</published><updated>2011-02-11T06:17:36.501Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='util'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>loremipsum</title><content type='html'>&lt;pre&gt;&lt;br /&gt;object LoremIpsum {&lt;br /&gt;  def main(args:Array[String]) = {&lt;br /&gt;    println(words.length)&lt;br /&gt;    println(paragraphs.length)&lt;br /&gt;    &lt;br /&gt;    println(paragraphs(6))&lt;br /&gt;    println("------&gt;&gt;")&lt;br /&gt;    println(words(400))&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  def words(n:Int):String = &lt;br /&gt;    words(n, words)&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  def paragraphs(n:Int):String = &lt;br /&gt;    paragraphs(n, paragraphs)&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  private def words(n:Int, xs:List[String]):String = &lt;br /&gt;    if (n &lt;= xs.length)&lt;br /&gt;      ("" /: xs.take(n)) (_ + " " + _)&lt;br /&gt;    else&lt;br /&gt;        words(n, xs ::: xs)&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  private def paragraphs(n:Int, xs:List[String]):String = &lt;br /&gt;    if (n &lt;= xs.length)&lt;br /&gt;      ("" /: xs.take(n)) (_ + "\n" + _)&lt;br /&gt;    else&lt;br /&gt;        paragraphs(n, xs ::: xs)&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  val text = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit.&lt;br /&gt;Integer faucibus leo ut lorem. Morbi interdum tellus ac felis. Etiam&lt;br /&gt;pharetra dignissim enim. Class aptent taciti sociosqu ad litora torquent&lt;br /&gt;per conubia nostra, per inceptos himenaeos. Aliquam odio. Maecenas&lt;br /&gt;eleifend ipsum in risus. Aliquam dolor nibh, rhoncus sit amet, volutpat&lt;br /&gt;eget, vestibulum a, odio. Lorem ipsum dolor sit amet, consectetuer&lt;br /&gt;adipiscing elit. Phasellus ipsum. Nullam ligula leo, placerat id,&lt;br /&gt;iaculis id, tempor non, mi. Sed eget justo sed massa vestibulum&lt;br /&gt;scelerisque. Nullam turpis. Quisque quam. Ut sit amet diam. Nunc vitae&lt;br /&gt;justo eget magna mollis iaculis. Ut tincidunt pretium nulla. Cras vel&lt;br /&gt;massa ac sem tincidunt consectetuer. Sed a lorem. Ut condimentum, ipsum&lt;br /&gt;a auctor ullamcorper, nibh neque adipiscing felis, vel elementum nibh&lt;br /&gt;urna quis tellus. Vestibulum nunc est, congue sed, dapibus eu, sodales&lt;br /&gt;vel, quam. Nullam et sem. Sed id leo at mi aliquet mollis. Curabitur&lt;br /&gt;ante. Sed in nunc et orci imperdiet pulvinar. Ut laoreet. Praesent&lt;br /&gt;pellentesque magna sed felis mattis imperdiet. Proin porttitor, felis ac&lt;br /&gt;tempus fringilla, lorem urna sagittis lectus, vitae venenatis lectus&lt;br /&gt;felis sit amet libero. Quisque ac dui. Sed augue sapien, fringilla ut,&lt;br /&gt;pulvinar ac, pellentesque non, turpis. Maecenas tempus enim ac nulla.&lt;br /&gt;Aenean urna augue, ultrices vel, rhoncus ut, lacinia lacinia, lectus.&lt;br /&gt;Integer eleifend lectus ac nisl. Nulla tincidunt, velit ultrices blandit&lt;br /&gt;blandit, arcu felis euismod justo, eu lobortis lacus ligula sed turpis.&lt;br /&gt;Proin quam. Praesent volutpat. Vivamus molestie purus vitae orci.&lt;br /&gt;Pellentesque dignissim augue id mi. Maecenas adipiscing tortor. Integer&lt;br /&gt;mi tortor, consequat eget, porttitor accumsan, pulvinar ut, augue.&lt;br /&gt;Nullam cursus viverra tortor. Donec tincidunt faucibus eros. Vestibulum&lt;br /&gt;turpis mi, pellentesque ac, gravida a, egestas eget, massa. Nullam massa&lt;br /&gt;purus, accumsan sed, fringilla ac, ornare nec, mauris. Nunc nisi nibh,&lt;br /&gt;malesuada vitae, porta a, placerat in, elit. Fusce feugiat dolor vitae&lt;br /&gt;quam. Sed malesuada elit non ante. Sed a sapien. Class aptent taciti&lt;br /&gt;sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.&lt;br /&gt;Aenean massa. Nulla erat velit, fringilla sit amet, varius vitae,&lt;br /&gt;egestas ac, eros. Aliquam adipiscing facilisis turpis. Aliquam erat&lt;br /&gt;volutpat. Donec semper ipsum id lorem. Proin ligula risus, dignissim in,&lt;br /&gt;feugiat non, tristique ac, mi. Donec placerat sem quis nibh. Nullam&lt;br /&gt;auctor. Etiam mi velit, gravida et, congue non, imperdiet id, libero. Ut&lt;br /&gt;lorem. Vestibulum aliquam vehicula leo. Etiam et ante. Maecenas nulla.&lt;br /&gt;In hac habitasse platea dictumst. Vivamus lorem sapien, blandit ut,&lt;br /&gt;congue et, ultrices nec, dolor. Suspendisse potenti. Curabitur quis mi.&lt;br /&gt;Pellentesque semper arcu quis nulla. Pellentesque tristique, lacus eget&lt;br /&gt;placerat ullamcorper, erat pede laoreet erat, ac adipiscing purus tortor&lt;br /&gt;in leo. Donec scelerisque. Curabitur orci urna, convallis eu,&lt;br /&gt;ullamcorper in, posuere non, augue. Donec libero augue, ullamcorper&lt;br /&gt;vitae, malesuada vitae, lacinia a, purus. Cum sociis natoque penatibus&lt;br /&gt;et magnis dis parturient montes, nascetur ridiculus mus. Fusce vitae&lt;br /&gt;diam in lorem pulvinar mollis. Morbi pretium risus. Aenean ut erat. In&lt;br /&gt;velit leo, interdum ac, suscipit vitae, malesuada ac, risus. Aliquam et&lt;br /&gt;turpis ac augue ornare pharetra. Vivamus augue lectus, tempus ut,&lt;br /&gt;lacinia nec, gravida et, lacus. Donec sodales placerat magna. Curabitur&lt;br /&gt;vitae sem."""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  val words = text.split("\\s").toList  &lt;br /&gt;  val paragraphs = text.split("\\n").toList&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8419995523120850233?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/8419995523120850233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=8419995523120850233' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8419995523120850233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8419995523120850233'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/05/loremipsum.html' title='loremipsum'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8651671391830338370</id><published>2008-05-06T16:46:00.003Z</published><updated>2008-05-06T17:12:50.972Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>what you gotta do today, do it</title><content type='html'>Guido Sohne, rip&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8651671391830338370?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8651671391830338370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8651671391830338370'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/05/what-you-gotta-do-today-do-it.html' title='what you gotta do today, do it'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-1971778143634619347</id><published>2008-03-05T23:28:00.003Z</published><updated>2008-03-05T23:32:25.166Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='teams'/><title type='text'>intangibles</title><content type='html'>Randy Moss' agent on why he resigned with the Patriots:&lt;br /&gt;&lt;br /&gt;"Oftentimes, when people judge whether a contract is a success, they look at how much it's worth. But there is more to life than just pure money," DiPiero said, according to The Globe. "In this case, Randy experienced some intangibles during the year, from his friendships, to his relationship with the coaching staff and others in the organization. Those intangibles had some value here."&lt;br /&gt;&lt;br /&gt;"I think Randy saw that he was in a great situation. Sure, he could have made more money, if that was his only consideration. I think he's more mature now. So once we were able to work out some details, we got it done. We weren't going back and forth trying to play games with the Patriots. The negotiations were done in good faith,"&lt;br /&gt;&lt;br /&gt;"I think Randy and coach [Bill] Belichick developed a mutual respect that is kind of neat,"&lt;br /&gt;&lt;br /&gt;Yep. Can relate to that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-1971778143634619347?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/1971778143634619347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/1971778143634619347'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/03/intangibles.html' title='intangibles'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-6254903795164493862</id><published>2008-01-04T19:33:00.000Z</published><updated>2008-01-04T19:39:44.222Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='new year'/><category scheme='http://www.blogger.com/atom/ns#' term=':)'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>... is golden</title><content type='html'>wow ... it's been silent here; happy new year :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-6254903795164493862?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6254903795164493862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6254903795164493862'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2008/01/is-golden.html' title='... is golden'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-670105108405364808</id><published>2007-09-21T10:12:00.000Z</published><updated>2007-09-27T00:51:56.849Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fold'/><category scheme='http://www.blogger.com/atom/ns#' term='map'/><category scheme='http://www.blogger.com/atom/ns#' term='Functional'/><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='actoinscript'/><title type='text'>higher order actionscript</title><content type='html'>I happened on the &lt;i&gt;every&lt;/i&gt; method on the Flex Array class yesterday, and so I took a peek; guess what else I found? Implementations for map, filter, (add reduce). I should not be surprised, but my eyebrows did jump a bit when I saw them. I wonder how many developers are actually using these functions, and writing actionscript code in a more functional way, generally.&lt;br /&gt;&lt;br /&gt;In (oop-style) Actionscript 1 [1] code, you typically wrote code like:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;var o = function() {};&lt;br /&gt;o.prototype = {&lt;br /&gt;  foo : function() {},&lt;br /&gt;  baz : function() {}&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;There is nothing special about the &lt;i&gt;o.prototype&lt;/i&gt; though, for what we want to discuss, rather the bit after it. This is Actionscript shorthand for creating key/value pairs; so foo and baz are keys, and for their values we are storing two functions (as values). Note that they could have been any valid type, but in this case they are Functions. This is not so much of a big thing, but if you do not actually know it, it is quite a big thing.  As Daniel Friedman mentions in the "Education of a Programmer in Languages", "both C and ML pass values around" but their interpretation of a value is quite different. Based on what a value is in the language you write code in, the possibilities, both in terms of what you can actually apply and what solutions you can think of, are quite different.&lt;br /&gt;&lt;br /&gt;I don't think developers pay attention to the functional nature of Actionscript enough. In the Flash/Actionscript developer community, it is standard practice to see code like:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;button.addEventListener(&amp;quot;click&amp;quot;, Delegate.create(this, function() { /*do something*/ }));&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;What the code block above is doing is passing an anonymous function--it could have been some other named function--as a 'listener' that should be executed when a button's onRelease event/callback occurs; this is everyday code. Passing functions as 'listeners', however, is about one of the very few instances, in most of the code I have seen, where I see functions being passed around.&lt;br /&gt;&lt;br /&gt;Actionscript is a functional programming language. Among other things this means that it supports functions that can accept and/or return functions as arguments or return values, respectively. When you can store functions as values, you can pass them as arguments, and you can return them from other functions, because they are, afterall, just values. Functions that can accept functions as arguments, and/or return other functions are referred to as higher order functions. Developers should explore the functional nature of Actionscript more. It is quite powerful and allows for some pretty elegant code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;functional, you say? list-at-a-time functions&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There are a multitude of times in code, where you want to apply a certain function to a whole list (Array) and return either a new list back, or some computed single value from that list. &lt;br /&gt;&lt;br /&gt;For example, we have a list of donuts, and we want to see which ones have chocolate, and then later decide to take chunks of bites out of them:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// some_list has a few donuts, and i want to see which is juicier&lt;br /&gt;var v:Array = [];&lt;br /&gt;for (var i:Number = 0, n:Number = donuts.length; i &amp;lt; n; ++i)&lt;br /&gt;  if ((donuts[i] as Donut).hasChocolate())&lt;br /&gt;    v.push(donut[i]);&lt;br /&gt;&lt;br /&gt;// then some where later in the day, we take a huge bite on those donuts with some function, randomBite(donut):Donut&lt;br /&gt;var u:Array = [];&lt;br /&gt;for (var i:Number = 0, n:Number = v.length; i &amp;lt; n; ++i)&lt;br /&gt;  u.push(randomBite(v[i] as Donut));&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;filter&lt;/i&gt;: The first loop is a filtering operation. It returns a list of all the donuts that pass the hasChocolate test.&lt;br /&gt;Per its name, a filter takes an intial list, and applies a certain predicate to the elements, returning only those that satisfy the predicate. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;map&lt;/i&gt;: A map is a way to apply a function to list (Array), and then return the results as a new list. The second loop is a mapping operation. It applies randomBite to all the list items, and returns a new list based on the value of those operations. If I am the one doing the randomBites, you might end up with a few nulls in your returned list ;)&lt;br /&gt;&lt;br /&gt;What are more practical examples? Return all unchecked items on a form; programatically click all buttons that satisfy some condition; passing a function to be used to calculate new positions in tweening (which again, is standard in the community) etc.&lt;br /&gt;&lt;br /&gt;Both loops can be re-written as [2]:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function choco(donunt:Donut):Boolean { return donut.hasChocolate(); }&lt;br /&gt;var chocs:Array = donuts.filter(choco);&lt;br /&gt;&lt;br /&gt;function randomBite(donut:Donut):Donut { /* bite donut, return the rest of it*/ }&lt;br /&gt;var bitten:Array = donuts.map(randomBite);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;We notice that, apart from the more beautiful code we generate, we do not have to write code to walk our list. The code also communicates exactly what it is doing. In the first instance, we are applying a filter, in the second instance a map. If we look at the loops, we have to go through the loop to understand what the code is doing.&lt;br /&gt;&lt;br /&gt;These operations, which are applied to an entire list in one step are referred to, per Joe Amstrong's Programming Erlang, as list-at-a-time functions. Using a list-at-a-time operation makes a program small; and because we regard each operation on the list as a single conceptual operation, the programs we write become easier to understand. A rather nice side effect I have noticed is, you think more about the actual operation you want to perform on the list rather than how to construct a loop that iterates over the list, which in a way leads to more accurate and self-documenting programs.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;fold (foldl, foldr), reduce&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In Scala, you can write code like&lt;br /&gt;&lt;br /&gt;1.+(2) // results in 3 [3]&lt;br /&gt;&lt;br /&gt;The addition symbol, which in this case represents a binary operator--by definition a function that takes two arguments and returns a single value--can be seen as: fun(a:Object, b:Object):Object. You can represent this on Numbers in Actionscript as:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function plus(a:Number, b:Number):Number { return a + b; }&lt;br /&gt;trace(plus(plus(1, 2), 3) == (1 + 2 + 3)) // true [4]  &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Writing all these plus pluses isn't terribly exciting, or interesting for that matter; but you already knew that. What if you could get your code to do all the plusing by passing it a list of the items to be plused? Or what if you could change the actual operation to be performed, by passing in a new function, and running it across the same set of items in the list?&lt;br /&gt;&lt;br /&gt;Fold, in general, it is a way of 'inserting' a binary operator between the elements of a list to compute a single value. In the code block above, you can see how the &lt;i&gt;plus&lt;/i&gt; function (a sum operation) is folded between the elements of the Array &lt;i&gt;[1, 2, 3]&lt;/i&gt;. If we decided to get the value of multiplying all the values, well, we just change the implementation of the function and pass a mult instead of a plus, say. &lt;br /&gt;&lt;br /&gt;When applying a fold, you normally have 3 arguments, the function (operator) to fold between the list's elements, the list itself, and a start value. So, to find the sum of an array, we start from 0, and so we have 0 + 1 + 2 + 3, or 3 + 2 + 1 + 0. The general function signature looks, in Actionscript 3, as: &lt;i&gt;function fold(Function, *, Array):*.&lt;/i&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I leave it to you to read more about the difference with foldl and foldr, and to look for other functional ideas such as currying (because Actionscript natively supports closures), and function composition--both currying and composition rely on the ability to return a function from a function.&lt;br /&gt;&lt;br /&gt;My personal Actionscript 3 implementation of some functional constructs is:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package f&lt;br /&gt;{&lt;br /&gt;  public class F&lt;br /&gt;  {&lt;br /&gt;    &lt;br /&gt;    public static function map(f:Function, v:Array):Array {&lt;br /&gt;      return foldr(compose(cons, f), [], v) as Array;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static function foldl(op:Function, z:*, v:Array):* {&lt;br /&gt;      if (0 == v.length)&lt;br /&gt;        return z;      &lt;br /&gt;      return foldl(op, op(z, car(v)), cdr(v));&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static function foldr(op:Function, z:*, v:Array):* {&lt;br /&gt;      if (0 == v.length)&lt;br /&gt;        return z;  &lt;br /&gt;      return op(car(v), foldr(op, z, cdr(v)));&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public static function filter(f:Function, v:Array):Array {&lt;br /&gt;      var u:Array = [];&lt;br /&gt;      for (var i:int = 0, n:int = v.length; i &amp;lt; n; ++i)&lt;br /&gt;        if (f(v[i]))&lt;br /&gt;          u.push(v[i]);&lt;br /&gt;      return u;  &lt;br /&gt;    }&lt;br /&gt;            &lt;br /&gt;    public static function cons(a:*, b:*):Array { return arr(a).concat(arr(b));  }&lt;br /&gt;    &lt;br /&gt;    public static function car(v:Array):* { return v[0]; }&lt;br /&gt;    &lt;br /&gt;    public static function cdr(v:Array):Array { return v.slice(1); }&lt;br /&gt;&lt;br /&gt;    public static function compose(func:Function, g:Function):Function {&lt;br /&gt;      return function(x:*, ... args):* {&lt;br /&gt;        return func.apply(null, [g(x)].concat(args));&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private static function arr(a:*):Array {&lt;br /&gt;      if (null == a)&lt;br /&gt;        a = [];&lt;br /&gt;      else if (!(a is Array))&lt;br /&gt;        a = [a];&lt;br /&gt;      return a as Array;     &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Actionscript is OO and functional. You can pass functions to and receive functions from functions. Passing functions around is very powerful. Using list-at-a-time operations will make your programs shorter. Importing some of the functional idioms (that are available to Actionscript) into your programs will allow you to look at your programs from a very different perspective and allow you to find some very elegant solutions, when the need (and opportunity) arises. Unless you really need it, for list operations see if your block of code can do without a for loop. Your programs will begin to look more elegant :)&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;1. &lt;a href="http://livedocs.adobe.com/flex/201/langref/Array.html"&gt;Array - Flex 2.0.1 Language Reference&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29"&gt;Fold (higher-order function) - Wikipedia&lt;/a&gt;&lt;br /&gt;3. &lt;a href="http://www.cs.indiana.edu/~dfried/dfried/dfried/mex.pdf"&gt;The Role of the Study of Programming Languages in the Education of a Programmer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;1. I bring up Actionscript 1 code, to show that the language has supported functional constructs for quite a while now.&lt;br /&gt;&lt;br /&gt;2. The function signature for both map and filter in the Array implementations, in Flex, look like: &lt;i&gt;function(f:Function, i:int, v:Array)&lt;/i&gt;, so our donut examples will actually be function choco(donut:Donut, i:int, v:Array); this is merely to make our signature just as the filter and map implementations expect, and do not have any effect on the actual computations we want to do, unless you actually need the index and array passed.&lt;br /&gt;&lt;br /&gt;3. This is because, in Scala, any method that takes only one argument can be written with infix notation; so: foo.op("bar") is the same as foo op "bar". Also, the addition symbol '+' is a method you can call on a Number, and in Scala everything is an object, and the '+' symbol can actually be the name of a method, because it is just as valid as 'p' or 'plus'.&lt;br /&gt;&lt;br /&gt;4. conceptually is same as +(+(1, 2), 3), or much nice in Scheme: (+ (+ 1 2) 3) or even (+ 1 2 3)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-670105108405364808?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/670105108405364808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/670105108405364808'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/higher-order-actionscript.html' title='higher order actionscript'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-3943395817350063651</id><published>2007-09-16T23:18:00.000Z</published><updated>2007-09-17T03:53:58.652Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse monkey'/><category scheme='http://www.blogger.com/atom/ns#' term='dash'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='macros'/><title type='text'>productivity with dash in eclipse</title><content type='html'>by now, most people should have heard bout Dash nee Eclipse monkey, released with europa, which allows you to script your eclipse-based ides with javascript (more languages to come), to perform common/repetitive tasks.&lt;br /&gt; &lt;br /&gt;I am writing some flex components, and the mxml and actionscript tends to be fairly generic; for instance, if you are creating components, and going by the 'standard' way of doing things, you are going to create some properties that have public &lt;i&gt;getters&lt;/i&gt; and &lt;i&gt;setters&lt;/i&gt; as the property names, and those same property names starting with (cringe) underscores as the member variable names.&lt;br /&gt;&lt;br /&gt;(or if this is Java, you write a few getFoo, setFoo methods on all foo member variables; the JDT has a "Generate Getters and Setters" menu option for this, if you are editing Java code)&lt;br /&gt;&lt;br /&gt;What I normally do is create my variable names and their return types, select them, and use a find replace (with regex) to generate the getters and setters.  &lt;br /&gt;&lt;br /&gt;so if I want to generate &lt;i&gt;x, y, width, height&lt;/i&gt; for my component, I will type:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;x:Number&lt;br /&gt;y:Number&lt;br /&gt;width:Number&lt;br /&gt;height:Number&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;select them, and do a search/replace as mentioned above. This is the type of job that I should clearly ship off to eclipse monkey. I want monkey to give me this output:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;        public function get x():Number {&lt;br /&gt;            return _x;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function set x(o:Number):void {&lt;br /&gt;            _x = o;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function get y():Number {&lt;br /&gt;            return _y;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function set y(o:Number):void {&lt;br /&gt;            _y = o;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function get width():Number {&lt;br /&gt;            return _width;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function set width(o:Number):void {&lt;br /&gt;            _width = o;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function get height():Number {&lt;br /&gt;            return _height;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public function set height(o:Number):void {&lt;br /&gt;            _height = o;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected var _x:Number;&lt;br /&gt;        protected var _y:Number;&lt;br /&gt;        protected var _width:Number;&lt;br /&gt;        protected var _height:Number;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Advantages of using Dash include:&lt;br /&gt;&lt;br /&gt;- No more find/replace dialog box.&lt;br /&gt;- Quick shortcut key to apply this same transformation over and over again, quickly. &lt;br /&gt;- Code will be easy to update, should I desire changes to the  formatting of the output.&lt;br /&gt;- If other people in a team have monkey installed, you can share scripts&lt;br /&gt;- ...&lt;br /&gt;&lt;br /&gt;To install and use dash (I am doing this in standalone flex builder 2): &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;add the remote update url &lt;i&gt;http://download.eclipse.org/technology/dash/update/&lt;/i&gt;; update and restart.&lt;/li&gt;&lt;li&gt;when you restart you should see a &lt;strong&gt;Scripts&lt;/strong&gt; menu item. monkey works.&lt;li&gt;Create a project, called Monkey&lt;/li&gt;&lt;li&gt;Create a &lt;strong&gt;scripts&lt;/strong&gt; folder under your monkey project&lt;/li&gt;&lt;li&gt;Create a new javascript file (with a .js extension) in your scripts folder&lt;/li&gt;&lt;li&gt;Write you monkey script in there&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;Note&lt;/strong&gt;: Dash looks for scripts in a top-level &lt;strong&gt;scripts&lt;/strong&gt; folder, in an open project in your workspace. Because I am doing this in standalone Flex builder, I have just created the Monkey project as a repository for all my flex/actionscript related scripts, when using fb2. Also, under the Scripts menu item, you can click "Paste New Script", and it will create the project and scripts folder we created above. &lt;br /&gt;&lt;br /&gt;The code below does the setter/getter transformations:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/*&lt;br /&gt; * Menu: Actionscript &amp;gt; Generate Properties&lt;br /&gt; * Key: M3+9&lt;br /&gt; * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript&lt;br /&gt; */&lt;br /&gt; &lt;br /&gt;function main() &lt;br /&gt;{&lt;br /&gt;  var editor = editors.activeEditor&lt;br /&gt;  var source = editor.source&lt;br /&gt;  &lt;br /&gt;  if (editor.selectionRange) {&lt;br /&gt;    var range  = editor.selectionRange&lt;br /&gt;  var offset = range.startingOffset&lt;br /&gt;  &lt;br /&gt;  var text = source.substring (offset, range.endingOffset)&lt;br /&gt;  var result = text.match(/(\w+:\w+)/g);&lt;br /&gt;  &lt;br /&gt;  o = &amp;quot;&amp;quot;&lt;br /&gt;  &lt;br /&gt;  for (var i = 0, n = result.length; i &amp;lt; n; ++i)&lt;br /&gt;    o += props(result[i])&lt;br /&gt;  &lt;br /&gt;  for (var i = 0, n = result.length; i &amp;lt; n; ++i)&lt;br /&gt;    o += getvar(result[i])&lt;br /&gt;    &lt;br /&gt;  o += &amp;quot;\n&amp;quot;&lt;br /&gt;  &lt;br /&gt;//  debug(o)  &lt;br /&gt;  editor.applyEdit(offset, range.endingOffset - offset, o)&lt;br /&gt;   }  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function props(v) {&lt;br /&gt;  var parts = v.split(&amp;quot;:&amp;quot;);&lt;br /&gt;  &lt;br /&gt;  if (2 != parts.length)&lt;br /&gt;    return &amp;quot;&amp;quot;;&lt;br /&gt;    &lt;br /&gt;  var s = &amp;quot;\n\t\tpublic function get &amp;quot; + parts[0] + &amp;quot;():&amp;quot; + parts[1] + &amp;quot; {&amp;quot;;&lt;br /&gt;  s += &amp;quot;\n\t\t\treturn _&amp;quot; + parts[0] + &amp;quot;;&amp;quot; ;&lt;br /&gt;  s += &amp;quot;\n\t\t}\n\n&amp;quot;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  s += &amp;quot;\t\tpublic function set &amp;quot; + parts[0] + &amp;quot;(o:&amp;quot; + parts[1] + &amp;quot;):void {&amp;quot;;&lt;br /&gt;  s += &amp;quot;\n\t\t\t_&amp;quot; + parts[0] + &amp;quot; = o;&amp;quot; ;&lt;br /&gt;  s += &amp;quot;\n\t\t}\n&amp;quot;;&lt;br /&gt;  &lt;br /&gt;  return s;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getvar(s) {&lt;br /&gt;  if (1 &amp;gt; s.length)&lt;br /&gt;    return &amp;quot;&amp;quot;;&lt;br /&gt;    &lt;br /&gt;  return &amp;quot;\n\t\tprotected var _&amp;quot; + s + &amp;quot;;&amp;quot;;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;function debug(s) {&lt;br /&gt;  Packages.org.eclipse.jface.dialogs.MessageDialog.openInformation(window.getShell(), &amp;quot;Monkey Debugging&amp;quot;, s);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The &lt;i&gt;Menu&lt;/i&gt; and &lt;i&gt;Key&lt;/i&gt; that appear as comments in the js code are meta data for declaring the shortcut key, and menu structure for your script. So for this, you should see a "Generate Properties" menu item, under Scripts/Actionscript, and that menu Item should be bound to Alt + 9.&lt;br /&gt;&lt;br /&gt;As you can see, you can simplify some of the cookie-cutter stuff you have to do with these monkey scripts. Hopefully, you can write some of your own, and find them increase your productivity in your day-to-day coding assignments.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/dash/"&gt;Project Dash&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aptana.com/docs/index.php/Creating_a_new_Eclipse_Monkey_script"&gt;Creating a new Eclipse Monkey script&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aptana.com/docs/index.php/Adding_metadata_to_an_Eclipse_Monkey_script"&gt;Adding metadata to an Eclipse Monkey script&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-3943395817350063651?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3943395817350063651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3943395817350063651'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/productivity-with-dash-in-eclipse.html' title='productivity with dash in eclipse'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-3292901187764693256</id><published>2007-09-11T12:06:00.000Z</published><updated>2007-09-11T12:41:22.500Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='patents'/><category scheme='http://www.blogger.com/atom/ns#' term='moonlight'/><title type='text'>moonlight. patents. who-woulda-thought ;)</title><content type='html'>From a &lt;a href="http://groups.google.com/group/tiraniaorg-blog-comments/browse_thread/thread/2a07b8b50038d8c8/d582162af2d63d57"&gt;conversation&lt;/a&gt; on tirania.org (via /.): &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;gt; What about microsoft patents? &lt;br /&gt;&amp;gt; Will I have to suffer the shadow of Microsoft patents  over Silverlight &lt;br /&gt;&amp;gt; when &lt;strong&gt;using&lt;/strong&gt; or developing Moonlight?&lt;br /&gt;&lt;br /&gt;Not as long as you get/download Moonlight from Novell which will include&lt;br /&gt;patent coverage.&lt;br /&gt;&lt;br /&gt;Miguel&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;you are kidding, right?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;gt; Is the patent coverage you are talking about here anything to do with&lt;br /&gt;&amp;gt; Moonlight, or just the codec's Microsoft is providing Moonlight&lt;br /&gt;&amp;gt; users?  (I think I know the answer, but just to clear this point up).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;All of Moonlight.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In fact the codecs will be downloaded from Microsoft and will have their own EULA.&lt;br /&gt;&lt;br /&gt;Miguel.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;all of it? haha. you are not kidding ;)&lt;br /&gt;&lt;br /&gt;software patents suck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-3292901187764693256?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3292901187764693256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3292901187764693256'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/moonlight-patents-who-woulda-thought.html' title='moonlight. patents. who-woulda-thought ;)'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-4705392072928363381</id><published>2007-09-04T13:21:00.000Z</published><updated>2007-09-06T17:00:13.753Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='Functional'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>erlang this. scala that. learn lisp.</title><content type='html'>i caught a link to a &lt;a href="http://www.tbray.org/ongoing/When/200x/2007/09/03/Sideways"&gt;post&lt;/a&gt; by tim bray:&lt;br /&gt; &lt;br /&gt;"&lt;i&gt;The E-Word · Erlang disruption. Erlang influence. Erlang (and Erlang and Erlang) database substrate. Erlang for C#. Erlang thoughts. Erlang for Web 2.0. A first Erlang program. Erlang influence. Erlang distributed DBMS. Erlang message passing. Erlang (and Erlang and Erlang) for Jabber and Atom and IPC.&lt;br /&gt;&lt;br /&gt;Erlang. Erlang.&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;Each of the 'E-word's points to a link that shows the general use the language is being pushed to. It is &lt;a href="http://groups.google.com/group/javawug/search?group=javawug&amp;q=erlang&amp;qt_g=Search+this+group"&gt;not &lt;/a&gt; the new Java, though, as you might have read elsewhere.&lt;br /&gt;&lt;br /&gt;it is interesting how much press a language that has been around this long is only beginning to get; but then it is "payback time", as Joe Amstrong mentions &lt;a href="http://www.pragmaticprogrammer.com/articles/erlang.html"&gt;here&lt;/a&gt;. I found Erlang (and Scala) through search on functional languages when I started to learn Scheme (Lisp) late last year.&lt;br /&gt;&lt;br /&gt;One thing though; I disagree with Tim on: "&lt;i&gt;I think that the human mind naturally thinks of solving problems along the lines “First you do this, then you do that”&lt;/i&gt;.  &lt;br /&gt;&lt;br /&gt;Programmers are trained, and over time learn to recognize (and solve problems) in the patterns they are introduced to. Just as people are taught (or learn) to code imperatively, they can adopt functional ideas and patterns, once they learn how to recognize and form them. &lt;br /&gt;&lt;br /&gt;When you cannot 'really' do assignment in a language, you are forced to wonder if you actually need assignment. And each time you have to make a copy of value, just so you can change some state in it, you know you are communicating that, indeed, that change was needed. So, you can approach it from the "&lt;i&gt;it's different&lt;/i&gt;" perspective or you can choose to call it "&lt;i&gt;hard&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;Languages like Scala and Erlang are definitely going to continue to be part of mainstream  developer conversation as we move into an ever more concurrent world. More than languages though, it is important that people are able to make clear and proper abstractions of the problems they are trying to solve, before mapping them onto the limitations (or lack thereof) of their favorite language. And it is important that programmers understand the underlying issues that each language and programming paradigm (or fad) tries to solve, so they can map these to their favorite language too. Meanwhile, as you might have read elsewhere, learn Lisp; it would make you a better problem solver and coder in every way.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-4705392072928363381?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4705392072928363381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4705392072928363381'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/erlang-this-scala-that-learn-lisp.html' title='erlang this. scala that. learn lisp.'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-4700837483250416913</id><published>2007-09-04T07:11:00.000Z</published><updated>2007-09-04T07:23:15.060Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ooxml'/><category scheme='http://www.blogger.com/atom/ns#' term='odf'/><title type='text'>ooxml dead... for now.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.odfalliance.org/"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://www.redhat.com/g/ODFLogo2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;good riddance! push on, odf!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-4700837483250416913?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4700837483250416913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4700837483250416913'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/ooxml-dead-for-now.html' title='ooxml dead... for now.'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-331080735000295079</id><published>2007-09-03T00:04:00.000Z</published><updated>2007-09-03T00:19:53.092Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fdt'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='code tools'/><title type='text'>fdt3 open beta</title><content type='html'>I had been hounding Nico and co for well over a year now about fdt3 and I am very pleased with the features and improvements on what remains my best Actionscript development tool. It is in &lt;a href="http://fdt.powerflasher.com/beta/"&gt;open beta&lt;/a&gt; now, so go grab it and take it for a ride. And thanks Nico, Ariane and the rest of you powerflashers!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-331080735000295079?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/331080735000295079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/331080735000295079'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/fdt3-open-beta.html' title='fdt3 open beta'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-1326467679662766441</id><published>2007-08-21T15:13:00.000Z</published><updated>2007-09-04T00:16:30.310Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlide'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='jedit'/><category scheme='http://www.blogger.com/atom/ns#' term='monkey'/><category scheme='http://www.blogger.com/atom/ns#' term='erlybird'/><title type='text'>erlang support in jedit</title><content type='html'>working in a new language is always fun; even doubly so, if it is in a certain language called erlang ;) ... what sucks though, is setting up new IDEs and dev environments; over the last week, or so, I have used and thrown out:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;erlybird&lt;/i&gt; -- because it is pre-alpha; slow as a dog; and shows errors for perfectly accurate erlang code (in the rabbitmq codebase I am currently working on) ... but like I said, it is pre-alpha, so those things are to be expected&lt;br /&gt;&lt;i&gt;erlide&lt;/i&gt; -- because I have had it kill-dash-nining eclipse, for every code compile&lt;br /&gt;&lt;br /&gt;beautiful thing about erlang is, programs written in the language are naturally concise, and so you can get by without the need for an IDE; which is quite a mindset change for me--don't get me wrong; I'll use an IDE if there was a good one out there; but I don't need it, like I do when I switch back to working on the Java/Flex bits of the stuff I work on.&lt;br /&gt;&lt;br /&gt;anyway, jedit has good syntax highlighting support for erlang; and good macro, regex,  and scripting (BeanShell) support, so you can customize to fit stuff not supported ootb&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;i&gt;(3 Sept)&lt;/i&gt;&lt;br /&gt;FIXED!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt; &lt;i&gt;(22 Aug)&lt;/i&gt;&lt;br /&gt;one thing I failed to mention is that erlide has a really good code outline feature, that shines when you have code that has a lot of pattern matching going on. Plus it is actually quite snappy for 'normal' usage; so I investigated the problem a bit; as it turns out, I had modules with identical names, in different projects and Vlad confirmed over email that it is actually a bug, which is why eclipse was hanging. Bug filed &lt;a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1779732&amp;group_id=58889&amp;atid=489191"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Add eclipse monkey to this, and erlide is a pretty kewl erlang tool, afterall (after the bugfix, of course) :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-1326467679662766441?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/1326467679662766441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/1326467679662766441'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/08/erlang-support-in-jedit.html' title='erlang support in jedit'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-3566761966353798897</id><published>2007-08-21T09:58:00.000Z</published><updated>2007-08-21T10:40:06.274Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='onair2007washingtondc'/><category scheme='http://www.blogger.com/atom/ns#' term='onairbustour'/><title type='text'>onair2007washingtondc</title><content type='html'>currently in dc, and the &lt;a href="http://onair.adobe.com/schedule/cities/washingtondc.php"&gt;onair bus tour&lt;/a&gt; made a pit stop in falls church yesterday, so I popped out there (with &lt;a href="http://thegyfted.com/"&gt;Gyfted&lt;/a&gt;) to hang out, get some free food (awesome meatballs), while we got some work done in the lobby&lt;br /&gt;&lt;br /&gt;presentations were on the general air feature list, db &amp; dataservices, integration with html/ajax, and a display of pretty cool stuff guys are building&lt;br /&gt;&lt;br /&gt;things that caught my attention: Y!'s YUI and compatibility with AIR; salesforce's apex api (with flex bindings) ... and guitar hero ;)&lt;br /&gt;&lt;br /&gt;if you are in the area, next stop is in baltimore, later today&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-3566761966353798897?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3566761966353798897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3566761966353798897'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/08/onair2007washingtondc.html' title='onair2007washingtondc'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-703886739159332017</id><published>2007-07-30T13:23:00.000Z</published><updated>2007-07-31T13:38:22.253Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='code tools'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>jatran: java to scala (and actionscript) transformer</title><content type='html'>I posted this message to the scala list earlier today:&lt;br /&gt;&lt;br /&gt;jatran is a tool I wrote last summer to transform Java source files into Actionscript 2&lt;br /&gt;&lt;br /&gt;It is based on Andy Tripp's &lt;a href="http://www.jazillian.com/antlr/emitter.html"&gt;JavaEmitter&lt;/a&gt; and the updated &lt;a href="http://antlr.org/grammar/1090713067533/index.html"&gt;java15.g&lt;/a&gt; antlr grammar by Michael Studman&lt;br /&gt;&lt;br /&gt;I have dusted it off and added a preliminary implementation for transforming Java to Scala (and actionscript 3)&lt;br /&gt;Most of the notes for performing the transformations come from Burak Emir's notes &lt;a href="http://lamp.epfl.ch/~emir/bqbase/2005/01/21/java2scala.html"&gt;here&lt;/a&gt; as well as A. Sundararajan's notes &lt;a href="http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers"&gt;here&lt;/a&gt; and the ScalaRef&lt;br /&gt;&lt;br /&gt;it is by no means meant to create a fully useful scala (or actionscript) file, but it gets some of the manual work out of the way&lt;br /&gt;here are a few things basic things that work currently:&lt;br /&gt;&lt;br /&gt;for Scala:&lt;br /&gt;- interfaces are changed to traits; implements is changed to extends/with&lt;br /&gt;- all static class members are pushed into an object with the same TypeName as the class definition&lt;br /&gt;- a few java keywords with annotation equivalents in scala (like transient, volatile, native) are converted&lt;br /&gt;- java 1.5 @Override annotations are converted into the override keyword&lt;br /&gt;- method definitions are changed to 'def'; public modifiers are dropped&lt;br /&gt;- throws clause is changed to scala throws annotations&lt;br /&gt;- variable definitions are changed from Type type to the type:Type (post-colon) syntax&lt;br /&gt;- final variables are converted into scala vals&lt;br /&gt;- Type params are transformed into scala syntax&lt;br /&gt;- instanceof and type casts become isInstanceof[Type] and asInstanceof[Type]&lt;br /&gt;&lt;br /&gt;I am not sure how to treat multiple ctors, as well as abstract methods, so I comment these out at the moment&lt;br /&gt;&lt;br /&gt;it's not pretty, but the code is available publicly as a googlecode project; source at: &lt;a href="http://code.google.com/p/jatran/source"&gt;http://code.google.com/p/jatran/source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and you can checkout the code as:&lt;br /&gt;&lt;i&gt;svn checkout http://jatran.googlecode.com/svn/trunk/ jatran&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;if you check it out, pls run the default ant build.xml file task (&lt;i&gt;ant&lt;/i&gt;); it will compile and create the dist jar file. then run &lt;i&gt;./jatran.sh&lt;/i&gt; for usage info&lt;br /&gt;&lt;br /&gt;typical usage is: &lt;i&gt;./jatran.sh -l scala -o ~/some/path/out -i src&lt;/i&gt;&lt;br /&gt;- it defaults to scala, so you can omit "-l scala"&lt;br /&gt;- if src is a folder it will parse the java files in it recursivly&lt;br /&gt;- output folder will be created if it does not exist (defaults to ./jatran-out)&lt;br /&gt;&lt;br /&gt;I have also added in an "untyped" option, which will strip type bit of a variable declaration, and keep only the identifier bit ie. var t:Type = foo becomes var t = foo&lt;br /&gt;&lt;i&gt;./jatran.sh -u -o ~/some/path/out -i src&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;for Actionscript 2 &amp; 3:&lt;br /&gt;- it does the right thing with packages&lt;br /&gt;- generally obeys the structure of as code (post-colon syntax, etc as above)&lt;br /&gt;a few other things I can't remember, but check it out&lt;br /&gt;&lt;br /&gt;the main application driver is written in groovy; it's a fun language, and I couldn't pass up using the commons-cli builder, plus groovy makes file processing a breeze :) &lt;br /&gt;&lt;br /&gt;if you have suggestions, pls drop a line at eokyere_AT_gmail_DOT_com&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;eokyere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-703886739159332017?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/703886739159332017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/703886739159332017'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/07/jatran-java-to-scala-and-actionscript.html' title='jatran: java to scala (and actionscript) transformer'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-4749058862300534705</id><published>2007-02-15T10:19:00.000Z</published><updated>2007-02-15T10:35:38.173Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='documents'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe-reader'/><category scheme='http://www.blogger.com/atom/ns#' term='preview'/><title type='text'>adobe reader for mac</title><content type='html'>for copying text from pdf, preview just doesn't seem to cut it; for instance if you want to copy text in one column, from a two-column text presentation, you are forced to copy text in the adjacent column as well... it does not maintain formatting; generally just a pain; on the other hand, out of the box, it provides the ability to annotate documents, which seems to be a feature in adobe reader pro or s'thing like that.&lt;br /&gt;&lt;br /&gt;anyway, i downloaded and installed adobe reader 8 finally last week (which is software i really didn't like for various reasons when I had a windows box), and i was actually quite surprised what a good user experience firing it up was. it starts in a breeze, looks cleaner and copying and such are better implemented. i think search is better implemented in preview though, and i still miss being able to annotate documents; as much as i like that, it's a feature i expect in a base package.&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Adobe Reader for Mac -- &lt;a href="http://tinyurl.com/vs6md"&gt;http://tinyurl.com/vs6md&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-4749058862300534705?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/4749058862300534705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=4749058862300534705' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4749058862300534705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4749058862300534705'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/02/adobe-reader-for-mac.html' title='adobe reader for mac'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-2744564442234021201</id><published>2007-02-15T09:29:00.000Z</published><updated>2007-02-15T09:54:56.249Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='offline'/><category scheme='http://www.blogger.com/atom/ns#' term='whatwg'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='clientside'/><category scheme='http://www.blogger.com/atom/ns#' term='apollo'/><title type='text'>clientside persistence and such</title><content type='html'>i threw a what was more of a curveball than anything else on ryan stewart's blog earlier this morning on his thoughts on the upcoming firefox offline mode feature being a bad idea; any water ryan's 2 posts hold on the subject seem very little water to me though, and it looks like i've lost my rights to post on his blog ;)&lt;br /&gt;&lt;br /&gt;reposting comment here, in the hope that i can get those rights back ;P&lt;br /&gt;&lt;br /&gt;[comment]&lt;br /&gt;ryan, i got your email; take that last post very lightly though :)&lt;br /&gt;&lt;br /&gt;i think there's a breed of application out there where clientside persistence increases their utility vastly. the work being done in this space did not just get started; rather than ramble on, i can point to a few resources:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developers.sun.com/prodtech/javadb/overview/product_tour/index.jsp"&gt;java db embedded in a browser&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sitepen.com/blog/2007/01/02/the-dojo-offline-toolkit/"&gt;dojo offline toolkit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/workshop/author/behaviors/reference/behaviors/userdata.asp"&gt;user data behavior&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.mozilla.org/en/docs/DOM:Storage"&gt;moz/dom storage&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;the general whatwg stuff&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;i am as excited about apollo and the other web techs coming out just as you are, and i've seen the demo use cases and can think of a few where it will fill in brilliantly.&lt;br /&gt;&lt;br /&gt;what is apollo? a runtime. the thick clients you build will run on it.&lt;br /&gt;what is a browser? a thick client. some of them (like firefox) are extensible.&lt;br /&gt;&lt;br /&gt;who is apollo aimed at? i think initially you, the developer not the 'customer'.&lt;br /&gt;who is firefox aimed at? users. but developers can dive into it too.&lt;br /&gt;&lt;br /&gt;those applications i mentioned earlier, however, are currently built to be run in a browser, and it will be ludicrous to think their owners will port them to a product that isn't even a public beta right away. maybe they will eventually; maybe they'll never do it.&lt;br /&gt;&lt;br /&gt;if the browser allowed us to persist data easily, clientside, gmail will exploit those capabilities right away; so too the vast other gmail-like applications out there. will those applications be re-written in apollo; maybe. maybe not. but they'll still be available on firefox/ie. and based on their utility for people, they'll still enjoy a broad userbase.&lt;br /&gt;&lt;br /&gt;do we miss offline mode in current webapps; maybe. will it be rendered useless if it's provided, because some other technology provides that and some other useful features? that's ludicrous.&lt;br /&gt;[/comment]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Ryan's blog post -- &lt;a href="http://tinyurl.com/35vfzx"&gt;http://tinyurl.com/35vfzx&lt;/a&gt;&lt;br /&gt;WHATWG -- &lt;a href="http://www.whatwg.org/"&gt;http://www.whatwg.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-2744564442234021201?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/2744564442234021201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=2744564442234021201' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2744564442234021201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2744564442234021201'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/02/clientside-persistence-and-such.html' title='clientside persistence and such'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8882602384367884376</id><published>2007-02-13T04:17:00.000Z</published><updated>2007-02-13T05:38:00.647Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wimax'/><category scheme='http://www.blogger.com/atom/ns#' term='ghana'/><category scheme='http://www.blogger.com/atom/ns#' term='policy'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='ict'/><category scheme='http://www.blogger.com/atom/ns#' term='economy'/><title type='text'>ghana: state of our nation at 50</title><content type='html'>There are a ton of Ghanaians (and well wishers) who will be joining friends and family to celebrate Ghana at 50 on 6 March (at home and around the world). There's quite a bit to be thankful for after 50 years of independence, as anyone who listened to/read the president's State of the Nation address will attest to.&lt;br /&gt;&lt;br /&gt;There were particular sections I was very interested in (from the president's address), and will like to draw attention to:&lt;br /&gt;&lt;br /&gt;(i) on Economic Performance: &lt;blockquote&gt;government has implemented various policies and programmes which have enabled it to transform the macro economy from years of stagnation to the current growth rate of 6.2%.  From 40.5% in 2000, inflation now stands at 10.2%; while the commercial banks’ lending rate which stood at over 50% five years ago is now around 20% and is still falling.&lt;/blockquote&gt;&lt;br /&gt;Even if you are no student of Economics, those numbers should tell you that the results from programs the government has embarked on over the brief period they have been in power have been a net positive. There are other tidbits worth noting in the address; for instance, remittances from Ghanaians abroad amounted to over 4 billion US dollars last year; read that again!&lt;br /&gt;&lt;br /&gt;(ii) on ICT (and this is one dear to my heart):&lt;blockquote&gt;today the revolution of Information Communication Technology is fundamentally changing the way the world works and decreasing the marginal cost of production and raising productivity across all industries. The Government will continue to place emphasis on the potential of Information and Communications Technology (ICT) to provide the foundation for transforming the nation’s economy.&lt;/blockquote&gt;...&lt;blockquote&gt;To ensure that every District has access to high speed internet connection and promote a wider penetration of ICT services throughout the country, including distance education and tele-medicine, the Government has secured from the Government of China, a concessionary loan facility of $30 million to construct a national Fibre Optic Communication Backbone&lt;/blockquote&gt;Notably missing from this section is the rollout of mobile WiMAX in Ghana, which is expected to be the first ever nationwide deployment. Less than 10 years ago, I had to travel from Kumasi to Accra (about a 3-4 hour bus drive) to get to a decent (28k ;P) internet connection. Having experienced the possibilities on the network abroad, it is easy to see how vertical solutions can be eked out of what is currently available and targeted for the marketplace that these infrastructural upgrades are going to open up. India became a technology hub when policies at the highest level were enacted with those goals in mind, so Ghana is certainly following the right model here.&lt;br /&gt;&lt;br /&gt;On a somewhat-related note, the Google Foundation's Believe Begin Become project in Ghana--a collaboration with the local private sector for entrepreneurship development and business networking--for this year has been launched.&lt;br /&gt;&lt;br /&gt;We have come a long way in 50 years; what technology and sound policies have done for India, let it do for us too.&lt;br /&gt;&lt;br /&gt;Ghana, ayekoo!&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Ghana @ 50 -- &lt;a href="http://http://www.ghana50.gov.gh/"&gt;http://www.ghana50.gov.gh/&lt;/a&gt;&lt;br /&gt;Ghana: State of the Nation Address, 2007 -- &lt;a href="http://tinyurl.com/25xd3h"&gt;http://tinyurl.com/25xd3h&lt;/a&gt;&lt;br /&gt;First Nationwide Mobile WiMAX Is Targeted For Ghana -- &lt;a href="http://tinyurl.com/2f7pda"&gt;http://tinyurl.com/2f7pda&lt;/a&gt;&lt;br /&gt;Ghana: Believe Begin Become 2007 Launched -- &lt;a href="http://tinyurl.com/2teelo"&gt;http://tinyurl.com/2teelo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8882602384367884376?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/8882602384367884376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=8882602384367884376' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8882602384367884376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8882602384367884376'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/02/ghana-state-of-our-nation-at-50.html' title='ghana: state of our nation at 50'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-3729285275405280406</id><published>2007-01-31T11:52:00.000Z</published><updated>2007-01-31T12:59:56.800Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fds'/><category scheme='http://www.blogger.com/atom/ns#' term='clientside'/><title type='text'>Thinking in Flex</title><content type='html'>A colleague forwarded a link with Bruce Eckel on "Hybridizing Java" on artima; the article makes some points on some of the mistakes that have hamstringed clientside Java, and  makes a case for why Adobe Flex is worth investing time in for your clientside needs. It also mentions why you might find Adobe's Apollo runtime on your desktop soon (this is technology I can't wait to get my hands on.)&lt;br /&gt;&lt;br /&gt;When Bruce Tate started writing about ruby and erlang and all the dynamic|functional languages out there, and why J2EE is a mess (cutting out the overtones) it made a few good men listen. It also showed that frameworks like RIFE were doing some good things, by giving developers a light, productive programming model for creating enterprise applications, and innovating in ways like making continuations available in Java, which I think a lot of people are going to start talking about a lot this year.&lt;br /&gt;&lt;br /&gt;As goes the serverside, so I hope goes the clientside; I am happy the "Thinking in X" man is evangelizing Flex. I took a trip in the wayback machine to 2003, when I was preaching the "marry flash and java" message, even if the technology was crude then. 4 or so years down the line, the technology is mature enough and way ahead of anything else for rendering your clientside on the web, and as mentioned earlier, what it does for the web, it promises for your desktop too. I hope the Flex vs Ajax debate will just die. When the Bruces talk people listen, and I hope a lot more developers jump on board this clientside technology.&lt;br /&gt;&lt;br /&gt;I was thinking the other day; rather than developers spend time on a GNU/Flash player, why not spend sometime on getting a free/open source alternative to Flex Data Services (FDS)? For me, the utility of a free/open source player does not match having something like FDS for gratis for now, especially, since Linux players are first class citizens from here on, as Bruce also mentions. I am going to spend some time on this one.&lt;br /&gt;&lt;br /&gt;And, I am looking forward to the Thinking in Flex book :)&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Hybridizing Java - &lt;a href="http://tinyurl.com/3czhzc"&gt;http://tinyurl.com/3czhzc&lt;/a&gt;&lt;br /&gt;Flex Data Services - &lt;a href="http://tinyurl.com/qd8mg"&gt;http://tinyurl.com/qd8mg&lt;/a&gt; &lt;br /&gt;Flash Speaks Java - &lt;a href="http://tinyurl.com/2ov6ls"&gt;http://tinyurl.com/2ov6ls&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-3729285275405280406?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/3729285275405280406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=3729285275405280406' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3729285275405280406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/3729285275405280406'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/01/thinking-in-flex.html' title='Thinking in Flex'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8106843275518225176</id><published>2006-12-11T10:01:00.000Z</published><updated>2006-12-11T11:00:31.382Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='swf'/><category scheme='http://www.blogger.com/atom/ns#' term='fotb'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf/e'/><title type='text'>opaque swf format?</title><content type='html'>Tim Sneath is an MS Vista Technical Evangelist, and I was reading his post on the WPF/E dev environment over the weekend. I was particularly interested, because I have a mac (with mono installed), and was wondering how I can get some wpf/e goodness going on this environemnt. Now if I am right, there's no luck here... is MS interested in having people develop for wpf/e on macs? Most geeks I know have mac book pros these days... I don't plan on getting vista installed, personally, but I would love to develop (or at least learn about wpf/e... in my current development env).&lt;br /&gt;&lt;br /&gt;Anyway, a statement on Tim's post didn't quite sound right to me:&lt;br /&gt;&lt;blockquote&gt;One difference that I'll call out is in the way each technology is embedded. Flash applets are distributed as .SWF files, which wrap all the resource and code information into a somewhat &lt;strong&gt;opaque&lt;/strong&gt; (emphasis, mine) binary format. On the other hand, the goal for "WPF/E" is to complement HTML by providing a more transparent approach.&lt;/blockquote&gt;&lt;br /&gt;I think this is inaccurate, and I hope the language is not deliberate; you can find out more if you do a web search for "swf specification"; I think there are benefits in having a single swf file to deploy: it is convenient for all the assets that come together for your particular swf, the binary format allows for a smaller footprint and efficient delivery eventually, plus it is trivial anyway if your target is a binary. If you really want to share the source, nothing prevents you from zipping it up and making it available, anyway. If you are doing flex and you want to publish your souce code, well that is documented too. I am not a fan of the fla format/flash IDE though, which is why I am happy that mxml allows you to do swf source, declaratively, with plain text.&lt;br /&gt;&lt;br /&gt;Judging from the response from the just-ended FOTB conference, people realize that ms has some really good tools for the web here. I don't know for myself. A fud campaign, however (and I hope it is not), will yield exactly the opposite of whatever the expectations are. Let the tools compete on their pure merits (if there indeed is overlap in capabilities), and do not set the baseline of developers for the platform to a windows OS.&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;WPF/E Developer Environment - &lt;a href="http://blogs.msdn.com/tims/archive/2006/12/08/the-quot-wpf-e-quot-developer-environment.aspx"&gt;http://tinyurl.com/y2vp7m&lt;/a&gt;&lt;br /&gt;Publish Your Flex Source code - &lt;a href="http://livedocs.macromedia.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000369.html"&gt;http://tinyurl.com/ued7o&lt;/a&gt;&lt;br /&gt;SWF Specification Links - &lt;a href="http://www.google.co.uk/search?q=swf+specification&amp;"&gt;http://tinyurl.com/wlbea&lt;/a&gt;&lt;br /&gt;FOTB - &lt;a href="http://www.flashonthebeach.com/"&gt;http://www.flashonthebeach.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8106843275518225176?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/8106843275518225176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=8106843275518225176' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8106843275518225176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8106843275518225176'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/12/opaque-swf-format.html' title='opaque swf format?'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-5479447972399203962</id><published>2006-11-30T06:24:00.000Z</published><updated>2006-11-30T07:06:45.801Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaposse'/><category scheme='http://www.blogger.com/atom/ns#' term='flash player'/><category scheme='http://www.blogger.com/atom/ns#' term='tamarin'/><title type='text'>flash @ the javaposse</title><content type='html'>James Ward at Adobe wrote to the JavaPosse (on episode 95, towards the end) to clear up a few things related to the tamarin announcement and it's timing with Java going the GPL route that came up in the previous edition; i called bs on javaposse, btw.&lt;br /&gt;&lt;br /&gt;Anyways, Dick and the rest of the guys there generally feel like I do--that there really is a drive to get current versions of the player on linux in time (which gets it into the hands of developers who haven't really cared about it in the past) and that it allows for some really slick stuff to be built.&lt;br /&gt;&lt;br /&gt;They mentioned that they might try to get James on there for a chat about flash, as an alternative *thick* client platform; I thought that is interesting; I&lt;strike&gt;'m sure&lt;/strike&gt; hope Adobe will follow up on this... it doesn't get as easy as this to hit some core audience :)&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-5479447972399203962?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/5479447972399203962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=5479447972399203962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5479447972399203962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5479447972399203962'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/11/flash-javaposse.html' title='flash @ the javaposse'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-5127061411857919580</id><published>2006-11-30T04:29:00.000Z</published><updated>2006-11-30T07:24:01.832Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ecmascript'/><category scheme='http://www.blogger.com/atom/ns#' term='aptana'/><category scheme='http://www.blogger.com/atom/ns#' term='code tools'/><category scheme='http://www.blogger.com/atom/ns#' term='web applications'/><title type='text'>Aptana, Your web IDE is here</title><content type='html'>while doing some research for work, I went off on a tangent wondering what happened to xamlon; hitting the default RHEL/Apache 2 site isn't what I bargained for; what happened to them?&lt;br /&gt;&lt;br /&gt;Meanwhile, I found a link to great IDE in Aptana (in beta) on Robin Debreuil's weblog; from the product page:&lt;br /&gt;&lt;blockquote&gt;Aptana is a robust, JavaScript-focused IDE for building dynamic web applications. Highlights include the following features:&lt;br /&gt;&lt;br /&gt;    * Code Assist on JavaScript, HTML, and CSS languages, including your own JavaScript functions&lt;br /&gt;    * Outliner that gives a snapshot view of your JavaScript, HTML, and CSS code structure&lt;/blockquote&gt;&lt;br /&gt;I've been using it for a few days now, and it is actually quite solid; it is built on Eclipse (and has a plugin for it) plus it's available on Mac, Linux and PC. If you are doing some coding in the file formats mentioned above, you want to try this product.&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Aptana - &lt;a href="http://aptana.com"&gt;http://aptana.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-5127061411857919580?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/5127061411857919580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=5127061411857919580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5127061411857919580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5127061411857919580'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/11/aptana-your-web-ide-is-here.html' title='Aptana, Your web IDE is here'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-2922082285084270835</id><published>2006-11-21T11:26:00.000Z</published><updated>2006-11-21T11:30:31.026Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash player'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='gaming'/><category scheme='http://www.blogger.com/atom/ns#' term='console'/><title type='text'>Wiiiiiiiii and flash :)</title><content type='html'>Dan Wood just pointed on our internal list that the wiiiiiiiiiii will have support for flash. From the Opera press release:&lt;br /&gt;&lt;br /&gt;"With support for Flash and AJAX-based content such as Google maps, Wii users will benefit from a feature-rich Internet experience that is uniquely customized for the Wii."&lt;br /&gt;&lt;br /&gt;sorry, ps3, but for geek points I know which console I'm getting :)&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Opera Wii Press Release -- &lt;a href="http://www.opera.com/pressreleases/en/2006/09/26/"&gt;http://www.opera.com/pressreleases/en/2006/09/26/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-2922082285084270835?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/2922082285084270835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=2922082285084270835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2922082285084270835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2922082285084270835'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/11/wiiiiiiiii-and-flash.html' title='Wiiiiiiiii and flash :)'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-5842603433985606769</id><published>2006-11-07T21:31:00.000Z</published><updated>2006-11-07T21:45:21.536Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash player'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='ecmascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tamarin'/><category scheme='http://www.blogger.com/atom/ns#' term='jscript'/><category scheme='http://www.blogger.com/atom/ns#' term='ecma'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='web applications'/><category scheme='http://www.blogger.com/atom/ns#' term='clientside'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>tamarin</title><content type='html'>in flash circles, this is probably old news, and will likely be the nail in the coffin of the flash/ajax debate.&lt;br /&gt;&lt;br /&gt;From the mozilla page:&lt;br /&gt;&lt;blockquote&gt;The Tamarin virtual machine currently implements the ECMAScript 3rd edition language standard that is the basis for JavaScript, Adobe ActionScript, and Microsoft Jscript, plus some of the new language features proposed in the ECMAScript 4th edition specification. By working on an open source implementation of ES4 with the community, Adobe and Mozilla hope to accelerate the adoption of a standard language for creating engaging Web applications. We hope the Tamarin project accelerates the ability of developers to create and deliver richer, more interactive experiences that work across multiple platforms.&lt;/blockquote&gt;&lt;br /&gt;go over to jd's &lt;a href="http://weblogs.macromedia.com/jd/archives/2006/11/tamarin_comment.cfm#more"&gt;blogpost&lt;/a&gt; for a roundup on the conversation on this so far.&lt;br /&gt;&lt;br /&gt;if you know flash-related stuff, your skill set just got cemented for a lot more years to come (more on this later)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Project Tamarin - &lt;a href="http://www.mozilla.org/projects/tamarin/"&gt;http://www.mozilla.org/projects/tamarin/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-5842603433985606769?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/5842603433985606769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=5842603433985606769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5842603433985606769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/5842603433985606769'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/11/tamarin.html' title='tamarin'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-6432856901868638410</id><published>2006-11-03T06:42:00.000Z</published><updated>2006-11-03T13:26:19.419Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='itoworld'/><category scheme='http://www.blogger.com/atom/ns#' term='akqa'/><category scheme='http://www.blogger.com/atom/ns#' term='crd'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='career'/><title type='text'>emmanuel.okyere@akqa.com</title><content type='html'>i'll be joining the ranks at &lt;strong&gt;AKQA&lt;/strong&gt;, in the crd dept, from next week; the guys at &lt;strong&gt;itoworld&lt;/strong&gt; have been such a positive influence on me... from one great group of guys to another great group of guys... it's been a lot of blessings; and i really appreciate all those experiences. wish me well :)&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-6432856901868638410?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/6432856901868638410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=6432856901868638410' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6432856901868638410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6432856901868638410'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/11/emmanuelokyereakqacom.html' title='emmanuel.okyere@akqa.com'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-2775365116916162149</id><published>2006-11-02T12:51:00.000Z</published><updated>2006-11-02T13:34:25.176Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='flash player'/><category scheme='http://www.blogger.com/atom/ns#' term='gnash'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='wora'/><title type='text'>Rob Savoye on Gnash - The GNU/Flash Player</title><content type='html'>John Dowdell provides a link to a video on &lt;a href="http://tech.netscape.com/story/2006/10/03/oreilly-eurooscon-rob-savoye-of-gnash/"&gt;Rob Savoye/Gnash&lt;/a&gt; in a comment to Ryan Stewart's &lt;a href="http://blog.digitalbackcountry.com/?p=548"&gt;blogpost&lt;/a&gt; on the Enhanced Flash Player... that was quite long :)&lt;br /&gt;&lt;br /&gt;Now if you see the video, it's interesting, to me at least, how over half of it is 'wasted' on Flash 'security' (specifically, harvesting of data/cookies), which I feel is a moot point, btw.&lt;br /&gt;&lt;br /&gt;Towards the end, however, Rob talks about what could be the actual utility of the free (as in speech and beer) flash player. Gnash uses gstreamer/ffmpeg to support all the audio and video formats of the gnash player, so rather than being able to play only proprietary formats like mp3 and flv, the gnash team plans to increase the adoption of the free codecs as well.&lt;br /&gt;&lt;br /&gt;He also mentions that the player is embeddable, and for a lot of content providers/consumer electronics people, java is too big; the interviewer mentions that embedded Java hasn't been easy to use and solutions she's found haven't been as wora as they should be... which is something I've heard from Richard Leggett before--he's the in-house Flashlite guru at AKQA, has a book coming out on-topic btw, and is well respected in the community on the subject.&lt;br /&gt;&lt;br /&gt;imho, this is the most important point Rob should have made, and that is sadly buried towards the end. Gnash is an embeddable audio/video streaming client, with support for proprietary and open codecs alike, that happens to be flash programmable.&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;Gnash - &lt;a href="http://www.gnu.org/software/gnash/"&gt;http://www.gnu.org/software/gnash/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-2775365116916162149?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gnu.org/software/gnash/' title='Rob Savoye on Gnash - The GNU/Flash Player'/><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/2775365116916162149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=2775365116916162149' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2775365116916162149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2775365116916162149'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/11/rob-savoye-on-gnash-gnuflash-player.html' title='Rob Savoye on Gnash - The GNU/Flash Player'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-7854836711848083013</id><published>2006-10-30T10:07:00.000Z</published><updated>2006-11-02T13:55:56.662Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flexifier'/><category scheme='http://www.blogger.com/atom/ns#' term='flexible'/><title type='text'>flexible flexifying flex</title><content type='html'>this post is about two new tools to get you flexing your muscles... err sorry, i almost got carried away ;P&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.osflash.org/john_grden"&gt;john grden&lt;/a&gt;, your boy behind red5, is making it &lt;a href="http://flexible.riaforge.org/"&gt;flexible&lt;/a&gt; to flex :) ... and hot on the heels of that (could be the other way around) Ted Patrick, Ray Camden and Ben Forta want you to flexify with the &lt;a href="http://try.flex.org/index.cfm"&gt;flexifier&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FLEXible gives you some limited capabilities of Adobe's Eclipse-based Flex Builder IDE, by allowing you drag/drop flex components, edit src and see changes in real time. It was built in flex, and here's a &lt;a href="http://www.rockonflash.com/flexible/videos/FLEXibleDemo/FLEXibleDemo.html"&gt;demo video here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;FLEXifier allows you to write and try flex code, directly on the application page, without needing to download or install anything. Also built with flex, and a mix of cf and spry.&lt;br /&gt;&lt;br /&gt;tasty morsels of your own dog food, and very good tools for the adoption of flex. go check em out. And thx guys.&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Nov 1 2006 -- Since there's a flash 9 player for linux out there and no support for linux yet, with Flex Builder, these tools (especially, flexible) should come in quite handy, shd you find yourself on a linux distro. Cheers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-7854836711848083013?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/7854836711848083013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=7854836711848083013' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/7854836711848083013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/7854836711848083013'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/flexible-flexifying-flex.html' title='flexible flexifying flex'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-2119365288333038924</id><published>2006-10-27T16:20:00.000Z</published><updated>2006-10-27T16:42:42.529Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='neooffice'/><category scheme='http://www.blogger.com/atom/ns#' term='software experiences'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><title type='text'>familiar software experiences</title><content type='html'>i'm what you could probably call a keyboard nut; probably for the same reason people get used to vi and then can't ever get used to any other editor. i'm not in that circle though... for practical reasons, i'd pick an ide over vi any day, but i digress&lt;br /&gt;&lt;br /&gt;anyway, i'm doing some writing stuff in neooffice (openoffice) and one of the things I like to do in eclipse is select a bunch of text and use Alt + cursor (up/down) to move them around. [when using this with the jdt, you actually get code formating as a bonus too :)]&lt;br /&gt;&lt;br /&gt;out of habit, I tried that on NO/OOo and it didn't work. i thought for a second that NO probably had the feature and so went asearching... playing around with various keyboard combinations... I found a few things... and yup, NO has that baby locked down too.&lt;br /&gt;&lt;br /&gt;On the mac, its Cmd + cursor (up/down) to move text around.&lt;br /&gt;&lt;br /&gt;brilliant!&lt;br /&gt;&lt;br /&gt;cheers,&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-2119365288333038924?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/2119365288333038924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=2119365288333038924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2119365288333038924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2119365288333038924'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/familiar-software-experiences.html' title='familiar software experiences'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-4953529001203719867</id><published>2006-10-24T20:03:00.000Z</published><updated>2006-10-28T14:29:48.393Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rich text'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax highlighting'/><category scheme='http://www.blogger.com/atom/ns#' term='code tools'/><title type='text'>codepress: real-time syntax highlighting in a textarea</title><content type='html'>i'm very jealous; something i always wanted to do with actionscript; create an online rich text editor that does real-time syntax highlighting (at least for Java/Actionscript).&lt;br /&gt;&lt;br /&gt;the guys over at &lt;a href="http://codepress.fermads.net/"&gt;CodePress&lt;/a&gt; site nailed it with javascript ;)&lt;br /&gt;&lt;br /&gt;nice. very nice. awesome stuff.&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-4953529001203719867?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/4953529001203719867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=4953529001203719867' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4953529001203719867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/4953529001203719867'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/codepress-real-time-syntax-highlighting.html' title='codepress: real-time syntax highlighting in a textarea'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-6587041695401506841</id><published>2006-10-24T19:24:00.000Z</published><updated>2006-10-24T19:58:06.757Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='dumbster'/><category scheme='http://www.blogger.com/atom/ns#' term='subethasmtp'/><category scheme='http://www.blogger.com/atom/ns#' term='wiser'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='greenmail'/><title type='text'>get Wiser with SubEthaSMTP</title><content type='html'>You won't think it should be so difficult to write effective test cases for the bits of your application where you have to send/receive emails.&lt;br /&gt;&lt;br /&gt;Sample use case:&lt;br /&gt;&lt;br /&gt;You have a 2-step registration process where after a user has submitted their info, they are sent a challenge token (via email) to validate the submission/make sure the email address is actually in use (and that they have access to it), before you add them to your 'users' table.&lt;br /&gt;&lt;br /&gt;Ideally, to test this little piece of functionality, you need to be able to give your test mua a fake smtp port, have a dummy server listening on that port, have a convenient way of starting this server, retrieving messages it has to transfer, be able to retrieve all the usual suspects from a sent message (sender, receiver, subject, content etc), and be able to make assertions against these and your test data.&lt;br /&gt;&lt;br /&gt;A long time ago, I found &lt;a href="http://quintanasoft.com/dumbster/"&gt;dumbster&lt;/a&gt;; I figured it solved the author's problems when he/she wrote it then, but just couldn't cut it for what I wanted to use it for.&lt;br /&gt;&lt;br /&gt;So I went asearching, and found &lt;a href="http://www.icegreen.com/greenmail/"&gt;greenmail&lt;/a&gt;, which seemed to relieve me of the pains I was having with dumbster, although it still felt kinda kludgy; for instance, this is a snippet taken of the examples doc on the greenmail page:&lt;br /&gt;&lt;br /&gt;[code]&lt;br /&gt;servers = new Servers(ServerSetupTest.ALL); servers.start(); &lt;br /&gt;//use random content to avoid potential residual lingering problems final String &lt;br /&gt;subject = servers.util().random(); final String body = servers.util().random(); &lt;br /&gt;&lt;PLACE YOUR SEND CODE HERE&gt;  &lt;br /&gt;//wait for max 5s for 1 email to arrive &lt;br /&gt;assertTrue(servers.waitForIncomingEmail(5000, 1)); //Retrieve using GreenMail API &lt;br /&gt;Message[] messages = servers.getReceivedMessages();&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the &lt;strong&gt;servers.waitForIncomingEmail(5000, 1)&lt;/strong&gt; bit is clearly kludgy; it also seemed to treat ccs as sent mail, so if you sent one mail and cc'ed it to 10 people, then you had to remember to test for 11 mails to be sent by the mta; i found workarounds for this, and all in all it caused me far less pain than dumbster, so I was actually quite happy with it... at least until Geert pointed me to &lt;a href="http://subethasmtp.tigris.org/wiser.html"&gt;Wiser&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;From the &lt;strong&gt;Wiser&lt;/strong&gt; page:&lt;br /&gt;&lt;br /&gt;[code]&lt;br /&gt;Using Wiser is trivial:&lt;br /&gt;&lt;br /&gt;Wiser wiser = new Wiser();&lt;br /&gt;wiser.setPort(2500); // Default is 25&lt;br /&gt;wiser.start();&lt;br /&gt;&lt;br /&gt;Now, use a mail client to send email to your Wiser server. To get your JavaMail messages out of the Wiser server, just use this code:&lt;br /&gt;&lt;br /&gt;for (WiserMessage message : wiser.getMessages())&lt;br /&gt;{&lt;br /&gt; String envelopeSender = message.getEnvelopeSender();&lt;br /&gt; String envelopeReceiver = message.getEnvelopeReceiver();&lt;br /&gt;&lt;br /&gt; MimeMessage mess = message.getMimeMessage();&lt;br /&gt;&lt;br /&gt; // now do something fun!&lt;br /&gt;}&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It really doesn't get simpler (and wiser than that); and yes, writing effective email test cases has, thanks to Wiser, become quite simple; and fun too :)&lt;br /&gt;&lt;br /&gt;cheers.&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-6587041695401506841?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/6587041695401506841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=6587041695401506841' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6587041695401506841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6587041695401506841'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/get-wiser-with-subethasmtp.html' title='get Wiser with SubEthaSMTP'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-2800435477906322693</id><published>2006-10-23T06:31:00.000Z</published><updated>2006-10-23T11:13:49.740Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='code maintenance'/><title type='text'>IoC: Inversion of Consequence</title><content type='html'>when i write code, and it causes you pain, try to find a positive spin to it ;P ... it might be the only thing that keeps you sane enough to get through the maintenance job/babysitting that you have to put it through... it's been a hell of a weekend, and I found Malcolm Forbes just about when I needed it - "Failure is success if we learn from it." If experience teaches us best, then hopefully it follows that you learn to avoid more code smells, the more brittle code you help to correct&lt;br /&gt;&lt;br /&gt;my valley of despair has finally hit a minimum and i'm off to find some much-needed sleep&lt;br /&gt;&lt;br /&gt;zzzzzz&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-2800435477906322693?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/2800435477906322693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=2800435477906322693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2800435477906322693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/2800435477906322693'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/ioc-inversion-of-consequence.html' title='IoC: Inversion of Consequence'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-530970164241418470</id><published>2006-10-19T08:00:00.000Z</published><updated>2006-10-19T08:32:31.640Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash player'/><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='wora'/><title type='text'>tux: we've been ria wora'ed ;P</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/7152/3193/1600/flash-parallels-fc4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/7152/3193/320/flash-parallels-fc4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;joining the earlier birds in announcing to the world the availability of player 9 for the tux family... in that screenshot, running happily on lampetia, fc4 over parallels in firefox 1.0.8 :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kaourantin.net/2006/10/flash-player-9-for-linux-beta-1.html"&gt;tinic uro&lt;/a&gt;, over at his blog, is really happy about the performance of this release. He metions this is the fastest gnu/linux version they've ever released, and that "in some cases the GNU/Linux version is up to 20% faster on the same hardware compared to the Windows 32bit version." It looks like tuxland finally found first-class citizenship in Adobe land--at least with the flash platform. &lt;br /&gt;&lt;br /&gt;while there are still problems with the current release that the Adobe engineers have to look at, as tinic notes, it should be interesting to see if releases from here on follow more of a parallel pattern.&lt;br /&gt;&lt;br /&gt;Developers sure would love that; all the features you've been coding to for the mac and win boxen, will now be free to run on all the gnu/linux flavors out there. A hat tip; a raised glass to the Tinic, Mike and the rest of the unsung heroes on this release.&lt;br /&gt;&lt;br /&gt;go grab it here &lt;a href="http://labs.adobe.com/technologies/flashplayer9/"&gt;http://labs.adobe.com/technologies/flashplayer9/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-530970164241418470?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/530970164241418470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=530970164241418470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/530970164241418470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/530970164241418470'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/tux-weve-been-ria-woraed-p.html' title='tux: we&apos;ve been ria wora&apos;ed ;P'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8629499513825875027</id><published>2006-10-18T07:53:00.000Z</published><updated>2006-10-18T08:44:19.485Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='&apos;mac daddy&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='zune'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='laughs'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><category scheme='http://www.blogger.com/atom/ns#' term=':)'/><title type='text'>mac a honey witcha zune?</title><content type='html'>&lt;blockquote&gt;"In a word, no. I've seen the demonstrations on the Internet about how you can find another person using a Zune and give them a song they can play three times. It takes forever. By the time you've gone through all that, the girl's got up and left! You're much better off to take one of your earbuds out and put it in her ear. Then you're connected with about two feet of headphone cable."&lt;/blockquote&gt;&lt;br /&gt;truer words haven't been said, and coming from the 'mac daddy' himself, u know u can take it to the bank ;P&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-8629499513825875027?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/8629499513825875027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=8629499513825875027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8629499513825875027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/8629499513825875027'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/mac-honey-witcha-zune.html' title='mac a honey witcha zune?'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-6878858980711385352</id><published>2006-10-11T03:40:00.000Z</published><updated>2006-10-25T04:06:15.399Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='RoR'/><category scheme='http://www.blogger.com/atom/ns#' term='RIFE'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='Aral'/><category scheme='http://www.blogger.com/atom/ns#' term='DRY'/><title type='text'>RIFE - as DRY as it comes</title><content type='html'>Aral has a post on some DRY pains with RoR (&lt;a href="http://aralbalkan.com/764"&gt;http://aralbalkan.com/764&lt;/a&gt;)... aral's blacklist of ips also managed to scoop me in, so my comment could not be retained&lt;br /&gt;&lt;br /&gt;anyways, Aral, I feel your pain; I don't know enough about Ruby or RoR to give a meaningful suggestion wrt them; in the RIFE community (&lt;a href="http://rifers.org"&gt;http://rifers.org&lt;/a&gt;) though, we believe that centralizing the metadata for your business objects, and allowing that to drive all the other connecting layers of your application is quite RIFE (read kewl ;P)&lt;br /&gt;&lt;br /&gt;say you have an object instance of Foo, foo, where&lt;br /&gt;&lt;br /&gt;Foo { String name; String email; }&lt;br /&gt;&lt;br /&gt;the metadata facility allows you to say, for example:&lt;br /&gt;&lt;br /&gt;addConstraint(new ConstrainedProperty("name").notNull(true).notEmpty(true));&lt;br /&gt;addConstraint(new ConstrainedProperty("email").email(true).unique(true).maxLength(100));&lt;br /&gt;&lt;br /&gt;the email field could, for instance, be representing the login field in your authentication toolkit&lt;br /&gt;&lt;br /&gt;by defining such metadata for the email field, the framework is able to (among a whole load of things):&lt;br /&gt;&lt;br /&gt;    * through it's database layer, use an sql query builder to limit the size of the column in which the text will stored when the table creation sql is generated (by the framework for you, from your business object/bean),&lt;br /&gt;    * through the metadata facility, validate/check that data entered indeed conforms to those constraints: that it's a well-formed email address, that it is unique (by applying a datasource context to it) and that it's size does not exceed the size constraints applied to it.&lt;br /&gt;    * through it's template engine, use an html form builder to create a field that doesn't allow the entry of longer text&lt;br /&gt;    * through it's template/validation engines, generate meaningful, customizable (through properties) error messages when constraints have been violated.&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;these, to paraphrase Steven Grimm, "cross-layer synergies" (enabled by RIFE's centralized metadata facility) are some of the reasons we are seeing an influx of developers adopting the RIFE way.. I don't believe it gets DRYer (or RIFEr for that matter) than that ;)&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-6878858980711385352?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/6878858980711385352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=6878858980711385352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6878858980711385352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6878858980711385352'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/as-dry-as-it-comes.html' title='RIFE - as DRY as it comes'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-116047870808232733</id><published>2006-10-10T10:50:00.000Z</published><updated>2006-10-18T08:45:24.842Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac book pro'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='mbp'/><title type='text'>the mbp club</title><content type='html'>most of the posts on this blog will be made on my trusty new (for about 4 months now) friend, charybdis; it's an mbp, that as of this posts spots OS X 10.4, instances of fedora core 4 and windows xp sp2 (over parallels). the first time someone asked me how i felt about her, i said she was graceful--that hasn't changed in 4 months.&lt;br /&gt;&lt;br /&gt;i run smultron as my basic development editor (vim for purely text stuff), have instances of Callisto (and Europa), Netbeans (5b2, 6m3), Xcode and ANTLRWorks for dev stuff; Callisto finds more use most of the time though. looking forward to adding an adobe (or whoever creates one's) flex ide (for mac) to that list&lt;br /&gt;&lt;br /&gt;my fc4 install, forms my basic 'remote' test environment (with tomcat 5.5.17, postgresql 8.0x among others for a current project), and will continue to play this role with added software as and when I need a linux test deployment target.&lt;br /&gt;&lt;br /&gt;windows is on there for a few random stuff i still haven't found mac/linux equivalents for, as well as for adobe software i'm either testing out or still using; i might strip out most of the unnecessary stuff over time, and use it as a target for any .net /winfx stuff i decide to dabble in, in the future.&lt;br /&gt;&lt;br /&gt;for writing and word processing stuff, as well as the planning that leads to them, I have neooffice, freemind, and omnioutliner.&lt;br /&gt;&lt;br /&gt;a couple of other random code running around here include colloquy (irc), skype b2/msn messenger 6, democracy (i'net tv), firefox 2rc2, iterm (and terminal), the google stuff for mac (google.com/mac), keynote etc&lt;br /&gt;&lt;br /&gt;you've been introduced to my trusty mbp; joined the club yet? how is it helping u do what u do?&lt;br /&gt;&lt;br /&gt;-- eokyere :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-116047870808232733?l=eokyere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/116047870808232733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26164208&amp;postID=116047870808232733' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/116047870808232733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/116047870808232733'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2006/10/mbp-club.html' title='the mbp club'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
