<?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'><id>tag:blogger.com,1999:blog-26164208</id><updated>2009-07-12T17:38:28.945Z</updated><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'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default?start-index=26&amp;max-results=25'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26164208.post-8591088193271624068</id><published>2009-07-11T20:48:00.006Z</published><updated>2009-07-12T17:38:28.954Z</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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-8419995523120850233</id><published>2008-05-20T02:12:00.002Z</published><updated>2008-05-20T02:17:33.569Z</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. Integer faucibus leo ut lorem. Morbi interdum tellus ac felis. Etiam pharetra dignissim enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam odio. Maecenas eleifend ipsum in risus. Aliquam dolor nibh, rhoncus sit amet, volutpat eget, vestibulum a, odio. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus ipsum. Nullam ligula leo, placerat id, iaculis id, tempor non, mi. Sed eget justo sed massa vestibulum scelerisque. Nullam turpis. Quisque quam. Ut sit amet diam. Nunc vitae justo eget magna mollis iaculis. Ut tincidunt pretium nulla.&lt;br /&gt;Cras vel massa ac sem tincidunt consectetuer. Sed a lorem. Ut condimentum, ipsum a auctor ullamcorper, nibh neque adipiscing felis, vel elementum nibh urna quis tellus. Vestibulum nunc est, congue sed, dapibus eu, sodales vel, quam. Nullam et sem. Sed id leo at mi aliquet mollis. Curabitur ante. Sed in nunc et orci imperdiet pulvinar. Ut laoreet. Praesent pellentesque magna sed felis mattis imperdiet. Proin porttitor, felis ac tempus fringilla, lorem urna sagittis lectus, vitae venenatis lectus felis sit amet libero. Quisque ac dui. Sed augue sapien, fringilla ut, pulvinar ac, pellentesque non, turpis. Maecenas tempus enim ac nulla. Aenean urna augue, ultrices vel, rhoncus ut, lacinia lacinia, lectus. Integer eleifend lectus ac nisl. Nulla tincidunt, velit ultrices blandit blandit, arcu felis euismod justo, eu lobortis lacus ligula sed turpis. Proin quam.&lt;br /&gt;Praesent volutpat. Vivamus molestie purus vitae orci. Pellentesque dignissim augue id mi. Maecenas adipiscing tortor. Integer mi tortor, consequat eget, porttitor accumsan, pulvinar ut, augue. Nullam cursus viverra tortor. Donec tincidunt faucibus eros. Vestibulum turpis mi, pellentesque ac, gravida a, egestas eget, massa. Nullam massa purus, accumsan sed, fringilla ac, ornare nec, mauris. Nunc nisi nibh, malesuada vitae, porta a, placerat in, elit. Fusce feugiat dolor vitae quam. Sed malesuada elit non ante. Sed a sapien.&lt;br /&gt;Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean massa. Nulla erat velit, fringilla sit amet, varius vitae, egestas ac, eros. Aliquam adipiscing facilisis turpis. Aliquam erat volutpat. Donec semper ipsum id lorem. Proin ligula risus, dignissim in, feugiat non, tristique ac, mi. Donec placerat sem quis nibh. Nullam auctor. Etiam mi velit, gravida et, congue non, imperdiet id, libero. Ut lorem. Vestibulum aliquam vehicula leo. Etiam et ante. Maecenas nulla. In hac habitasse platea dictumst. Vivamus lorem sapien, blandit ut, congue et, ultrices nec, dolor. Suspendisse potenti. Curabitur quis mi. Pellentesque semper arcu quis nulla. Pellentesque tristique, lacus eget placerat ullamcorper, erat pede laoreet erat, ac adipiscing purus tortor in leo.&lt;br /&gt;Donec scelerisque. Curabitur orci urna, convallis eu, ullamcorper in, posuere non, augue. Donec libero augue, ullamcorper vitae, malesuada vitae, lacinia a, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce vitae diam in lorem pulvinar mollis. Morbi pretium risus. Aenean ut erat. In velit leo, interdum ac, suscipit vitae, malesuada ac, risus. Aliquam et turpis ac augue ornare pharetra. Vivamus augue lectus, tempus ut, lacinia nec, gravida et, lacus. Donec sodales placerat magna. Curabitur vitae sem."""&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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-6983661502559867942</id><published>2007-09-18T14:40:00.000Z</published><updated>2007-09-18T14:57:37.446Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>ok, so where is the...</title><content type='html'>... commandline-driven, capable-of-asynchronous-tests, can-get-it-up-and-running-in-5-minutes, no-stupid-names-like-dojo-doh, or-mcp-for-that-matter, i-dont-care-what-backend-you-are-rpcing-to, yes-it-can-be-non-java, which-means-go-f-yourself-gwt, pick-it-up-drop-it-in-write-your-tests javascript-test-framework?&lt;br /&gt;&lt;br /&gt;that-actually-works!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-6983661502559867942?l=eokyere.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6983661502559867942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/6983661502559867942'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/09/ok-so-where-is.html' title='ok, so where is the...'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></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'/&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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author></entry><entry><id>tag:blogger.com,1999:blog-26164208.post-7908892649572427260</id><published>2007-05-06T04:48:00.000Z</published><updated>2007-05-06T15:08:03.457Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sports'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>boxing is dead</title><content type='html'>not a java/flash blogpost; the floyd/de la hoya bout was free in london; well, on sky sports. i can't really believe i was in a bar, pumping floyd up; nobody knew him and, mayweather split decision? i looked like a fool to them all the way through... until! &lt;br /&gt;&lt;br /&gt;but, nobody cared anyway; the fans are long gone :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26164208-7908892649572427260?l=eokyere.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eokyere.blogspot.com/feeds/7908892649572427260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=26164208&amp;postID=7908892649572427260' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/7908892649572427260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26164208/posts/default/7908892649572427260'/><link rel='alternate' type='text/html' href='http://eokyere.blogspot.com/2007/05/boxing-is-dead.html' title='boxing is dead'/><author><name>eokyere</name><uri>http://www.blogger.com/profile/08581319078698286013</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>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'/&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='https://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:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06762341040976505037'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>