<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7504541480590020244</id><updated>2012-01-21T03:17:03.312-08:00</updated><category term='install'/><category term='solr'/><category term='flash'/><category term='podcast'/><category term='javascript'/><category term='openatrium'/><category term='web'/><category term='development'/><category term='skype'/><category term='os x'/><category term='doctrine'/><category term='validation'/><category term='fms'/><category term='sustainability'/><category term='design pattern'/><category term='module'/><category term='jquery plugin'/><category term='augmented reality'/><category term='ios'/><category term='git'/><category term='shell'/><category term='script'/><category term='maintenance'/><category term='vim'/><category term='productivity'/><category term='code'/><category term='actionscript'/><category term='backup'/><category term='database'/><category term='apache'/><category term='linux'/><category term='virtualbox'/><category term='math'/><category term='contribution'/><category term='specification'/><category term='pronovix'/><category term='p2p'/><category term='mysql'/><category term='air'/><category term='java'/><category term='php'/><category term='macbook pro'/><category term='lifehacker'/><category term='multisite'/><category term='flex'/><category term='netbeans'/><category term='c'/><category term='druplash'/><category term='sql'/><category term='druplex'/><category term='search'/><category term='drupal'/><category term='pattern'/><category term='xdebug'/><category term='drupalcamp'/><category term='design'/><category term='project management'/><category term='myths'/><category term='apc'/><title type='text'>itarato</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3866747950307486776</id><published>2011-08-20T11:01:00.000-07:00</published><updated>2011-08-20T11:06:55.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Comics to PDF</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I'm not a comis guy but there are some I'm really interested to follow. The more I read online the more I realize it's a horrible experience for consuming. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DR5rnrYKk7A/Tk_3rzYtz0I/AAAAAAAAAfg/E9j5yIF7Ius/s1600/Screen%2Bshot%2B2011-08-20%2Bat%2B7.03.22%2BPM.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="305" width="400" src="http://2.bp.blogspot.com/-DR5rnrYKk7A/Tk_3rzYtz0I/AAAAAAAAAfg/E9j5yIF7Ius/s400/Screen%2Bshot%2B2011-08-20%2Bat%2B7.03.22%2BPM.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I was checking the image format and fortunately it had a sequence number: comic_#.png, where # is the number of the comic. So I created a small script that shows only the images in a plain html page:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;style&amp;gt;body {background: #000;}&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$from = $_GET['from'];&lt;br /&gt;$to   = $_GET['to'];&lt;br /&gt;for ($i = $from; $i &amp;lt;= $to; $i++) {&lt;br /&gt;  echo '&amp;lt;img src="SOURCE_URL' . $i . '.png" /&amp;gt;&amp;lt;br /&amp;gt;';&lt;br /&gt;} &lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;/center&amp;gt;&lt;/pre&gt;&lt;br /&gt;That was much better already. But then I got the feeling I want it on my iPhone/iPad. But from the browser you would have to pinch each image, again, horrible ux. &lt;br /&gt;&lt;br /&gt;Let's create a PDF. First you need the source, so I downloaded all the images with cURL's sequence feature:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;curl -O http://URL_TO_COMICS/comic_[1-3000].png&lt;/pre&gt;&lt;br /&gt;Now I need a tool that compose all into one single PDF. I played with the built in Preview app, if you open the first image, save as PDF, and then drag the rest onto the first slide you can save it, but it gives a terrible margin around the images. I was looking for apps online, but no one could make it without margin - else it wasn't free neither.&lt;br /&gt;So I downloaded fPDF and compose this little script that makes my perfect PDF of comics:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;// Call: script.php?from=1&amp;to=3000&lt;br /&gt;&lt;br /&gt;require_once 'PATH_TO_FPDF_LIB/fpdf.php';&lt;br /&gt;&lt;br /&gt;$from = $_GET['from'];&lt;br /&gt;$to   = $_GET['to'];&lt;br /&gt;&lt;br /&gt;$pixel_rate = 3.778; // Don't ask, just use it ;)&lt;br /&gt;&lt;br /&gt;$pdf = new FPDF();&lt;br /&gt;&lt;br /&gt;for ($i = $from; $i &amp;lt;= $to; $i++) {&lt;br /&gt;  $imagesize = getimagesize('comic_' . $i . '.png');&lt;br /&gt;  $pdf-&amp;gt;AddPage('P', array(($imagesize[0] / $pixel_rate), ($imagesize[1] / $pixel_rate)));&lt;br /&gt;  $pdf-&amp;gt;Image('comic_' . $i . '.png', 0, 0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$pdf-&amp;gt;Output();&lt;/pre&gt;&lt;br /&gt;It's actually faster than I thought, creating a document of 500 slides takes ~2 seconds. Pretty good.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3866747950307486776?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3866747950307486776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/08/comics-to-pdf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3866747950307486776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3866747950307486776'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/08/comics-to-pdf.html' title='Comics to PDF'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-DR5rnrYKk7A/Tk_3rzYtz0I/AAAAAAAAAfg/E9j5yIF7Ius/s72-c/Screen%2Bshot%2B2011-08-20%2Bat%2B7.03.22%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-668975603411000733</id><published>2011-03-02T22:25:00.000-08:00</published><updated>2011-03-02T22:28:53.168-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><title type='text'>Making an iPhone app - Part 3 - Minimap App</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-Z_oZ64EZUL8/TW8rEsRY8ZI/AAAAAAAAAbo/nS_6uapuhoA/s1600/5084424341_05c792ebaf_z.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="https://lh6.googleusercontent.com/-Z_oZ64EZUL8/TW8rEsRY8ZI/AAAAAAAAAbo/nS_6uapuhoA/s320/5084424341_05c792ebaf_z.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In this episode we will create a very minimalistic application so we can test a lot of iOS features with it. The application will have 1 UIView and a UIButton on it. On clicking the button an alert will pop up.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Let's cut to the chase. Look at your dock bar and run Xcode.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-R3-N0_iJTPw/TW8rk9D9QjI/AAAAAAAAAbw/lt8-zTf3e4I/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="70" src="https://lh4.googleusercontent.com/-R3-N0_iJTPw/TW8rk9D9QjI/AAAAAAAAAbw/lt8-zTf3e4I/s320/1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You should have Xcode version &amp;lt;= 3.2.5. [Soon Xcode 4 becomes available.] On the Xcode welcome screen click on: '&lt;i&gt;Create a new Xcode project&lt;/i&gt;'&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-_tnnidII2pQ/TW8rnXEnD5I/AAAAAAAAAb0/uPFCOmC4WNI/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="https://lh4.googleusercontent.com/-_tnnidII2pQ/TW8rnXEnD5I/AAAAAAAAAb0/uPFCOmC4WNI/s320/2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now you are offered a bunch of project templates. It's a good thing to try all of them out. Now, for out purpose, we need '&lt;i&gt;View-based Application&lt;/i&gt;'. This kind of template will create as a base project with a UIView prepared to use. Be sure that and the '&lt;i&gt;Product&lt;/i&gt;' part '&lt;i&gt;iPhone&lt;/i&gt;' is selected.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-keibPELSzEU/TW8rosxr4fI/AAAAAAAAAb4/ukjeKKxXw_o/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="https://lh5.googleusercontent.com/-keibPELSzEU/TW8rosxr4fI/AAAAAAAAAb4/ukjeKKxXw_o/s320/3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Give it a project name, I call it '&lt;i&gt;iTest1&lt;/i&gt;'.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/--sMyX4YDNPQ/TW8rpEjT4oI/AAAAAAAAAb8/yq_w_tYMSdk/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="56" src="https://lh3.googleusercontent.com/--sMyX4YDNPQ/TW8rpEjT4oI/AAAAAAAAAb8/yq_w_tYMSdk/s320/4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now we can start to do our magic. In Xcode you will find all your files that are added to your project. (It doesn't reflect your&amp;nbsp;physical&amp;nbsp;file structure.) In '&lt;i&gt;Groups &amp;amp; Files&lt;/i&gt;' look for &lt;i&gt;Classes/iTest1ViewController.m&lt;/i&gt;. This is the main UIView's controller class. In a nutshell, on running the compiler will start in the main.m file. It will create one &lt;i&gt;UIApplication&lt;/i&gt; instance that is accessible from anywhere in the code. The application then will create a &lt;i&gt;iTest1ViewController&lt;/i&gt; with the bundled &lt;i&gt;UIView&lt;/i&gt; and add them to the main window view. Logically it's the &lt;i&gt;iTestViewController.h&lt;/i&gt; file the right choice to begin with. Let's open it add the event handler function definition:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;- (IBAction)pressedButton:(id)sender;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-meL626AcUA0/TW8rq_2nWGI/AAAAAAAAAcA/Uq_EgQTf8mQ/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="https://lh6.googleusercontent.com/-meL626AcUA0/TW8rq_2nWGI/AAAAAAAAAcA/Uq_EgQTf8mQ/s320/5.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;IBAction&lt;/i&gt; means void if you check the definition. The difference is that Xcode's UI builder will know about this function and can be connected to events.&lt;br /&gt;Now let's add the function body to &lt;i&gt;iTest1ViewController.m&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;- (IBAction)pressedButton:(id)sender {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;UIAlertView *alert = [[UIAlertView alloc]&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt; &amp;nbsp;initWithTitle:@"Hello"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt; &amp;nbsp;message:@"World"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt; &amp;nbsp;delegate:nil&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt; &amp;nbsp;cancelButtonTitle:@"Cancel"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt; &amp;nbsp;otherButtonTitles:nil];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;[alert show];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;[alert release];&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-cZsLeS-lWpc/TW8rr6CiDVI/AAAAAAAAAcE/TrUQhhY-2Co/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="https://lh5.googleusercontent.com/-cZsLeS-lWpc/TW8rr6CiDVI/AAAAAAAAAcE/TrUQhhY-2Co/s320/6.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This little code snippet will fire up an alert window.&lt;br /&gt;The code part is ready. Let's make the UI. In the 'Groups &amp;amp; Files' panel find &lt;i&gt;Resources/iTest1ViewController.xib&lt;/i&gt;. This a nib file that wraps up the UIView of the controller. Double click on it will open &lt;i&gt;Interface Builder&lt;/i&gt;. It has several window. Library is for assets, you can select classes and UI elements, drag them and drop to your UI. The Inspector window is to set an object's parameters, look and several other options. You should see a window named &lt;i&gt;iTest1ViewController.xib&lt;/i&gt;. There you can check your objects that are in the xib file. And finally you have a View window, the UIView itself. Let's add the button. Go to the Library window, select the Objects tab and look for '&lt;i&gt;Round Rect Button&lt;/i&gt;'. Drag and drop it to your View window. Double click on it then and give it a title. Save the project.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-dOuwSlZSH0w/TW8rtjJeDKI/AAAAAAAAAcI/ZPNRqycsOZ8/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="293" src="https://lh4.googleusercontent.com/-dOuwSlZSH0w/TW8rtjJeDKI/AAAAAAAAAcI/ZPNRqycsOZ8/s320/7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now we have to tell Xcode that on clicking the button it should call our pressedButton function. In the iTest1ViewController.xib window select '&lt;i&gt;File's Owner&lt;/i&gt;'. Hit CMD + 2 or open the Connection Inspector window. You should see the pressedButton: function and a small grey circle next to it. Now drag that circle, don't release your mouse, and move it to your button object. Now you can drop it, and it offers you a selection of events. Select: '&lt;i&gt;Touch Up Inside&lt;/i&gt;'.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-D5J0_jTmkJg/TW8ruqJbtOI/AAAAAAAAAcM/eDj0vUxHrHk/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://lh5.googleusercontent.com/-D5J0_jTmkJg/TW8ruqJbtOI/AAAAAAAAAcM/eDj0vUxHrHk/s320/8.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the Connection Inspector you should see that it's paired now.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-o3bsjqfzujQ/TW8rvOSXgtI/AAAAAAAAAcQ/t1w0b8vxWho/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="98" src="https://lh3.googleusercontent.com/-o3bsjqfzujQ/TW8rvOSXgtI/AAAAAAAAAcQ/t1w0b8vxWho/s320/9.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now go back to Xcode. At the left side of the toolbar you will see a selection list. Be sure that '&lt;i&gt;Simulator&lt;/i&gt;' and '&lt;i&gt;Debug&lt;/i&gt;' is selected. No hit on the '&lt;i&gt;Build and Run&lt;/i&gt;' button. [fingercrossing]&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-ZeQxIGFqdLs/TW8rwqG_8AI/AAAAAAAAAcU/8lUhogJIKV8/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="https://lh5.googleusercontent.com/-ZeQxIGFqdLs/TW8rwqG_8AI/AAAAAAAAAcU/8lUhogJIKV8/s320/10.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If everything went well it shows the iPhone simulator with the created application.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-0HdAIZNDASw/TW8rx9RRb-I/AAAAAAAAAcY/nyHcs57-LZ0/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-0HdAIZNDASw/TW8rx9RRb-I/AAAAAAAAAcY/nyHcs57-LZ0/s320/11.jpg" width="170" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click on the button. There should be the alert window.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-UKcGkYzXrdQ/TW8rymP-NgI/AAAAAAAAAcc/wHb6a01F34I/s1600/12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-UKcGkYzXrdQ/TW8rymP-NgI/AAAAAAAAAcc/wHb6a01F34I/s320/12.jpg" width="169" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;That is that. If you want to know why we did it this way, read the&amp;nbsp;&lt;a href="http://www.amazon.com/Beginning-iPhone-Development-Exploring-iOS/dp/143023024X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1299046285&amp;amp;sr=8-1"&gt;Beginning iPhone 4 Development&lt;/a&gt;&amp;nbsp;book's first couple of chapters. There is quite some things behind this and it's not this series' task to cover it.&lt;br /&gt;Now, that you have this minimal application, you can play with the tons of ui elements, iOS capabilities, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;In the next part I'll talk about some code practices I've learnt during my first app development.&lt;br /&gt;&lt;br /&gt;Have fun,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-668975603411000733?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/668975603411000733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/03/making-iphone-app-part-3-minimap-app.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/668975603411000733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/668975603411000733'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/03/making-iphone-app-part-3-minimap-app.html' title='Making an iPhone app - Part 3 - Minimap App'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-Z_oZ64EZUL8/TW8rEsRY8ZI/AAAAAAAAAbo/nS_6uapuhoA/s72-c/5084424341_05c792ebaf_z.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5611194906718982770</id><published>2011-03-01T23:04:00.000-08:00</published><updated>2011-03-01T23:04:48.652-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><title type='text'>Making an iPhone app - Part 2 - iOS</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;This time I'm gonna introduce iOS we reveal the toolkit we have for iPhone development.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-TetAzJ8VJjY/TW3ciX_N_QI/AAAAAAAAAbk/IGo5aCUamOo/s1600/3268807712_d9ca1cf0fa.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="253" src="https://lh4.googleusercontent.com/-TetAzJ8VJjY/TW3ciX_N_QI/AAAAAAAAAbk/IGo5aCUamOo/s320/3268807712_d9ca1cf0fa.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://en.wikipedia.org/wiki/IOS_(Apple)"&gt;iOS is the main operation system&lt;/a&gt; for the iPhone (and iPad) device. What makes the difference for programming Objective-C? Check the &lt;a href="http://developer.apple.com/library/ios/#documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/IPhoneOSOverview/IPhoneOSOverview.html#//apple_ref/doc/uid/TP40007898-CH4-SW1"&gt;official technical overview&lt;/a&gt;. There are some important aspects. iOS is closed for apps. Every app has its own sandbox environment, which is great for security, maybe not that great with flexibility, but that's a good trade-off. In iOS you have some limitations relate to the device (remember of iPhone versions). You have to prepare your app so that it can release all the unnecessary objects to gain some resource. Your app environment is signed, so you can't add new files during the app's lifetime. Obviously you can store data, but there are other solutions for that. An iOS app has response time limit, it can't be unresponsive for minutes.&lt;/div&gt;&lt;div style="text-align: left;"&gt;And next to these restrictions you have the amazing libraries, like UIKit, the accelerometer, the media frameworks, graphical (2D/3D) frameworks and so on.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I assume you have Xcode, you do know how to write Objective-C code, it's time to learn iOS programming. Some tested sourced I encourage you to read:&lt;/div&gt;&lt;div style="text-align: left;"&gt;[* - highly suggested]&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Beginning-iPhone-Development-Exploring-iOS/dp/143023024X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1299046285&amp;amp;sr=8-1"&gt;Beginning iPhone 4 Development: Exploring the iOS SDK&lt;/a&gt;&amp;nbsp;(*)&lt;/li&gt;&lt;li&gt;&lt;a href="http://itunes.apple.com/hu/itunes-u/iphone-application-development/id384233225"&gt;iPhone application development video series by Stanford University&lt;/a&gt;&amp;nbsp;(*)&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/ios/navigation/"&gt;iOS reference library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Creating_an_iPhone_App/index.html#//apple_ref/doc/uid/TP40007595"&gt;tutorial: creating an iPhone application&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Introduction/Introduction.html"&gt;Views&lt;/a&gt; and &lt;a href="http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html"&gt;View Controllers&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;You need some time to learn how a normal app is structured. On iOS the preferred methodology is the good old &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;MVC&lt;/a&gt; or more specially the &lt;a href="http://en.wikipedia.org/wiki/Presentation-abstraction-control"&gt;PAC&lt;/a&gt; modell. In UIKit you have lot's of view objects, like labels, imageviews, tables, form elements, etc. Some of the 'abstract' view object has its bundled controller, like ViewController or TableViewController. UIKit provides these pairs for a very good reason. When you work with tables or maps you almost always need a controller for handling events and set configurations. It's a huge help so you don't have to create them.&lt;br /&gt;&lt;br /&gt;The view hierarchy starts with a window, which is the root view. You can add any view into a view object and that is how you build a ui. If an element needs control or event handling it has a high chance that it needs a controller.&lt;br /&gt;&lt;br /&gt;You can create views in two ways: using NIB files (ends with *.xib) or creating them in code. With NIBs you can easily drag and drop ui elements on them, with a few clicks you can assign action handlers to events. In code you have the freedom to customize it towards, but obviously, it's more code and you have to be more careful with that.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;In the first times you will always need a base app to play with, to try features out as fast possible and get feedback. And remember: &lt;a href="http://www.businessweek.com/magazine/content/07_26/b4040436.htm"&gt;fail always a good thing&lt;/a&gt;! In the next part I'll explain how you can make a minimal application you can use for testing.&lt;br /&gt;&lt;br /&gt;Bests,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5611194906718982770?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5611194906718982770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/03/making-iphone-app-part-2-ios.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5611194906718982770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5611194906718982770'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/03/making-iphone-app-part-2-ios.html' title='Making an iPhone app - Part 2 - iOS'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-TetAzJ8VJjY/TW3ciX_N_QI/AAAAAAAAAbk/IGo5aCUamOo/s72-c/3268807712_d9ca1cf0fa.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-749578569073245045</id><published>2011-02-28T13:22:00.000-08:00</published><updated>2011-02-28T13:22:58.168-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><title type='text'>Making an iPhone app - Part 1 - Prepare</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br class="Apple-interchange-newline" /&gt;In a nice little series I'm gonna walk you though the raw basics of an iPhone app creation.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-VLx8ugUcNJE/TWwMwgRjZ3I/AAAAAAAAAbg/EpBp4zps1Ng/s1600/2968794599_ca443d53fc_o.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="https://lh6.googleusercontent.com/-VLx8ugUcNJE/TWwMwgRjZ3I/AAAAAAAAAbg/EpBp4zps1Ng/s320/2968794599_ca443d53fc_o.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: left;"&gt;This part is about preparing yourself for development. Before you do anything you have to know Objective C. If you don't know it yet, better to read some materials:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mary%20dalrymple%20%20scott%20knaster/"&gt;Learn Objective-C on the Mac&lt;/a&gt; (book)&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html"&gt;Introduction to The Objective-C Programming Language&lt;/a&gt;&amp;nbsp;(official Apple introduction)&lt;/li&gt;&lt;li&gt;&lt;a href="http://cocoadevcentral.com/d/learn_objectivec/"&gt;Learn Objective-C&lt;/a&gt; on Cocoa dev Central&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;You have to know the basics of the language. Couple of keywords that you really have to take attention: messaging, objects, properties and categories, memory management, delegation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the meantime you need &lt;a href="http://developer.apple.com/technologies/xcode.html"&gt;Xcode, the all-in-one developer environment&lt;/a&gt; from also Apple. For this you need an Apple ID account, but for the simple download now you can get it for free.&lt;/div&gt;&lt;div&gt;[For testing apps on the iPhone device or submitting to the AppStore you need an official iOS developer account, but I want to talk about it in a following part.]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What you have to is going through one of the&amp;nbsp;aforementioned docs (preferably each) and trying out each language features in Xcode. You can even start with a simple console application. &lt;i&gt;NSLog(@"I'm here!") &lt;/i&gt;can give you all the feedback you need for the first times.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some really good sources to have a better insight:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.raywenderlich.com/"&gt;Ray Wenderlich's blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/tagged/objective-c"&gt;StackOwerflow's well rated Objective-C threads&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/itunes.stanford.edu-dz.4893250482"&gt;Developing Apps for iOS - Stanford University&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;---&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the next part:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;iOS basic concept and planning of the application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Night,&lt;/div&gt;&lt;div&gt;Peter&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-749578569073245045?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/749578569073245045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/making-iphone-app-part-1-prepare.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/749578569073245045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/749578569073245045'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/making-iphone-app-part-1-prepare.html' title='Making an iPhone app - Part 1 - Prepare'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-VLx8ugUcNJE/TWwMwgRjZ3I/AAAAAAAAAbg/EpBp4zps1Ng/s72-c/2968794599_ca443d53fc_o.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5068972038530535798</id><published>2011-02-18T07:46:00.000-08:00</published><updated>2011-02-19T08:17:32.661-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><title type='text'>My First iPhone App is Available: HexGuess</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally after days of torture my app is in iTunes store: &lt;a href="http://itunes.apple.com/hu/app/hexguess/id419560228?mt=8"&gt;HexGuess v1.0&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-VivlZ7_ncI0/TV6VRsnCzOI/AAAAAAAAAaU/9p-WnCv97G4/s1600/Screen%2Bshot%2B2011-02-18%2Bat%2B4.46.11%2BPM.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5575057519996488930" src="http://1.bp.blogspot.com/-VivlZ7_ncI0/TV6VRsnCzOI/AAAAAAAAAaU/9p-WnCv97G4/s400/Screen%2Bshot%2B2011-02-18%2Bat%2B4.46.11%2BPM.png" style="display: block; height: 262px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;It's a color guessing game by the color's hexadecimal code. Very basic and simple. Soon I'll make a blogpost about what I've learnt during the development and some source code. &lt;/div&gt;&lt;div&gt;Download the app if you like, it's free.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bye,&lt;br /&gt;Peter&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5068972038530535798?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5068972038530535798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/my-first-iphone-app-is-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5068972038530535798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5068972038530535798'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/my-first-iphone-app-is-available.html' title='My First iPhone App is Available: HexGuess'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VivlZ7_ncI0/TV6VRsnCzOI/AAAAAAAAAaU/9p-WnCv97G4/s72-c/Screen%2Bshot%2B2011-02-18%2Bat%2B4.46.11%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-6215910613048308041</id><published>2011-02-17T13:10:00.000-08:00</published><updated>2011-03-21T11:55:40.871-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><title type='text'>Top 10 iOS libraries</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As always, I realized I can't implement everything in iOS, and also shouldn't reinvent wheels. So I started using libraries for iOS development. Here you are my dump (order doesn't count):&lt;/div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Qk9S3a3h6ug/TV2Zhkzk3CI/AAAAAAAAAaE/yVX7Q_iQm6s/s1600/SanDiegoCityCollegeLearingRecourceCity-bookshelf.jpeg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5574780715849276450" src="http://2.bp.blogspot.com/-Qk9S3a3h6ug/TV2Zhkzk3CI/AAAAAAAAAaE/yVX7Q_iQm6s/s400/SanDiegoCityCollegeLearingRecourceCity-bookshelf.jpeg" style="cursor: hand; cursor: pointer; display: block; height: 300px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div&gt;1: &lt;a href="http://iphone.svn.wordpress.org/trunk/"&gt;Wordpress iPhone app&lt;/a&gt; is open source. You can use it's XML-RPC library.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2: &lt;a href="https://github.com/facebook/three20"&gt;Three20 iOS library&lt;/a&gt; has tons of goodies. You better to check them all. Also don't forget about &lt;a href="http://three20.info/extensions"&gt;it's extensions&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3: &lt;a href="https://github.com/urbanairship/ios-library"&gt;Urban Airship library&lt;/a&gt; is about in-app purchase, push, rich push and subscriptions. They have their code for Android and Blackberry too. How awesome is that?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4: &lt;a href="http://getsharekit.com/install/"&gt;ShareKit is the sharing kit&lt;/a&gt; for your iOS application.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5: &lt;a href="https://www.x.com/community/ppx/xspaces/mobile"&gt;PayPal's mobile payment library&lt;/a&gt; is a must have api for applications where you can pay. (iPhone and Android lib.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6: &lt;a href="https://github.com/devinross/tapkulibrary"&gt;The Tapku library&lt;/a&gt; has several cool features, like cover-flow, calendar grid and chart view and other smaller parts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7: Probably it's for a smaller target, but if you want to integrate your app with the &lt;a href="https://github.com/ButoVideo/Buto-iOS-Library"&gt;Buto video service&lt;/a&gt;, you also has something to integrate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;8: For parsing KML files you have the &lt;a href="https://github.com/incanus/Simple-KML/"&gt;Simple-KML library&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;9: The &lt;a href="https://github.com/mramsden/hubkit"&gt;HubKit library&lt;/a&gt; provides you easy access to the GitHub api.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;10: &lt;a href="http://code.google.com/p/zxing/"&gt;ZXing&lt;/a&gt; is a very good extension for barcode recognition. It also has lots of other implementations for other languages than Objective C.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(10 + 1): And &lt;a href="http://www.cisco.com/en/US/products/ps10591/tsd_products_support_series_home.html"&gt;Cisco's tools&lt;/a&gt; are probably pretty useful, but honestly I haven't checked out them yet. Is there anybody out there tried their stuffs? What are they good for?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do you know about other good iOS libraries? Please, let me know so I can add them too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bye,&lt;/div&gt;&lt;div&gt;Peter&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;For XML-RPC communication you should try &lt;a href="https://github.com/eczarny/xmlrpc"&gt;this XML-RPC library from eczarny&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A &lt;a href="https://github.com/TouchCode/TouchXML"&gt;lightweight XML library can be found here&lt;/a&gt;&amp;nbsp;by TouchCode.&lt;br /&gt;&lt;br /&gt;I guess it's not necessary to introduce &lt;a href="http://unity3d.com/unity/download/"&gt;Unity, one of the most awesome graphical library&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A small but really nice library that does &lt;a href="https://github.com/leah/PullToRefresh"&gt;pull-to-refresh on tables from Leah Culver&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zbar.sourceforge.net/download.html"&gt;ZBar has an awesome minimal but perfect barcode scanner&lt;/a&gt; library - and it's open source.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.redlaser.com/SDK.aspx"&gt;RedLaser's barcode scanner&lt;/a&gt; is also very good, but you have to pay a little for it.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/johnezang/JSONKit"&gt;JSONKit&lt;/a&gt; is a well performed JSON parser library. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-6215910613048308041?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/6215910613048308041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/ios-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6215910613048308041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6215910613048308041'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/ios-libraries.html' title='Top 10 iOS libraries'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Qk9S3a3h6ug/TV2Zhkzk3CI/AAAAAAAAAaE/yVX7Q_iQm6s/s72-c/SanDiegoCityCollegeLearingRecourceCity-bookshelf.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3556392809008899809</id><published>2011-02-13T05:00:00.000-08:00</published><updated>2011-02-19T08:21:45.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Passing Through Unknown Number of Parameters in Actionscript</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's probably a noob problem but for me it took some time to solve. &lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/"&gt;Actionscript&lt;/a&gt; can handle &lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/statements.html#..._(rest)_parameter"&gt;unknown number of arguments&lt;/a&gt; in the function definition:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-mOGJ0IhpDeY/TV_t7bADbvI/AAAAAAAAAa4/RbDKNX-AjRc/s1600/2680776058_32bef54481.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://3.bp.blogspot.com/-mOGJ0IhpDeY/TV_t7bADbvI/AAAAAAAAAa4/RbDKNX-AjRc/s320/2680776058_32bef54481.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;div&gt;public function foo(...args):void {&lt;/div&gt;&lt;div&gt;}&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this case ...args is an Array. You can call this function with any amount of arguments, like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;div&gt;foo(); // args = []&lt;/div&gt;&lt;div&gt;foo('bar'); // args = ['bar']&lt;/div&gt;&lt;div&gt;foo('bar', 1, new Object()); // args = ['bar', 1, -object instance-]&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;It's very handy a lot of times. But the problem is if you want to pass those arguments through more than one functions. Here you are a minimalist example:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;package {&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;public class ArgSample extends Sprite {&lt;br /&gt;&lt;br /&gt;public function ArgSample() {&lt;br /&gt;&lt;b&gt;this.bar(1, 2, 3);&lt;/b&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function bar(...args):void {&lt;br /&gt;&lt;b&gt;this.foo(args);&lt;/b&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function foo(...args):void {&lt;br /&gt;&lt;b&gt;trace('Number of parameters: ' + args.length);&lt;/b&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;You want to guess the results of foo? It's: "&lt;i&gt;Number of parameters: 1&lt;/i&gt;". Why? Because in function bar() you pass variable args, which is an Array. And foo() will receive an Array with 1 element: [[1, 2, 3]] instead of [1, 2, 3].&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So how we gonna solve this? Let's use the dynamic behavior of Actionsctipt. Functions has a well known method: apply. It can do a function call on an object with an array of parameters. See the changes:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;package {&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;public class ArgSample extends Sprite {&lt;br /&gt;&lt;br /&gt;public function ArgSample() {&lt;br /&gt;this.bar(1, 2, 3);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function bar(...args):void {&lt;br /&gt;&lt;b&gt;(this.foo as Function).apply(this, args);&lt;/b&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function foo(...args):void {&lt;br /&gt;trace('Number of parameters: ' + args.length);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;And now magically the result is: "&lt;i&gt;Number of parameters: 3"&lt;/i&gt;. In real life I'm using it when I create a &lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/NetConnection.html"&gt;NetConnection&lt;/a&gt; object for making &lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/NetConnection.html#call()"&gt;remote function calls&lt;/a&gt; and I have to provide arguments.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bests,&lt;/div&gt;&lt;div&gt;Peter&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3556392809008899809?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3556392809008899809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/passing-through-unknown-number-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3556392809008899809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3556392809008899809'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/passing-through-unknown-number-of.html' title='Passing Through Unknown Number of Parameters in Actionscript'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-mOGJ0IhpDeY/TV_t7bADbvI/AAAAAAAAAa4/RbDKNX-AjRc/s72-c/2680776058_32bef54481.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-2960442276186635451</id><published>2011-02-12T09:17:00.001-08:00</published><updated>2011-03-07T08:04:42.390-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Kitten - The Actionsript Based Drupal Communication Library</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I opened a new repository on &lt;a href="https://github.com/"&gt;Github&lt;/a&gt; for my Drupal communication library written in Actionscript 3. The main purpose with it is figuring out how could I make the network layer completely separate and full fledged.&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xd3orc3lqtc/TV_unysSUdI/AAAAAAAAAa8/LATkGXDMKdo/s1600/Screen+shot+2011-02-19+at+5.22.43+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://3.bp.blogspot.com/-xd3orc3lqtc/TV_unysSUdI/AAAAAAAAAa8/LATkGXDMKdo/s320/Screen+shot+2011-02-19+at+5.22.43+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Goals in a nutshell:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;can connect to Drupal sites (to &lt;a href="http://www.drupal.org/project/services"&gt;Services&lt;/a&gt; gateway)&lt;/li&gt;&lt;li&gt;can use &lt;a href="http://amfphp.sourceforge.net/"&gt;AMFPHP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;can work without authentication&lt;/li&gt;&lt;li&gt;can work with Session authentication&lt;/li&gt;&lt;li&gt;can work with API key authentication&lt;/li&gt;&lt;li&gt;can have more than one connection&lt;/li&gt;&lt;li&gt;can set error handlers&lt;/li&gt;&lt;li&gt;can do logging (somehow)&lt;/li&gt;&lt;li&gt;can set default handlers for &lt;a href="http://en.wikipedia.org/wiki/Remote_procedure_call"&gt;RPC&lt;/a&gt; methods&lt;/li&gt;&lt;li&gt;most importantly can be used in any kind of Flash project without hassel (not &lt;a href="http://www.davidhasselhoff.com/"&gt;Hoff&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Do you miss any feature?&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Github source: &lt;a href="https://github.com/itarato/Kitten"&gt;https://github.com/itarato/Kitten&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea came from the &lt;a href="http://www.dpdk.nl/"&gt;DPDK&lt;/a&gt; guys and &lt;a href="http://www.dpdk.nl/opensource/drupalproxy-as-a-bridge-between-flash-as3-and-drupal-via-amf"&gt;this post&lt;/a&gt;. I've met them at the &lt;a href="http://bxl2011.drupaldays.org/"&gt;Drupal Developer Days Brussel&lt;/a&gt; conference. Their library is obviously professional. I'm not planning to beat them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bye,&lt;/div&gt;&lt;div&gt;Peter&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;Download the latest version of the compiled library: &lt;a href="http://dl.dropbox.com/u/2629592/KittenFlexLib.swc"&gt;KittenFlexLib (SWC file)&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-2960442276186635451?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/2960442276186635451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/kitten-actionsript-based-drupal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2960442276186635451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2960442276186635451'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/kitten-actionsript-based-drupal.html' title='Kitten - The Actionsript Based Drupal Communication Library'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-xd3orc3lqtc/TV_unysSUdI/AAAAAAAAAa8/LATkGXDMKdo/s72-c/Screen+shot+2011-02-19+at+5.22.43+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-607204418439582486</id><published>2011-02-07T22:48:00.000-08:00</published><updated>2011-02-13T02:23:31.751-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Drupal Troubleshooting Presentation</title><content type='html'>Hi Readers,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've beet at Drupal Developer Days Brussels this weekend. I was talking about the practices for solving bugs and problems during a Drupal development. Here you are my slides:&lt;/div&gt;&lt;div style="width:425px" id="__ss_6829000"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/itarato/drupal-troubleshooting" title="Drupal troubleshooting"&gt;Drupal troubleshooting&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse6829000" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=drupaltroubleshooting-110206050143-phpapp01&amp;amp;stripped_title=drupal-troubleshooting&amp;amp;userName=itarato"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed name="__sse6829000" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=drupaltroubleshooting-110206050143-phpapp01&amp;amp;stripped_title=drupal-troubleshooting&amp;amp;userName=itarato" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/itarato"&gt;Peter Arato&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;Take care,&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;div&gt;Peter&lt;/div&gt;&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-607204418439582486?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/607204418439582486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/drupal-troubleshooting-presentation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/607204418439582486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/607204418439582486'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/drupal-troubleshooting-presentation.html' title='Drupal Troubleshooting Presentation'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5837112837583102577</id><published>2011-02-03T13:00:00.000-08:00</published><updated>2011-02-19T08:25:01.694-08:00</updated><title type='text'>The Good Business Model</title><content type='html'>Hi Guys,&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm not to speak about good and bad business models. I have my own feelings about a project's end. I'm more wondering about what makes an application great. Once on &lt;a href="http://www.ted.com/"&gt;Ted&lt;/a&gt; a guy told that he was in a hotel's elevator. There were buttons - you suppose - for the floors - but not. They were tracks. So during the process you could listen to some music. That's brilliant. It's a typical no money creative think that makes your product remarkable. Then I found &lt;a href="http://www.tumblr.com/"&gt;Tumblr&lt;/a&gt; (I know it's soo old, but I found it now). Check this screen:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WsaJE2LQxTA/TUsZVL0yQMI/AAAAAAAAAZ8/17lxfLm5ur8/s1600/photo.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5569573215915884738" src="http://4.bp.blogspot.com/_WsaJE2LQxTA/TUsZVL0yQMI/AAAAAAAAAZ8/17lxfLm5ur8/s400/photo.png" style="cursor: hand; cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 267px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;You have a given set of options to post. Seems obvious, yeah, but what it does in real, it makes your choice a lot easier. You want to post only a video? There you are. Just a link? You're welcome. &lt;br /&gt;&lt;div&gt;So what it does it let's you to do your blogging much more productive.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://instagr.am/"&gt;Instagram&lt;/a&gt;. I guess it's one of the greatest apps of 2010. How can a such a simple a photosharing app be so great even without a public feed? Because it's simple, it's well done and it has a well defined purpose: doing nice effects. Nobody knew it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://i.appsafari.com/wp-content/uploads/2010/12/instagram_3.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" src="http://i.appsafari.com/wp-content/uploads/2010/12/instagram_3.jpg" style="cursor: hand; cursor: pointer; display: block; height: 480px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The common thing is they have a seemingly small feature that makes the service better. Like a postcard that has a sticker on it. Or you know the dumb free newspaper with Garfield on the last page.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My question? How many existing product can be improved by this kind of speciality? Can I make a pong game more popular than the original? Like ... with cool sound effects?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have tons of ideas, but first, what do you think?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5837112837583102577?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5837112837583102577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/02/good-business-model.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5837112837583102577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5837112837583102577'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/02/good-business-model.html' title='The Good Business Model'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WsaJE2LQxTA/TUsZVL0yQMI/AAAAAAAAAZ8/17lxfLm5ur8/s72-c/photo.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-8836311822609040944</id><published>2011-01-29T03:27:00.000-08:00</published><updated>2011-01-30T02:47:53.474-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><title type='text'>10 Favorite Productivity Tips</title><content type='html'>&lt;div&gt;I'm a productivity freak. I always liked to achieve more and better. It's a long learning process and basically you have to personalize everything. Let me share my favorite productivity tips and tools. (I'm using a mac so more of the tools are OS-X apps.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WsaJE2LQxTA/TUP-OtWABgI/AAAAAAAAAZU/nvr-3v8CXvU/s1600/Screen%2Bshot%2B2011-01-29%2Bat%2B12.46.12%2BPM.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 189px;" src="http://4.bp.blogspot.com/_WsaJE2LQxTA/TUP-OtWABgI/AAAAAAAAAZU/nvr-3v8CXvU/s400/Screen%2Bshot%2B2011-01-29%2Bat%2B12.46.12%2BPM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5567573093003560450" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Alfred (&lt;a href="http://www.alfredapp.com/"&gt;http://www.alfredapp.com/&lt;/a&gt;)&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Alfred provides you a quick interface to search. Either on your machine or on the internet. With a shortcut you have a searchbox and you can start typing. What is really really cool is that you have a lot of predefined services, like "maps Chicago" will open google maps and looks for the location. Almost every major service on the net has a service. Moreover you also can define your own searches. Some examples that I made: "d cck" will look for the cck module on drupal.org. "php strstr" will look for the strstr function on php.net. Now you can imagine how cool is that. With the extended version (called &lt;a href="http://www.alfredapp.com/powerpack/"&gt;Powerpack&lt;/a&gt;) probably you can earn tons of other awesome features.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Terminal scripts&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I'm not a linux haxor nor a hacker. But it's really not necessarry if you want to do some shell script magic. An action you do in your system that contains more than one step, or you have to type a lot worth to replace with a script. If you don't know about the shell, let's just say it can do anything. Some example from my collection:&lt;/div&gt;&lt;div&gt;A script install a Drupal site (downloads the source, extracting, move to the web root, setting the db ... opening in a browser). Multistep DB actions, like: applying a dump, registering users, doing backups, etc. Empty browser cache. Download latest pictures of my favorite comics. I let the rest to your imagination.&lt;/div&gt;&lt;div&gt;Also don't forget about aliases. I have an alias for all the commands that is more than 2 characters.&lt;/div&gt;&lt;div&gt;For learning more I suggest reading the &lt;a href="http://oreilly.com/catalog/9780596520632?green=16020356036&amp;amp;cmp=af-mybuy-9780596520632.IP"&gt;Mac OS X for Unix Geeks&lt;/a&gt; book.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Put your work in front of you&lt;/b&gt;&lt;/div&gt;&lt;div&gt;It's not really a tool, but a very efficient techinque to get things done. It's like when you're in the bed and you need a drink but you're just too lazy to get up. (Being lazy is not productive, though.) What does it mean in real life? Put the most used apps onto the tray or desktop. Create shortcuts to start them. Put the mostly visited sites in your bookmark toolbar. (With Chrome app icons it's even more cool in the content area.) Take the important books, letters and papers onto your desk. Put your favorite mobile apps on the first page. The basic principle is when you can do things easier and access them faster you'll probably use them more. And faster.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Chrome &lt;a href="https://chrome.google.com/extensions/?hl=en"&gt;extensions/plugins&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Well, there is a simple reason why I'm using Chrome: it's faster. If you haven't checked the extension library, it is the right time. My favorite ones: &lt;/div&gt;&lt;div&gt;&lt;a href="http://goo.gl/Vgox"&gt;Goo.gl url shortener&lt;/a&gt; - it helps me quickly shorten urls and copy to pasteboard.&lt;/div&gt;&lt;div&gt;&lt;a href="http://goo.gl/6W3x"&gt;Delicious&lt;/a&gt; - my favorite bookmarking service. I hope they will survive.&lt;/div&gt;&lt;div&gt;&lt;a href="http://goo.gl/0aEwx"&gt;Live css editor&lt;/a&gt; - for development it allows me to live edit the style.&lt;/div&gt;&lt;div&gt;&lt;a href="http://goo.gl/ZiD8"&gt;Sent with gmail&lt;/a&gt; - helps me to send sites to friends easier.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Know your limits - or get rid of the scary 1000+&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I'm using &lt;a href="http://www.google.com/reader/"&gt;Google Reader&lt;/a&gt;, and to tell the honest, that's the most productivity thing since automobile, but it's just too obvious. And I also like podcasts. But a couple of month ago I realized I was too greedy. My eyes were bigger than my stomach and I ended with the famous 1000+ in reader and &gt;50 unwatched podcasts constantly. If you want to be productive and learn the most you can, you have to know your limits. It's more likely to read 20 articles a day when you have 100 unread and not 1000+. It's just makes me fustrated and frightened. It's still better to unsubscribe some feeds than having and not reading them. Same with podcasts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Better touch tool&lt;/b&gt;&lt;/div&gt;&lt;div&gt;With &lt;a href="http://www.bettertouchtool.net/"&gt;BetterTouchTool&lt;/a&gt; you can enhance your touch capabilities. You can define extra touch gestures up to 4 fingers. And you can bind them to a lot of actions. Window actions, application actions, spaces and dashboard. It's quite awesome. And interesting extra feature of BTT is that it can resize windows when you drag it. To the edges (full screen, half sreen...). Pretty useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Find best tools&lt;/b&gt;&lt;/div&gt;&lt;div&gt;It's again not an application, but a good practice to improve your prodictivity. I'm always trying new techniques when there is something new. I've tried several pomodoro apps, rss reades applications, scripts, etc. Maybe the best example is the todo lists. There are tons of applications with thousands of features to track your todod items. I've tried several. &lt;a href="http://www.rememberthemilk.com/"&gt;Remember the milk&lt;/a&gt;, &lt;a href="http://culturedcode.com/things/"&gt;Things&lt;/a&gt;, &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;Freemind&lt;/a&gt;, &lt;a href="http://www.mindmeister.com/"&gt;Mindmeister&lt;/a&gt;, &lt;a href="http://www.rexbox.co.uk/epicwin/"&gt;Epic win&lt;/a&gt; and probably the rest is already forgotten. And the interesting thing is I'm using a plain test file for a while and for me it's the best. I can use any format I want (list or large text), I can structure it, remove old items very easily. It sits on my dock so I can access it any time. I know that &lt;a href="http://www.geekbrief.tv/"&gt;Cali Lewis&lt;/a&gt; uses paper and pen insead of apps. So, what's your way to do todo lists?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Dropbox&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="https://www.dropbox.com/home"&gt;Dropbox&lt;/a&gt; can store files remotely and you can access to them on any computer or smartphone. I often want to share things with my friends. Files, music, video or images. It's fast, very easy to use and simply it makes it the best sharing tool. And this week I discovered a new cool feature of Dropbox. I'll let you know in my next blogpost:)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Kindle&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://goo.gl/Dbkqu"&gt;Kindle&lt;/a&gt; has a huge bloom recently. I've got mine coupe of weeks ago and I have to say It's way better than I thought. The best thing in it that it's an ebook reader and nothing more. You can't do much else than reading, and it makes you focusing better on what you're reading. The display is gorgeous, sharp and really looks great on sunlight. You can buy books from a lot of services, like &lt;a href="http://www.amazon.com/gp/search/ref=sr_nr_n_6?rh=n:133140011,n:!133143011,n:!251259011,n:1286228011,n:726697011,n:156140011&amp;amp;bbn=726697011&amp;amp;ie=UTF8&amp;amp;qid=1296301310&amp;amp;rnid=726697011"&gt;Amazon&lt;/a&gt; or &lt;a href="http://oreilly.com/pub/topic/php"&gt;O'Reilly&lt;/a&gt;. And you also can read PDF files. By deafult it's quite ugly (PDF is fixed, so you can't break the lines and it makes the fonts so small), but with &lt;a href="http://sourceforge.net/projects/briss/"&gt;Briss&lt;/a&gt; you can crop them.&lt;/div&gt;&lt;div&gt;Also another cook service for Kindle is &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;. With a bookmarklet you can send sites to the service and it'll collect them to you. Then you can download it (or ask Instapaper to send it directly to your Kindle via email) and read just like a newspaper. Very great service.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;- Growl&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt; is a notification tool for your OS. The good thing with Growl is you don't have to check the application every time when something happens. Skype has a new chat message, twitter client has a new tweet or you have a new mail, iTunes plays an unknown track ... lot's of things you usually check and it's a waste of time. With Growl the popup shows you the necessarry information so you don't have to change application, or more importantly, you don't have to break the focus. Even more cool fact about Growl that you can access it in the shell. I added some notification for my scripts, so I always know when they terminated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm really interested, what are your favorite productivity tips or lifehacks? Please, tell me about them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bye,&lt;/div&gt;&lt;div&gt;Peter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Updates - your apps of choice:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://chrome.google.com/webstore/detail/oddhbkghjoccbljmagcgoklbfdjeiinb#"&gt;Minimalist Gmail&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.proteron.com"&gt;LigthSwitchX&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feedafever.com/"&gt;Fever&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hogbaysoftware.com/products/taskpaper"&gt;TaskPaper&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hogbaysoftware.com/products/simpletext"&gt;SimpleText&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hogbaysoftware.com/products/quickcursor"&gt;QuickCursor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-8836311822609040944?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/8836311822609040944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2011/01/10-favorite-productivity-tips.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8836311822609040944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8836311822609040944'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2011/01/10-favorite-productivity-tips.html' title='10 Favorite Productivity Tips'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WsaJE2LQxTA/TUP-OtWABgI/AAAAAAAAAZU/nvr-3v8CXvU/s72-c/Screen%2Bshot%2B2011-01-29%2Bat%2B12.46.12%2BPM.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5407410297727617155</id><published>2010-09-07T12:20:00.000-07:00</published><updated>2010-09-07T12:51:39.209-07:00</updated><title type='text'>Long time no see</title><content type='html'>Yeah, sorry about that. Probably it's only a heartbeat on the blog. Not likely that I write any new article in the near future. Although I'd like to inform you, what I'm up to so far.&lt;br /&gt;&lt;br /&gt;So, I kinda started to learn Objective C. My first goal is to write a decent iPhone application. Just for fun, for learning the language and getting some experience. I have certain plans, but I don't want to speak about it yet. I've found the official Apple documentation good. But - how to say. It's just too much to dive in for beginners like me. I've bought a quite good book: &lt;a href="http://www.amazon.com/Learn-Objective-ndash-Mac/dp/1430218150/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1283887700&amp;sr=8-1"&gt;http://www.amazon.com/Learn-Objective-ndash-Mac/dp/1430218150/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1283887700&amp;sr=8-1&lt;/a&gt; It describes  the fundamentals of the language. For me some part seems really weird, like filters and modifiers. But hey, compiler matters, not the syntax. Unfortunately in the last couple of months I also hung that on, but intent to start working with it again.&lt;br /&gt;&lt;br /&gt;I did some major refactoring on my Grpahmind app. It was a good experience for me but still can't feel the good level with design patterns. I have to learn a lot. The trick is that you have to know the future capabilities and the current features. I felt sometimes I did overkill with separation. And misused a lot of patterns. One thing for sure, you have to do it again and again.&lt;br /&gt;&lt;br /&gt;I was involved quite a lot of Drupal projects as well. I really like it. I'm getting more experience about the actual site-architect part and also about the Drupal-ways. Thanks to my current company and our lead I can work in Brussel now for a month and a half in a huge company. It's a really good experience just seeing how things are going in a different, enterprise environment. You can feel it, you can see it. It's amazing. It's a completely different workflow.&lt;br /&gt;&lt;br /&gt;That's it. I'd like to come back with some beneficial articles later, so see you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5407410297727617155?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5407410297727617155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2010/09/long-time-no-see.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5407410297727617155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5407410297727617155'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2010/09/long-time-no-see.html' title='Long time no see'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4849245701481837792</id><published>2010-02-26T10:33:00.000-08:00</published><updated>2010-02-26T11:04:45.365-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Drupal installer script - version 2</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Last night I felt the need of a new Drupal installer script. My old one (&lt;a href="http://itarato.blogspot.com/2009/06/drupal-sandbox-creator-shell-script.html"&gt;http://itarato.blogspot.com/2009/06/drupal-sandbox-creator-shell-script.html&lt;/a&gt;) had some flaws: it used a static preinstalled tarball with a static database dump. My new one use a fresh Drupal 6.15 package and just help to get to the install screen:&lt;br /&gt;&lt;pre&gt;echo "&amp;gt; Install Drupal Site - v 0.1"&lt;br /&gt;# Enter the webroot&lt;br /&gt;cd YOURWEBROOT&lt;br /&gt;# Uncompress the latest Drupal tarball&lt;br /&gt;tar -xzf PATHTOTARBALL/drupal-6.15.tar.gz&lt;br /&gt;# Asks for a site name (folder - database in one step)&lt;br /&gt;read -p "&amp;gt; Site name: " site_name&lt;br /&gt;# Rename the web folder&lt;br /&gt;mv drupal-6.15 $site_name&lt;br /&gt;echo "&amp;gt; Site folder is ready"&lt;br /&gt;# Create config files&lt;br /&gt;cd $site_name/sites/default&lt;br /&gt;mkdir files&lt;br /&gt;cp default.settings.php settings.php&lt;br /&gt;# Setting file ownerships&lt;br /&gt;sudo chown WEBSERVERUSER files&lt;br /&gt;sudo chown WEBSERVERUSER settings.php&lt;br /&gt;echo "&amp;gt; Config is ready"&lt;br /&gt;# Creating database&lt;br /&gt;mysql -u root --password=YOURPASSWORD -e "create database $site_name"&lt;br /&gt;# Under OS-X opens a browser with the site's install screen&lt;br /&gt;open http://localhost/$site_name&lt;br /&gt;echo "&amp;gt; Arigato gozai mashi ta!"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Basically you need a Drupal package under: PATHTOTARBALL/drupal-6.15.tar.gz and that's it. Dont't forget to change all the capital letter words to your environment.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4849245701481837792?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4849245701481837792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2010/02/drupal-installer-script-version-2.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4849245701481837792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4849245701481837792'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2010/02/drupal-installer-script-version-2.html' title='Drupal installer script - version 2'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-7849742398102319631</id><published>2010-02-26T10:26:00.000-08:00</published><updated>2010-02-26T10:32:42.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='maintenance'/><category scheme='http://www.blogger.com/atom/ns#' term='specification'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><title type='text'>Hungarian Drupal Podcast - Episode 8</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Are you interested in Drupal project management? How to do specification, development and maintenance? Check this out:&lt;br /&gt;&lt;object width="400" height="250"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9684880&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=9684880&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;In the next episode we have our first (human) guest: Kristof Van Tomme (&lt;a href="http://twitter.com/kvantomme"&gt;http://twitter.com/kvantomme&lt;/a&gt;) and we will speak about our new Knowledge Management System: &lt;a href="http://pronovix.com/solution/alpha-1-knowledge-management-open-atrium-test-it-now"&gt;http://pronovix.com/solution/alpha-1-knowledge-management-open-atrium-test-it-now&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-7849742398102319631?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/7849742398102319631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2010/02/hungarian-drupal-podcast-episode-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7849742398102319631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7849742398102319631'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2010/02/hungarian-drupal-podcast-episode-8.html' title='Hungarian Drupal Podcast - Episode 8'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4383724985884683819</id><published>2010-02-21T03:19:00.000-08:00</published><updated>2010-02-21T03:23:18.839-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><title type='text'>Hungarian Drupal Podcast - Episode 7</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Here you are the seventh podcast:&lt;br /&gt;&lt;object width="400" height="250"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9527855&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=9527855&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;We are basically in a conceptual crisis. We have to decide what we want to talk about. Drupal, web, code or life. This episode is a mutant episode, but we liked it very much.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4383724985884683819?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4383724985884683819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2010/02/hungarian-drupal-podcast-episode-7.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4383724985884683819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4383724985884683819'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2010/02/hungarian-drupal-podcast-episode-7.html' title='Hungarian Drupal Podcast - Episode 7'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4358302186189909664</id><published>2010-01-06T11:53:00.000-08:00</published><updated>2011-03-01T23:11:48.730-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='p2p'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Peer to peer video and audio streaming with Flex</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;This going to be a quick blogpost about how to build a simple video and audio streaming app in Flex. All the fame is for the Adobe Stratus service, and for &lt;a href="http://www.flashrealtime.com/"&gt;Tom Krcha&lt;/a&gt;, a very great Adobe tech evangelist: &lt;a href="http://www.flashrealtime.com/basics-of-p2p-in-flash/"&gt;http://www.flashrealtime.com/basics-of-p2p-in-flash/&lt;/a&gt; (this is the original article.) Most of my code is from there! Great thanks for your excellent tutorial.&lt;br /&gt;&lt;br /&gt;So, first take a look at the Stratus service: &lt;a href="http://labs.adobe.com/technologies/stratus/"&gt;http://labs.adobe.com/technologies/stratus/&lt;/a&gt; It allows to your Flash app to create &lt;a href="http://en.wikipedia.org/wiki/Peer-to-peer"&gt;P2P&lt;/a&gt; connection between clients. Cool, isn't it?&lt;br /&gt;&lt;br /&gt;Our app will open the default camera and microphone streams and transfer to any other client we share our peerID with. I succeeded to open 3 additional connection. That's already two more than Skype allows. Of course, it's not that good.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_WsaJE2LQxTA/S0Tzr1hNXwI/AAAAAAAAARA/e5RLvlkcsEI/s1600-h/Picture+5.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5423727785687211778" src="http://3.bp.blogspot.com/_WsaJE2LQxTA/S0Tzr1hNXwI/AAAAAAAAARA/e5RLvlkcsEI/s320/Picture+5.png" style="cursor: hand; cursor: pointer; height: 164px; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok ok, maybe it's better to try it out: &lt;a href="http://dl.dropbox.com/u/2629592/Multivideo.swf"&gt;Multivideo.swf&lt;/a&gt;&lt;br /&gt;- Allow your camera and microphone to connect&lt;br /&gt;- Share your peerID with your partners using the app (your peerID is in the first text box)&lt;br /&gt;- Add new streams by adding other contacts' peerIDs: copy their peerID into the 2nd textbox and click on [Add contact]&lt;br /&gt;(On some systems sometimes firewall blocks the stream.)&lt;br /&gt;&lt;br /&gt;Let's do it than. We need some UIComponent. A base video display and some textbox and a button:&lt;br /&gt;&lt;pre&gt;&amp;lt;mx:HBox id="video_stack" top="10" left="10"&amp;gt;&lt;br /&gt;&amp;lt;mx:VBox&amp;gt;&lt;br /&gt;&amp;lt;mx:VideoDisplay id="my_video_display" width="320" height="240"/&amp;gt;&lt;br /&gt;&amp;lt;mx:HBox&amp;gt;&lt;br /&gt;&amp;lt;mx:TextInput width="320" id="farPeerId_text" text="Your Peer ID is loading..."/&amp;gt;&lt;br /&gt;&amp;lt;/mx:HBox&amp;gt;&lt;br /&gt;&amp;lt;mx:HBox id="add_contact_container" visible="false"&amp;gt;&lt;br /&gt;&amp;lt;mx:TextInput id="contact_peer_id_text" width="200"/&amp;gt;&lt;br /&gt;&amp;lt;mx:Button label="Add contact" click="{addContact();}"/&amp;gt;&lt;br /&gt;&amp;lt;/mx:HBox&amp;gt;&lt;br /&gt;&amp;lt;/mx:VBox&amp;gt;&lt;br /&gt;&amp;lt;/mx:HBox&amp;gt;&lt;/pre&gt;&lt;br /&gt;HBox allows us just pushing the new stream UI elements into the horizontal queue.&lt;br /&gt;Using Stratus we have to register for a Stratus API key. We will get an ID and the url:&lt;br /&gt;&lt;pre&gt;private var rtmfpServer:String = 'rtmfp://stratus.adobe.com/cbd2224f9a56771b3d4d05c3-bd9b549abca2';&lt;/pre&gt;&lt;br /&gt;Than make some vars:&lt;br /&gt;&lt;pre&gt;private var nc:NetConnection;&lt;br /&gt;private var sendNS:NetStream;&lt;br /&gt;private var neerPeerID:String;&lt;br /&gt;&lt;br /&gt;private var cam:Camera;&lt;br /&gt;private var mic:Microphone;&lt;/pre&gt;&lt;br /&gt;When the application successfully loaded, we can init our camera, microphone and the net connection for outgoing streams:&lt;br /&gt;&lt;pre&gt;private function init():void {&lt;br /&gt;initCamera();&lt;br /&gt;initNetConnection();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Taking the cam/mic is quite straightforward:&lt;br /&gt;&lt;pre&gt;private function initCamera():void {&lt;br /&gt;if (Camera.names.length &amp;gt; 0) {&lt;br /&gt;cam = Camera.getCamera();&lt;br /&gt;my_video_display.attachCamera(cam);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (Microphone.names.length &amp;gt; 0) {&lt;br /&gt;mic = Microphone.getMicrophone();&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;I said so. Than the net connection to the stratus server through &lt;a href="http://en.wikipedia.org/wiki/Real_Time_Media_Flow_Protocol"&gt;RTMFP&lt;/a&gt; protocol:&lt;br /&gt;&lt;pre&gt;private function initNetConnection():void {&lt;br /&gt;nc = new NetConnection();&lt;br /&gt;nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusEvent);&lt;br /&gt;nc.connect(rtmfpServer);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;When the net connection is ready, we can establish the sending stream:&lt;br /&gt;&lt;pre&gt;private function netStatusEvent(event:NetStatusEvent):void {&lt;br /&gt;trace('NetConnection status event (1): ' + event.info.code);&lt;br /&gt;if (event.info.code == 'NetConnection.Connect.Success') {&lt;br /&gt;neerPeerID = nc.nearID;&lt;br /&gt;farPeerId_text.text = neerPeerID;&lt;br /&gt;initSendNetStream();&lt;br /&gt;add_contact_container.visible = true;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;This is the point we've got out peerID we can share. wOOt! On setting the provider stream we can attach out camera to the stream. And we can define a client object accepts the connection (return true;):&lt;br /&gt;&lt;pre&gt;private function initSendNetStream():void {&lt;br /&gt;sendNS = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);&lt;br /&gt;sendNS.addEventListener(NetStatusEvent.NET_STATUS, netStatusEvent);&lt;br /&gt;&lt;br /&gt;var clientObject:Object = new Object();&lt;br /&gt;clientObject.onPeerConnect = function(ns:NetStream):Boolean {return true;}&lt;br /&gt;&lt;br /&gt;sendNS.client = clientObject;&lt;br /&gt;sendNS.attachCamera(cam);&lt;br /&gt;sendNS.attachAudio(mic);&lt;br /&gt;sendNS.publish('video');&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;So far we have a working camera, microphone, and the stream is already on. Now prepare for accepting others stream:&lt;br /&gt;&lt;pre&gt;private function addContact():void {&lt;br /&gt;var nc2:NetConnection = new NetConnection();&lt;br /&gt;nc2.addEventListener(NetStatusEvent.NET_STATUS, function (event:NetStatusEvent):void {&lt;br /&gt;trace('NetConnection status event (2): ' + event.info.code);&lt;br /&gt;var receiveNS:NetStream = new NetStream(nc2, contact_peer_id_text.text);&lt;br /&gt;receiveNS.addEventListener(NetStatusEvent.NET_STATUS, netStatusEvent);&lt;br /&gt;receiveNS.play('video');&lt;br /&gt;&lt;br /&gt;var video:Video = new Video();&lt;br /&gt;video.attachNetStream(receiveNS);&lt;br /&gt;&lt;br /&gt;var uic:UIComponent = new UIComponent();&lt;br /&gt;uic.width = 320;&lt;br /&gt;uic.height = 240;&lt;br /&gt;uic.addChild(video);&lt;br /&gt;video_stack.addChild(uic);&lt;br /&gt;&lt;br /&gt;contact_peer_id_text.text = '';&lt;br /&gt;});&lt;br /&gt;nc2.connect(rtmfpServer);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;When we get a new stream, we create a new video object and add onto the stage.&lt;br /&gt;I know, it's far far basic, but it's good for starting a tool like this.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/2629592/Multivideo.tar.gz"&gt;Download the source code.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bests,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4358302186189909664?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4358302186189909664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2010/01/peer-to-peer-video-and-audio-streaming.html#comment-form' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4358302186189909664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4358302186189909664'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2010/01/peer-to-peer-video-and-audio-streaming.html' title='Peer to peer video and audio streaming with Flex'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WsaJE2LQxTA/S0Tzr1hNXwI/AAAAAAAAARA/e5RLvlkcsEI/s72-c/Picture+5.png' height='72' width='72'/><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-6936500863079437822</id><published>2009-12-25T02:56:00.000-08:00</published><updated>2011-02-13T05:39:21.073-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Lolcat viewer</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;What a peaceful Christmas day, isn't it? In the morning I wrote a small AIR application brings lolcats into your desktop. Basically it's a dummy RSS reader for &lt;a href="http://icanhascheezburger.com/"&gt;ICanHasCheezburger&lt;/a&gt; shows the latest kittens. Here you are:&lt;br /&gt;&lt;iframe src="http://dl.dropbox.com/u/2629592/lolcat/index.html" width="230" frameborder="0" height="180" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;Let's take a look at the code:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WsaJE2LQxTA/SzTCo5folSI/AAAAAAAAAQ4/6ctnU59efek/s1600-h/Picture+4.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 302px; height: 320px;" src="http://2.bp.blogspot.com/_WsaJE2LQxTA/SzTCo5folSI/AAAAAAAAAQ4/6ctnU59efek/s320/Picture+4.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5419170259517609250" /&gt;&lt;/a&gt;&lt;br /&gt;I used Flex with Flex SDK 3.0.&lt;br /&gt;First we need a couple of display objects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Image container: the main lolcat image&lt;/li&gt;&lt;li&gt;Secondary image container: the same lolcat image with delay. It makes transitions seamless.&lt;/li&gt;&lt;li&gt;Indicator: an external SWF animation indicates network loading&lt;/li&gt;&lt;li&gt;Control bar: previous / next / refresh buttons&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre&gt; &amp;lt;mx:Image id="image_backup"/&amp;gt;&lt;br /&gt;&amp;lt;mx:Image id="image" updateComplete="imageUpdateComplete(event);" click="nextImage();"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:SWFLoader source="{indicator}" width="40" height="40" id="indicator_swf" alpha="0.6"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:Canvas backgroundColor="0x000000" backgroundAlpha="0.5" bottom="0" left="0" right="0" height="40"&lt;br /&gt; mouseOver="control_bar.alpha = 1"&lt;br /&gt; mouseOut="control_bar.alpha = 0.3"&lt;br /&gt; alpha="0.3"&lt;br /&gt; id="control_bar"&amp;gt;&lt;br /&gt; &amp;lt;mx:LinkButton label="Previous" bottom="10" left="10" color="#CCCCCC" click="{previousImage()}"/&amp;gt;&lt;br /&gt; &amp;lt;mx:LinkButton bottom="10" right="10" label="Next" color="#CCCCCC" click="{nextImage()}"/&amp;gt;&lt;br /&gt; &amp;lt;mx:LinkButton label="Refresh" horizontalCenter="0" bottom="10" color="#CCCCCC" click="{refreshLolcatXML()}"/&amp;gt;&lt;br /&gt;&amp;lt;/mx:Canvas&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For the SWF animation it's highly suggested to embed the SWF movie itself:&lt;br /&gt;&lt;pre&gt;   [Bindable]&lt;br /&gt;  [Embed(source="indicator.swf")]&lt;br /&gt;  public var indicator:Class;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Loading RSS feed is stupid simple. The feed's address:&lt;br /&gt;&lt;pre&gt;   public static const LOLCAT_RSS:String = 'http://feeds.feedburner.com/ICanHasCheezburger';&lt;/pre&gt;&lt;br /&gt;And the upadating function for getting the feed itself:&lt;br /&gt;&lt;pre&gt;   public function refreshLolcatXML():void {&lt;br /&gt;   var ur:URLRequest = new URLRequest(LOLCAT_RSS);&lt;br /&gt;   var ul:URLLoader = new URLLoader(ur);&lt;br /&gt;   ul.addEventListener(Event.COMPLETE, rssReady);&lt;br /&gt;   ul.addEventListener(IOErrorEvent.IO_ERROR, networkError);&lt;br /&gt;   ul.load(ur);&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;Let's see what we have got when the request comes back (this is the event I registered for Event.COMPLETE):&lt;br /&gt;&lt;pre&gt;   public function rssReady(event:Event):void {&lt;br /&gt;   var xml:XML = new XML(event.target.data);&lt;br /&gt;   var items:XMLList = xml.*..item;&lt;br /&gt;   imageList.removeAll();&lt;br /&gt;   currentImageNum = 0;&lt;br /&gt;   for each (var item:XML in xml.*..item) {&lt;br /&gt;    if (item..MEDIA_NS::content[1]) {&lt;br /&gt;     imageList.addItem(item..MEDIA_NS::content[1].@url);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   nextImage();&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;I really like the ActionScript 3 XML layer. XML is already a native ActionScript 3 item, and the XML and XMLList classes make processing XMLs so easy. Quickly the response string is converted to XML and traversed for the important lolcat URLs. On every RSS reload I save results in the imageList ArrayCollection variable. I used one defined namespace, because the URLs can be found under that namespace:&lt;br /&gt;&lt;pre&gt;   public static const MEDIA_NS:Namespace = new Namespace('http://search.yahoo.com/mrss/');&lt;/pre&gt;&lt;br /&gt;Right after getting the response the first image is displayed. These are the stepping functions:&lt;br /&gt;&lt;pre&gt;   public function nextImage():void {&lt;br /&gt;   if (image.source != imageList[currentImageNum]) {&lt;br /&gt;    indicator_swf.visible = true;&lt;br /&gt;   }&lt;br /&gt;   image.source = imageList[currentImageNum];&lt;br /&gt;   currentImageNum = (currentImageNum + 1) % imageList.length;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  public function previousImage():void {&lt;br /&gt;   currentImageNum = (currentImageNum - 2 + imageList.length) % imageList.length;&lt;br /&gt;   nextImage();&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;One last small trick. When the image container triggers an updateComplete event, the whole resized for the appropriate image's size:&lt;br /&gt;&lt;pre&gt;   public function networkError(event:IOErrorEvent):void {trace('Network error: ' + event);}&lt;br /&gt; &lt;br /&gt;  public function imageUpdateComplete(event:FlexEvent):void {&lt;br /&gt;   trace('Image update. W: ' + image.measuredWidth + ' H: ' + image.measuredHeight);&lt;br /&gt;   if (image.measuredWidth &amp;gt; 0) {&lt;br /&gt;    var tw:Tween = new Tween(this, Application.application.width,  image.measuredWidth,       400, -1, onResizeWidthUpdate,  onResizeWidthEnd);&lt;br /&gt;    var th:Tween = new Tween(this, Application.application.height, image.measuredHeight + 18, 400, -1, onResizeHeightUpdate, onResizeHeightEnd);&lt;br /&gt;    image_backup.source = image.source;&lt;br /&gt;    indicator_swf.visible = false;&lt;br /&gt;   }&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;With the Tween class it's also easy. This is the full Flex source, if you are interested in:&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/2629592/lolcat/lolcat.tar.gz"&gt;Download Lolcat's source.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And one other cool thing. I've seen a lot that awesome AIR installer object on many sites. So, made a bit research and found this tool you can make your own AIR installer:&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/air/articles/air_badge_install.html"&gt;Adobe AIR intaller badge&lt;/a&gt; This is what you see above.&lt;br /&gt;&lt;br /&gt;Happy holidays,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-6936500863079437822?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/6936500863079437822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/12/lolcat-viewer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6936500863079437822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6936500863079437822'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/12/lolcat-viewer.html' title='Lolcat viewer'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WsaJE2LQxTA/SzTCo5folSI/AAAAAAAAAQ4/6ctnU59efek/s72-c/Picture+4.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-190859924108704678</id><published>2009-12-24T13:48:00.000-08:00</published><updated>2009-12-24T13:59:27.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Design Patterns</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;It was high time to publish this post. A long time ago I decided to implement all the design patterns are in the famous GOF book: &lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;&lt;br /&gt;Why? Because doing it by yourself the most efficient learning method. At least, for me. When I read this book first, I thought,  know everything. All patterns made sense. But after time I realized using those patterns in practice are _REALLY_ hard. If you don't see what are the scopes, what object has access to what other objects, etc ... means you won't use it efficiently. Although, I'm still not confident with a lot of pattern. And by the way, I think it's not the best book for introducing these patterns. I found Wiki pages more useful in a lot of cases.&lt;br /&gt;&lt;br /&gt;Here you are the downloadable JAVA sources:&lt;br /&gt;&lt;br /&gt;[Disclaimer: these are my interpretations. Don't take it for sure. My understanding sometimes like a 1 month old pig's ass.]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/ChainOfResponsibility.tar.gz"&gt;Download ChainOfResponsibility pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Command.tar.gz"&gt;Download Command pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Interpreter.tar.gz"&gt;Download Interpreter pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Iterator.tar.gz"&gt;Download Iterator pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Mediator.tar.gz"&gt;Download Mediator pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Memento.tar.gz"&gt;Download Memento pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Observer.tar.gz"&gt;Download Observer pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/State.tar.gz"&gt;Download State pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Strategy.tar.gz"&gt;Download Strategy pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Template.tar.gz"&gt;Download Template pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Visitor.tar.gz"&gt;Download Visitor pattern (BehavioralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Adapter.tar.gz"&gt;Download Adapter pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Bridge.tar.gz"&gt;Download Bridge pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Composite.tar.gz"&gt;Download Composite pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Decorator.tar.gz"&gt;Download Decorator pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Facade.tar.gz"&gt;Download Facade pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Flyweight.tar.gz"&gt;Download Flyweight pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Proxy.tar.gz"&gt;Download Proxy pattern (StructuralPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/AbstractFactory.tar.gz"&gt;Download AbstractFactory pattern (CreationalPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Builder.tar.gz"&gt;Download Builder pattern (CreationalPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/FactoryMethod.tar.gz"&gt;Download FactoryMethod pattern (CreationalPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Prototype.tar.gz"&gt;Download Prototype pattern (CreationalPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/patterns/Singleton.tar.gz"&gt;Download Singleton pattern (CreationalPatterns)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you find any mistake, please let me know. I want to fix them. Thanks.&lt;br /&gt;&lt;br /&gt;Happy Holidays,&lt;br /&gt;Peter&lt;br /&gt;&lt;br /&gt;Ps.: And this is the small shell script I packed the source folders:&lt;br /&gt;&lt;pre&gt;for dir in BehavioralPatterns StructuralPatterns CreationalPatterns&lt;br /&gt;do&lt;br /&gt;  for pattern in `ls $dir`&lt;br /&gt;  do&lt;br /&gt;    tar -czf $pattern.tar.gz ./$dir/$pattern&lt;br /&gt;    echo "&lt;a href=\"http://www.bison.hu/public/patterns/$pattern.tar.gz\"&gt;Download $pattern pattern ($dir)&lt;/a&gt;&lt;br /&gt;"&lt;br /&gt;  done&lt;br /&gt;done&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-190859924108704678?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/190859924108704678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/12/design-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/190859924108704678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/190859924108704678'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/12/design-patterns.html' title='Design Patterns'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3844912113887104522</id><published>2009-12-19T23:55:00.000-08:00</published><updated>2009-12-20T00:03:49.996-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sustainability'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><category scheme='http://www.blogger.com/atom/ns#' term='module'/><title type='text'>6th Hungarian Drupal Podcast</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Our 6th podcast was about Drupal module development. We spoke about the first steps to make a project on http://drupal.org, about maintaining, clean code, sustainability and a lot of other useful stuffs. Check this out:&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8082072&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=8082072&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/8082072"&gt;Magyar Drupal Podcast - 6. rész&lt;/a&gt; from &lt;a href="http://vimeo.com/podcast"&gt;Peter Arato&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;(Sadly this episode is very silent.)&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3844912113887104522?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3844912113887104522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/12/6th-hungarian-drupal-podcast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3844912113887104522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3844912113887104522'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/12/6th-hungarian-drupal-podcast.html' title='6th Hungarian Drupal Podcast'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-7462499807237379377</id><published>2009-12-19T23:48:00.000-08:00</published><updated>2009-12-19T23:55:32.618-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='myths'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><title type='text'>5th Hungarian Drupal Podcast</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;With a bit late let me announce our 5th podcast. It was about Drupal myths. A lot of people who don't know Drupal has bad feelings around it. We wanted to break these walls and collected all the most famous myths. Here we are:&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7822949&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7822949&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7822949"&gt;Magyar Drupal Podcast - 5. rész&lt;/a&gt; from &lt;a href="http://vimeo.com/podcast"&gt;Peter Arato&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-7462499807237379377?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/7462499807237379377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/12/5th-hungarian-drupal-podcast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7462499807237379377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7462499807237379377'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/12/5th-hungarian-drupal-podcast.html' title='5th Hungarian Drupal Podcast'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-8153439052949171907</id><published>2009-11-21T13:47:00.000-08:00</published><updated>2009-11-21T14:06:06.265-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multisite'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Drupal multisite</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Let me show how I made a Drupal multisite on my localhost. Of course, I did it a bit different way (I'm sure). That's me. By the way, this is the NORMAL description about multisites: &lt;a href="http://drupal.org/node/43816"&gt;http://drupal.org/node/43816&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1: Deploy a Drupal site&lt;/span&gt;&lt;br /&gt;Download the newest Drupal and install it. I did it into a folder, under my web root folder: /PATHTOYOURWEBROOT/DRUPALMULTISITEDIR/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2: Add your first site name to /etc/hosts&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;sh# sudo echo "127.0.0.1 FIRSTMULTISITENAME" &gt;&gt; /etc/hosts&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3: Also tell to Apache, where is your new domain points&lt;/span&gt;&lt;br /&gt;Insert at the end of your httpd.conf this snippet:&lt;br /&gt;&lt;pre&gt;&amp;lt;virtualhost&amp;gt;&lt;br /&gt;ServerAdmin webmaster@dummy-host.example.com&lt;br /&gt;DocumentRoot "/PATHTOYOURWEBROOT/DRUPALMULTISITEDIR"&lt;br /&gt;ServerName FIRSTMULTISITENAME&lt;br /&gt;ServerAlias FIRSTMULTISITENAME&lt;br /&gt;&amp;lt;/virtualhost&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4: Rename sites/default to your first multisite's name&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;sh# cd sites&lt;br /&gt;sh# mv default FIRSTMULTISITENAME&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5: Restart apache&lt;/span&gt;&lt;br /&gt;After restart check this out: http://FIRSTMULTISITENAME/&lt;br /&gt;&lt;br /&gt;Of course, it's just one site. Adding a new site (SECONDMULTISITENAME):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create subdirectory in sites (SECONDMULTISITENAME)&lt;/li&gt;&lt;li&gt; Copy a brand new settings.php into it, and create a files folder&lt;/li&gt;&lt;li&gt;Add the /etc/hosts entry (2)&lt;/li&gt;&lt;li&gt;Add apache directive (3)&lt;/li&gt;&lt;/ul&gt;I think, it's not that hard.&lt;br /&gt;&lt;br /&gt;Evening,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-8153439052949171907?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/8153439052949171907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/drupal-multisite.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8153439052949171907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8153439052949171907'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/drupal-multisite.html' title='Drupal multisite'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-1936244512477528677</id><published>2009-11-21T07:54:00.000-08:00</published><updated>2011-02-13T05:37:09.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><title type='text'>Hungarian Drupal Podcast - Episode 4</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;We finished recording our 4th podcast. It was a bit calm, a bit non-informative, but still us:) We continued the development environment topic. The video:&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7720485&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7720485&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7720485"&gt;Magyar Drupal Podcast - 4. rész&lt;/a&gt; from &lt;a href="http://vimeo.com/podcast"&gt;Peter Arato&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;Next part will be - I hope so - a quite interesting episode: Drupal myths and legends.&lt;br /&gt;We collect a lot of things ... wait for it ... in Google Wave. Yeah baby, we all have a Wave account. You can ask why I am so happy about it, and it's because a simple fact: concurrent editing. We have a single wave conversation with all the topics we would like to talk about, and we could edit it at the same time. It boosted the planning phase a lot.&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-1936244512477528677?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/1936244512477528677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast-episode-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1936244512477528677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1936244512477528677'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast-episode-4.html' title='Hungarian Drupal Podcast - Episode 4'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5864803847615070879</id><published>2009-11-14T01:15:00.001-08:00</published><updated>2009-11-14T05:05:18.439-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='fms'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>FMS in OSX</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I would like to give you a quick description how to work with FMS (Flash Media Server) under OS-X. Unfortunately FMS server is only available for Windows and Unix. Almost. I tried to fire it up in Ubuntu 9.10, and got a bunch of error messages. I would have killed both of that bastard application. Nevermind. So these were my steps to a working environment:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1 - Install Virtualbox and Windows XP in it&lt;/span&gt;&lt;br /&gt;This is an easy step, just make sure you use latest version of VBox.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2 - Run Windows XP, and install FMS&lt;/span&gt;&lt;br /&gt;The development version of FMS is free: &lt;a href="http://www.adobe.com/products/flashmediaserver/"&gt;download&lt;/a&gt; Though, you have to have an Adobe account. (1 minutes registration) The installation is straight forward, you can't make a mistake. I suggest you using the built-in Apache if you don't use that guest os for other webserver functions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3 - Port forward to the guest machine&lt;/span&gt;&lt;br /&gt;I'm not a server guy, so maybe it's not the best, but it's working, and that is the point. By default, your guest OS is listening on your localhost (127.0.0.1). But without port forward you can't access to it. We have an Apache (port 80) and the FMS (admin server port: 1111, fms server port: 1935) on our newly installed Windows XP. These 3 ports we have to bind. Open a terminal in OSX, and type these commands:&lt;br /&gt;&lt;br /&gt;(change the YOURGUESTMACHINESNAME text to the name of your guest OS - which is the name in the vbox machine list)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpfwd/Protocol" TCP&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpfwd/HostPort" 8888&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/httpfwd/GuestPort" 80&lt;br /&gt;&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/fmsadmin/Protocol" TCP&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/fmsadmin/HostPort" 8889&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/fmsadmin/GuestPort" 1111&lt;br /&gt;&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/fms/Protocol" TCP&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/fms/HostPort" 8890&lt;br /&gt;VBoxManage setextradata "YOURGUESTMACHINESNAME" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/fms/GuestPort" 1935&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(more about these settings in the virtualbox's UserManual.pdf)&lt;br /&gt;&lt;br /&gt;Now you have to restart your guest OS. Settings above allows you to access to your guest OS, for example for port 80 type http://localhost:8888 into your browser in OS-X. You should see the FMS server start page with a video (train). If you don't see, there is something I missed or is wrong.&lt;br /&gt;And one more step, you have to turn of the firewall in Windows. (Sorry but I haven't found a better way.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4 - Create a sample Flash / Flex project on the client side (host OS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It doesn't really matter which one you use. Here you are my working actionscript code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public var nc:NetConnection = new NetConnection();&lt;br /&gt;&lt;br /&gt;public function connect():void {&lt;br /&gt;   var r:Responder = new Responder(responderResult, responderStatus);&lt;br /&gt;&lt;br /&gt;   nc.connect('rtmp://localhost:8890/HelloWorld');&lt;br /&gt;   nc.call('serverHelloMsg', r, "John Doe");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function responderResult(result:Object):void {&lt;br /&gt;   trace('Result came: ' + result.toString());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function responderStatus(status:Object):void {&lt;br /&gt;   trace('Status update');&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5 - create the server side code (in the guest OS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The server side parts has to be written in ActionScript 1.0. (Pretty weird.) I just pasted the sample from the tutorial:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;application.onConnect = function(client) {&lt;br /&gt;&lt;br /&gt;   client.serverHelloMsg = function(text) {&lt;br /&gt;       return "Welcome: " + text;&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   application.acceptConnection(client);&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Copy it into: C:\Program Files\Adobe\Flash Media Server 3.5\applications\HelloWorld\HelloWorld.asc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6 - Start FMS server in the guest OS&lt;/span&gt;&lt;br /&gt;In Start Menu you can find an icon that starts the FMS server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7 - Test you application&lt;/span&gt;&lt;br /&gt;And be patient if it won't work at the first try.&lt;br /&gt;&lt;br /&gt;Of course, these stuffs are all available in the documentations.&lt;br /&gt;Flash Media Server: &lt;a href="http://www.adobe.com/support/documentation/en/flashmediaserver/"&gt;get all the official documentations&lt;/a&gt;&lt;br /&gt;Great FMS service tool for your host OS: &lt;a href="http://www.adobe.com/devnet/flashmediaserver/articles/fmis_feature_explorer.html"&gt;FMS Feature Explorer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Best wishes,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5864803847615070879?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5864803847615070879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/fms-in-osx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5864803847615070879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5864803847615070879'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/fms-in-osx.html' title='FMS in OSX'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-1213612021214948190</id><published>2009-11-13T12:42:00.001-08:00</published><updated>2011-02-13T05:42:41.907-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>Hungarian Drupal Podcast - Episode 3</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;This week we had out third podcast (about development environments). I have to say, I'm so f**king enthusiast about it. I wouldn't have imagined that kind of greatness of a podcast. It's not about us, it's about a channel to share information. And we have feedback. I wouldn't enjoy 100$ per episode as much a correct negative feedback. It means someone is watching you. Ok, enough hype. Let's see the 3rd part:&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7582459&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7582459&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;a class="qytkyiovzbhxvadfykvd" href="http://vimeo.com/moogaloop.swf?clip_id=7582459&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;/a&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7582459"&gt;Magyar Drupal Podcast - 3. rész&lt;/a&gt; from &lt;a href="http://vimeo.com/podcast"&gt;Peter Arato&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;I guess I forgot to mention, but check the URL we have: &lt;a href="http://www.vimeo.com/podcast"&gt;http://www.vimeo.com/podcast&lt;/a&gt; That was a huge win for sure.&lt;br /&gt;In the following episode we will continue with the second part of development environments. We left a lot of interesting stuff. On: 19th of November, 18:00. If you follow me on &lt;a href="http://twitter.com/itarato"&gt;twitter&lt;/a&gt;, you will get a notification about the start.&lt;br /&gt;&lt;br /&gt;We are waiting for your feedback/questions: podcast {worm} pronovix {point} com&lt;br /&gt;&lt;br /&gt;Best wishes,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-1213612021214948190?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/1213612021214948190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast-episode-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1213612021214948190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1213612021214948190'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast-episode-3.html' title='Hungarian Drupal Podcast - Episode 3'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-6191762487037794283</id><published>2009-11-13T12:32:00.000-08:00</published><updated>2009-11-13T12:39:43.466-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contribution'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>Drupal life</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;This Friday me and my colleagues took some presentation at the university. I had a pretty cool and easy topic: contribution. For me, it means, how you can be a valuable member of the Drupal community. I always realize the Drupal is such an awesome thing. Of course, it's quite subjective, but have never seen other communities being so viral, enthusiastic. Here you are my slides:&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_2494255"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/itarato/drupal-contributing" title="Drupal Contributing"&gt;Drupal Contributing&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=drupalcoursecontributing-091113113213-phpapp02&amp;stripped_title=drupal-contributing" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=drupalcoursecontributing-091113113213-phpapp02&amp;stripped_title=drupal-contributing" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/itarato"&gt;Peter Arato&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;I don't want to duplicate what is in there. I tried to cover the possibilities you can involve to Drupal. And yeah, it is vast, isn't it?:)&lt;br /&gt;&lt;br /&gt;Honestly, there are no better slides the Dries's presentations. Those are absolutely awesome.&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-6191762487037794283?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/6191762487037794283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/drupal-life.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6191762487037794283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6191762487037794283'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/drupal-life.html' title='Drupal life'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-2297710054407577613</id><published>2009-11-09T14:28:00.000-08:00</published><updated>2011-02-13T02:21:04.241-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Drupal FormAPI Examples (with source)</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;We at Pronovix used to keep Drupal lessons at Universty of Szeged (SZTE). My last presentation was about Form API. I made an example module with the following parts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Basic form building - validation - submission&lt;/li&gt;&lt;li&gt;System setting forms&lt;/li&gt;&lt;li&gt;AHAH form elements&lt;/li&gt;&lt;li&gt;Theming form elements&lt;/li&gt;&lt;li&gt;Custom Form API (FAPI) field&lt;/li&gt;&lt;li&gt;Remote form execution&lt;/li&gt;&lt;li&gt;Confirmation form.&lt;/li&gt;&lt;/ul&gt;You can download the source code from: &lt;a href="http://dl.dropbox.com/u/2629592/formapi.tar.gz"&gt;http://dl.dropbox.com/u/2629592/formapi.tar.gz&lt;/a&gt;&lt;br /&gt;If you enable the module, you should see these links in the Navigation menu:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WsaJE2LQxTA/SviZbTEQPWI/AAAAAAAAAQQ/YRE-KcL4-S8/s1600-h/Picture+10.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 140px;" src="http://4.bp.blogspot.com/_WsaJE2LQxTA/SviZbTEQPWI/AAAAAAAAAQQ/YRE-KcL4-S8/s200/Picture+10.png" alt="" id="BLOGGER_PHOTO_ID_5402236447284542818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My slides was just a shame, sorry about that, but I like more practical explanations.&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-2297710054407577613?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/2297710054407577613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/drupal-formapi-examples-with-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2297710054407577613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2297710054407577613'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/drupal-formapi-examples-with-source.html' title='Drupal FormAPI Examples (with source)'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WsaJE2LQxTA/SviZbTEQPWI/AAAAAAAAAQQ/YRE-KcL4-S8/s72-c/Picture+10.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4150823250785641999</id><published>2009-11-08T08:55:00.000-08:00</published><updated>2009-12-20T02:27:32.693-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='druplex'/><category scheme='http://www.blogger.com/atom/ns#' term='druplash'/><title type='text'>Building a Druplash site - full Flash version</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I've already spoke enough about Druplash, now let's see how to build quickly (~2 hours from scratch) one. Here is a short demo about the stuff have:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/w-_cpSehYp0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/w-_cpSehYp0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;a class="qytkyiovzbhxvadfykvd" href="http://www.youtube.com/v/w-_cpSehYp0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;/a&gt;&lt;a class="wqypdmhudasoplzrgvvi" href="http://www.youtube.com/v/w-_cpSehYp0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;/a&gt;&lt;/object&gt;&lt;br /&gt;There is several ways to leverage Flash-Drupal, and one is when using a full-sized Flash object on the site.&lt;br /&gt;The features we insist everytime:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Deep linking (browser history, bookmarking, ...: &lt;a href="http://en.wikipedia.org/wiki/Deep_linking"&gt;http://en.wikipedia.org/wiki/Deep_linking&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Graceful degradation (disabled browsers - same HTML content)&lt;/li&gt;&lt;/ul&gt;Good news: for an initial release, we don't need to write any custom Drupal module. Some modules we have to download:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/services"&gt;Services&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/amfphp"&gt;AMFPHP&lt;/a&gt; (+ the &lt;a href="http://sourceforge.net/projects/amfphp/"&gt;AMFPHP&lt;/a&gt; itself)&lt;/li&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/swfaddress"&gt;SWFAddress&lt;/a&gt; (+ &lt;a href="http://swfobject.googlecode.com/files/swfobject_2_2.zip"&gt;SWFObject&lt;/a&gt; and &lt;a href="http://www.asual.com/swfaddress/"&gt;SWFAddress&lt;/a&gt; libraries)&lt;/li&gt;&lt;/ul&gt;For the demo we need also:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/views"&gt;Views&lt;/a&gt; (V2)&lt;/li&gt;&lt;/ul&gt;Enable: Services, Services - &lt;strong style="font-weight: normal;"&gt;Key Authentication, &lt;/strong&gt;AMFPHP, Views Service, Node Service, System Service, Views, Views UI.&lt;br /&gt;The downloaded Flash application assume you have a Views list of nodes with the name of: news. It also assumes you have a node with NID=1. (So you should create these two&lt;br /&gt;parts.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Warning: &lt;/span&gt;because of the rush, the site url is hardcoded in the Flash movie. You can recompile the Flex project with the correct path pointing to your site's amfphp gateway, or you put the site under drupal_sx_druplash_full folder (and the site should be there: http://localhost/drupal_sx_druplash_full/).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;the compiled SWF is updated in the tar.gz file. Now it should work out of the box on every URL.&lt;br /&gt;&lt;br /&gt;The source of the Flex application: &lt;a href="http://dl.dropbox.com/u/2629592/DruplashFull_091220.tar.gz"&gt;&lt;span style="text-decoration: underline;"&gt;http://dl.dropbox.com/u/2629592/DruplashFull_091220.tar.gz&lt;/span&gt;&lt;/a&gt; (updated)&lt;br /&gt;If we installed successfully a base Drupal 6 site and enabled these modules, let's copy the Flash object (DruplashFull.swf) into:&lt;span style="font-weight: bold;"&gt; sites/default/files/DruplashFull.swf&lt;/span&gt;&lt;br /&gt;Visit the SWFAddress settings page at: &lt;span style="font-weight: bold;"&gt;/admin/settings/swfaddress&lt;/span&gt;&lt;br /&gt;The following image shows my settings:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WsaJE2LQxTA/Svb-r0_PdBI/AAAAAAAAAQA/MwoGr689DrU/s1600-h/Picture+8.png"&gt;&lt;img style="margin: 10px; cursor: pointer; width: 118px; height: 200px;" src="http://3.bp.blogspot.com/_WsaJE2LQxTA/Svb-r0_PdBI/AAAAAAAAAQA/MwoGr689DrU/s200/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5401784831989216274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now you should see the replaced content if you visit the front page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WsaJE2LQxTA/Svb_b9L6FPI/AAAAAAAAAQI/I78Ej-zDjTs/s1600-h/Picture+9.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 130px;" src="http://2.bp.blogspot.com/_WsaJE2LQxTA/Svb_b9L6FPI/AAAAAAAAAQI/I78Ej-zDjTs/s200/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5401785658823546098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think that's it. You have to give permission to non-admin users if you want to the same content with Flash them. This is just a very quick and dirty demo, but in the Flex source code you can check what basic features you can start.&lt;br /&gt;&lt;br /&gt;I worked with the latest module version, but some of them (ex: Services) are under heavy development. Just be aware, user experience may be vary:) If you need any other info, let me know, I'd glad to help you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Flex source: &lt;a href="http://dl.dropbox.com/u/2629592/DruplashFull_091220.tar.gz"&gt;http://dl.dropbox.com/u/2629592/DruplashFull_091220.tar.gz&lt;/a&gt;&lt;br /&gt;Live demo: &lt;a href="http://bison.hu/public/drupal_sx_druplash_full/"&gt;http://bison.hu/public/drupal_sx_druplash_full/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4150823250785641999?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4150823250785641999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/building-druplash-site-full-flash.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4150823250785641999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4150823250785641999'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/building-druplash-site-full-flash.html' title='Building a Druplash site - full Flash version'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WsaJE2LQxTA/Svb-r0_PdBI/AAAAAAAAAQA/MwoGr689DrU/s72-c/Picture+8.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-1220491609782968130</id><published>2009-11-07T03:03:00.000-08:00</published><updated>2009-11-07T03:14:42.914-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupalcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='solr'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='openatrium'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><title type='text'>Hungarian Drupal Podcast - Episode 2</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Let me announce our new episode of the Hungarian Drupal Podcast. Topics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Drupal meetings&lt;/li&gt;&lt;li&gt;Open Atrium&lt;/li&gt;&lt;li&gt;Search + Solr&lt;/li&gt;&lt;/ul&gt;As out listeners suggested, we made a topic list (above). This way you know what you can expect to. We set the lights a bit better, sat closer to the camera and tried to speak louder than in the first part. The first episode is watched by more than 170 people. I think it's a good start.&lt;br /&gt;Here you are the video:&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7475467&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7475467&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7475467"&gt;Pronovix podcast, episode 2&lt;/a&gt; from &lt;a href="http://vimeo.com/podcast"&gt;Peter Arato&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;Next time we will speak about how to build an efficient development environment. I think this is kinda topic can fill not just one full podcast. We'll see.&lt;br /&gt;If you have any question, claim, or advice, please leave me a comment. Thanks in advance.&lt;br /&gt;&lt;br /&gt;Best wishes,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-1220491609782968130?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/1220491609782968130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast-episode-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1220491609782968130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1220491609782968130'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast-episode-2.html' title='Hungarian Drupal Podcast - Episode 2'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4102786172745213335</id><published>2009-11-07T02:47:00.000-08:00</published><updated>2011-02-13T05:37:43.085-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='drupalcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Drupalcamp Prague (CZ)</title><content type='html'>I had the privilege to participate on Drupalcamp CZ Prague: &lt;a href="http://drupalcamp.cz/"&gt;http://drupalcamp.cz/&lt;/a&gt;. It was an awesome Drupal meeting. I liked the city, I liked the people there. We arrived at the bus station, Prague just before midnight. We lost a bit, but the found the hostel. Both the 2 days there were plenty of good presentation. I also took one about Druplash, here you are my slides:&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_2404547"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/itarato/how-to-build-a-druplash-site" title="How to build a Druplash site?"&gt;How to build a Druplash site?&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=drupalflashdruplash3-091102113922-phpapp01&amp;amp;stripped_title=how-to-build-a-druplash-site"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=drupalflashdruplash3-091102113922-phpapp01&amp;amp;stripped_title=how-to-build-a-druplash-site" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/itarato"&gt;Peter Arato&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Although my English still horrible, it wasn't so bad. (I hope.) Though, I realized, when I take presentation, I'm half as smart as other times, at least. Maybe because of you don't want to waste the time with thinking of your words, just pushing the slides. There were some developer interested in the Flash - Drupal way of site building. I'm glad to it.&lt;br /&gt;I really enjoyed the other presentations. Check the program: &lt;a href="http://drupalcamp.cz/schedule/"&gt;http://drupalcamp.cz/schedule/&lt;/a&gt;&lt;br /&gt;At the nights we could taste some delicious Czech beers.&lt;br /&gt;Yup, and the best non-drupal part: I were in KFC. OMG, I love that place. I ordered a big bucket (Kyblik) of chicken with fries and the mandatory unlimited drink.&lt;br /&gt;Lot of good memories, thanks Prague. See you next time.&lt;br /&gt;&lt;br /&gt;Best wishes,&lt;br /&gt;Peter&lt;script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;amp;c2=7400849&amp;amp;c3=1&amp;amp;c4=&amp;amp;c5=&amp;amp;c6="&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4102786172745213335?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4102786172745213335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/drupalcamp-prague-cz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4102786172745213335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4102786172745213335'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/drupalcamp-prague-cz.html' title='Drupalcamp Prague (CZ)'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5571047350609620511</id><published>2009-11-07T02:36:00.001-08:00</published><updated>2009-11-07T03:17:24.423-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='pronovix'/><title type='text'>Hungarian Drupal Podcast</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I always had the passion to help and share things I know (or not know). In Hungary, there are so few podcast about technology. That was the moment I realized, let's do it. This is our very first, very low cost podcast:&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7048750&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7048750&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7048750"&gt;Pronovix podcast, episode 1&lt;/a&gt; from &lt;a href="http://vimeo.com/podcast"&gt;Peter Arato&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;We were so lame, but it seemed we had an audience. Let's see, why it's so cool, even if you have so much to learn? Because it's free knowledge. We bought some beer, heated up the room, sat down the coach and just spoke what we are enthusiast about. We stream every our podcast at the time of recording on UStream, this makes listeners possible to take real-time questions. Later then we realized it's not the best practice to talk about everything. On the other side we got several advice and critics. Let's me say a big THANK YOU for all your help in improving the podcast. Second episode is coming soon. [It's already happened, but you know, I'm a big blog-procrastinator.]&lt;br /&gt;&lt;br /&gt;Best Regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5571047350609620511?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5571047350609620511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5571047350609620511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5571047350609620511'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/11/hungarian-drupal-podcast.html' title='Hungarian Drupal Podcast'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5727601101769699833</id><published>2009-09-12T00:17:00.000-07:00</published><updated>2011-02-13T05:41:46.356-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Mindmap tool for Drupal</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;As always, long time no see. I intend to write a small wrap-up about my new development, GraphMind: &lt;a href="http://drupal.org/project/graphmind"&gt;http://drupal.org/project/graphmind&lt;/a&gt; - &lt;a href="http://github.com/itarato/GraphMind/tree/master"&gt;Flex source&lt;/a&gt;&lt;br /&gt;Origin of the project is Kristof Van Tomme's, our CEO idea. If you know FreeMind, you have to admit how useful organizing your ideas, tasks and everything in a mindmap. A whole theory is built around that (ex: GTD).&lt;br /&gt;This a quick demo about how the code worked a week ago:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5_mVw_j1ukk&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/5_mVw_j1ukk&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;If you check the project page on drupal.org you'll get an overview about the features. You can try it also.&lt;br /&gt;For me, the most interesting part was the inner structure of the code. I like to work with actionscript, especially in Flex Builder. Hardest challenge is to handle interaction in a way that doesn't require too much public variables and static classes. First I found a really useful approach: manager classes. For this project we need a small amount of managers for handling events between the different tiers. These magagers, of course, are singleton entities. There is one for the stage logic, one for the connection logic ...etc. Another new (for me) way to handle event driven flows are (as I called them) temporary transfer objects. For instance you need to load data through a connection, you work with the data itself, some state object (reflect the state of the flow) and some others. In an event driven flow you should pass all these items through numerous functions. That is where temporary transfer objects help a lot. When a new data load starts, a temporary object instantiated. During the connection stages (ex: connect, authentication, data load, data receive) the temporary object populates with new properties. At the end of the process you get the temp object with all the required data.&lt;br /&gt;Other thing I'm not sure, if you have a display object represents data what classes you should use. For now I have a display class (subclass of UIComponent) with a property that a data-object class. It works fine, but it's possible there is a better way.&lt;br /&gt;In flex you have a cool feature: view states. You can bind transition effect for state changes. One flaw this feature has is the lack of mixed states. But - now I realized you can do something similar if you group stage elements and use view states on groups (MXML components). Anyway:)&lt;br /&gt;Ok, let's ruin that pink cloud, what about the annoying habits of flash?&lt;br /&gt;I found key events and focus handling a bit messy. Why? Triggering key events you need a display object can receive focus (as far as I know). I use canvas for mindmap which seems incapable of receiving key events. You have to click on another element (textbox, datagrid..) if you want use keys. Ridiculous. Anybody has an idea how to solve it?&lt;br /&gt;Next is onblur events for textinput fields. Onblur event triggered when it lose the focus. But if you click on a canvas element, onblur event on textfield don't triggered. WTF? And these things are quite important.&lt;br /&gt;A small bug from yesterday was save() function for FileReference. It is in the reference but Flex Builder can't find it and so, can't compile. I updated to flex sdk 3.4 and still nothing. Any idea?&lt;br /&gt;I have an education-version key for Flex Builder and it gave me right to get a Gumbo beta extension key (Flash Builder). I was really happy. Yesterday I downloaded and played with it. Importing my old project was seamless, however, Application.application is now deprecated, but the suggested class is not working for me. Needs searching. There is a bunch of new improvements I really want to try. First let's mention themes. And service builder. So cool stuffs. But still in beta. I'll try to upgrade GraphMind to the 4th version of the sdk.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5727601101769699833?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5727601101769699833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/09/mindmap-tool-for-drupal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5727601101769699833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5727601101769699833'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/09/mindmap-tool-for-drupal.html' title='Mindmap tool for Drupal'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4019374854927544631</id><published>2009-08-16T02:12:00.000-07:00</published><updated>2011-02-13T02:21:23.697-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='augmented reality'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Augment reality sample</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I am quite busy as always and have no idea what to post. Recently we've been working on an awesome project involves Flash and Drupal. I can speak about this a lot, but that needs a bit more preparing. Till then I show you something I made in the past. When this awesome flash-3d-augmented reality technology came into the IT world I wanted to try and created a small sample.&lt;br /&gt;That is it:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dQTu24x2WK4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/dQTu24x2WK4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Really simple. By the way this is my first hackish screencast (because of typing instead of speaking). This English is so hard. Houhh.&lt;br /&gt;&lt;br /&gt;Bye,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4019374854927544631?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4019374854927544631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/08/augment-reality-sample.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4019374854927544631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4019374854927544631'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/08/augment-reality-sample.html' title='Augment reality sample'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-139898151166000604</id><published>2009-07-27T10:12:00.001-07:00</published><updated>2011-02-13T05:38:17.688-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Switch</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Today I found a bit unusual usage of &lt;strong&gt;switch&lt;/strong&gt;. What if you have different N options and you have to invoke M common commands and N different commands? How you can save some extra typing job for yourself? (Or how to avoid code repetition.)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;switch (var) {&lt;br /&gt;case n1:&lt;br /&gt;...&lt;br /&gt;case nN:&lt;br /&gt;  common1();&lt;br /&gt;  ...&lt;br /&gt;  commonM();&lt;br /&gt;case n1:&lt;br /&gt;  special1();&lt;br /&gt;  break;&lt;br /&gt;...&lt;br /&gt;case nN:&lt;br /&gt;  specialN();&lt;br /&gt;  break;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Got it? The trick is using the same case terms multiple times. If you like it check the &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt; approach. And of course don't forget about &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Good day,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-139898151166000604?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/139898151166000604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/07/switch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/139898151166000604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/139898151166000604'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/07/switch.html' title='Switch'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-1764969171006629336</id><published>2009-07-24T00:15:00.000-07:00</published><updated>2009-11-07T03:17:08.533-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='druplex'/><category scheme='http://www.blogger.com/atom/ns#' term='druplash'/><title type='text'>Drupal Flash interaction example</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I had to make a presentation about a theoretical workaround describes an approach Drupal and Flash can work together. Basically there are two concepts. One Flash for all - means one big flash object is the whole site, and the other one, lots of flash objects in html. In the first concept the flash object handles everything. In the Drupal era it requires the Services and AMFPHP module. I would say it is rather a communicaton heavy way. On the other side the lots-of-flash way needs large numbers of interactions between the underground html layer. Lets see this approach in the slides:&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_1762652"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/itarato/flash-and-drupal-1762652" title="Flash And Drupal"&gt;Flash And Drupal&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=flashanddrupal-090724021331-phpapp02&amp;stripped_title=flash-and-drupal-1762652" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=flashanddrupal-090724021331-phpapp02&amp;stripped_title=flash-and-drupal-1762652" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/itarato"&gt;Peter Arato&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-1764969171006629336?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/1764969171006629336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/07/drupal-flash-interaction-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1764969171006629336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1764969171006629336'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/07/drupal-flash-interaction-example.html' title='Drupal Flash interaction example'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5960534283501445237</id><published>2009-07-19T08:55:00.000-07:00</published><updated>2009-07-19T09:36:33.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='air'/><title type='text'>Flex/AIR PHP evaluator</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;OS X hasn't got [readline] for PHP. That is why you can't use [php -a] in command line for testing PHP codes. Sad. If you want one, you can get a similar from: &lt;a href="http://www.fischerlaender.net/php/phpa-norl"&gt;http://www.fischerlaender.net/php/phpa-norl&lt;/a&gt; by Stefan Fischerländer and David Phillips. It's an easy replacement, however, I wanted to use one that can keep my command history. If you use macports, you maybe win but I don't want to use that. (I heard it is kinda evil sometimes.) Recently I have found a bestof documentation of Flex at &lt;a href="http://bit.ly/1auMV8"&gt;http://bit.ly/1auMV8&lt;/a&gt;. (Have I mentioned it is free? :) Oh yeah.) So I made a really simple AIR php -a replacement. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WsaJE2LQxTA/SmNLRUZz7HI/AAAAAAAAAPA/JlAG-Fn2WJk/s1600-h/Picture+1.png"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 130px;" src="http://2.bp.blogspot.com/_WsaJE2LQxTA/SmNLRUZz7HI/AAAAAAAAAPA/JlAG-Fn2WJk/s320/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5360210742407851122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Concept is stupid easy. An AIR app sends a POST request for a PHP script lies on my localhost. This script evaluate the text I want to check and sends back. See? K, check the code:&lt;br /&gt;The AIR part:&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;mx:Script&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;   public function eval():void {&lt;br /&gt;    var url:String = "http://localhost/flex_eval.php";&lt;br /&gt;    var ur:URLRequest = new URLRequest(url);&lt;br /&gt;    var ul:URLLoader = new URLLoader(ur);&lt;br /&gt;    var uv:URLVariables = new URLVariables();&lt;br /&gt;    &lt;br /&gt;    uv.phpsnippet = php_snippet.text;&lt;br /&gt;    ur.data = uv;&lt;br /&gt;    &lt;br /&gt;    ur.method = URLRequestMethod.POST;&lt;br /&gt;    &lt;br /&gt;    ul.addEventListener(Event.COMPLETE, evalComplete);&lt;br /&gt;    ul.addEventListener(IOErrorEvent.IO_ERROR, ioError);&lt;br /&gt;    &lt;br /&gt;    ul.load(ur);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   public function ioError(event:IOErrorEvent):void {&lt;br /&gt;    trace(event);&lt;br /&gt;    php_result.text = "Missing PHP file from:\n" + &lt;br /&gt;      "http://localhost/flex_eval.php\n\n" + &lt;br /&gt;      "Create one with the following code:\n\n" + &lt;br /&gt;      "&amp;lt;?php\n" + &lt;br /&gt;      "echo 'Flex PHP Snippet results ('.date('H:i.s').')'.\"\\n\\n\";\n" + &lt;br /&gt;      "eval($_POST['phpsnippet']);";&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   public function evalComplete(event:Event):void {&lt;br /&gt;    trace(event);&lt;br /&gt;    php_result.htmlText = event.target.data;&lt;br /&gt;   }&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt; &amp;lt;/mx:Script&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;mx:TextArea left="10" right="279" top="10" bottom="40" id="php_snippet" backgroundColor="#2E2E2E" fontFamily="Courier New" color="#FFFFFF" fontWeight="normal" fontSize="12"/&amp;gt;&lt;br /&gt; &amp;lt;mx:TextArea width="261" right="10" top="10" bottom="10" id="php_result"/&amp;gt;&lt;br /&gt; &amp;lt;mx:Button label="Eval" bottom="10" left="10" right="279" click="eval();"/&amp;gt;&lt;br /&gt;&amp;lt;/mx:WindowedApplication&amp;gt;&lt;/pre&gt;&lt;br /&gt;And the PHP part:&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;echo 'Flex PHP Snippet results ('.date('H:i.s').')'."\n\n";&lt;br /&gt;eval($_POST['phpsnippet']);&lt;/pre&gt;&lt;br /&gt;You can compile the mxml stuff in Flex Builder 3.0 (and I guess also with the free Flex sdk). And here you are a quick downloadable version:&lt;br /&gt;&lt;a href="http://bison.hu/public/PHPSnippet.air"&gt;http://bison.hu/public/PHPSnippet.air&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Guddai readers,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5960534283501445237?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5960534283501445237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/07/flexair-php-evaluator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5960534283501445237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5960534283501445237'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/07/flexair-php-evaluator.html' title='Flex/AIR PHP evaluator'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WsaJE2LQxTA/SmNLRUZz7HI/AAAAAAAAAPA/JlAG-Fn2WJk/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3348063277098557472</id><published>2009-06-28T11:28:00.000-07:00</published><updated>2009-06-28T11:56:57.593-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Twistable Flash object with ActionScript3</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;It came to my mind I've never made a twistable element in Flash. So I wrote one. The basics:&lt;br /&gt;It needs an item (descendant of the DisplayObject class) to twist. Don't forget to position this element to the point you want to twist around. (Most cases it is the center point.) My idea is when you click on the object, you store the current angle relative to center of ui element and store the current angle of the object. Then if you move your cursor, you will know the difference between the initial angle and the current angle. And you add this difference to the stored angle of the object. [It is easy, however, my english makes it hard to understand.] The interesting thing is to get the angle from a cursor position. I thought that the good old trigonometrics functions give the shade between 0 and 360 but, it came to light, I was wrong. Some recall:&lt;br /&gt;[&lt;a href="http://en.wikipedia.org/wiki/Sine#Sine"&gt;http://en.wikipedia.org/wiki/Sine#Sine&lt;/a&gt;]&lt;br /&gt;A triangle with a 90 degree angle has 3 side: adjacent, opposite, hypotenuse. You can calculate the tangent alpha by division of the oposite with adjacent. Arctangent gives the reverse of tangent, so atan(tan(alpha)) = aplha. But if you make some test you realize its not the whole 360 degree (or 2PI in rad) but 2 peaces of 180. Strange, but I have never been a math guy.&lt;br /&gt;&lt;br /&gt;Anyway, here you are my quick source. Just paste to a Flash IDE as it is and run it.&lt;br /&gt;&lt;pre&gt;var angle_onDown:Number;&lt;br /&gt;var angle_potmeter:Number;&lt;br /&gt;var is_turn:Boolean = false;&lt;br /&gt;&lt;br /&gt;var potmeter = new Sprite();&lt;br /&gt;potmeter.graphics.beginFill(0xAA4422);&lt;br /&gt;potmeter.graphics.drawRoundRect(-100, -100, 200, 200, 20, 20);&lt;br /&gt;potmeter.graphics.endFill();&lt;br /&gt;potmeter.x = potmeter.y = 200;&lt;br /&gt;addChild(potmeter);&lt;br /&gt;&lt;br /&gt;potmeter.addEventListener(MouseEvent.MOUSE_DOWN, onDown);&lt;br /&gt;potmeter.addEventListener(MouseEvent.MOUSE_MOVE, onMove);&lt;br /&gt;potmeter.addEventListener(MouseEvent.MOUSE_UP, onUp);&lt;br /&gt;&lt;br /&gt;function onDown(event:MouseEvent):void {&lt;br /&gt; is_turn = true;&lt;br /&gt; angle_onDown = getCurrentAngle(event.stageX - potmeter.x, event.stageY - potmeter.y);&lt;br /&gt; angle_potmeter = potmeter.rotation;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onMove(event:MouseEvent):void {&lt;br /&gt; if (is_turn) {&lt;br /&gt;  potmeter.rotation = angle_potmeter - (angle_onDown - getCurrentAngle(event.stageX - potmeter.x, event.stageY - potmeter.y));&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onUp(event:MouseEvent):void {&lt;br /&gt; is_turn = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getCurrentAngle(relX:Number, relY:Number):Number {&lt;br /&gt; var relDegree:Number = Math.atan(relY / relX) / Math.PI * 180;&lt;br /&gt; return relX &lt; 0 ? 180.0 + relDegree : relDegree;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;You can grab the rectangle and twist.&lt;br /&gt;&lt;br /&gt;I would be happy if anyone can explain why the formula in the getCurrentAngle() function gives 2 peaces of 180 interval? (That is why I added the ternary operator for the return command.)&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3348063277098557472?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3348063277098557472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/twistable-flash-object-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3348063277098557472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3348063277098557472'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/twistable-flash-object-with.html' title='Twistable Flash object with ActionScript3'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5583188164738663070</id><published>2009-06-24T15:15:00.000-07:00</published><updated>2009-06-24T15:24:39.665-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP Beauty</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Google announced this article collection recently: &lt;a href="http://code.google.com/speed/articles/optimizing-php.html"&gt;http://code.google.com/speed/articles/optimizing-php.html&lt;/a&gt; I thought 'What the heck, let's bechmark something.', and took a small experiment:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;div style="display:none;"&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$sum = 0;&lt;br /&gt;&lt;br /&gt;$count = 10000;&lt;br /&gt;$iteration = 100;&lt;br /&gt;&lt;br /&gt;for ($j = 0; $j &amp;lt; $iteration; $j++) {&lt;br /&gt; $t1 = microtime(TRUE);&lt;br /&gt; for ($i = 0; $i &amp;lt; $count; $i ++) {&lt;br /&gt;  //print "aaa"."bbb"."ccc"."ddd"."eee"."fff"."ggg"."hhh";&lt;br /&gt;  echo  'aaa','bbb','ccc','ddd','eee','fff','ggg','hhh';&lt;br /&gt; }&lt;br /&gt; $t2 = microtime(TRUE);&lt;br /&gt; $sum += $t2 - $t1;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;var_dump($sum / $iteration);&lt;/pre&gt;&lt;br /&gt;And the results were quite nice: &lt;strong&gt;0.026&lt;/strong&gt; against &lt;strong&gt;0.017&lt;/strong&gt;. So that is why echo still rocks, because with echo you can use comma instead of period. Never heard of commas for echo before. This is a PHP magic:)&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5583188164738663070?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5583188164738663070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/php-beauty.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5583188164738663070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5583188164738663070'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/php-beauty.html' title='PHP Beauty'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-216661871851370673</id><published>2009-06-22T09:22:00.000-07:00</published><updated>2009-06-22T09:50:42.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='apc'/><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='xdebug'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>OS X + PHP Part 2</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;As I promised, this my second explanation about how to build a PHP web development environment in OS X (10.5).&lt;br /&gt;As I mentioned a very basic configuration ships with the distro by default. But for me it was not enough. Going further from my last setup (&lt;a href="http://itarato.blogspot.com/2009/06/first-macbook-webdeveloper-enviroment.html"&gt;http://itarato.blogspot.com/2009/06/first-macbook-webdeveloper-enviroment.html&lt;/a&gt;) I noticed there isn't APC for PHP. No GD2 support (neither GD1). I depressed till found this miracle: &lt;a href="http://www.entropy.ch/software/macosx/php/"&gt;http://www.entropy.ch/software/macosx/php/&lt;/a&gt;&lt;br /&gt;Marc Liyanage compiled a very good PHP 5.2.9 with a lot of modules. If you step through his description you can install it quite easily. At the end you get a new php.ini. You need to add your previous xdebug settings to it. For APC see this article: &lt;a href="http://discussions.apple.com/thread.jspa?threadID=1578979"&gt;http://discussions.apple.com/thread.jspa?threadID=1578979&lt;/a&gt;. As it turned out, the pecl related APC is wrong on OS X, but the original APC compilation will work.&lt;br /&gt;Lately my favorite high end IDE is the stable NetBeans (6.7 RC3 has a StackOverflow for me). For PHP it works out of the box but for any Java related project I had to change the default java classpath: &lt;a href="http://statistics.netbeans.org/analytics/detail.do?id=150231"&gt;http://statistics.netbeans.org/analytics/detail.do?id=150231&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In a nutshell thats all about it. The MySQL and Apache server works as I wrote before. By the way just for play I tried the free MAMP application, but I found it a little bit old for my claims. It has a pretty cool minimalistoc control interface, works fine but doesn't contain some imprtant module. To be honest I was't bother with it so much. (My bad.)&lt;br /&gt;&lt;br /&gt;One thing. Last week I began to use NetBeans for debugging PHP projects. The reason I didn't use it for debug I didn't know how I can examine pages other than index.php. But as a matter of fact if it starts and finish it's first debug run you can enter any subpage into the browser (the same has the xdebug session) and the debug cycle will start again. So its really cool. There is a big advantage against ViM+XDebug, I like more NetBeans's variable browser. In ViM you are restricted to the php xdebug config (ex maximum variable nested level) and the limited height of the editor. But sake of NB's tree visualizaton you can traverse arrays and objects quite convenient.&lt;br /&gt;(Other tiny minus sign for osx - the default key bindings messes the F2..F6 key usages in vim.)&lt;br /&gt;&lt;br /&gt;Thats it. Any webdev environment related question would be welcomed:)&lt;br /&gt;&lt;br /&gt;Bye,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-216661871851370673?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/216661871851370673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/os-x-php-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/216661871851370673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/216661871851370673'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/os-x-php-part-2.html' title='OS X + PHP Part 2'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-1658214677578230183</id><published>2009-06-14T00:44:00.000-07:00</published><updated>2009-06-14T00:53:08.958-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>SQL dump with each database separately</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;This morning I missed my old MySQL tables from Windows XP, but for some reason I needed separate database dumps for each db. As far as I know I've 2 options to do that, dump each db in command line or to write a script in command line. No way. So I made a quick &amp;amp; dirty PHP script to generate the dump commands:&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$usr = 'YOURUSER';&lt;br /&gt;$pwd = 'YOURPASS';&lt;br /&gt;$date = date('Ymd');&lt;br /&gt;&lt;br /&gt;$conn = mysql_connect('localhost', $usr, $pwd);&lt;br /&gt;$resource = mysql_list_dbs();&lt;br /&gt;&lt;br /&gt;while ($row = mysql_fetch_object($resource)) {&lt;br /&gt;  echo 'mysqldump -u '.$usr.' --password='.$pwd.' '.$row-&gt;Database.' &amp;gt; mysqldump_'.$date.'_'.$row-&gt;Database.'.sql'."\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And then:&lt;br /&gt;&lt;pre&gt;c:\php dumpscript.php &amp;gt; dumpcmd.bat&lt;br /&gt;c:\dumpcmd.bat&lt;/pre&gt;&lt;br /&gt;Thats it.&lt;br /&gt;&lt;br /&gt;Gbai!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-1658214677578230183?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/1658214677578230183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/sql-dump-with-each-database-separately.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1658214677578230183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1658214677578230183'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/sql-dump-with-each-database-separately.html' title='SQL dump with each database separately'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-1824664406909119383</id><published>2009-06-13T14:25:00.000-07:00</published><updated>2009-06-13T14:54:40.922-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='macbook pro'/><category scheme='http://www.blogger.com/atom/ns#' term='xdebug'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>First Macbook - webdeveloper enviroment</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;This week I've got my first Macbook. I don't want to say any advertisement for the machine. Apple already has a very ugly campaign, just check www.apple.com and watch some commercial. Anyway. I love it even if it's so hard to setup.&lt;br /&gt;Some quick steps, how you can setup a minimal web developer environment if you've never seen OS X.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;OS - by default&lt;/li&gt;&lt;li&gt;Apache (2.2) - Enable it in System preferences / Sharing (Web) [&lt;a href="http://www.procata.com/blog/archives/2007/10/28/working-with-php-5-in-mac-os-x-105/"&gt;http://www.procata.com/blog/archives/2007/10/28/working-with-php-5-in-mac-os-x-105/&lt;/a&gt;]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Apache rewrite - overwrite appropriate line in httpd.conf to: AllowOverride All&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PHP - by default&lt;/li&gt;&lt;li&gt;MySQL - download the official 5.06 version package (install both two dmg-s), and link the /tmp/mysql.sock to /var/mysql/mysql.sock&lt;/li&gt;&lt;li&gt;MySQL - if mysql doesn't allow to get in, you have to hack an account [&lt;a href="http://www.linuxquestions.org/linux/answers/Security/MySQL_root_password_recovey"&gt;http://www.linuxquestions.org/linux/answers/Security/MySQL_root_password_recovey&lt;/a&gt;]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XDebug : download macvim, xdebug plugin for vim and compile the xdebug extension [&lt;a href="http://www.chrissearle.org/blog/technical/running_xdebug_204_osx_leopard_apachephp"&gt;http://www.chrissearle.org/blog/technical/running_xdebug_204_osx_leopard_apachephp&lt;/a&gt;]&lt;/li&gt;&lt;/ol&gt;Important paths / files:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;/etc/php.ini&lt;/li&gt;&lt;li&gt;/etc/apache2/httpd.conf&lt;/li&gt;&lt;li&gt;/etc/apache2/users/youruser.conf&lt;/li&gt;&lt;li&gt;/private/etc/... [almost the same as in /etc]&lt;/li&gt;&lt;li&gt;apachectl restart/start/stop&lt;/li&gt;&lt;li&gt;/usr/local/mysql/bin/mysql&lt;/li&gt;&lt;li&gt;/Library/StartupItems/MySQLCOM/MySQLCOM start/stop/restart&lt;/li&gt;&lt;/ul&gt;It just an overview, it's highly suggested to read some external materials. My intention was giving a small insight what you should expect. For me (as a first-time macer) was kinda hard to setup the basic stuffs. Of course there are easier ways. If you want to find some seamless solution, just check out these projects: MAMP, Fink.&lt;br /&gt;&lt;br /&gt;I want to write about my other experiences about the mac, but for now there are tons of works to do, so back to mac.&lt;br /&gt;&lt;br /&gt;Night!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-1824664406909119383?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/1824664406909119383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/first-macbook-webdeveloper-enviroment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1824664406909119383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/1824664406909119383'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/first-macbook-webdeveloper-enviroment.html' title='First Macbook - webdeveloper enviroment'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-963971251412832832</id><published>2009-06-01T13:00:00.000-07:00</published><updated>2011-02-13T05:40:33.223-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><title type='text'>Tiny Hanoi solver C in a tweet</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Recently I've started to re-learn C. (You know, always fun:) Unfortunately I've never know the language well. So, that is my smallest code that can resolve the so-called Tower of Hanoi problem:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Tower_of_Hanoi"&gt;http://en.wikipedia.org/wiki/Tower_of_Hanoi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Actually the code could fit in a tweet:) Check this out:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#include&lt;stdio.h&gt;&lt;br /&gt;main(){h(1,4,3);}h(int f,int t,int c){if(c==1)printf("%d&gt;%d\n",f,t);else{int b=7^(f|t);h(f,b,c-1);h(f,t,1);h(b,t,c-1);}}&lt;br /&gt;&lt;/stdio.h&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-963971251412832832?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/963971251412832832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/tiny-hanoi-solver-c-in-tweet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/963971251412832832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/963971251412832832'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/tiny-hanoi-solver-c-in-tweet.html' title='Tiny Hanoi solver C in a tweet'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-2068333115346075660</id><published>2009-06-01T12:51:00.000-07:00</published><updated>2009-06-01T12:56:47.661-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='augmented reality'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='module'/><title type='text'>Pattern recognision based Drupal trigger</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;Last week I contribute my second module on drupal.org:&lt;br /&gt;&lt;a href="http://drupal.org/project/webcam_trigger"&gt;webcam_trigger&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I used the so popular technology came up recently: augmented reality with a small difference, not there isn't any 3D magic. (But I'm thinking on it.) You can find a detailed description on the link above.&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rHTOlArLfSY&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rHTOlArLfSY&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Night,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-2068333115346075660?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/2068333115346075660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/pattern-recognision-based-drupal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2068333115346075660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2068333115346075660'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/pattern-recognision-based-drupal.html' title='Pattern recognision based Drupal trigger'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-698434496701727337</id><published>2009-06-01T01:53:00.000-07:00</published><updated>2009-06-14T14:54:05.831-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Drupal sandbox creator shell script</title><content type='html'>Hi Readers,&lt;br /&gt;&lt;br /&gt;I'm a really bad blogger. First, I never write. Secondly, I never write about new stuffs. I have my reason and to be honest, I've seen too many very good article so I had to realise, it's not going to be a tech blog. I'm really curious about how my coming MacBook affects to my reading habit. I've got a lot of hope in it. And another big news for me. I'll be a proud cat holder? Call me crazy but she will be my first child. (Besides that if her teacher says she is the smartest in the class - I won't believe it:) Anyway. To restart this stuff I intend to share a small Drupal site generator script with you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is the problem?&lt;br /&gt;&lt;/span&gt;I'm a Drupal developer. I need to test modules before using it on production sites. I need to try out a lot of things. And the best for doing that is a Drupal sandbox. But it takes 1 or 2 minutes to create one. (At least for me.) ((It should be a Drupal install contest - yeah:))&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution?&lt;/span&gt;&lt;br /&gt;Create a sandbox &lt;span style="font-weight: bold;"&gt;once&lt;/span&gt; and pre-populate it when needs a new one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Prepaire:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the latest &lt;span style="font-weight: bold;"&gt;Drupal&lt;/span&gt; install: &lt;a href="http://drupal.org/"&gt;http://drupal.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Install it in a directory called: &lt;span style="font-weight: bold;"&gt;drupal_sandbox&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Install all the modules you want by default (contrib ones as well)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Use the database name of: &lt;span style="font-weight: bold;"&gt;drupal_sandbox&lt;/span&gt; in the &lt;span style="font-weight: bold;"&gt;settings.php&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Tar the drupal_sandbox directory: &lt;span style="font-weight: bold;"&gt;tar -cvzf drupal_sandbox.tar.gz drupal_sandbox&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Create an sql dump: &lt;span style="font-weight: bold;"&gt;mysqldump -u YOURUSER --password=YOURPASS drupal_sandbox &gt; drupal_sandbox.sql&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The script:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/usr/bin/env bash&lt;br /&gt;&lt;br /&gt;# Directory where the tar.gz and sql file lies&lt;br /&gt;package_dir=~/download&lt;br /&gt;# Base file name for the tar.gz and sql files&lt;br /&gt;package_name=drupal_sandbox&lt;br /&gt;# Your web root&lt;br /&gt;www_dir=~/www&lt;br /&gt;# Your MySQL user&lt;br /&gt;mysql_pwd=YOURMYSQLUSER&lt;br /&gt;mysql_user=YOURMYSQLPASSWORD&lt;br /&gt;&lt;br /&gt;cd $www_dir&lt;br /&gt;tar -xvzf $package_dir/$package_name.tar.gz&lt;br /&gt;mv $package_name $1&lt;br /&gt;cd $1/sites/default&lt;br /&gt;mv settings.php settings.php.bckup&lt;br /&gt;sed "s/$package_name/$1/g" settings.php.bckup &gt; settings.php&lt;br /&gt;&lt;br /&gt;mysql -u $mysql_user --password=$mysql_pwd -e "create database $1"&lt;br /&gt;mysql -u $mysql_user --password=$mysql_pwd $1 &lt; $package_dir/$package_name.sql &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usage:&lt;/span&gt;&lt;br /&gt;Call the script with a parameter (the name of the new drupal site (directory &amp;amp; sql))&lt;br /&gt;&lt;pre&gt;sh ./drupal_creator.sh drupal_site_for_testing&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Thats it. I hope it works for you. On my environment its fine.&lt;br /&gt;&lt;br /&gt;Good luck,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-698434496701727337?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/698434496701727337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/06/drupal-sandbox-creator-shell-script.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/698434496701727337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/698434496701727337'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/06/drupal-sandbox-creator-shell-script.html' title='Drupal sandbox creator shell script'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-8069404170790999514</id><published>2009-03-28T09:41:00.000-07:00</published><updated>2009-03-28T10:09:16.548-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>HTML element related data storage</title><content type='html'>Hi Folks,&lt;br /&gt;&lt;br /&gt;I'm working on a voting widget generator Drupal module. Arbitrary voting widgets can be defined through a hook, and my module renders them to the node page. At the final phase the forms are converted to an ajaxian style and this needs a lot of information related to elements. The good old (quick and dirty) way to do this is the custom attributes. For example:&lt;br /&gt;&lt;br /&gt;&amp;lt;img src="http://www.blogger.com/..." class="..." weight="..." type="..." key="..." nid="..." /&amp;gt;&lt;br /&gt;&lt;br /&gt;As far as I know, it works in most browser, however, I bet it fails on any xhtml validation. (And so ugly.) My idea is a common data storage. You create a new element with a unique ID that can be a key as well in a javascript object, which would contain data. Let's see an example:&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript&amp;gt;&lt;br /&gt;var data = {};&lt;br /&gt;$('div.class').append('&amp;lt;img id="i1" src="pic1.png" /&amp;gt;');&lt;br /&gt;// save data&lt;br /&gt;data['i1'] = {weight:__, type:__, key:__, nid:__, names:[__, __, __]};&lt;br /&gt;// retrieve data&lt;br /&gt;var necessary_name = data['i1'].names[2];&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's all. This example is just a schema. It can help if you generate lots of elements or you want to attach data elements in runtime.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-8069404170790999514?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/8069404170790999514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/03/html-element-related-data-storage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8069404170790999514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8069404170790999514'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/03/html-element-related-data-storage.html' title='HTML element related data storage'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-8332742268476581645</id><published>2009-03-13T13:29:00.000-07:00</published><updated>2009-03-13T16:25:34.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='druplex'/><category scheme='http://www.blogger.com/atom/ns#' term='druplash'/><category scheme='http://www.blogger.com/atom/ns#' term='air'/><title type='text'>Drupal module finder Flex - AIR application</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;Recently I began learning Flex. The idea was from my boss and a girl who linked an adobe site with a LOT flex video on it. (Thanks @SquirrelMaster) &lt;a href="http://www.adobe.com/devnet/flex/videotraining/"&gt;http://www.adobe.com/devnet/flex/videotraining/&lt;/a&gt; - check it&lt;br /&gt;&lt;br /&gt;In the Drupal world there are two important buzzwords related to Flash: Druplash and Druplex. In a nutshell, these words cover the intelligent way that a Drupal application and a Flash application can communicate between each other. The basic idea behind this is the usage of Drupal as a back-end (information source) and the Flash as a better way to visualize the datas. To embed a flash game, video or a file/image uploader is not communication at all. As far as I know, it is very new field, however, there are quite a lot interesting idea there isn't any world changing way to implement it. If you interested in it, here you are some links to dig:&lt;br /&gt;&lt;br /&gt;SWFObject provide a better way to add flash content to your HTML. It checks the client's flash player and browser capabilities. And if the environment unable to render your SWF appropriately, it displays an alternative content -&gt; in the SEO side, makes your page readable for robots.&lt;br /&gt;&lt;a href="http://code.google.com/p/swfobject/"&gt;http://code.google.com/p/swfobject/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With SWFAddress your flash object can communicate with the JavaScript on the same page. Thus JavaScript can send a state (like the url) about the site (and from the url the flash can restore some action or timeline state - for example if the url is www.mywebshop.com/#shoes, it loads the shoes page). And of course vica-versa. Flash can send it's state to javascript and with that the javascript can modify the url for example. If its seems useless just think about sending a url for your friend. If the flash site can't handle the url, it always shows the home page.&lt;br /&gt;&lt;a href="http://www.asual.com/swfaddress/"&gt;http://www.asual.com/swfaddress/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Drupal has a module called Services. It defines a bunch of services (user services, node services, ...etc) and supports several layers to communicate (HTTP, RPC, XML-RPC, SOAP). The work-flow abstraction is quite simple. You send a request to the Drupal site, it does something (get data) and send back to the caller. The real power that you can create any custom services easily and with it you can retrieve any the information you want from Drupal.&lt;br /&gt;&lt;a href="http://drupal.org/project/services"&gt;http://drupal.org/project/services&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;AMF is a message format Flash use in transactions. It's binary, so mush more smaller than an XML message format. AMFPHP is a converter from AMF to PHP native format.&lt;br /&gt;&lt;a href="http://www.amfphp.org/"&gt;http://www.amfphp.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;AMFPHP porting to Drupal.&lt;br /&gt;&lt;a href="http://drupal.org/project/amfphp"&gt;http://drupal.org/project/amfphp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are some slides about Druplash and Druplex:&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_1133882"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/itarato/drupal-flash?type=presentation" title="Drupal &amp;amp; Flash"&gt;Drupal &amp;amp; Flash&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=drupalflash-090311173624-phpapp01&amp;stripped_title=drupal-flash" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=drupalflash-090311173624-phpapp01&amp;stripped_title=drupal-flash" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/itarato"&gt;Peter Arato&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Anyway. I fell in love with Flex. The reason I'm writing this post I developed a small application that helps searching Drupal modules on your desktop. How? With AIR. Unfortunately you have to install the desktop flash interpreter tool: called AIR player. It's more or less the same as Flash Player with a minor difference, it have the flash ran on desktop. Another interesting development: &lt;a href="http://www.openscreenproject.org/"&gt;http://www.openscreenproject.org/&lt;/a&gt; Adobe put the SWF and FLV/F4L technology to free license and strives to ease running flash applications on different devices. You know, now it's not the best on a unix based distro. But, ... at least you have the option for it.&lt;br /&gt;&lt;br /&gt;So, back to my Flex app. If you want to try, you can download from here:&lt;br /&gt;&lt;a href="http://www.bison.hu/public/drupal_module_search_v01.air"&gt;http://www.bison.hu/public/drupal_module_search_v01.air&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Adobe AIR player is available at here:&lt;br /&gt;&lt;a href="http://get.adobe.com/air/"&gt;http://get.adobe.com/air/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I can imagine a lot Flex application which can help the Drupal development. Making this was't more than 2 hours. Well, I know, it doesn't do too much as well.&lt;br /&gt;&lt;br /&gt;If you have a creative idea that would be great to implement with Flex, please tell me. I'd be pleased to hear any feedback.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Peter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-8332742268476581645?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/8332742268476581645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/03/drupal-module-finder-flex-air.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8332742268476581645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/8332742268476581645'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/03/drupal-module-finder-flex-air.html' title='Drupal module finder Flex - AIR application'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-2451881808758342106</id><published>2009-02-21T23:59:00.000-08:00</published><updated>2011-02-13T05:44:09.369-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>Drupal Timetracker Screencast</title><content type='html'>Hi All,&lt;br /&gt;&lt;br /&gt;This week I made my first screencast. It's about my new Drupal module called Timetracker. I have never ever thought how hard to make a video introduction. As my colleagues said, I speak in Hunglish, some kind of mixing with English and Hungarian. I sware I'm working on to imporve it. But you know. I'm not a rocket scientist. Anyway. That video took me 2 days and a lot of struggling. The module the video about is a tool for tracking your personal activities in the Drupal sphere. You can find several similar pages on the net, like &lt;a href="http://www.blogger.com/www.bubbletimer.com"&gt;www.bubbletimer.com&lt;/a&gt;. Actually it's a pretty useful application.&lt;br /&gt;My module is still under developing, although it's working fine. But it has some performance and usability issue I want to make better. I sent my application for a CVS account to drupal.org, I hope they'll answer me soon.&lt;br /&gt;So, here is the brief introduction about Timetracker:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hfajpm2No1o&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/hfajpm2No1o&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I used Camtasia Studio to record that stuff and to be honest, I amazed how cool is this tool. Unfortunately the free version is time limited but I suggest everybody to try it if thinking about screencasting.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-2451881808758342106?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/2451881808758342106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/02/hi-all-this-week-i-made-my-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2451881808758342106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2451881808758342106'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/02/hi-all-this-week-i-made-my-first.html' title='Drupal Timetracker Screencast'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-680093319794297577</id><published>2009-02-15T00:07:00.000-08:00</published><updated>2009-02-15T02:20:26.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lifehacker'/><title type='text'>10 practice how to improve your productivity</title><content type='html'>I keep myself as a workaholic guy. In the last few years I strove to be more and more productive. There are a couple of practices which save time for you a day. I want to share some of them with you. (DANGER! If you do exactly what is written, you can easily become to antisocial.:)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1 - do your household works rarely&lt;/span&gt;&lt;br /&gt;When you washing dishes or clean your room there is a huge overhead to prepare for the process and after that it takes time to work again. If you buy 7 dinner sets or 40 pair of socks your costs are cleared in a few weeks. Do you know the activity scattering theory? If you have N jobs and the i. job takes Ti time than:&lt;br /&gt;T1 + T2 + ... + TN = SUM(Ti)i=1..N * SQRT(N) * 1.2&lt;br /&gt;So it takes more than the total time because you can't change tasks in a moment.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 3.5 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2 - walk fast&lt;/span&gt;&lt;br /&gt;Be quick whatever you have to do if its not your work. Walk fast to your work and home. An average human walks with 3-5 km/h. When you fast you reach even 10-13 km/h. Anyway, you don't have do window shopping or sightseeing. Products are expensive and the city is boring.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 2 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3 - use a mindmap&lt;/span&gt;&lt;br /&gt;Thinking on things you don't remember eats time. Nobody can hold everything in his or her head. With a mindmap you can maintain all the things you are going to do. There are bunch of free mindmap applications on the internet. Freemind, MindMeister, MindOMO... If you don't know the GTD methodology, I suggest you to read about it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 2.5 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4 - create the best desktop environment&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;You can save a lot of time with a well configured desktop. There are some of the best practices:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;fast dial icons everywhere (frequently visited bookmarks, most used program icons...)&lt;/li&gt;&lt;li&gt;scripts for frequent processes (remote connection, generate things, version tracking practices...)&lt;/li&gt;&lt;li&gt;use online tools: email, rss reader, mindmap, storage, server works (thus you can work everywhere)&lt;/li&gt;&lt;li&gt;make a unix setup script with your custom configuration files, commands and installation profiles (reduce os installation time)&lt;/li&gt;&lt;li&gt;use 2 monitors instead of 1 large&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;win ~ 3 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5 - listen power metal a lot&lt;/span&gt;&lt;br /&gt;If you are listening dynamic music (power metal, speed metal) you feel yourself to be forced to work faster. And it gives you energy as well.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 1 hour a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6 - you have to deal with tiredness&lt;/span&gt;&lt;br /&gt;Mature human needs about 6 hours of sleeping a day. But even if you sleep 6 hours, you could be tired. I know coffee is popular, but fruits and vegetables are important as well. And also you can organize your works. For example if you are tired, let's do some boring administration stuff. And thus you can do the hard work when you can concentrate.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win  ~ 2 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7 - buy books instead of reading PDFs (but keep those too)&lt;/span&gt;&lt;br /&gt;Books are cheap if you think how they can help your job. And you can read faster real pages than the screen. You can add comments and highlight parts easily as well. But PDF documents are really useful when you want to search on a certain keywords.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 1.5 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;8 - don't have lunch at home&lt;/span&gt;&lt;br /&gt;Making your own food takes a lot of time. Buying ingredients. Preparing. Cooking. Eating. Cleaning. And in this case you have to find out what do you want to eat. And to get healthy ingredients cost a lot. Restaurants are cheaper and more efficient.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 3 hours a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9 - buy more RAM and use faster internet connection&lt;/span&gt;&lt;br /&gt;Everybody hates waiting for programs to start or give feedbacks. Even if it takes a few minutes it happens a hundred or thousand times a day during your work, so let's multiply it: few seconds x 1000 = few 1000 seconds ~ 1 hour . Don't forget a major rule! If you can get things faster, you get things faster, thus you do get more of them. More = better.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 1 hour a week&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10 - never try to guess how many tips you've got before you write a 'TOP X' article&lt;/span&gt;&lt;br /&gt;I wasted about an hour with thinking about the 10th practice. But I haven't got any other really efficient idea. Don't waste your own time with useless things.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;win ~ 1 hour&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Total - &lt;span style="font-weight: bold;"&gt;you win ~20.5 hours a week&lt;/span&gt;! Not bad. If you get 40$ for an hour it is 820$ a week. So a new MacBook is 1299$ and you can buy one in 12 days:) OMG that's beautiful:)&lt;br /&gt;&lt;br /&gt;Be agile, be enthusiastic, be efficient. That's it. Thanks for reading it.&lt;br /&gt;Cheers,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-680093319794297577?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/680093319794297577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/02/10-practice-how-to-improve-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/680093319794297577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/680093319794297577'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/02/10-practice-how-to-improve-your.html' title='10 practice how to improve your productivity'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-7159912542864946925</id><published>2009-02-13T09:49:00.000-08:00</published><updated>2011-02-13T05:43:06.762-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>I'm back to sum up the last three weeks</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;Long time no see. First, I'm happy that now I'm working on Pronovix. My new colleagues are awesome. They are really lifehackers:) This company works with Drupal and made several cool stuffs. Until a month ago I'd never participated in any Drupal project. When I began learning from Pro Drupal Development I felt myself strong and energetic and agile. But when I got my first mission, it changed a little bit:) Thinking in a Drupal way is REALLY hard at the first time. You know. Everybody can make a full fledged Ajax site with a strong PHP back-end. But when your hands are tight, it could be a huge pain. And the point. In English. Yeah. That's cool. But I love challenges. Learning is fun. Drupal fun. English fun. Working fun. Thats I guess equal to FUN^4. Not bad.&lt;br /&gt;The other interesting happenings was the installing war. God knows how many times I sad malicious words. Anyway. Its all because my old Asus laptop. There are 4 types of Linux distributions:&lt;br /&gt;1 - not well supported, pain (60%)&lt;br /&gt;2 - deprecated kernel, softwares (10%)&lt;br /&gt;3 - cant detect properly my SiS videocard (10%)&lt;br /&gt;4 - cant detect my Broadcom wifi card (20%)&lt;br /&gt;I know. Every geek is saying that you can always configure your unix based distro. Yes. But I can't. My favorite screenplay:&lt;br /&gt;1 - I need network access&lt;br /&gt;2 - To enable the network I had to fire up my wifi&lt;br /&gt;3 - To fire up my wifi i had to download the firmwares and stuffs from the network&lt;br /&gt;Yes, thats recursive. Maybe some parts of my brain still on running. That cause me a big headache. But I couldn't have a rest because on windows the web development really slow. I tried the follow distros:&lt;br /&gt;Ubuntu (4 version), Mint, SuSE, Debian, Arch, PCLinuxOS, Fedora, Slackware, FreeBSD, PcBSD.&lt;br /&gt;But 2 days ago miracle happened. Just browsed www.distrowatch.com and stumbled upon of Mepis Linux. I've never heard about it. But found quite a lot update, so thought it worth a try. And then ... First it asked me what resolution I want during installation. WOW! Kick ass. Next, it discovered my wifi card and made enable networking. Crazy. Then it can connected to the Debian Lenny repository, so really up to date. Thanks God it uses KDE 3.5.10. Only one defect it has, cant render monochrome fonts. But the default way isn't so bad. I can handle it.&lt;br /&gt;So, I suggest you trying it. At least once. Oh, I forgot the candy:) My webcam is working under Mepis. (Even XP is incapable to do this.) Run and download - &lt;a href="http://www.mepis.org/"&gt;http://www.mepis.org/&lt;/a&gt;&lt;br /&gt;Last I want to share with you, I found a very delicious gummy candy:) And If I mentioned delicious, I registered on http://delicious.com/. I don't know why I did't take that before. To be honest, I feel shame. You know my bookmarking site idea in my former post. You can follow me there: http://delicious.com/itarato&lt;br /&gt;And one thing at the end. I watched anime. This is a huge step to me. And I get used to drinking coffee in the weekends. Maybe once I'll become to a real geek:)&lt;br /&gt;So. I'm hungry thus this post is over. I hope I could give you at least a small information (use Mepis).&lt;br /&gt;Tomorrow I plan writing a blogpost about 'Top 10 thing which makes you more productive'. Because I'm always striving to be the most productive I can. Now is really bad.&lt;br /&gt;And I wrote a small article about unit/functional testing (Selenium, PHPUnit...), but I need a little time to correct it. Maybe on Sunday.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-7159912542864946925?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/7159912542864946925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/02/im-back-to-sum-up-last-three-weeks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7159912542864946925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7159912542864946925'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/02/im-back-to-sum-up-last-three-weeks.html' title='I&apos;m back to sum up the last three weeks'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3605450940897602130</id><published>2009-01-26T11:56:00.000-08:00</published><updated>2009-01-26T12:20:08.812-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='doctrine'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Doctrine or own database layer</title><content type='html'>Good Evening fellows,&lt;br /&gt;&lt;br /&gt;Last night I commit some changes to github (see at last post). To test that code works properly, I checked out it. (Or checkouted? Sorry for that.) And I realized, I had to modify an accessibility modifier in Doctrine's code. (One variable from private to public.) I had to take this change, because Doctrine has it's own autoloader support. But at the beginning of my development, I decided to use as well. And as we know, two autoloader don't work at the same code. So I built in Doctrine's autoloader in my one, but to work fine, I had to access to $_loadedModelFiles. That's the story. However, I'm wondering, which way I should continue my development. What do you think? The options:&lt;br /&gt;&lt;br /&gt;1 - I keep Doctrine, because it is awesome, and create a subclass of Doctrine to populate it with an accessor&lt;br /&gt;2 - Drop this idea and write a thin database layer/connector with a medium level of security features&lt;br /&gt;&lt;br /&gt;To make a good decision, I list some pros and cons:&lt;br /&gt;&lt;br /&gt;Why I should keep Doctrine?&lt;br /&gt; - it's fully tested&lt;br /&gt; - secure&lt;br /&gt; - OO based&lt;br /&gt; - use the hydrated technology&lt;br /&gt; - use cache&lt;br /&gt; - you can describe relationships between tables, and Doctrine will find out when you try to use something like this: $user-&gt;boss-&gt;company-&gt;ceo-&gt;hometown-&gt;postcode&lt;br /&gt; - its done&lt;br /&gt; - universal (mysql, postrgesql, oracle, sqlite...)&lt;br /&gt;&lt;br /&gt;Why not?&lt;br /&gt; - its huge, probably you don't need it in small sites (and with large sites you chose another framework:)&lt;br /&gt; - its not mine&lt;br /&gt; - you have to download separately&lt;br /&gt; - mess up my autoloader&lt;br /&gt; - not the best for optimizing database queries (I think so, but it could be a very stupid thought)&lt;br /&gt; - its huge (again)&lt;br /&gt;&lt;br /&gt;I guess, Doctrine should have to go. But I will break my head on it this week.&lt;br /&gt;Anyway, If you could suggest me anything... please, I would be glad about it.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3605450940897602130?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3605450940897602130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/doctrine-or-own-database-layer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3605450940897602130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3605450940897602130'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/doctrine-or-own-database-layer.html' title='Doctrine or own database layer'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3419027337774016157</id><published>2009-01-24T12:13:00.000-08:00</published><updated>2009-01-24T13:01:42.243-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP development</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;In this post I'm gonna write, what environment I'm working in. I'm always hesitating about what os should be used:&lt;br /&gt; - linux (debian, ubuntu, slackware)&lt;br /&gt; - solaris&lt;br /&gt; - windows (xp, vista)&lt;br /&gt;Making easy the choice, I'm usually forced using windows xp. (It must be some 'LOL' in your head.) I tell why. At first, Adobe Flash/Photoshop runs only under WinXP (and OS-X, but unfortunately I don't have enough money to buy a Mac, and &lt;a href="http://ideneb.ihackintosh.net/"&gt;iDeneb (http://ideneb.ihackintosh.net/)&lt;/a&gt; doesn't support audio). Next, in my humble opinion, that on TFT display only the plain old monochrome font rendering the best method to display texts. I hate when I can see the red and green/blue offset near the fonts face. And to be honest, some unix distributions have some problems in this field. Even if you managed to setup monochrome fonts in the base system, qt3 and qt4 applications, there are several place where ugly fonts left (eg. in browser). I think if you are a web developer, it matters. Anyway, from my side the main reason the adobe products. I hate to reboot systems every hour. That's, why I use XP. But, as you read before in my blog, I use VirtualBox as well (with Ubuntu on it):)&lt;br /&gt;To code I usually use Eclipse PDT (now version 2.0, hurray!) or GVim. This morning I found a very exciting tool which for debugging PHP: &lt;a href="http://tech.blog.box.net/2007/06/20/how-to-debug-php-with-vim-and-xdebug-on-linux/"&gt;http://tech.blog.box.net/2007/06/20/how-to-debug-php-with-vim-and-xdebug-on-linux/&lt;/a&gt;&lt;br /&gt;It wasted half of the day to setup, but totally worth it. To raise your curiosity, I tell only a little about it (more on the page I linked):&lt;br /&gt;With this Vim + remote XDebug you can follow the code running at runtime, line by line, function by function. You can see the function stack, breakpoints ... kicking awesome. (and a cool magic for those you want to enchant)&lt;br /&gt;For tracking my code I get used to using GIT. I'm glad to know GIT. If you know too, you know what I mean, If not, just visit &lt;a href="http://git-scm.com/"&gt;http://git-scm.com/&lt;/a&gt; and discover it. Unfortunately msysGit got across my system (some memory dump, even I uninstalled CygWin completely), so I use Git on CygWin. It's convenient, and can run gitk with graphical interface. I had a small pain pushing my repo to github (because of ssh keys), but at the and it succeeded. If you are enough brave, visit my github repo at: &lt;a href="http://github.com/itarato/easy-php-framework/tree/master"&gt;http://github.com/itarato/easy-php-framework/tree/master&lt;/a&gt;&lt;br /&gt;I decided to maintain this framework more frequent. Working with Drupal gives me a lot idea how a good framework has to be work. But of course, I don't want to steel:) [Think about it, for a minute! What is stealing? Especially in the development world. Not an easy topic. It needs bears to discuss. A lot!] Anyway its free as Drupal. So, nothing to worry about.&lt;br /&gt;To finish my dev. environment, its important to tell some about the background:&lt;br /&gt; - MySQL 5.06&lt;br /&gt; - Apache 2.2&lt;br /&gt; - PHP 5.2.7 (with APC, PDO, XDebug...)&lt;br /&gt;&lt;br /&gt;Thats all folks, If I forgot something, I strive to recover that.&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3419027337774016157?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3419027337774016157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/php-development.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3419027337774016157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3419027337774016157'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/php-development.html' title='PHP development'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-6407802018573252028</id><published>2009-01-23T13:39:00.000-08:00</published><updated>2009-01-23T14:28:17.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><title type='text'>JQuery minimal validation plugin</title><content type='html'>Hi All,&lt;br /&gt;&lt;br /&gt;Tonight I am gonna spread a dummy JQuery plugin:) At first I want to fix that I love jQuery. It's logical, well structured and awesome (like Barney Stinson). One boring night I wanted to create a jquery plugin, just for fun and see how it works. I decided to write a validation plugin. The topmost features of a validation plugins are the follows:&lt;br /&gt; - disable submission until all the fields are fill the requirements&lt;br /&gt; - display some information about the error's cause&lt;br /&gt; - sign somehow the parts of the form are false&lt;br /&gt; - if an item became valid, warning message will disappear (toggling)&lt;br /&gt;And of course, there are several criteria related to different kinds of form elements:&lt;br /&gt; - not empty (required)&lt;br /&gt; - only digits&lt;br /&gt; - email&lt;br /&gt; - min/max value/length&lt;br /&gt; - ... etc&lt;br /&gt;&lt;br /&gt;I made the basic features with checking 'required' criteria. This sample for those guys (ladies) who recently started to work with jquery or javascript. I tested it on newest browsers (FF3, O9, IE7, C1), and worked fine on each of them. If you curious about some other criteria implementation or anything, I will happy to help you.&lt;br /&gt;&lt;br /&gt;And the stuff...  oh yes. It needs a form, like:&lt;br /&gt;&lt;pre&gt;&amp;lt;form action="" method="post" id="form1"&amp;gt;&lt;br /&gt; &amp;lt;label for="name"&amp;gt;Name&amp;lt;/label&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;input type="text" name="name" class="required"/&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;label for="email"&amp;gt;Email&amp;lt;/label&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;input type="text" name="email" class="required" /&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;label for="description"&amp;gt;Description&amp;lt;/label&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;textarea class="required" name="description"&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;br /&amp;gt;&lt;br /&gt; &amp;lt;input type="submit" value="Submit" /&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;/pre&gt;&lt;br /&gt;and needs a style:&lt;br /&gt;&lt;pre&gt;.validation {&lt;br /&gt; background: #f55;&lt;br /&gt; padding: 4px;&lt;br /&gt; border: 2px solid #fff;&lt;br /&gt; color: #fdd;&lt;br /&gt; font-size: 10px;&lt;br /&gt; float: right;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;and finally needs to bind to a form via jquery:&lt;br /&gt;&lt;pre&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;    $("form#form1").validate();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's it. If you want this working sample:&lt;br /&gt;&lt;a href="http://www.bison.hu/public/sandbox4/"&gt;View it - http://www.bison.hu/public/sandbox4/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.bison.hu/public/sandbox4/jquery_minimal_validation.zip"&gt;Download it - http://www.bison.hu/public/sandbox4/jquery_minimal_validation.zip&lt;/a&gt;&lt;br /&gt;[after download - don't forget to get jquery####.js and link in the html]&lt;br /&gt;&lt;br /&gt;Sleep well&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-6407802018573252028?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/6407802018573252028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/jquery-minimal-validation-plugin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6407802018573252028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6407802018573252028'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/jquery-minimal-validation-plugin.html' title='JQuery minimal validation plugin'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-3628312496843365868</id><published>2009-01-20T09:16:00.000-08:00</published><updated>2011-02-13T05:38:58.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><title type='text'>Firefox bookmark export</title><content type='html'>Hi Everyone,&lt;br /&gt;&lt;br /&gt;Once happened this situation. I wanted to export my bookmarks from Firefox (3.0.5), but no one *.html files were created. Ok, I thought, JSON format is still appropriate, but an error message occured, and the exportation was failed.&lt;br /&gt;I find this bug report about it:&lt;br /&gt;&lt;a href="http://kb.mozillazine.org/Unable_to_export_bookmarks_to_HTML_file_-_Firefox"&gt;http://kb.mozillazine.org/Unable_to_export_bookmarks_to_HTML_file_-_Firefox&lt;/a&gt;&lt;br /&gt;So maybe Avast antivirus and PC-Tools Spyaware Doctor was guilty for that matter. But I didn't tend to close those applications, so, here is a tricky way to solve the problem:&lt;br /&gt;Open Google Chrome -&gt; Import Bookmarks and Settings -&gt; Select Firefox and the bookmarks checkbox -&gt; Import ... and now you are able to export the same from Google Chrome.&lt;br /&gt;&lt;br /&gt;Sometimes I'm thinking about a site I should develop for saving personal bookmarks online. I can imagine some enchanted feature in it, for example, at first, it could load a speed dial page (like Opera). Or there would be a scored list. So, if you visit a page more times than others, it would be on a better place in the ordered list. I think its sounds logical, because some pages are used more frequent, so its likely to search these links more times.&lt;br /&gt;On the other hand, its on the web. Pretend you need an important website you save before, but you saved it at home, and you are somewhere in the world (or at work). So annoying. Maybe, at default all the links could be private, but you can share any of them (like Google Reader feeds). But now, it is just an idea. And as always, probably there are several sites exists already in the internet ... please inform us if you know a good one:) Thanks!&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-3628312496843365868?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/3628312496843365868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/firefox-bookmark-export.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3628312496843365868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/3628312496843365868'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/firefox-bookmark-export.html' title='Firefox bookmark export'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-5342162749967920591</id><published>2009-01-16T11:58:00.000-08:00</published><updated>2011-09-30T12:52:33.963-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><title type='text'>Save Skype chat history</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;Tonight I want to present my first VBScript. Before having lunch, I had some free time, so I surfed the net, when bumped into the developer section at &lt;a href="https://developer.skype.com/"&gt;Skype.com&lt;/a&gt;. I remembered, my every OS-reinstall destroyed Skype chat history. But to be honest, the default format of the history filer is very messy, so it is difficult to read. I decided to delve into the SkypeAPI technology and it turned out that making simple scripts is so easy. You can use PHP, JavaSctipt, JScript, Java and VBScript. I choose the last one, because it seemed to be the most easy to run in Windows. You just put in a file with vbs extension, and run. So here is the code I wrote, I'll tell how it works soon:&lt;br /&gt;&lt;pre&gt;' Define global variables&lt;br /&gt;Dim oFSO, chat_file, folder_to_save&lt;br /&gt;' Directory where You want to save history (you can modify it)&lt;br /&gt;' Now it is relative, so it will be created where Your *.vbs script runs&lt;br /&gt;folder_to_save = "SkypeChatHistory"&lt;br /&gt;line_count = 0&lt;br /&gt;&lt;br /&gt;' Create FSO&lt;br /&gt;Set oFSO = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;set_next_free_dir()&lt;br /&gt;&lt;br /&gt;' Connect to Skype API via COM&lt;br /&gt;Set oSkype = WScript.CreateObject("Skype4COM.Skype", "Skype_")&lt;br /&gt;' Open skype, if it is not running&lt;br /&gt;If Not oSkype.Client.IsRunning Then&lt;br /&gt;oSkype.Client.Start()&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;WScript.Echo "Skype history will be saved. Found " &amp;amp; oSkype.Chats.Count &amp;amp; " chat group."&lt;br /&gt;&lt;br /&gt;' Iterate chats&lt;br /&gt;For Each oChat In oSkype.Chats&lt;br /&gt;names = ""&lt;br /&gt;' First name is You, so it is unnecessary to keep&lt;br /&gt;no_1st_flag = TRUE&lt;br /&gt;For Each oUser In oChat.Members&lt;br /&gt;If no_1st_flag Then&lt;br /&gt;no_1st_flag = FALSE&lt;br /&gt;Else&lt;br /&gt;   names = names &amp;amp; "_" &amp;amp; oUser.FullName&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;get_file("chat" &amp;amp; names &amp;amp; ".txt")&lt;br /&gt;chat_file.WriteLine(vbNewLine &amp;amp; "==== CHAT HISTORY (" &amp;amp; Replace(names, "_", "") &amp;amp; ") ====" &amp;amp; vbNewLine)&lt;br /&gt;line_count = line_count + oChat.Messages.Count&lt;br /&gt;' Fix by an anonymous commenter&lt;br /&gt;If oChat.Messages.Count &amp;gt; 0 Then&lt;br /&gt;For Each oMsg In oChat.Messages&lt;br /&gt;' Fix by Vadim Kravchenko&lt;br /&gt;On Error Resume Next&lt;br /&gt;chat_file.WriteLine(oMsg.FromDisplayName &amp;amp; " (" &amp;amp; oMsg.Timestamp &amp;amp; "): " &amp;amp; oMsg.Body)&lt;br /&gt;Next&lt;br /&gt;End If&lt;br /&gt;chat_file.Close&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;WScript.Echo "Backup was finished (" &amp;amp; line_count &amp;amp; " line saved). You can find your chats in: ./" &amp;amp; folder_to_save&lt;br /&gt;&lt;br /&gt;' Garbage collection&lt;br /&gt;SET chat_file = NOTHING&lt;br /&gt;SET folder_to_save = NOTHING&lt;br /&gt;SET oFSO = NOTHING&lt;br /&gt;SET oSkype = NOTHING&lt;br /&gt;&lt;br /&gt;' Access to a file given by name&lt;br /&gt;Sub get_file(file_name)&lt;br /&gt;' Parameter fix by: rommeech&lt;br /&gt;Set chat_file = oFSO.OpenTextFile(folder_to_save &amp;amp; "/" &amp;amp; file_name, 8, True, -1)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;' Find an appropriate directory the logs to save, however, to avoid collision with former dirs&lt;br /&gt;Sub set_next_free_dir()&lt;br /&gt;If oFSO.FolderExists(folder_to_save) Then&lt;br /&gt;ext = 1&lt;br /&gt;While oFSO.FolderExists(folder_to_save &amp;amp; "_" &amp;amp; ext) And ext &amp;lt; 100&lt;br /&gt;  ext = ext + 1&lt;br /&gt;Wend&lt;br /&gt;folder_to_save = folder_to_save &amp;amp; "_" &amp;amp; ext&lt;br /&gt;End If&lt;br /&gt;oFSO.CreateFolder(folder_to_save)&lt;br /&gt;End Sub&lt;/pre&gt;&lt;br /&gt;Save it to your Desktop (*.vbs), and double click on it. At the first time, Skype will ask you, whether you are aware of the security issues, and really want to add permission to connect the SkypeAPI ... if you trust me, just click OK. It will creates a folder called SkypeChatHistory and some files in it. Every filename consists the other member of the chat sessions, so, if you talked 3 times with your friend, John Doe, there will be a 'chat_John Doe.txt' in SkypeChatHistory with 3 conversation in it. If you are keen-eyed, you will notice conversation lines are in reversed order. --homework-- :)&lt;br /&gt;Now, I think, this code is quiet enough to save messages, and learn from it the way it works. If you can write a really small function to invert the collection (oChat.Messages), please comment it, and I will extend the code. Perhaps I make a gui for it with Visual Studio, I don't know. It must be dozen of good Skype backup applications already.&lt;br /&gt;&lt;br /&gt;Update: eigenein did a fantastic job making a Windows application for the same purposes:&amp;nbsp;&lt;a href="http://eigenein.github.com/skype-historian-website/"&gt;http://eigenein.github.com/skype-historian-website/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sleep well!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-5342162749967920591?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/5342162749967920591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/save-skype-chat-history.html#comment-form' title='45 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5342162749967920591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/5342162749967920591'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/save-skype-chat-history.html' title='Save Skype chat history'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>45</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-6436556246381387511</id><published>2009-01-14T09:41:00.000-08:00</published><updated>2011-02-13T02:23:01.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>Books from Amazon</title><content type='html'>Today finally I've got my books:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1231954971&amp;amp;sr=8-1"&gt;Code Complete (2nd edition)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Programming-Ruby-Pragmatic-Programmers-Second/dp/0974514055/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1231955017&amp;amp;sr=1-1"&gt;Programming Ruby (2nd edition)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Drupal-Development-Second-Beginning-Professional/dp/1430209895/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1231955073&amp;amp;sr=1-1"&gt;Pro Drupal Development (2nd edition)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now I see, each one is second edition. Nice. I'd read before this books in pdf, but both of them consist over 700 pages ... and my eyes burn down if I read it on the screen.&lt;br /&gt;I started to work with Drupal a month ago. It's really interesting, and a little complex at first sight. This book is the best I've heard. But I found some mistake in the sample code in the book:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;page 23: the 'variable_del(...' line is unnecessary, the page wasn't load with it for me.&lt;/li&gt;&lt;li&gt;page 151: need an extra line: in 'function joke_load($node) {&lt;br /&gt;  drupal_add_js('misc/collapse.js');&lt;br /&gt;  return db_fetch_object(...&lt;/li&gt;&lt;li&gt;page 216: after '} else if ($delta == 1 &amp;amp;&amp;amp; user_access('administer nodes')) {' need an array definition:&lt;br /&gt;$items = array();&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I suggest you to download the original source code from http://drupalbook.com, it has the correct code.&lt;br /&gt;If anybody found some typo, please report me and I will put that in the post. Or if I wrong, tell that as well:)&lt;br /&gt;&lt;br /&gt;Bye&lt;br /&gt;&lt;br /&gt;P.s.: And one thing for beginners like me with Drupal! My first Drupal sandbox was in WinXP with normal php module collection + APC. (PHP 5.2.8, MySQL 5.06, Apache 2.2) But when I called the modules page in the admin section, it took 17 seconds. Very long time. But I guessed its normal, because when Drupal loads admin module page, it reconfigures all of them, and crawl some new one, if it finds. But last night (just for fun) I tried it in Ubuntu (in VM), page loaded in 1-2 seconds. I was amazed. Even I didn't install apc in the unix environment. So, just count with it.&lt;br /&gt;Anyway, there is a very good article, how to get Drupal to run faster:&lt;br /&gt;&lt;a href="http://www.pronovix.com/blog/my-favorite-drupal-performance-hacks"&gt;http://www.pronovix.com/blog/my-favorite-drupal-performance-hacks&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-6436556246381387511?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/6436556246381387511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/books-from-amazon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6436556246381387511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6436556246381387511'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/books-from-amazon.html' title='Books from Amazon'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-7631068176748241252</id><published>2009-01-13T14:17:00.000-08:00</published><updated>2009-01-13T15:01:23.353-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Search PHP function from terminal</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;Last week I bought some unix books, beacuse I almost blowed up with the new Slackware. It is happened, that it didn't recognized my wifi network ... I am not aware of unix network layer. So I thought it is the right time to digg in the topic. By the way, my first issue is a shell script, which can find a php function with its phpdoc and exact location.&lt;br /&gt;How it works? &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# Usage: ./pfs &amp;lt;your dev. dir&amp;gt; &amp;lt;function name&amp;gt;, eg.:&lt;br /&gt;./pfs ./project1 user_get&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And the code itself (pfs):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#!/bin/bash&lt;br /&gt;# Check params&lt;br /&gt;if [ $# -lt 2 ]&lt;br /&gt;then&lt;br /&gt;  echo "Missing parameters.\nUsage: php_function_search [path] [function name]\n"&lt;br /&gt;  exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;echo&lt;br /&gt;&lt;br /&gt;for extension in php inc php3 html htpl&lt;br /&gt;do&lt;br /&gt;  for file in `find $1 -type f -name "*$extension"`&lt;br /&gt;  do&lt;br /&gt;    if [ -f $file ]&lt;br /&gt;    then&lt;br /&gt;      # Find function line&lt;br /&gt;      function_line_array=`cat $file -n | grep "function $2" | awk '{print $1}'`&lt;br /&gt;      for function_line in $function_line_array&lt;br /&gt;      do&lt;br /&gt;        comment_end=`expr $function_line - 1`&lt;br /&gt;        # Find the 1st comment line&lt;br /&gt;        comment_start=`cat $file -n | sed -n "1,$function_line p" | sed -n '/\/\*\*/ p' | tail -n 1 | awk '{print $1}'`&lt;br /&gt;        non_comment_start=`cat $file -n | sed -n "1,$comment_end p" | grep "^[^*]*$" | tail -n 1 | awk '{print $1}'`&lt;br /&gt;        if [ $comment_start ]&lt;br /&gt;        then&lt;br /&gt;          # Print doc&lt;br /&gt;          echo -ne "\033[00;32;40m"&lt;br /&gt;          echo "Found in &amp;lt;$file&amp;gt; on line ($function_line)."&lt;br /&gt;          if [ $comment_start -gt $non_comment_start ]&lt;br /&gt;          then&lt;br /&gt;            echo -ne "\033[00;36;40m"&lt;br /&gt;            sed -n "$comment_start,$comment_end p" $file&lt;br /&gt;          fi&lt;br /&gt;          echo -ne "\033[00;33;40m"&lt;br /&gt;          sed -n "$function_line p" $file&lt;br /&gt;          echo -e "\033[00;37;40m"&lt;br /&gt;        fi&lt;br /&gt;      done&lt;br /&gt;    fi&lt;br /&gt;  done&lt;br /&gt;done&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Some aspects. Function name covers the first part of the function name. For example 'pfs ./ user_get' will match to user_get, user_get_name, user_get_all ...etc. First, the directory given is walked recursively to find all files. Search in each file the function pattern. It gives the line numbers those are in. Then until! that line the script searches the last line starts with '/**' (phpdoc block start). And there is another barbarian hack. It searches the last noncomment line, because if the last noncomment line num is bigger than the last comment line till the function, that means the comment don't relate to the function. So we shouldn't list it. After all, all block displayed width different colors: echo -ne "\033[00;36;40m". Sometimes when you need to know, what parameters a specific function requires, or what is the functions exact name, or whether exists any alternative copies of the function... it seems useful.&lt;br /&gt;Just try it, and if you find a bug, please report it, a fixed it immediately.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WsaJE2LQxTA/SW0cqj2ts6I/AAAAAAAAAMI/CQlz445v6r4/s1600-h/pfs_screenshot"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 146px;" src="http://3.bp.blogspot.com/_WsaJE2LQxTA/SW0cqj2ts6I/AAAAAAAAAMI/CQlz445v6r4/s320/pfs_screenshot" border="0" alt=""id="BLOGGER_PHOTO_ID_5290916654735012770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-7631068176748241252?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/7631068176748241252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/search-php-function-from-terminal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7631068176748241252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/7631068176748241252'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/search-php-function-from-terminal.html' title='Search PHP function from terminal'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WsaJE2LQxTA/SW0cqj2ts6I/AAAAAAAAAMI/CQlz445v6r4/s72-c/pfs_screenshot' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-6743147437174172389</id><published>2009-01-12T15:38:00.000-08:00</published><updated>2011-02-13T05:40:05.448-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Ubuntu terminal monochrome font</title><content type='html'>In Ubuntu (&gt;= 8.07) sometimes you have to do trick to disable font hinting in terminal. (Because in tft I prefer monochrome fonts without hints and antialias.) The process works me everytime is the follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo -i&lt;br /&gt;&amp;lt;type your password&amp;gt;&lt;br /&gt;tar -cvvf font_links.tar /etc/fonts/conf.d/&lt;br /&gt;rm /etc/fonts/conf.d/10-no-sub-pixel.conf&lt;br /&gt;rm /etc/fonts/conf.d/10-antialias.conf&lt;br /&gt;rm /etc/fonts/conf.d/10-hinting-medium.conf&lt;br /&gt;rm /etc/fonts/conf.d/10-hinting.conf&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And restart all terminals. The more elegant way might be dpkg reconfigure, but i like the barbarian way sometimes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-6743147437174172389?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/6743147437174172389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/ubuntu-terminal-monochrome-font.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6743147437174172389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/6743147437174172389'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/ubuntu-terminal-monochrome-font.html' title='Ubuntu terminal monochrome font'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-2374522013486253537</id><published>2009-01-12T14:44:00.000-08:00</published><updated>2011-03-01T23:12:27.958-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Love and Hate = Passion</title><content type='html'>OMG!&lt;br /&gt;&lt;br /&gt;Today I planned to play with &lt;a href="http://git-scm.com/" target="_blank"&gt;git&lt;/a&gt;, but as every time I plan something, something other ruins the whole day. It happened on an Ubuntu (8.10) guest (in Sun's VirtualBox 2.10), which is worked fine until now, but suddenly AltGr stoped working. There is no worse when you have to deal with such an annoying thing. I made some investigation about it, and try all the solutions, but nothing worked. Last, I reinstall it:(&lt;br /&gt;By the way, if you are in the same situation, you should visit these sites:&lt;br /&gt;&lt;a href="https://help.ubuntu.com/community/ComposeKey" target="_blank"&gt;https://help.ubuntu.com/community/ComposeKey&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.andrewbeacock.com/2007/06/getting-right-alt-key-alt-gr-to-work-in.html" target="_blank"&gt;http://blog.andrewbeacock.com/2007/06/getting-right-alt-key-alt-gr-to-work-in.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Day 2:&lt;br /&gt;Right now I noticed, all the trouble occured after installing guest additions in VirtualBox. Oh mom!&lt;br /&gt;And that is what I expected:&lt;br /&gt;&lt;a href="http://forums.virtualbox.org/viewtopic.php?t=12488&amp;amp;sid=dd3403d3d4ca6f14cbf2917d10bc1e89" target="_blank"&gt;http://forums.virtualbox.org/viewtopic.php?t=12488&amp;amp;sid=dd3403d3d4ca6f14cbf2917d10bc1e89&lt;/a&gt;&lt;br /&gt;The culprit was VBoxGuestAdditions version 2.10!!!. So, if you are in the same shoes, use VBoxGuestAdditions 2.06. Here is the solution:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# switch to super user mode&lt;br /&gt;sudo -i&lt;br /&gt;# install Dynamic Kernel Module Support&lt;br /&gt;apt-get install dkms&lt;br /&gt;# download the previous version of vbox guest addons&lt;br /&gt;wget http://download.virtualbox.org/virtualbox/2.0.6/VBoxGuestAdditions_2.0.6.iso&lt;br /&gt;# mount it&lt;br /&gt;umount /media/cdrom&lt;br /&gt;mount -o loop ./VBoxGuestAdditions_2.0.6.iso /media/cdrom&lt;br /&gt;cd /media/cdrom&lt;br /&gt;# install&lt;br /&gt;# ideally it will reconfigure your current vbox driver set you installed before&lt;br /&gt;./VBoxLinuxAdditions-x86.run&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It worked for me:) I hope, Sun provides us a new fixed version in a short time. But I suggest you to take a snapshot sometimes in your VM.&lt;br /&gt;&lt;br /&gt;Have a nice day!&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;Welcome again,&lt;br /&gt;&lt;br /&gt;This morning a read my feeds and saw that a new VirtualBox version (2.1.2, bundled with a new VBoxGuestAdditions.iso) came to light:) [run and get it - &lt;a href="http://www.virtualbox.org/"&gt;http://www.virtualbox.org/&lt;/a&gt;] At that moment I downloaded and installed it. And of course setup the new VBoxLinuxAdditions-x86.run. Miracle happens:) Desktop integration works. Mouse integration works. AltGr works. Folder sharing works. SSH remote connection works. Thanks guys from Sun! Very great job!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-2374522013486253537?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/2374522013486253537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/love-and-hate-passion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2374522013486253537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/2374522013486253537'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/love-and-hate-passion.html' title='Love and Hate = Passion'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504541480590020244.post-4208735983730989519</id><published>2009-01-12T10:48:00.000-08:00</published><updated>2011-02-13T02:21:42.382-08:00</updated><title type='text'>Introduction</title><content type='html'>Hi Everyone,&lt;br /&gt;&lt;br /&gt;My name is Peter. Once before, I had made a blog, but I thought, It was not gonna worth it. Now, ... I give it a shot. My goal is to practicing my English. On the other hand, sometimes I found myself in a situation, where there would be great to own a blog, where I could take my ideas. Nowadays, I've felt bored myself. I bought some Unix book, and there are another three under shipping from Amazon. I hardly can wait that. Maybe I make a post about books I keep very useful in IT. Oh yes. I did not mentioned. I am some kind of an IT guy. Not the smart one, but the enthusiastic one. I don't know, what blog I really want. I would be happy to receive your responses. If you want, ask anything about programming or web development. I want help. My knowledge is various. I know PHP, (of course html, css), JavaScript (and some JS framework), a little Java. Flash with ActionScript 3. Some Ruby stuff. And a bunch of common things as every normal human.&lt;br /&gt;My original homesite: &lt;a target="_blank" href="http://itarato.uw.hu/index.php"&gt;http://itarato.uw.hu/index.php&lt;/a&gt;&lt;br /&gt;And my framework site: &lt;a target="_blank" href="http://www.bison.hu/"&gt;http://www.bison.hu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504541480590020244-4208735983730989519?l=itarato.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://itarato.blogspot.com/feeds/4208735983730989519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://itarato.blogspot.com/2009/01/hi-everyone-my-name-is-peter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4208735983730989519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504541480590020244/posts/default/4208735983730989519'/><link rel='alternate' type='text/html' href='http://itarato.blogspot.com/2009/01/hi-everyone-my-name-is-peter.html' title='Introduction'/><author><name>itarato</name><uri>http://www.blogger.com/profile/10043998745905287618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/-3qunVjsIzoY/Ttv6x_CanqI/AAAAAAAAAio/ZByS0Xz1gTM/s220/peter.jpeg'/></author><thr:total>0</thr:total></entry></feed>
