<?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:blogger='http://schemas.google.com/blogger/2008' 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-5699142825044889235</id><updated>2024-10-02T19:36:22.605+02:00</updated><category term="Perl"/><category term="blogging"/><category term="Twitter"/><category term="Padre"/><category term="Strawberry Perl"/><category term="CPAN"/><category term="Larry Wall"/><category term="programming"/><category term="wxPerl"/><category term="NotepadPlusPlus"/><category term="Perl tools"/><category term="chromatic"/><category term="Google"/><category term="Perl news"/><category term="Perl personalities"/><category term="RankSearch"/><category term="general"/><category term="Modern Perl"/><category term="Perl documentation"/><category term="SZABGAB"/><category term="ActivePerl"/><category term="Damien Conway"/><category term="Google AI Challenge"/><category term="POD"/><category term="Perl6"/><category term="SEO"/><category term="Testing"/><category term="Windows"/><category term="brian d foy"/><category term="html"/><category term="Linux"/><category term="DOS commands"/><category term="Hosting"/><category term="MMORPG"/><category term="Magic"/><category term="Open Source"/><category term="Perl Foundation"/><category term="Perl Iron Man"/><category term="Project Euler"/><category term="book"/><category term="edX"/><category term="learning"/><category term="perldoc"/><category term="Eclipse"/><category term="ncurses"/><title type='text'>Damien Learns Programming</title><subtitle type='html'>There is always one more thing to learn...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>117</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-5324519587344166088</id><published>2015-03-15T04:05:00.000+01:00</published><updated>2015-03-15T04:05:01.471+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ncurses"/><title type='text'>Experimenting with ncurses on Linux in Eclipse</title><content type='html'>Today I&#39;ll talk about a new project inspired by a co-worker: to write a &quot;graphical&quot; application to monitor network traffic from the console of an embedded device such as a data gateway or a raspberry pi.&lt;br /&gt;
The goal is not to produce a star software but to get back in shape programming with C after years of Perl and Python and learning about ncurses along the way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A few words about ncurses&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
ncurses is a C library allowing you to abstract the terminal type while writing ASCII graphical interface. It is used in the Linux kernel menuconfig utility for example.&lt;br /&gt;
More information about ncurses can be found on &lt;a href=&quot;https://www.gnu.org/software/ncurses/&quot; target=&quot;_blank&quot;&gt;the GNU ncurses page&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Ncurses&quot; target=&quot;_blank&quot;&gt;its wikipedia article&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Setting up the environment&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I will start with a Hello World program inspired directly from &lt;a href=&quot;http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/helloworld.html&quot; target=&quot;_blank&quot;&gt;the Linux documentation project&lt;/a&gt;.&lt;br /&gt;
&lt;pre class=&quot;c&quot; name=&quot;code&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;curses&amp;gt;

int main(void)
{
    initscr();
    printw(&quot;Hi!\n&quot;);
    refresh();
    getch();
    endwin();

    exit(0);
}&lt;/pre&gt;
&lt;div style=&quot;font-weight: bold;&quot;&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 1. Installation of the ncurses library&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Your Linux distribution should come with ncurses already installed. If it is not there, follow the nstructions found in &lt;a href=&quot;http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/intro.html&quot; target=&quot;_blank&quot;&gt;paragraph&amp;nbsp;&quot;1.3. Where to get it&quot;&lt;/a&gt; of the tldp ncurses how-to webpage.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 2. Creating a new Eclipse project&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
I am using the Kepler version of Eclipse. First navigate through the top menu commands:&lt;/div&gt;
&lt;div&gt;
File &amp;gt; New &amp;gt; C project&lt;/div&gt;
&lt;div&gt;
Then give your project a name (mine is &lt;i&gt;curses&lt;/i&gt;), project type = &quot;empty project&quot;, toolchains = &quot;Linux GCC&quot; (for building an executable for your dev machine).&lt;/div&gt;
&lt;div&gt;
Copy-paste or type the Hello World program above in main.c file for example.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 3. Adding the ncurses library to the ld path&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Right-click on your project name from the project explorer window and select the bottom option for &lt;i&gt;Properties&lt;/i&gt;.&lt;/div&gt;
&lt;div&gt;
In &quot;C/C++ General&quot; section, select &quot;Paths and Symbols&quot; then click on the &quot;Libraries&quot; tab.&lt;/div&gt;
&lt;div&gt;
Add ncurses to the list. End result should look as shown below:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwMgZIsX3qOA2FnHnWi889xx3sh4cWy5yXBHt9aMVo8zdcBcgSUHUy5Yw9dEo62A6h1TKE7NCkxlxJ3bj13KogthcFbkI3Var0ASr7hszaN84R7QxBrKGlCOvusW1TD50h-9WsrprJZc0/s1600/Screenshot+from+2015-03-14+22:20:05.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwMgZIsX3qOA2FnHnWi889xx3sh4cWy5yXBHt9aMVo8zdcBcgSUHUy5Yw9dEo62A6h1TKE7NCkxlxJ3bj13KogthcFbkI3Var0ASr7hszaN84R7QxBrKGlCOvusW1TD50h-9WsrprJZc0/s1600/Screenshot+from+2015-03-14+22:20:05.png&quot; height=&quot;224&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Adding the ncurses library to your project&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 4. Building your project&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Nothing tricky here: Right-click on your project name then &quot;Build Project&quot; or use the hammer icon from the top menu. Build result, as well as gcc command line, will be displayed in a console:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVOf_EIK9jFTNswB45iqDiLKjyqoVx8r7hAPGUcXZb7l5OyNoGwV4O592s5JA5b5I9h5gLRnbxrSH_Xvj0MQG7GoDg7yUdH7Z2eoti8JvYFuxSMYzWkCw4CJjrE9MofkWrK9bC6SiP-30/s1600/Screenshot+from+2015-03-14+22:31:53.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVOf_EIK9jFTNswB45iqDiLKjyqoVx8r7hAPGUcXZb7l5OyNoGwV4O592s5JA5b5I9h5gLRnbxrSH_Xvj0MQG7GoDg7yUdH7Z2eoti8JvYFuxSMYzWkCw4CJjrE9MofkWrK9bC6SiP-30/s1600/Screenshot+from+2015-03-14+22:31:53.png&quot; height=&quot;254&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Project has been built&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 5. Launching a terminal from Eclipse&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
To avoid switching back and forth between Eclipse and your terminal, I have used &lt;a href=&quot;http://stackoverflow.com/questions/908488/eclipse-runing-programs-not-in-the-native-eclipse-console&quot; target=&quot;_blank&quot;&gt;a trick found on stack Overflow&lt;/a&gt;: from the top menu, select Run &amp;gt; External Tools &amp;gt; External Tools Configuration...&lt;/div&gt;
&lt;div&gt;
Create a new configuration (here: Command_prompt) with the location of your terminal binary, the directory where your executable is and additional arguments for your terminal program to execute your program:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf00jCxahXHUwxhP6IjydQKwhS8bGSzs0qFQzTIxsy1ky7VypJqjGkoSH_xAMtSgx6rPpyIcM2S5qH0dDseQKOyOGeRXFAg20ROsvO9mfPNy3kpA-E6guBv-jV1C1G1TGZu8heSMc9YnI/s1600/Screenshot+from+2015-03-14+22:38:25.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf00jCxahXHUwxhP6IjydQKwhS8bGSzs0qFQzTIxsy1ky7VypJqjGkoSH_xAMtSgx6rPpyIcM2S5qH0dDseQKOyOGeRXFAg20ROsvO9mfPNy3kpA-E6guBv-jV1C1G1TGZu8heSMc9YnI/s1600/Screenshot+from+2015-03-14+22:38:25.png&quot; height=&quot;197&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Adding external tool configuration for your terminal&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To launch your program, Run &amp;gt; External Tools &amp;gt; Command_prompt (or the name you gave your configuration) and a terminal window should appear with your ncurses program running.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxERZ0H18-_TZpHqB0b85EYKPlUtEjMt7EDPDTQbThvs48TiO_Z_gx7DCeOgcudKVgBwDTsb6JEut48VqMQfvsRFPpww8-BItIzkxJC-qUaVbSDbYKXD7UexFg_EoO0AgE78EWbvnSX5E/s1600/Screenshot+from+2015-03-14+22:43:48_cropped.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxERZ0H18-_TZpHqB0b85EYKPlUtEjMt7EDPDTQbThvs48TiO_Z_gx7DCeOgcudKVgBwDTsb6JEut48VqMQfvsRFPpww8-BItIzkxJC-qUaVbSDbYKXD7UexFg_EoO0AgE78EWbvnSX5E/s1600/Screenshot+from+2015-03-14+22:43:48_cropped.png&quot; height=&quot;244&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Run Command_prompt opens a new terminal with your program&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
That&#39;s it. You are now set to explore ncurses tutorials that you can find on the web!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/5324519587344166088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2015/03/experimenting-with-ncurses-on-linux-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/5324519587344166088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/5324519587344166088'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2015/03/experimenting-with-ncurses-on-linux-in.html' title='Experimenting with ncurses on Linux in Eclipse'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwMgZIsX3qOA2FnHnWi889xx3sh4cWy5yXBHt9aMVo8zdcBcgSUHUy5Yw9dEo62A6h1TKE7NCkxlxJ3bj13KogthcFbkI3Var0ASr7hszaN84R7QxBrKGlCOvusW1TD50h-9WsrprJZc0/s72-c/Screenshot+from+2015-03-14+22:20:05.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-7711519009058840110</id><published>2012-08-18T09:51:00.001+02:00</published><updated>2014-02-20T07:36:59.364+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="edX"/><category scheme="http://www.blogger.com/atom/ns#" term="learning"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>edX: College-quality computer science education</title><content type='html'>&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;i&gt;A soft &amp;nbsp;drum roll can be heard throughout the realm. It slowly grows louder as a herald appears on your screen.&amp;nbsp;&lt;/i&gt;&lt;i&gt;The Announcer sounds her trumpet, clears her throat. Drums stop and she exclaims:&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&amp;nbsp; &amp;nbsp; - &quot;The blog heretofore known as &#39;Damien Learns Perl&#39; is now to be referred to as &#39;Damien Learns Programming&#39;. This broader title means greater variety and more life (or so it is hoped)&amp;nbsp;to the speculations and musings of an eternal student of computer programming.&quot;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Crowd cheers.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; - &lt;/i&gt;&quot;No camel was hurt in this process. Go home and spread the good word.&quot;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The herald lets out a content sigh then disappears in a puff.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;i&gt;-------&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;I feel like writing about other topics than just Perl. I contemplated starting a new blog for a few seconds but it made more sense to give a new direction to this site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Evolve or become irrelevant&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This could be the motto of the computing/computer science/IT industry.&lt;br /&gt;Tools keep popping out of thin air, new programming languages are invented, operating systems evolve rapidly, new devices appear that can be programmed, etc.&lt;br /&gt;Those changes answer people&#39;s ever demanding requests.&lt;br /&gt;&lt;br /&gt;You want to keep up but how to go about updating your skills?&lt;br /&gt;&lt;br /&gt;The best motivator is to build something that you need. When my wife became pregnant, I started to build a &quot;Baby Tracker&quot; app to learn C++ and to keep tab on the baby&#39;s vaccination schedule, teeth growth, stool color, etc. I eventually abandoned the project because (believe it or not) taking actual care of my first daughter became a higher priority. By the time I had bandwidth again, the &quot;baby tracker&quot; need was moot.&lt;br /&gt;Having a purpose makes you want to keep learning and carry on after you have hit a few too many obstacles.&lt;br /&gt;&lt;br /&gt;This self-learning path resembles an obstacle course: the end line is visible but you first have to jump over all those hurdles to attain it.&lt;br /&gt;&lt;br /&gt;Another way to learn new skills is through online education. Several sites already exist that put emphasis on learning in a fun way:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecademy.com/&quot; target=&quot;_blank&quot;&gt;Codecademy&lt;/a&gt;&amp;nbsp;(for beginning web programmers)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.khanacademy.org/&quot; target=&quot;_blank&quot;&gt;Khan Academy&lt;/a&gt; (originally created to teach mathematics but now proposing many subjects, including computer science)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.memrise.com/&quot; target=&quot;_blank&quot;&gt;Memrise&lt;/a&gt;&amp;nbsp;(to help you learn vocabulary for new languages, including programming languages)&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://learncodethehardway.org/&quot; target=&quot;_blank&quot;&gt;LCodeTHW&lt;/a&gt; (despite its name, offers a great way to start learning about programming)&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Those are quality sites and I encourage you to visit them if you are looking for a first acquaintance with a new topic.&lt;/div&gt;&lt;div&gt;However, I want to share here something that I am truly excited about: online computer science college-quality education for free. Back in 2000 I got involved in the &lt;a href=&quot;http://www.peoi.org/&quot; target=&quot;_blank&quot;&gt;PEOI project&lt;/a&gt;&amp;nbsp;whose mission was to bring professional education online to the masses (provided access to an internet link). The site still exists but the design has not evolved since its creation and course content was created by volunteers. Its noble goal though has found a champion today: &lt;a href=&quot;https://www.edx.org/courses&quot; target=&quot;_blank&quot;&gt;edX&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Get a quality education&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;edX is a joint online interactive educational project from MIT, Berkeley and Harvard University, some of the best US universities. You can earn certificates along with knowledge. New classes are about to start this fall and include:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/MITx/6.00x/2012_Fall/about&quot; target=&quot;_blank&quot;&gt;Introduction to Computer Science and Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/HarvardX/CS50x/2012/about&quot; target=&quot;_blank&quot;&gt;Introduction to Computer Science I&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/BerkeleyX/CS169.1x/2012_Fall/about&quot; target=&quot;_blank&quot;&gt;Software as a Service (SaaS)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/BerkeleyX/CS188.1x/2012_Fall/about&quot; target=&quot;_blank&quot;&gt;Artificial Intelligence&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;There is no selection, all classes are open to anyone with an internet access.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So go forth and upgrade your computing education.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Evolve and ride the relevance wave!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/7711519009058840110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/08/edx-college-quality-computer-science.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/7711519009058840110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/7711519009058840110'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/08/edx-college-quality-computer-science.html' title='edX: College-quality computer science education'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-1031727209523241582</id><published>2012-08-18T09:51:00.000+02:00</published><updated>2012-08-21T08:01:07.826+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="edX"/><category scheme="http://www.blogger.com/atom/ns#" term="learning"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><title type='text'>edX: College-quality computer science education</title><content type='html'>&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;A soft &amp;nbsp;drum roll can be heard throughout the realm. It slowly grows louder as a herald appears on your screen.&amp;nbsp;&lt;/i&gt;&lt;i&gt;The Announcer sounds her trumpet, clears her throat. Drums stop and she exclaims:&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&amp;nbsp; &amp;nbsp; - &quot;The blog heretofore known as &#39;Damien Learns Perl&#39; is now to be referred to as &#39;Damien Learns Programming&#39;. This broader title means greater variety and more life (or so it is hoped)&amp;nbsp;to the speculations and musings of an eternal student of computer programming.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Crowd cheers.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; - &lt;/i&gt;&quot;No camel was hurt in this process. Go home and spread the good word.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;The herald lets out a content sigh then disappears in a puff.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;-------&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
I feel like writing about other topics than just Perl. I contemplated starting a new blog for a few seconds but it made more sense to give a new direction to this site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Evolve or become irrelevant&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This could be the motto of the computing/computer science/IT industry.&lt;br /&gt;
Tools keep popping out of thin air, new programming languages are invented, operating systems evolve rapidly, new devices appear that can be programmed, etc.&lt;br /&gt;
Those changes answer people&#39;s ever demanding requests.&lt;br /&gt;
&lt;br /&gt;
You want to keep up but how to go about updating your skills?&lt;br /&gt;
&lt;br /&gt;
The best motivator is to build something that you need. When my wife became pregnant, I started to build a &quot;Baby Tracker&quot; app to learn C++ and to keep tab on the baby&#39;s vaccination schedule, teeth growth, stool color, etc. I eventually abandoned the project because (believe it or not) taking actual care of my first daughter became a higher priority. By the time I had bandwidth again, the &quot;baby tracker&quot; need was moot.&lt;br /&gt;
Having a purpose makes you want to keep learning and carry on after you have hit a few too many obstacles.&lt;br /&gt;
&lt;br /&gt;
This self-learning path resembles an obstacle course: the end line is visible but you first have to jump over all those hurdles to attain it.&lt;br /&gt;
&lt;br /&gt;
Another way to learn new skills is through online education. Several sites already exist that put emphasis on learning in a fun way:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.codecademy.com/&quot; target=&quot;_blank&quot;&gt;Codecademy&lt;/a&gt;&amp;nbsp;(for beginning web programmers)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.khanacademy.org/&quot; target=&quot;_blank&quot;&gt;Khan Academy&lt;/a&gt; (originally created to teach mathematics but now proposing many subjects, including computer science)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.memrise.com/&quot; target=&quot;_blank&quot;&gt;Memrise&lt;/a&gt;&amp;nbsp;(to help you learn vocabulary for new languages, including programming languages)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://learncodethehardway.org/&quot; target=&quot;_blank&quot;&gt;LCodeTHW&lt;/a&gt; (despite its name, offers a great way to start learning about programming)&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Those are quality sites and I encourage you to visit them if you are looking for a first acquaintance with a new topic.&lt;/div&gt;
&lt;div&gt;
However, I want to share here something that I am truly excited about: online computer science college-quality education for free. Back in 2000 I got involved in the &lt;a href=&quot;http://www.peoi.org/&quot; target=&quot;_blank&quot;&gt;PEOI project&lt;/a&gt;&amp;nbsp;whose mission was to bring professional education online to the masses (provided access to an internet link). The site still exists but the design has not evolved since its creation and course content was created by volunteers. Its noble goal though has found a champion today: &lt;a href=&quot;https://www.edx.org/courses&quot; target=&quot;_blank&quot;&gt;edX&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Get a quality education&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
edX is a joint online interactive educational project from MIT, Berkeley and Harvard University, some of the best US universities. You can earn certificates along with knowledge. New classes are about to start this fall and include:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/MITx/6.00x/2012_Fall/about&quot; target=&quot;_blank&quot;&gt;Introduction to Computer Science and Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/HarvardX/CS50x/2012/about&quot; target=&quot;_blank&quot;&gt;Introduction to Computer Science I&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/BerkeleyX/CS169.1x/2012_Fall/about&quot; target=&quot;_blank&quot;&gt;Software as a Service (SaaS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.edx.org/courses/BerkeleyX/CS188.1x/2012_Fall/about&quot; target=&quot;_blank&quot;&gt;Artificial Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
There is no selection, all classes are open to anyone with an internet access.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So go forth and upgrade your computing education.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Evolve and ride the relevance wave!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/1031727209523241582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/08/college-quality-computer-science.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/1031727209523241582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/1031727209523241582'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/08/college-quality-computer-science.html' title='edX: College-quality computer science education'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-3112906692769671207</id><published>2012-07-01T15:27:00.001+02:00</published><updated>2014-02-20T07:36:59.375+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="general"/><category scheme="http://www.blogger.com/atom/ns#" term="Open Source"/><title type='text'>Rebel Code</title><content type='html'>I just finished reading &lt;a href=&quot;http://www.amazon.com/Rebel-Code-Linux-Source-Revolution/dp/0738206709&quot; target=&quot;_blank&quot;&gt;&quot;Rebel Code&quot; by Glyn Moody&lt;/a&gt; and I really enjoyed it so here&#39;s a short review.&lt;br /&gt;&quot;Rebel Code&quot; is an older book which relates the story of high profile &lt;a href=&quot;http://www.opensource.org/&quot; target=&quot;_blank&quot;&gt;Open Source&lt;/a&gt; projects from the beginning of the free software movement up until 2001.&lt;br /&gt;I picked it up at a local Atlanta library and I had little idea about what I was going to find inside. I saw that it talked about the story of &lt;a href=&quot;http://www.gnu.org/gnu/linux-and-gnu.html&quot; target=&quot;_blank&quot;&gt;GNU/Linux&lt;/a&gt; and that was enough to arouse my curiosity.&lt;br /&gt;&lt;a href=&quot;http://linux.slashdot.org/story/01/01/29/2037257/rebel-code&quot; target=&quot;_blank&quot;&gt;The book&lt;/a&gt; is a great read for those wanting a short history of Open Source development. The author did a good job transitioning between various stories (The Free Software Foundation, Linux, Perl, etc.) and the result is a fun and instructive read. I finished it in 4 days.&lt;br /&gt;It makes me want to read an hypothetical volume two that would span from 2001 up to the present day.&lt;br /&gt;&lt;br /&gt;I highly recommend &quot;Rebel Code - Inside Linux and the Open Source revolution&quot; to all those who want to learn about the mythical free software coding feats, all the way from Richard Stallman&#39;s and Linus Torvald&#39;s first works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/3112906692769671207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/07/rebel-code_1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/3112906692769671207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/3112906692769671207'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/07/rebel-code_1.html' title='Rebel Code'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-8125834250730603988</id><published>2012-07-01T15:27:00.000+02:00</published><updated>2012-07-01T15:27:06.119+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="general"/><category scheme="http://www.blogger.com/atom/ns#" term="Open Source"/><title type='text'>Rebel Code</title><content type='html'>I just finished reading &lt;a href=&quot;http://www.amazon.com/Rebel-Code-Linux-Source-Revolution/dp/0738206709&quot; target=&quot;_blank&quot;&gt;&quot;Rebel Code&quot; by Glyn Moody&lt;/a&gt; and I really enjoyed it so here&#39;s a short review.&lt;br /&gt;
&quot;Rebel Code&quot; is an older book which relates the story of high profile &lt;a href=&quot;http://www.opensource.org/&quot; target=&quot;_blank&quot;&gt;Open Source&lt;/a&gt; projects from the beginning of the free software movement up until 2001.&lt;br /&gt;
I picked it up at a local Atlanta library and I had little idea about what I was going to find inside. I saw that it talked about the story of &lt;a href=&quot;http://www.gnu.org/gnu/linux-and-gnu.html&quot; target=&quot;_blank&quot;&gt;GNU/Linux&lt;/a&gt; and that was enough to arouse my curiosity.&lt;br /&gt;
&lt;a href=&quot;http://linux.slashdot.org/story/01/01/29/2037257/rebel-code&quot; target=&quot;_blank&quot;&gt;The book&lt;/a&gt; is a great read for those wanting a short history of Open Source development. The author did a good job transitioning between various stories (The Free Software Foundation, Linux, Perl, etc.) and the result is a fun and instructive read. I finished it in 4 days.&lt;br /&gt;
It makes me want to read an hypothetical volume two that would span from 2001 up to the present day.&lt;br /&gt;
&lt;br /&gt;
I highly recommend &quot;Rebel Code - Inside Linux and the Open Source revolution&quot; to all those who want to learn about the mythical free software coding feats, all the way from Richard Stallman&#39;s and Linus Torvald&#39;s first works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/8125834250730603988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/07/rebel-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8125834250730603988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8125834250730603988'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2012/07/rebel-code.html' title='Rebel Code'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-5701558208254404665</id><published>2011-10-29T16:10:00.008+02:00</published><updated>2014-02-20T07:36:59.384+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="Google AI Challenge"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><title type='text'>Google AI Challenge, Fall 2011 edition</title><content type='html'>It is this time of the year again. Google has set up its &lt;a href=&quot;http://aichallenge.org/index.php&quot;&gt;Fall 2011 Artificial Intelligence (AI) challenge&lt;/a&gt;.&lt;div&gt;The goal is to protect your ant hill and gather food while destroying the enemy&#39;s hills.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are &lt;a href=&quot;http://aichallenge.org/starter_packages.php&quot;&gt;starter packages for 25 languages&lt;/a&gt;, including Perl, for Windows and Linux environments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The contest closes on December 18th. Submit your best efforts to move Perl up the rankings!&lt;/div&gt;&lt;div&gt;Here is &lt;a href=&quot;http://aichallenge.org/language_profile.php?language=Perl&quot;&gt;the ranking table for Perl&lt;/a&gt;, there were 35 entries at the moment this post was written with a best position of 198th by grand_sbor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/5701558208254404665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/google-ai-challenge-fall-2011-edition_29.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/5701558208254404665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/5701558208254404665'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/google-ai-challenge-fall-2011-edition_29.html' title='Google AI Challenge, Fall 2011 edition'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-4497094918530765873</id><published>2011-10-29T16:10:00.007+02:00</published><updated>2011-10-30T12:04:11.260+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="Google AI Challenge"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><title type='text'>Google AI Challenge, Fall 2011 edition</title><content type='html'>It is this time of the year again. Google has set up its &lt;a href=&quot;http://aichallenge.org/index.php&quot;&gt;Fall 2011 Artificial Intelligence (AI) challenge&lt;/a&gt;.&lt;div&gt;The goal is to protect your ant hill and gather food while destroying the enemy&#39;s hills.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are &lt;a href=&quot;http://aichallenge.org/starter_packages.php&quot;&gt;starter packages for 25 languages&lt;/a&gt;, including Perl, for Windows and Linux environments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The contest closes on December 18th. Submit your best efforts to move Perl up the rankings!&lt;/div&gt;&lt;div&gt;Here is &lt;a href=&quot;http://aichallenge.org/language_profile.php?language=Perl&quot;&gt;the ranking table for Perl&lt;/a&gt;, there were 35 entries at the moment this post was written with a best position of 198th by grand_sbor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/4497094918530765873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/google-ai-challenge-fall-2011-edition.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4497094918530765873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4497094918530765873'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/google-ai-challenge-fall-2011-edition.html' title='Google AI Challenge, Fall 2011 edition'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-330411041266000276</id><published>2011-10-25T10:55:00.007+02:00</published><updated>2014-02-20T07:36:59.394+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl news"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl personalities"/><category scheme="http://www.blogger.com/atom/ns#" term="SZABGAB"/><title type='text'>The Perl Weekly newsletter</title><content type='html'>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;When it comes to getting fresh Perl news, the community provides &lt;a href=&quot;http://blogs.perl.org/users/gabor_szabo/2011/10/why-and-how-to-promote-the-perl-weekly-newsletter.html&quot;&gt;many resources&lt;/a&gt;.&lt;br /&gt;It can be time consuming to sift through all of them and there is always the chance that you will miss interesting tidbits about your favorite scripting language.&lt;br /&gt;&lt;br /&gt;Lo and behold, Gabor Szabo (&lt;a href=&quot;http://szabgab.com/&quot;&gt;szabgab&lt;/a&gt;) comes to your rescue. His &lt;a href=&quot;http://perlweekly.com/&quot;&gt;weekly Perl Weekly newsletter&lt;/a&gt; is an aggregate of all the recent happenings in the world of Perl programming. He is doing a great job of extracting the big news for us in order to save time to everyone.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;You can read the newsletter on the web or subscribe to receive it in your mailbox. 13 issues are out already!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.youtube.com/user/gabor529&quot;&gt;The Perl Channel&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gabor has been keeping himself busy recently, having the courage to stand in front of the spotlights. A few months ago, he started a &lt;a href=&quot;http://www.youtube.com/user/gabor529&quot;&gt;series of Perl videos on YouTube&lt;/a&gt;. There are, as of the end of October 2011, 25 segments of about 15 minutes.&lt;/div&gt;&lt;div&gt;If you are starting development of Perl programs on Windows, this is another great resource for learning. There are beginner lessons, Padre tutorials, Perl 6 videos and more.&lt;/div&gt;&lt;div&gt;If you prefer your information presented by a live person (as opposed to read from a document), I recommend that you check it out now. Even better, watch it on your phone during your commute (WARNING: do not drive and Perl at the same time!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/330411041266000276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/the-perl-weekly-newsletter.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/330411041266000276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/330411041266000276'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/the-perl-weekly-newsletter.html' title='The Perl Weekly newsletter'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-2994146103765927785</id><published>2011-10-25T10:55:00.006+02:00</published><updated>2011-10-25T23:08:29.708+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl news"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl personalities"/><category scheme="http://www.blogger.com/atom/ns#" term="SZABGAB"/><title type='text'>The Perl Weekly newsletter</title><content type='html'>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;When it comes to getting fresh Perl news, the community provides &lt;a href=&quot;http://blogs.perl.org/users/gabor_szabo/2011/10/why-and-how-to-promote-the-perl-weekly-newsletter.html&quot;&gt;many resources&lt;/a&gt;.&lt;br /&gt;It can be time consuming to sift through all of them and there is always the chance that you will miss interesting tidbits about your favorite scripting language.&lt;br /&gt;&lt;br /&gt;Lo and behold, Gabor Szabo (&lt;a href=&quot;http://szabgab.com/&quot;&gt;szabgab&lt;/a&gt;) comes to your rescue. His &lt;a href=&quot;http://perlweekly.com/&quot;&gt;weekly Perl Weekly newsletter&lt;/a&gt; is an aggregate of all the recent happenings in the world of Perl programming. He is doing a great job of extracting the big news for us in order to save time to everyone.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;You can read the newsletter on the web or subscribe to receive it in your mailbox. 13 issues are out already!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.youtube.com/user/gabor529&quot;&gt;The Perl Channel&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gabor has been keeping himself busy recently, having the courage to stand in front of the spotlights. A few months ago, he started a &lt;a href=&quot;http://www.youtube.com/user/gabor529&quot;&gt;series of Perl videos on YouTube&lt;/a&gt;. There are, as of the end of October 2011, 25 segments of about 15 minutes.&lt;/div&gt;&lt;div&gt;If you are starting development of Perl programs on Windows, this is another great resource for learning. There are beginner lessons, Padre tutorials, Perl 6 videos and more.&lt;/div&gt;&lt;div&gt;If you prefer your information presented by a live person (as opposed to read from a document), I recommend that you check it out now. Even better, watch it on your phone during your commute (WARNING: do not drive and Perl at the same time!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/2994146103765927785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/perl-weekly-newsletter.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/2994146103765927785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/2994146103765927785'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/10/perl-weekly-newsletter.html' title='The Perl Weekly newsletter'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-8442138380128642767</id><published>2011-06-19T08:49:00.019+02:00</published><updated>2014-02-20T07:36:59.403+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPAN"/><category scheme="http://www.blogger.com/atom/ns#" term="SZABGAB"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>CPAN tester</title><content type='html'>&lt;a href=&quot;https://twitter.com/#%21/szabgab&quot;&gt;Tweets from Gabor Szabo&lt;/a&gt; got me curious about CPAN tests.&lt;br /&gt;&lt;br /&gt;I work in software testing and I recognize the value of automatic tests and reports.&lt;br /&gt;&lt;br /&gt;After checking out the &lt;a href=&quot;http://wiki.cpantesters.org/&quot;&gt;CPAN Tester wiki&lt;/a&gt;, I installed and configured CPAN::Reporter. If I understand well, this module will automatically send the test results run on your computer to the CPAN test database when you install a new Perl module. The authors and users can see reports on all tested configurations.&lt;br /&gt;&lt;br /&gt;This is a simple way to give back to the Perl community for those nice &lt;a href=&quot;http://search.cpan.org/&quot;&gt;CPAN modules&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;http://wiki.cpantesters.org/wiki/TestDuringInstall&amp;amp;version=16&quot;&gt;process involved &lt;/a&gt;starts with installing the CPAN::Reporter module on your machine and saving the configuration file.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Note: When looking for the metabase-profile tool on Windows, check in the C:\Perl\cpan\build\Metabase-Fact-0.019\script directory.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can also set up a machine to continuously test CPAN Perl modules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each tester registered to the CPAN gets listed according to the number of test reports sent back to the server. Gabor is making a game of climbing the ranks. Who will join the testers&#39; army and try to beat him?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Edit June 22nd: As of now, I am registered on CPAN testers and have sent my first test report. You can check that your setup is correct by searching through the &lt;a href=&quot;http://metabase.cpantesters.org/tail/log.txt&quot;&gt;log tail&lt;/a&gt;. Here&#39;s my entry:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;22T07:21:29Z] [dlp] [pass] [DAGOLDEN/CPAN-Reporter-1.1902.tar.gz] [MSWin32-x86-multi-thread] [perl-v5.10.1] [ddfed1a4-6e1e-1014-9872-6ddfc9b97d9d] [2011-06-22T07:21:29Z]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let&#39;s work our way up! &lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/8442138380128642767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/06/cpan-tester_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8442138380128642767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8442138380128642767'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/06/cpan-tester_19.html' title='CPAN tester'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-4647188225292684121</id><published>2011-06-19T08:49:00.018+02:00</published><updated>2011-08-15T18:18:45.030+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPAN"/><category scheme="http://www.blogger.com/atom/ns#" term="SZABGAB"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>CPAN tester</title><content type='html'>&lt;a href=&quot;https://twitter.com/#%21/szabgab&quot;&gt;Tweets from Gabor Szabo&lt;/a&gt; got me curious about CPAN tests.&lt;br /&gt;I work in software testing and I recognize the value of automatic tests and reports.&lt;br /&gt;After checking out the &lt;a href=&quot;http://wiki.cpantesters.org/&quot;&gt;CPAN Tester wiki&lt;/a&gt;, I installed and configured CPAN::Reporter. If I understand well, this module will automatically send the test results run on your computer to the CPAN test database when you install a new Perl module. The authors and users can see reports on all tested configurations.&lt;br /&gt;This is a simple way to give back to the Perl community for those nice &lt;a href=&quot;http://search.cpan.org/&quot;&gt;CPAN modules&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href=&quot;http://wiki.cpantesters.org/wiki/TestDuringInstall&amp;amp;version=16&quot;&gt;process involved &lt;/a&gt;starts with installing the CPAN::Reporter module on your machine and saving the configuration file.&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Note: When looking for the metabase-profile tool on Windows, check in the C:\Perl\cpan\build\Metabase-Fact-0.019\script directory.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;You can also set up a machine to continuously test CPAN Perl modules.&lt;br /&gt;&lt;br /&gt;Each tester registered to the CPAN gets listed according to the number of test reports sent back to the server. Gabor is making a game of climbing the ranks. Who will join the testers&#39; army and try to beat him?&lt;br /&gt;&lt;br /&gt;Edit June 22nd: As of now, I am registered on CPAN testers and have sent my first test report. You can check that your setup is correct by searching through the &lt;a href=&quot;http://metabase.cpantesters.org/tail/log.txt&quot;&gt;log tail&lt;/a&gt;. Here&#39;s my entry:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;22T07:21:29Z] [dlp] [pass] [DAGOLDEN/CPAN-Reporter-1.1902.tar.gz] [MSWin32-x86-multi-thread] [perl-v5.10.1] [ddfed1a4-6e1e-1014-9872-6ddfc9b97d9d] [2011-06-22T07:21:29Z]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let&#39;s work our way up! &lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/4647188225292684121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/06/cpan-tester.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4647188225292684121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4647188225292684121'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/06/cpan-tester.html' title='CPAN tester'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-9060236884638068127</id><published>2011-01-16T13:47:00.004+01:00</published><updated>2014-02-20T07:36:59.412+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chromatic"/><category scheme="http://www.blogger.com/atom/ns#" term="Modern Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl news"/><title type='text'>Modern Perl</title><content type='html'>Last November, &lt;a href=&quot;http://twitter.com/#!/chromatic_x&quot;&gt;chromatic&lt;/a&gt; announced the availability of his &lt;a href=&quot;http://www.modernperlbooks.com/mt/&quot;&gt;book on Modern Perl&lt;/a&gt;. His creation is geared towards beginner Perl programmers who want to learn how to use the language in the most effective way, based on experienced programmers&#39; know-how.&lt;br /&gt;The book is also recommended to anyone who wrote Perl scripts in the distant past and wants to take advantage of Perl 5&#39;s latest features and good coding practices.&lt;br /&gt;You can download the pdf file from &lt;a href=&quot;http://www.onyxneon.com/books/modern_perl/index.html&quot;&gt;the companion site&lt;/a&gt;.&lt;br&gt;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/9060236884638068127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/01/modern-perl_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/9060236884638068127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/9060236884638068127'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/01/modern-perl_16.html' title='Modern Perl'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-2751139112918344464</id><published>2011-01-16T13:47:00.003+01:00</published><updated>2011-01-16T14:23:14.268+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chromatic"/><category scheme="http://www.blogger.com/atom/ns#" term="Modern Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl news"/><title type='text'>Modern Perl</title><content type='html'>Last November, &lt;a href=&quot;http://twitter.com/#!/chromatic_x&quot;&gt;chromatic&lt;/a&gt; announced the availability of his &lt;a href=&quot;http://www.modernperlbooks.com/mt/&quot;&gt;book on Modern Perl&lt;/a&gt;. His creation is geared towards beginner Perl programmers who want to learn how to use the language in the most effective way, based on experienced programmers&#39; know-how.&lt;br /&gt;The book is also recommended to anyone who wrote Perl scripts in the distant past and wants to take advantage of Perl 5&#39;s latest features and good coding practices.&lt;br /&gt;You can download the pdf file from &lt;a href=&quot;http://www.onyxneon.com/books/modern_perl/index.html&quot;&gt;the companion site&lt;/a&gt;.&lt;br&gt;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/2751139112918344464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/01/modern-perl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/2751139112918344464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/2751139112918344464'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2011/01/modern-perl.html' title='Modern Perl'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-6361238337785808641</id><published>2010-02-12T22:10:00.008+01:00</published><updated>2014-02-20T07:36:59.422+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="Google AI Challenge"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><title type='text'>Google AI Challenge: move Perl up the charts!</title><content type='html'>If you get snowed in this week-end, here&#39;s a fun way to pass the time: enter the &lt;a href=&quot;http://csclub.uwaterloo.ca/contest/index.php&quot;&gt;Google AI challenge&lt;/a&gt;!&lt;br /&gt;Organized by the University of Waterloo (Canada) and sponsored by Google, this challenge lets you compete in a &lt;a href=&quot;http://csclub.uwaterloo.ca/contest/visualizer.php?game_id=3355177&quot;&gt;game of Tron&lt;/a&gt; against other people&#39;s algorithms from a wide selection of programming languages.&lt;br /&gt;Sadly, Perl is not widely represented and the highest Perl score is at the 176th rank as of this Friday night.&lt;br /&gt;The contest ends on the 26th of this month. Who will care to test their Perl skills?</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/6361238337785808641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2010/02/google-ai-challenge-move-perl-up-charts_12.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/6361238337785808641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/6361238337785808641'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2010/02/google-ai-challenge-move-perl-up-charts_12.html' title='Google AI Challenge: move Perl up the charts!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-3244289864375613255</id><published>2010-02-12T22:10:00.007+01:00</published><updated>2011-10-30T10:08:27.369+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="Google AI Challenge"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><title type='text'>Google AI Challenge: move Perl up the charts!</title><content type='html'>If you get snowed in this week-end, here&#39;s a fun way to pass the time: enter the &lt;a href=&quot;http://csclub.uwaterloo.ca/contest/index.php&quot;&gt;Google AI challenge&lt;/a&gt;!&lt;br /&gt;Organized by the University of Waterloo (Canada) and sponsored by Google, this challenge lets you compete in a &lt;a href=&quot;http://csclub.uwaterloo.ca/contest/visualizer.php?game_id=3355177&quot;&gt;game of Tron&lt;/a&gt; against other people&#39;s algorithms from a wide selection of programming languages.&lt;br /&gt;Sadly, Perl is not widely represented and the highest Perl score is at the 176th rank as of this Friday night.&lt;br /&gt;The contest ends on the 26th of this month. Who will care to test their Perl skills?</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/3244289864375613255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2010/02/google-ai-challenge-move-perl-up-charts.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/3244289864375613255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/3244289864375613255'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2010/02/google-ai-challenge-move-perl-up-charts.html' title='Google AI Challenge: move Perl up the charts!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-8241167136766096312</id><published>2009-12-22T17:17:00.013+01:00</published><updated>2014-02-20T07:36:59.432+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="perldoc"/><category scheme="http://www.blogger.com/atom/ns#" term="POD"/><title type='text'>Reentrant perldoc help</title><content type='html'>Just want to elaborate on &lt;a href=&quot;http://damienlearnsperl.blogspot.com/2009/03/plain-old-documentation-pod.html&quot;&gt;a tip that I gave back in March&lt;/a&gt;.&lt;br /&gt;I have a somehow standard way of displaying help for my scripts:&lt;br /&gt;I display the POD data using the &lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; perl internal variable.&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; (or &lt;span style=&quot;font-family:courier new;&quot;&gt;$PROGRAM_NAME&lt;/span&gt; if you are using the &lt;span style=&quot;font-family:courier new;&quot;&gt;use English;&lt;/span&gt; pragma) &quot;contains the name of the file containing the Perl script being executed&quot;, to quote &lt;a href=&quot;http://oreilly.com/catalog/9780596000271&quot;&gt;the Camel book&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The help section is printed on screen if a script requires a parameter but none has been provided. I used to write it this way for a command line accepting only one parameter:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;perl&quot;&gt;sub get_help {&lt;br /&gt;    system(&quot;perldoc $0&quot;);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;However, I recently ran into a slight difficulty.&lt;br /&gt;On Windows, &lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; contains the disk letter followed by the complete path and finally the file name. For example:&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;C:\Users\Damien\Desktop\test coverage\Perl Scripts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice the white spaces in the directory names.&lt;br /&gt;When trying to perldoc this particular file name, I would get an error stating that there is no documentation for &lt;span style=&quot;font-family:arial;&quot;&gt;&quot;C:\Users\Damien\Desktop\test&quot;, &quot;coverage\Perl&quot;&lt;/span&gt; nor &lt;span style=&quot;font-family:arial;&quot;&gt;&quot;Scripts&lt;/span&gt;&quot;.&lt;br /&gt;&lt;br /&gt;My first reaction was simply to surround the &lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; file name with &quot;&quot; as shown below:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;perl&quot;&gt;sub get_help {&lt;br /&gt;    system(&quot;perldoc \&quot;$0\&quot;&quot;);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;[Added Dec. 29th]&lt;br /&gt;However, an enlightened reader pointed me to the best solution:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;perl&quot;&gt;sub get_help {&lt;br /&gt;    system(&quot;perldoc&quot;, $0);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;Using the list argument form of the system function avoids relying on the shell to run your command.&lt;br /&gt;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/8241167136766096312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/12/reentrant-perldoc-help_22.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8241167136766096312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8241167136766096312'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/12/reentrant-perldoc-help_22.html' title='Reentrant perldoc help'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-1013024869003201527</id><published>2009-12-22T17:17:00.012+01:00</published><updated>2009-12-29T15:33:25.064+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="perldoc"/><category scheme="http://www.blogger.com/atom/ns#" term="POD"/><title type='text'>Reentrant perldoc help</title><content type='html'>Just want to elaborate on &lt;a href=&quot;http://damienlearnsperl.blogspot.com/2009/03/plain-old-documentation-pod.html&quot;&gt;a tip that I gave back in March&lt;/a&gt;.&lt;br /&gt;I have a somehow standard way of displaying help for my scripts:&lt;br /&gt;I display the POD data using the &lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; perl internal variable.&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; (or &lt;span style=&quot;font-family:courier new;&quot;&gt;$PROGRAM_NAME&lt;/span&gt; if you are using the &lt;span style=&quot;font-family:courier new;&quot;&gt;use English;&lt;/span&gt; pragma) &quot;contains the name of the file containing the Perl script being executed&quot;, to quote &lt;a href=&quot;http://oreilly.com/catalog/9780596000271&quot;&gt;the Camel book&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The help section is printed on screen if a script requires a parameter but none has been provided. I used to write it this way for a command line accepting only one parameter:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;perl&quot;&gt;sub get_help {&lt;br /&gt;    system(&quot;perldoc $0&quot;);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;However, I recently ran into a slight difficulty.&lt;br /&gt;On Windows, &lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; contains the disk letter followed by the complete path and finally the file name. For example:&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;C:\Users\Damien\Desktop\test coverage\Perl Scripts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice the white spaces in the directory names.&lt;br /&gt;When trying to perldoc this particular file name, I would get an error stating that there is no documentation for &lt;span style=&quot;font-family:arial;&quot;&gt;&quot;C:\Users\Damien\Desktop\test&quot;, &quot;coverage\Perl&quot;&lt;/span&gt; nor &lt;span style=&quot;font-family:arial;&quot;&gt;&quot;Scripts&lt;/span&gt;&quot;.&lt;br /&gt;&lt;br /&gt;My first reaction was simply to surround the &lt;span style=&quot;font-family:courier new;&quot;&gt;$0&lt;/span&gt; file name with &quot;&quot; as shown below:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;perl&quot;&gt;sub get_help {&lt;br /&gt;    system(&quot;perldoc \&quot;$0\&quot;&quot;);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;[Added Dec. 29th]&lt;br /&gt;However, an enlightened reader pointed me to the best solution:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;perl&quot;&gt;sub get_help {&lt;br /&gt;    system(&quot;perldoc&quot;, $0);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;Using the list argument form of the system function avoids relying on the shell to run your command.&lt;br /&gt;&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/1013024869003201527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/12/reentrant-perldoc-help.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/1013024869003201527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/1013024869003201527'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/12/reentrant-perldoc-help.html' title='Reentrant perldoc help'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-5383383717826581327</id><published>2009-09-14T21:33:00.003+02:00</published><updated>2014-02-20T07:36:59.443+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Padre"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Installing Padre on Windows Vista</title><content type='html'>Last week, I (re-)installed &lt;a href=&quot;http://padre.perlide.org/&quot;&gt;Padre &lt;/a&gt;on my Windows Vista machine. &lt;a href=&quot;http://padre.perlide.org/&quot;&gt;Padre&lt;/a&gt; is a development environment geared towards Perl programmers, with a focus on Perl beginners.&lt;br /&gt;I use the &lt;a href=&quot;http://strawberryperl.com/&quot;&gt;Strawberry Perl&lt;/a&gt; distribution (5.10.0.6) and read that it was a breeze to install Padre.&lt;br /&gt;Well, it almost is.&lt;br /&gt;I opened the cpan shell (typing &lt;span style=&quot;font-family:courier new;&quot;&gt;cpan&lt;/span&gt; in a DOS shell is all it takes if C:\strawberry\perl\bin is in your PATH).&lt;br /&gt;The regular install (&lt;span style=&quot;font-family:courier new;&quot;&gt;install Padre&lt;/span&gt;) failed because of a dependency on Wx::Perl::ProcessStream not building. Just force install that module (&lt;span style=&quot;font-family:courier new;&quot;&gt;force install Wx::Perl::ProcessStream&lt;/span&gt;) then install Padre (a ticket has already been written for the issue).&lt;br /&gt;It works like a charm, no need to force install Padre anymore!&lt;br /&gt;So if you are a Perl beginner and want to use an editor written in Perl + suited for Perl tasks, you have no excuse anymore.&lt;br /&gt;&lt;br /&gt;If you already have Padre and want to update it to &lt;a href=&quot;http://blog.ryan52.info/?p=3&quot;&gt;version 0.46&lt;/a&gt; released today (September 14th 2009), type &lt;span style=&quot;font-family:courier new;&quot;&gt;upgrade Padre&lt;/span&gt; in your cpan shell. Better yet, you can update directly from the Padre Plugins menu: Plugins&gt;Module Tools&gt;Install CPAN Module and type Padre.&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/5383383717826581327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/installing-padre-on-windows-vista_14.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/5383383717826581327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/5383383717826581327'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/installing-padre-on-windows-vista_14.html' title='Installing Padre on Windows Vista'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-7130115404041946390</id><published>2009-09-14T21:33:00.002+02:00</published><updated>2009-09-14T21:47:09.318+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Padre"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Installing Padre on Windows Vista</title><content type='html'>Last week, I (re-)installed &lt;a href=&quot;http://padre.perlide.org/&quot;&gt;Padre &lt;/a&gt;on my Windows Vista machine. &lt;a href=&quot;http://padre.perlide.org/&quot;&gt;Padre&lt;/a&gt; is a development environment geared towards Perl programmers, with a focus on Perl beginners.&lt;br /&gt;I use the &lt;a href=&quot;http://strawberryperl.com/&quot;&gt;Strawberry Perl&lt;/a&gt; distribution (5.10.0.6) and read that it was a breeze to install Padre.&lt;br /&gt;Well, it almost is.&lt;br /&gt;I opened the cpan shell (typing &lt;span style=&quot;font-family:courier new;&quot;&gt;cpan&lt;/span&gt; in a DOS shell is all it takes if C:\strawberry\perl\bin is in your PATH).&lt;br /&gt;The regular install (&lt;span style=&quot;font-family:courier new;&quot;&gt;install Padre&lt;/span&gt;) failed because of a dependency on Wx::Perl::ProcessStream not building. Just force install that module (&lt;span style=&quot;font-family:courier new;&quot;&gt;force install Wx::Perl::ProcessStream&lt;/span&gt;) then install Padre (a ticket has already been written for the issue).&lt;br /&gt;It works like a charm, no need to force install Padre anymore!&lt;br /&gt;So if you are a Perl beginner and want to use an editor written in Perl + suited for Perl tasks, you have no excuse anymore.&lt;br /&gt;&lt;br /&gt;If you already have Padre and want to update it to &lt;a href=&quot;http://blog.ryan52.info/?p=3&quot;&gt;version 0.46&lt;/a&gt; released today (September 14th 2009), type &lt;span style=&quot;font-family:courier new;&quot;&gt;upgrade Padre&lt;/span&gt; in your cpan shell. Better yet, you can update directly from the Padre Plugins menu: Plugins&gt;Module Tools&gt;Install CPAN Module and type Padre.&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/7130115404041946390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/installing-padre-on-windows-vista.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/7130115404041946390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/7130115404041946390'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/installing-padre-on-windows-vista.html' title='Installing Padre on Windows Vista'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-8768930651607266377</id><published>2009-09-05T09:26:00.006+02:00</published><updated>2014-02-20T07:36:59.497+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="brian d foy"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl documentation"/><title type='text'>Learning Perl for cheap!</title><content type='html'>Brian d foy announced on his blog &lt;a href=&quot;http://use.perl.org/articles/09/08/24/2012226.shtml&quot;&gt;a price drop on O&#39;Reilly Perl books&lt;/a&gt;, including his own &lt;a href=&quot;http://oreilly.com/catalog/9780596520106/&quot;&gt;&quot;Learning Perl&quot; book&lt;/a&gt; that he co-wrote with Randal Schwartz and Tom Phoenix.&lt;br /&gt;With the discount code found in the comment section, the grand total is... $6.49 for a must have in every programmer&#39;s library!&lt;br /&gt;Credits to RAT for &lt;a href=&quot;http://yesistilluseperl.blogspot.com/2009/09/cheap-books.html&quot;&gt;announcing the news&lt;/a&gt; first.&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/8768930651607266377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/learning-perl-for-cheap_5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8768930651607266377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8768930651607266377'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/learning-perl-for-cheap_5.html' title='Learning Perl for cheap!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-7437389679891894260</id><published>2009-09-05T09:26:00.005+02:00</published><updated>2009-09-05T09:40:55.552+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="brian d foy"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl documentation"/><title type='text'>Learning Perl for cheap!</title><content type='html'>Brian d foy announced on his blog &lt;a href=&quot;http://use.perl.org/articles/09/08/24/2012226.shtml&quot;&gt;a price drop on O&#39;Reilly Perl books&lt;/a&gt;, including his own &lt;a href=&quot;http://oreilly.com/catalog/9780596520106/&quot;&gt;&quot;Learning Perl&quot; book&lt;/a&gt; that he co-wrote with Randal Schwartz and Tom Phoenix.&lt;br /&gt;With the discount code found in the comment section, the grand total is... $6.49 for a must have in every programmer&#39;s library!&lt;br /&gt;Credits to RAT for &lt;a href=&quot;http://yesistilluseperl.blogspot.com/2009/09/cheap-books.html&quot;&gt;announcing the news&lt;/a&gt; first.&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/7437389679891894260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/learning-perl-for-cheap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/7437389679891894260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/7437389679891894260'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/09/learning-perl-for-cheap.html' title='Learning Perl for cheap!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-4872283919279135404</id><published>2009-07-14T21:36:00.001+02:00</published><updated>2014-02-20T07:36:59.544+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPAN"/><category scheme="http://www.blogger.com/atom/ns#" term="Magic"/><category scheme="http://www.blogger.com/atom/ns#" term="MMORPG"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><title type='text'>Perl modules of online MMORPG</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;What happened to MTG_Studio?&lt;br /&gt;&lt;/span&gt;&lt;span&gt;I &lt;/span&gt;&lt;span&gt;was distraught&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;&lt;span&gt;to see that my favorite tool&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;to manage a Magic: The Gathering&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;card collection has been suspended (probably by Wizard of the Coast). Hopefully it is sadly temporary (that&#39;s what &lt;a href=&quot;http://en.wikipedia.org/wiki/Beaker_%28Muppet%29&quot;&gt;Beaker&lt;/a&gt; keeps telling me anyway) but I will not bet much on that. If anyone has news, please let me know.&lt;br /&gt;&lt;br /&gt;That event prompted me to wonder if there was any module on CPAN dealing with MTG.&lt;br /&gt;I was surprised not to find any, so I may just have to do something about that.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;MMORPG love from Perl?&lt;/span&gt;&lt;br /&gt;On the other hand, I found a few modules related to massively multi player role playing games.&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;World Of Warcraft&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Efranckc/Games-WoW-Armory-0.0.7/lib/Games/WoW/Armory.pm&quot;&gt;Games::WoW::Armory&lt;/a&gt; - Access to the WoW Armory&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Efranckc/Bot-BasicBot-Pluggable-Module-WoWPVP-0.02/lib/Bot/BasicBot/Pluggable/Module/WoWPVP.pm&quot;&gt;Bot::BasicBot::Pluggable::Module::WoWPVP&lt;/a&gt; - Fetch information about pvp grades for World Of Warcraft&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Esock/WWW-Wow-RealmStatus-0.5/lib/WWW/Wow/RealmStatus.pm&quot;&gt;WWW::Wow::RealmStatus&lt;/a&gt; - The great new WWW::Wow::RealmStatus!&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Esscotto/WoW-Wiki-0.01/lib/WoW/Wiki.pm&quot;&gt;WoW::Wiki&lt;/a&gt; - Perl extension to parse WoW wikki markup&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;Lord of the Rings Online&lt;/li&gt;&lt;/ul&gt;- There is no Perl module yet but &lt;a href=&quot;http://my.lotro.com/bracket/datalotrocom-usage-guide/&quot;&gt;a LOTRO Web API exists&lt;/a&gt;!&lt;br /&gt;&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;EverQuest&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Epjf/Games-EverQuest-LogLineParser-0.09/lib/Games/EverQuest/LogLineParser.pm&quot;&gt;Games::EverQuest::LogLineParser&lt;/a&gt; - Perl extension for parsing lines from the EverQuest log file.&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/search?query=everquest&amp;amp;mode=all&quot;&gt;Other Perl scripts&lt;/a&gt; exist to complement the LogLineParser module&lt;br /&gt;&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;Eve Online&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Ebluefeet/Games-EveOnline-API-0.02/lib/Games/EveOnline/API.pm&quot;&gt;Games::EveOnline::API&lt;/a&gt; - A simple Perl wrapper around the EveOnline XML API.&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Echrisc/WebService-EveOnline-0.62/lib/WebService/EveOnline.pm&quot;&gt;WebService::EveOnline&lt;/a&gt; -- a wrapper intended to (eventually) provide a useful interface to the MMORPG game, &quot;Eve Online&quot;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Neverwinter Nights&lt;/span&gt; (not really an MMORPG)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Esscotto/Games-NeverwinterNights-Query-1.0/Query.pm&quot;&gt;Games::NeverwinterNights::Query&lt;/a&gt; - Query Perl class to query a Neverwint Nights Server&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;F.E.A.R.&lt;/span&gt; (not really an MMORPG)&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Eevank/Games-FEAR-Log-0.02/lib/Games/FEAR/Log.pm&quot;&gt;Games::FEAR::Log&lt;/a&gt; - Log analysis tool for F.E.A.R. dedicated servers&lt;br /&gt;&lt;br /&gt;Does anyone out there have written or used an online PC game-related module?&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/4872283919279135404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/07/perl-modules-of-online-mmorpg_14.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4872283919279135404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4872283919279135404'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/07/perl-modules-of-online-mmorpg_14.html' title='Perl modules of online MMORPG'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-4162311571780559533</id><published>2009-07-14T21:36:00.000+02:00</published><updated>2009-07-14T21:45:24.677+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPAN"/><category scheme="http://www.blogger.com/atom/ns#" term="Magic"/><category scheme="http://www.blogger.com/atom/ns#" term="MMORPG"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><title type='text'>Perl modules of online MMORPG</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;What happened to MTG_Studio?&lt;br /&gt;&lt;/span&gt;&lt;span&gt;I &lt;/span&gt;&lt;span&gt;was distraught&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;&lt;span&gt;to see that my favorite tool&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;to manage a Magic: The Gathering&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;card collection has been suspended (probably by Wizard of the Coast). Hopefully it is sadly temporary (that&#39;s what &lt;a href=&quot;http://en.wikipedia.org/wiki/Beaker_%28Muppet%29&quot;&gt;Beaker&lt;/a&gt; keeps telling me anyway) but I will not bet much on that. If anyone has news, please let me know.&lt;br /&gt;&lt;br /&gt;That event prompted me to wonder if there was any module on CPAN dealing with MTG.&lt;br /&gt;I was surprised not to find any, so I may just have to do something about that.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;MMORPG love from Perl?&lt;/span&gt;&lt;br /&gt;On the other hand, I found a few modules related to massively multi player role playing games.&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;World Of Warcraft&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Efranckc/Games-WoW-Armory-0.0.7/lib/Games/WoW/Armory.pm&quot;&gt;Games::WoW::Armory&lt;/a&gt; - Access to the WoW Armory&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Efranckc/Bot-BasicBot-Pluggable-Module-WoWPVP-0.02/lib/Bot/BasicBot/Pluggable/Module/WoWPVP.pm&quot;&gt;Bot::BasicBot::Pluggable::Module::WoWPVP&lt;/a&gt; - Fetch information about pvp grades for World Of Warcraft&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Esock/WWW-Wow-RealmStatus-0.5/lib/WWW/Wow/RealmStatus.pm&quot;&gt;WWW::Wow::RealmStatus&lt;/a&gt; - The great new WWW::Wow::RealmStatus!&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Esscotto/WoW-Wiki-0.01/lib/WoW/Wiki.pm&quot;&gt;WoW::Wiki&lt;/a&gt; - Perl extension to parse WoW wikki markup&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;Lord of the Rings Online&lt;/li&gt;&lt;/ul&gt;- There is no Perl module yet but &lt;a href=&quot;http://my.lotro.com/bracket/datalotrocom-usage-guide/&quot;&gt;a LOTRO Web API exists&lt;/a&gt;!&lt;br /&gt;&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;EverQuest&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Epjf/Games-EverQuest-LogLineParser-0.09/lib/Games/EverQuest/LogLineParser.pm&quot;&gt;Games::EverQuest::LogLineParser&lt;/a&gt; - Perl extension for parsing lines from the EverQuest log file.&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/search?query=everquest&amp;amp;mode=all&quot;&gt;Other Perl scripts&lt;/a&gt; exist to complement the LogLineParser module&lt;br /&gt;&lt;ul style=&quot;font-style: italic;&quot;&gt;&lt;li&gt;Eve Online&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Ebluefeet/Games-EveOnline-API-0.02/lib/Games/EveOnline/API.pm&quot;&gt;Games::EveOnline::API&lt;/a&gt; - A simple Perl wrapper around the EveOnline XML API.&lt;br /&gt;- &lt;a href=&quot;http://search.cpan.org/%7Echrisc/WebService-EveOnline-0.62/lib/WebService/EveOnline.pm&quot;&gt;WebService::EveOnline&lt;/a&gt; -- a wrapper intended to (eventually) provide a useful interface to the MMORPG game, &quot;Eve Online&quot;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Neverwinter Nights&lt;/span&gt; (not really an MMORPG)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Esscotto/Games-NeverwinterNights-Query-1.0/Query.pm&quot;&gt;Games::NeverwinterNights::Query&lt;/a&gt; - Query Perl class to query a Neverwint Nights Server&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;F.E.A.R.&lt;/span&gt; (not really an MMORPG)&lt;/li&gt;&lt;/ul&gt;- &lt;a href=&quot;http://search.cpan.org/%7Eevank/Games-FEAR-Log-0.02/lib/Games/FEAR/Log.pm&quot;&gt;Games::FEAR::Log&lt;/a&gt; - Log analysis tool for F.E.A.R. dedicated servers&lt;br /&gt;&lt;br /&gt;Does anyone out there have written or used an online PC game-related module?&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/4162311571780559533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/07/perl-modules-of-online-mmorpg.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4162311571780559533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/4162311571780559533'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/07/perl-modules-of-online-mmorpg.html' title='Perl modules of online MMORPG'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-2630986307417429881</id><published>2009-06-10T23:15:00.002+02:00</published><updated>2014-02-20T07:36:59.594+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Twitter"/><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl"/><title type='text'>Adding a menu bar to the twitter GUI: part 5</title><content type='html'>&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; font-weight: bold; line-height: 22.66666603088379px;&quot;&gt;Updating to the new Net::Twitter::Lite API&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Marc Mims updated the API of his twitter&#39;s interface module for Perl.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;There are two versions:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;a href=&quot;http://search.cpan.org/~mmims/Net-Twitter-3.18003/lib/Net/Twitter.pod&quot; target=&quot;_blank&quot;&gt;Net::Twitter v3.18&lt;/a&gt;&amp;nbsp;- Major update, object oriented, based on Moose.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;a href=&quot;http://search.cpan.org/~mmims/Net-Twitter-Lite-0.11002/lib/Net/Twitter/Lite.pm&quot; target=&quot;_blank&quot;&gt;Net::twitter::Lite v0.02&lt;/a&gt;&lt;span id=&quot;goog_1538643603&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1538643604&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://www.blogger.com/&quot;&gt;&lt;/a&gt;&amp;nbsp;- Not so complete but requiring less dependencies.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;In order to use the Lite version (largely sufficient for my modest needs), only trivial changes are needed in the twit_GUI.pl script:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;replace&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;use Net::Twitter&lt;/span&gt;&amp;nbsp;by&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;use Net::Twitter::Lite&lt;/span&gt;&amp;nbsp;(duh!)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;replace calls to&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;Net::Twitter-&amp;gt;new()&lt;/span&gt;&amp;nbsp;by calls to&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;Net::Twitter::Lite-&amp;gt;new()&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;This ensures that I am now using a module that is actively supported.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; font-weight: bold; line-height: 22.66666603088379px;&quot;&gt;Adding a menu bar&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;A menu bar can only be added to a Frame. According to the wxPerl docs,&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Arial, Lucida, Helvetica; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 1.3em; margin: 1em 20px;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: Arial, Lucida, Helvetica;&quot;&gt;A frame is a window whose size and position can (usually) be changed by the user. It usually has thick borders and a title bar, and can optionally contain a menu bar, toolbar and status bar. A frame can contain any window that is not a frame or dialog.&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;So, let&#39;s replace the Dialog occurences with Frame in the script.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;The MyApp modules becomes:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class=&quot;perl:firstline[30]&quot; name=&quot;code&quot;&gt;##############################################################################&lt;br /&gt;#&lt;br /&gt;package MyApp;&lt;br /&gt;#&lt;br /&gt;##############################################################################&lt;br /&gt;use vars qw(@ISA);&lt;br /&gt;@ISA=qw(Wx::App);   # this tells Perl to look for unknown methods in the Wx::App module&lt;br /&gt;&lt;br /&gt;use Wx qw(wxDefaultSize wxDefaultPosition);&lt;br /&gt;&lt;br /&gt;sub OnInit {&lt;br /&gt;    my($this) = @_;&lt;br /&gt;    my $frame = MyFrame-&amp;gt;new(&#39;Twit&#39;, wxDefaultPosition);&lt;br /&gt;    # set it as top window (so the app will automatically close when &lt;br /&gt;    # the last top window is closed)&lt;br /&gt;    $this-&amp;gt;SetTopWindow($frame);&lt;br /&gt;    $frame-&amp;gt;Show(1);&lt;br /&gt;    1;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.649999618530273px;&quot;&gt;package MyDialog becomes package MyFrame:&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;perl:firstline[49]&quot; name=&quot;code&quot;&gt;##############################################################################&lt;br /&gt;#&lt;br /&gt;package MyFrame;&lt;br /&gt;#&lt;br /&gt;##############################################################################&lt;br /&gt;use vars qw(@ISA);&lt;br /&gt;&lt;br /&gt;@ISA=qw(Wx::Frame);&lt;br /&gt;&lt;br /&gt;use Wx::Event qw(EVT_BUTTON EVT_CLOSE EVT_TEXT EVT_TEXT_MAXLEN);&lt;br /&gt;use Wx qw(:sizer&lt;br /&gt;          :statictext&lt;br /&gt;          wxDefaultPosition&lt;br /&gt;          wxDefaultSize&lt;br /&gt;          wxDefaultValidator&lt;br /&gt;          wxDEFAULT_DIALOG_STYLE&lt;br /&gt;          wxID_OK&lt;br /&gt;          wxOK&lt;br /&gt;          wxRESIZE_BORDER&lt;br /&gt;          wxTE_MULTILINE&lt;br /&gt;          );&lt;br /&gt;&lt;br /&gt;use constant MAX_POST_LENGTH =&amp;gt; 140;&lt;br /&gt;&lt;br /&gt;sub new {&lt;br /&gt;    my $class = shift;&lt;br /&gt;    my $password_file;&lt;br /&gt;&lt;br /&gt;    # Main window&lt;br /&gt;    my $form_width  = 480;&lt;br /&gt;    my $form_height = 195;&lt;br /&gt;    # Array of line numbers used on the dialog window&lt;br /&gt;    my @ylines = (0, 10, 20, 40, 80, 100);&lt;br /&gt;&lt;br /&gt;    my $this = $class-&amp;gt;SUPER::new(&lt;br /&gt;                            undef,  # parent&lt;br /&gt;                            -1,     # id&lt;br /&gt;                            $_[0],  # title&lt;br /&gt;                            $_[1],  # position [x, y]&lt;br /&gt;                           [$form_width, $form_height] # size [width, height]&lt;br /&gt;                           );&lt;br /&gt;&lt;br /&gt;    # Display the Wx icon on the application window&lt;br /&gt;    $this-&amp;gt;SetIcon(Wx::GetWxPerlIcon());&lt;br /&gt;&lt;br /&gt;    #--------------------------------------------------------------------------&lt;br /&gt;    # Menu Bar&lt;br /&gt;    #--------------------------------------------------------------------------     &lt;br /&gt;    my $file_menu = Wx::Menu-&amp;gt;new(&#39;&#39;);&lt;br /&gt;    my $menu_bar = Wx::MenuBar-&amp;gt;new();&lt;br /&gt;    $menu_bar-&amp;gt;Append($file_menu, &#39;&amp;amp;File&#39;);&lt;br /&gt;    $this-&amp;gt;SetMenuBar($menu_bar);&lt;br /&gt;    ...&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Increase the form height by 10 pixels (up to 195) to make room for the menu bar.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;And... voilà!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMwY6foCA84wetUgVzifZUaq4rMGrCcJWs2vG-PLNPkjI7uhV5POOaFnkWRBJwnNE1YCMw33zYwCHXV2r_dPsPbQT5AcGNHH_evT5p7s28uZ6ennDuHLKUavNViEwgpmKDQTqWSVVzZRI/s1600-h/FrameBroken.jpg&quot; style=&quot;background-color: #e7ffcf; color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;&quot;&gt;&lt;img alt=&quot;First version of twit script using wxperl&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5345428666605830754&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMwY6foCA84wetUgVzifZUaq4rMGrCcJWs2vG-PLNPkjI7uhV5POOaFnkWRBJwnNE1YCMw33zYwCHXV2r_dPsPbQT5AcGNHH_evT5p7s28uZ6ennDuHLKUavNViEwgpmKDQTqWSVVzZRI/s400/FrameBroken.jpg&quot; style=&quot;border: 1px solid rgb(120, 183, 73); display: block; height: 162px; margin: 0px auto 10px; padding: 4px; text-align: center; width: 400px;&quot; title=&quot;First try&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Er... not too pretty, let&#39;s go back to the doc. Oh wait, what is that about panels?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 1.3em; margin: 1em 20px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;A panel is a window on which controls are placed. It is usually placed within a frame. It contains minimal extra functionality over and above its parent class wxWindow; its main purpose is to be similar in appearance and functionality to a dialog, but with the flexibility of having any window as a parent.&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Ah ah! The trick is to place a wxPanel object inside the frame and then relate every existing GUI element to this panel as the parent window. Previously, all the elements (button, text dialog, etc.) had the wxFrame as a parent window, hence the dark grey background. Just add this line before the Menu Bar code:&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;perl:firstline[93]&quot; name=&quot;code&quot;&gt;    # Create a panel where to place GUI elements&lt;br /&gt;    my $panel = Wx::Panel-&amp;gt;new($this, -1);&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;and replace the $this argument by $panel everywhere you need to set the parent ID.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Now we&#39;ve got a menu bar element. You can fill it by appending menu elements to it as is shown in the code below. Each menu element can be appended in turn with menu options. The wxFrame::SetMenuBar() method displays a given menu bar.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;perl:firstline[95]&quot; name=&quot;code&quot;&gt;    #--------------------------------------------------------------------------&lt;br /&gt;    # Menu Bar&lt;br /&gt;    #-------------------------------------------------------------------------- &lt;br /&gt;    my $menu_bar = Wx::MenuBar-&amp;gt;new();&lt;br /&gt;&lt;br /&gt;    my $file_menu = Wx::Menu-&amp;gt;new(); &lt;br /&gt;    $file_menu-&amp;gt;Append(11, &#39;E&amp;amp;xit&#39;);&lt;br /&gt;    $menu_bar-&amp;gt;Append($file_menu, &#39;&amp;amp;File&#39;);&lt;br /&gt; &lt;br /&gt;    my $help_menu = Wx::Menu-&amp;gt;new();&lt;br /&gt;    $help_menu-&amp;gt;Append(21, &#39;&amp;amp;About&#39;);&lt;br /&gt;    $menu_bar-&amp;gt;Append($help_menu, &#39;&amp;amp;Help&#39;);&lt;br /&gt;&lt;br /&gt;    # wxFrame method to show a given menu bar&lt;br /&gt;    $this-&amp;gt;SetMenuBar($menu_bar);&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;The &amp;amp; in the string (eg: &#39;E&amp;amp;xit&#39;) shows what shortcut will be used in combination with the Alt key (eg: Alt + x for &#39;E&amp;amp;xit&#39;).&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;To link an event with a menu selection, use the EVT_MENU event:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;perl:firstline[110]&quot; name=&quot;code&quot;&gt;    EVT_MENU($this, 11, \&amp;amp;OnQuit);&lt;br /&gt;    EVT_MENU($this, 21, \&amp;amp;OnAbout)&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;The callback methods can be implemented as such:&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;perl:firstline[381]&quot; name=&quot;code&quot;&gt;sub OnQuit {&lt;br /&gt;    my $this = shift;&lt;br /&gt;    $this-&amp;gt;Close( 1 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub OnAbout {&lt;br /&gt;    my $this = shift;&lt;br /&gt;    use Wx qw(wxOK wxCENTRE);&lt;br /&gt;    Wx::MessageBox(&quot;twit_GUI $VERSION\n$version_date\n(c)DamienLearnsPerl&quot;,  # text&lt;br /&gt;                   &quot;About&quot;,                   # title bar&lt;br /&gt;                   wxOK|wxCENTRE,             # buttons to display on form&lt;br /&gt;                   $this                      # parent&lt;br /&gt;                   );          &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;End result under Vista? Tadaaa!&lt;/span&gt;&lt;br /&gt;&lt;br style=&quot;background-color: #e7ffcf; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwuMfChC9YRxd0pwPxMjLu03nWD9MG2pgd6sXhsdQb4KIsWx_K9J6w8b1mYyQfhyphenhyphenG7ur08AhMMheNdlY_Q1905CkwTLajA66blcpVPho9Mkf8TEDdj86OP87nt7j-MfmBSTzNiEX_vXVc/s1600-h/Menu1.jpg&quot; style=&quot;background-color: #e7ffcf; color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;&quot;&gt;&lt;img alt=&quot;Improvement layout using panels&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5345805955978576226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwuMfChC9YRxd0pwPxMjLu03nWD9MG2pgd6sXhsdQb4KIsWx_K9J6w8b1mYyQfhyphenhyphenG7ur08AhMMheNdlY_Q1905CkwTLajA66blcpVPho9Mkf8TEDdj86OP87nt7j-MfmBSTzNiEX_vXVc/s400/Menu1.jpg&quot; style=&quot;border: 1px solid rgb(120, 183, 73); display: block; height: 163px; margin: 0px auto 10px; padding: 4px; text-align: center; width: 400px;&quot; title=&quot;Improvement&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Next step:&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;- Load/save password files&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Find the whole new source code&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://sites.google.com/site/damienlearnsperl/DLP-scripts&quot; style=&quot;color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/2630986307417429881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/06/adding-menu-bar-to-twitter-gui-part-5_10.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/2630986307417429881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/2630986307417429881'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/06/adding-menu-bar-to-twitter-gui-part-5_10.html' title='Adding a menu bar to the twitter GUI: part 5'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMwY6foCA84wetUgVzifZUaq4rMGrCcJWs2vG-PLNPkjI7uhV5POOaFnkWRBJwnNE1YCMw33zYwCHXV2r_dPsPbQT5AcGNHH_evT5p7s28uZ6ennDuHLKUavNViEwgpmKDQTqWSVVzZRI/s72-c/FrameBroken.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5699142825044889235.post-8288823859099323160</id><published>2009-06-10T23:15:00.001+02:00</published><updated>2012-08-20T21:16:46.893+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Twitter"/><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl"/><title type='text'>Adding a menu bar to the twitter GUI: part 5</title><content type='html'>&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; font-weight: bold; line-height: 22.66666603088379px;&quot;&gt;Updating to the new Net::Twitter::Lite API&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Marc Mims updated the API of his twitter&#39;s interface module for Perl.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;There are two versions:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;a href=&quot;http://search.cpan.org/~mmims/Net-Twitter-3.18003/lib/Net/Twitter.pod&quot; target=&quot;_blank&quot;&gt;Net::Twitter v3.18&lt;/a&gt;&amp;nbsp;- Major update, object oriented, based on Moose.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;a href=&quot;http://search.cpan.org/~mmims/Net-Twitter-Lite-0.11002/lib/Net/Twitter/Lite.pm&quot; target=&quot;_blank&quot;&gt;Net::twitter::Lite v0.02&lt;/a&gt;&lt;span id=&quot;goog_1538643603&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1538643604&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://www.blogger.com/&quot;&gt;&lt;/a&gt;&amp;nbsp;- Not so complete but requiring less dependencies.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;In order to use the Lite version (largely sufficient for my modest needs), only trivial changes are needed in the twit_GUI.pl script:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;replace&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;use Net::Twitter&lt;/span&gt;&amp;nbsp;by&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;use Net::Twitter::Lite&lt;/span&gt;&amp;nbsp;(duh!)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;replace calls to&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;Net::Twitter-&amp;gt;new()&lt;/span&gt;&amp;nbsp;by calls to&amp;nbsp;&lt;span style=&quot;font-family: &#39;courier new&#39;;&quot;&gt;Net::Twitter::Lite-&amp;gt;new()&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;This ensures that I am now using a module that is actively supported.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; font-weight: bold; line-height: 22.66666603088379px;&quot;&gt;Adding a menu bar&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;A menu bar can only be added to a Frame. According to the wxPerl docs,&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Arial, Lucida, Helvetica; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 1.3em; margin: 1em 20px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Arial, Lucida, Helvetica;&quot;&gt;A frame is a window whose size and position can (usually) be changed by the user. It usually has thick borders and a title bar, and can optionally contain a menu bar, toolbar and status bar. A frame can contain any window that is not a frame or dialog.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;So, let&#39;s replace the Dialog occurences with Frame in the script.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;The MyApp modules becomes:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;perl:firstline[30]&quot; name=&quot;code&quot;&gt;##############################################################################
#
package MyApp;
#
##############################################################################
use vars qw(@ISA);
@ISA=qw(Wx::App);   # this tells Perl to look for unknown methods in the Wx::App module

use Wx qw(wxDefaultSize wxDefaultPosition);

sub OnInit {
    my($this) = @_;
    my $frame = MyFrame-&amp;gt;new(&#39;Twit&#39;, wxDefaultPosition);
    # set it as top window (so the app will automatically close when 
    # the last top window is closed)
    $this-&amp;gt;SetTopWindow($frame);
    $frame-&amp;gt;Show(1);
    1;
}&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.649999618530273px;&quot;&gt;package MyDialog becomes package MyFrame:&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;perl:firstline[49]&quot; name=&quot;code&quot;&gt;##############################################################################
#
package MyFrame;
#
##############################################################################
use vars qw(@ISA);

@ISA=qw(Wx::Frame);

use Wx::Event qw(EVT_BUTTON EVT_CLOSE EVT_TEXT EVT_TEXT_MAXLEN);
use Wx qw(:sizer
          :statictext
          wxDefaultPosition
          wxDefaultSize
          wxDefaultValidator
          wxDEFAULT_DIALOG_STYLE
          wxID_OK
          wxOK
          wxRESIZE_BORDER
          wxTE_MULTILINE
          );

use constant MAX_POST_LENGTH =&amp;gt; 140;

sub new {
    my $class = shift;
    my $password_file;

    # Main window
    my $form_width  = 480;
    my $form_height = 195;
    # Array of line numbers used on the dialog window
    my @ylines = (0, 10, 20, 40, 80, 100);

    my $this = $class-&amp;gt;SUPER::new(
                            undef,  # parent
                            -1,     # id
                            $_[0],  # title
                            $_[1],  # position [x, y]
                           [$form_width, $form_height] # size [width, height]
                           );

    # Display the Wx icon on the application window
    $this-&amp;gt;SetIcon(Wx::GetWxPerlIcon());

    #--------------------------------------------------------------------------
    # Menu Bar
    #--------------------------------------------------------------------------     
    my $file_menu = Wx::Menu-&amp;gt;new(&#39;&#39;);
    my $menu_bar = Wx::MenuBar-&amp;gt;new();
    $menu_bar-&amp;gt;Append($file_menu, &#39;&amp;amp;File&#39;);
    $this-&amp;gt;SetMenuBar($menu_bar);
    ...
&lt;/pre&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Increase the form height by 10 pixels (up to 195) to make room for the menu bar.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;And... voilà!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMwY6foCA84wetUgVzifZUaq4rMGrCcJWs2vG-PLNPkjI7uhV5POOaFnkWRBJwnNE1YCMw33zYwCHXV2r_dPsPbQT5AcGNHH_evT5p7s28uZ6ennDuHLKUavNViEwgpmKDQTqWSVVzZRI/s1600-h/FrameBroken.jpg&quot; style=&quot;background-color: #e7ffcf; color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;&quot;&gt;&lt;img alt=&quot;First version of twit script using wxperl&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5345428666605830754&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMwY6foCA84wetUgVzifZUaq4rMGrCcJWs2vG-PLNPkjI7uhV5POOaFnkWRBJwnNE1YCMw33zYwCHXV2r_dPsPbQT5AcGNHH_evT5p7s28uZ6ennDuHLKUavNViEwgpmKDQTqWSVVzZRI/s400/FrameBroken.jpg&quot; style=&quot;border: 1px solid rgb(120, 183, 73); display: block; height: 162px; margin: 0px auto 10px; padding: 4px; text-align: center; width: 400px;&quot; title=&quot;First try&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Er... not too pretty, let&#39;s go back to the doc. Oh wait, what is that about panels?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 1.3em; margin: 1em 20px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;A panel is a window on which controls are placed. It is usually placed within a frame. It contains minimal extra functionality over and above its parent class wxWindow; its main purpose is to be similar in appearance and functionality to a dialog, but with the flexibility of having any window as a parent.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Ah ah! The trick is to place a wxPanel object inside the frame and then relate every existing GUI element to this panel as the parent window. Previously, all the elements (button, text dialog, etc.) had the wxFrame as a parent window, hence the dark grey background. Just add this line before the Menu Bar code:&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;perl:firstline[93]&quot; name=&quot;code&quot;&gt;    # Create a panel where to place GUI elements
    my $panel = Wx::Panel-&amp;gt;new($this, -1);
&lt;/pre&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;and replace the $this argument by $panel everywhere you need to set the parent ID.&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Now we&#39;ve got a menu bar element. You can fill it by appending menu elements to it as is shown in the code below. Each menu element can be appended in turn with menu options. The wxFrame::SetMenuBar() method displays a given menu bar.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;perl:firstline[95]&quot; name=&quot;code&quot;&gt;    #--------------------------------------------------------------------------
    # Menu Bar
    #-------------------------------------------------------------------------- 
    my $menu_bar = Wx::MenuBar-&amp;gt;new();

    my $file_menu = Wx::Menu-&amp;gt;new(); 
    $file_menu-&amp;gt;Append(11, &#39;E&amp;amp;xit&#39;);
    $menu_bar-&amp;gt;Append($file_menu, &#39;&amp;amp;File&#39;);
 
    my $help_menu = Wx::Menu-&amp;gt;new();
    $help_menu-&amp;gt;Append(21, &#39;&amp;amp;About&#39;);
    $menu_bar-&amp;gt;Append($help_menu, &#39;&amp;amp;Help&#39;);

    # wxFrame method to show a given menu bar
    $this-&amp;gt;SetMenuBar($menu_bar);
&lt;/pre&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;The &amp;amp; in the string (eg: &#39;E&amp;amp;xit&#39;) shows what shortcut will be used in combination with the Alt key (eg: Alt + x for &#39;E&amp;amp;xit&#39;).&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;To link an event with a menu selection, use the EVT_MENU event:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;perl:firstline[110]&quot; name=&quot;code&quot;&gt;    EVT_MENU($this, 11, \&amp;amp;OnQuit);
    EVT_MENU($this, 21, \&amp;amp;OnAbout)
&lt;/pre&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;The callback methods can be implemented as such:&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;perl:firstline[381]&quot; name=&quot;code&quot;&gt;sub OnQuit {
    my $this = shift;
    $this-&amp;gt;Close( 1 );
}

sub OnAbout {
    my $this = shift;
    use Wx qw(wxOK wxCENTRE);
    Wx::MessageBox(&quot;twit_GUI $VERSION\n$version_date\n(c)DamienLearnsPerl&quot;,  # text
                   &quot;About&quot;,                   # title bar
                   wxOK|wxCENTRE,             # buttons to display on form
                   $this                      # parent
                   );          
}
&lt;/pre&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;End result under Vista? Tadaaa!&lt;/span&gt;&lt;br /&gt;
&lt;br style=&quot;background-color: #e7ffcf; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwuMfChC9YRxd0pwPxMjLu03nWD9MG2pgd6sXhsdQb4KIsWx_K9J6w8b1mYyQfhyphenhyphenG7ur08AhMMheNdlY_Q1905CkwTLajA66blcpVPho9Mkf8TEDdj86OP87nt7j-MfmBSTzNiEX_vXVc/s1600-h/Menu1.jpg&quot; style=&quot;background-color: #e7ffcf; color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;&quot;&gt;&lt;img alt=&quot;Improvement layout using panels&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5345805955978576226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwuMfChC9YRxd0pwPxMjLu03nWD9MG2pgd6sXhsdQb4KIsWx_K9J6w8b1mYyQfhyphenhyphenG7ur08AhMMheNdlY_Q1905CkwTLajA66blcpVPho9Mkf8TEDdj86OP87nt7j-MfmBSTzNiEX_vXVc/s400/Menu1.jpg&quot; style=&quot;border: 1px solid rgb(120, 183, 73); display: block; height: 163px; margin: 0px auto 10px; padding: 4px; text-align: center; width: 400px;&quot; title=&quot;Improvement&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Next step:&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;- Load/save password files&lt;/span&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;br style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot; /&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;Find the whole new source code&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://sites.google.com/site/damienlearnsperl/DLP-scripts&quot; style=&quot;color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;&quot;&gt;here&lt;/a&gt;&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://damienlearnsperl.blogspot.com/feeds/8288823859099323160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/06/adding-menu-bar-to-twitter-gui-part-5.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8288823859099323160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5699142825044889235/posts/default/8288823859099323160'/><link rel='alternate' type='text/html' href='http://damienlearnsperl.blogspot.com/2009/06/adding-menu-bar-to-twitter-gui-part-5.html' title='Adding a menu bar to the twitter GUI: part 5'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/07183471087108492840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMwY6foCA84wetUgVzifZUaq4rMGrCcJWs2vG-PLNPkjI7uhV5POOaFnkWRBJwnNE1YCMw33zYwCHXV2r_dPsPbQT5AcGNHH_evT5p7s28uZ6ennDuHLKUavNViEwgpmKDQTqWSVVzZRI/s72-c/FrameBroken.jpg" height="72" width="72"/><thr:total>4</thr:total></entry></feed>