<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:atom="http://www.w3.org/2005/Atom"
 xmlns:dcterms="http://purl.org/dc/terms/"
>

<channel>
<title></title>
<link>http://www.shlomifish.org/me/blogs/</link>
<description></description>

<item>
<title>NYTProf-3 is Out!</title>
<link>http://community.livejournal.com/shlomif_tech/44836.html</link>
<description>&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/&#x22;&#x3E;Tim
Bunce writes on his blog about the new features in 
Devel-NYTProf version 3&#x3C;/a&#x3E;. Devel-NYTProf is a profiler for the 
&#x3C;a href=&#x22;http://perl-begin.org/&#x22;&#x3E;Perl programming language&#x3C;/a&#x3E;, which has
put all the previous attempts in profiling in the dust, and now it&#x27;s even 
better than before. Enjoy! (Thanks to 
&#x3C;a href=&#x22;http://mail.pm.org/pipermail/sanfrancisco-pm/2010-February/002704.html&#x22;&#x3E;Fred 
Moyer&#x27;s post&#x3C;/a&#x3E; on the San-Fransisco Perl Mongers mailing list).
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>3</category>
<category>version</category>
<category>perl</category>
<category>profiler</category>
<category>release</category>
<category>nytprof</category>
<comments>http://community.livejournal.com/shlomif_tech/44836.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/44836.html</guid>
<pubDate>Fri, 05 Feb 2010 16:31:51 GMT</pubDate>
</item>
<item>
<title>Project Euler Problem #10 in Haskell, Perl and C</title>
<link>http://community.livejournal.com/shlomif_tech/44006.html</link>
<description>&#x3C;p&#x3E;
zerothorder told 
&#x3C;a href=&#x22;http://zerothorder.blogspot.com/2009/11/after-drinking-functional-immutable-and.html&#x22;&#x3E;how 
he found a solution for Project Euler&#x27;s Problem 10 in Haskell&#x3C;/a&#x3E;. The 
problem is &#x22;Find the sum of all primes less than 2,000,000&#x22;. It is given
here below:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
primes :: [Integer]
primes = 2 : filter isPrime [3, 5 ..]
    where
        -- only check divisibility of the numbers less than the square root of n
        isPrime n = all (not . divides n) $ takeWhile (\p -&#x26;gt; p*p &#x26;lt;= n) primes
        divides n p = n `mod` p == 0
 
result = sum $ takeWhile (&#x26;lt; 2000000) primes
 
main = do putStrLn( show result )
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
He says &#x22;If this doesn&#x27;t give you a nerdgasm, I don&#x27;t know what will.&#x22;. The
problem is that this nerdgasm will last a long time. Benchmarking this
program gives that 20 iterations of it run at 310 seconds - less
than - about 15 seconds each (on my Pentium 4 2.4GHz machine running
Mandriva Linux Cooker). So next I tried a better Haskell
implmenetation that I recalled from a thread I started in the Haskell Caf&#xE9;
mailing list about implementing
&#x3C;a href=&#x22;http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes&#x22;&#x3E;a sieve of
Eratosthenes in Haskell&#x3C;/a&#x3E;:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
import Data.Int

primes :: Int64 -&#x26;gt; [Int64]

primes how_much = sieve [2..how_much] where
         sieve (p:x) = 
             p : (if p &#x26;lt;= mybound
                 then sieve (remove (p*p) x)
                 else x) where
             remove what (a:as) | what &#x26;gt; how_much = (a:as)
                                | a &#x26;lt; what = a:(remove what as)
                                | a == what = (remove (what+step) as)
                                | a &#x26;gt; what = a:(remove (what+step) as)
             remove what [] = []
             step = (if (p == 2) then p else (2*p)) 
         sieve [] = []
         mybound = ceiling(sqrt(fromIntegral how_much))

--main = print (length (primes 1000000))
main = print (sum (primes 2000000))
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
This does not involve costly operations such as modulo or division
and 20 iterations of it run at 135 wallclocks seconds - over two times faster
than zeroth&#x27;s Haskell version.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Now how about Perl? Since Perl has assignment, we have the advantage that
we can create a vector of bits that we will mark with the primes by iterating
over all numbers up to the root of the limit. Here is the code:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
#!/usr/bin/perl

use strict;
use warnings;

use Math::BigInt lib =&#x26;gt; &#x26;#39;GMP&#x26;#39;;

my $limit = 2_000_000;

my $primes_bitmask = &#x26;quot;&#x26;quot;;

my $loop_to = int(sqrt($limit));
my $sum = 0;
my $total_sum = Math::BigInt-&#x26;gt;new(&#x26;#39;0&#x26;#39;);

for my $p (2 .. $loop_to)
{
    if (vec($primes_bitmask, $p, 1) == 0)
    {
        $sum += $p;

        my $i = $p * $p;

        while ($i &#x26;lt; $limit)
        {
            vec($primes_bitmask, $i, 1) = 1;
        }
        continue
        {
            $i += $p;
        }

    }
}

for my $p ($loop_to .. $limit)
{
    if (vec($primes_bitmask, $p, 1) == 0)
    {
        if (($sum += $p) &#x26;gt; (1 &#x26;lt;&#x26;lt; 30))
        {
            $total_sum += $sum;
            $sum = 0;
        }
    }
}

$total_sum += $sum;
print &#x26;quot;$total_sum\n&#x26;quot;;
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
20 runs of it run at 95 walclock seconds - even faster than the Haskell
version. But it gets better. Since all the primes we encounter greater than
2 are not even, we can create a map of their pseduo-halves and conserve on
memory and iterations. This is the Perl version:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
#!/usr/bin/perl

use strict;
use warnings;

use Math::BigInt lib =&#x26;gt; &#x26;#39;GMP&#x26;#39;;

my $limit = 2_000_000;

my $primes_bitmask = &#x26;quot;&#x26;quot;;

my $loop_to = (int(sqrt($limit)))&#x26;gt;&#x26;gt;1;
my $half_limit = ($limit-1)&#x26;gt;&#x26;gt;1;

my $sum = 0+2;
my $total_sum = Math::BigInt-&#x26;gt;new(&#x26;#39;0&#x26;#39;);

for my $half (1 .. $loop_to)
{
    if (vec($primes_bitmask, $half, 1) == 0)
    {
        my $p = (($half&#x26;lt;&#x26;lt;1)+1);
        $sum += $p;

        my $i = ($p * $p)&#x26;gt;&#x26;gt;1;

        while ($i &#x26;lt; $limit)
        {
            vec($primes_bitmask, $i, 1) = 1;
        }
        continue
        {
            $i += $p;
        }

    }
}


for my $half ($loop_to .. $half_limit)
{
    if (vec($primes_bitmask, $half, 1) == 0)
    {
        if (($sum += (($half&#x26;lt;&#x26;lt;1)+1)) &#x26;gt; (1 &#x26;lt;&#x26;lt; 30))
        {
            $total_sum += $sum;
            $sum = 0;
        }
    }
}

$total_sum += $sum;
print &#x26;quot;$total_sum\n&#x26;quot;;
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
Running this 20 times takes 73 wallclock seconds, close to half that of my
Haskell version.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Then I wondered how long C will take. Here is a C implementation without
the halving:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
#include &#x26;lt;string.h&#x26;gt;
#include &#x26;lt;math.h&#x26;gt;
#include &#x26;lt;stdint.h&#x26;gt;
#include &#x26;lt;stdio.h&#x26;gt;

#define limit 2000000
int8_t bitmask[(limit+1)/8];

int main(int argc, char * argv[])
{
    int p, i;
    int mark_limit;
    long long sum = 0;

    memset(bitmask, &#x26;#39;\0&#x26;#39;, sizeof(bitmask));
    mark_limit = (int)sqrt(limit);
    
    for (p=2 ; p &#x26;lt;= mark_limit ; p++)
    {
        if (! ( bitmask[p&#x26;gt;&#x26;gt;3]&#x26;amp;(1 &#x26;lt;&#x26;lt; (p&#x26;amp;(8-1))) ) )
        {
            /* It is a prime. */
            sum += p;
            for (i=p*p;i&#x26;lt;=limit;i+=p)
            {
                bitmask[i&#x26;gt;&#x26;gt;3] |= (1 &#x26;lt;&#x26;lt; (i&#x26;amp;(8-1)));
            }
        }
    }
    for (; p &#x26;lt;= limit; p++)
    {
        if (! ( bitmask[p&#x26;gt;&#x26;gt;3]&#x26;amp;(1 &#x26;lt;&#x26;lt; (p&#x26;amp;(8-1))) ) )
        {
            sum += p;
        }
    }

    printf(&#x26;quot;%lli\n&#x26;quot;, sum);

    return 0;
}
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
This was too fast to measure with 20 runs alone, so 500 runs of it took 15
seconds, two or three orders of magnitude faster than the fastest Haskell
or Perl versions. But naturally, we can apply the halving paradigm there too:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
#include &#x26;lt;string.h&#x26;gt;
#include &#x26;lt;math.h&#x26;gt;
#include &#x26;lt;stdint.h&#x26;gt;
#include &#x26;lt;stdio.h&#x26;gt;

#define limit 2000000
int8_t bitmask[(limit+1)/8/2];

int main(int argc, char * argv[])
{
    int half, p, i;
    int half_limit;
    int loop_to;
    long long sum = 0 + 2;

    memset(bitmask, &#x26;#39;\0&#x26;#39;, sizeof(bitmask));

    loop_to=(((int)(sqrt(limit)))&#x26;gt;&#x26;gt;1);
    half_limit = (limit-1)&#x26;gt;&#x26;gt;1;
    
    for (half=1 ; half &#x26;lt;= loop_to ; half++)
    {
        if (! ( bitmask[half&#x26;gt;&#x26;gt;3]&#x26;amp;(1 &#x26;lt;&#x26;lt; (half&#x26;amp;(8-1))) ) )
        {
            /* It is a prime. */
            p = (half &#x26;lt;&#x26;lt; 1)+1;
            sum += p;
            for (i = ((p*p)&#x26;gt;&#x26;gt;1) ; i &#x26;lt; half_limit ; i+=p )
            {
                bitmask[i&#x26;gt;&#x26;gt;3] |= (1 &#x26;lt;&#x26;lt; (i&#x26;amp;(8-1)));
            }
        }
    }

    for( ; half &#x26;lt; half_limit ; half++)
    {
        if (! ( bitmask[half&#x26;gt;&#x26;gt;3]&#x26;amp;(1 &#x26;lt;&#x26;lt; (half&#x26;amp;(8-1))) ) )
        {
            sum += (half&#x26;lt;&#x26;lt;1)+1;
        }
    }

    printf(&#x26;quot;%lli\n&#x26;quot;, sum);

    return 0;
}
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
500 runs of it take 10 wallclock seconds - 54.35 times per second,
and 50% better than the previous C version. And I still haven&#x27;t applied
platform-specific gcc optimisations. 
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I should also note that the executables generated by ghc are extremely
large in comparison to their C ones:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
$ ls -l c_* haskell_*
-rwxr-xr-x 1 shlomi shlomi   6082 2009-12-04 07:46 c_mine
-rwxr-xr-x 1 shlomi shlomi   6103 2009-12-04 07:46 c_mine_half
-rwxr-xr-x 1 shlomi shlomi   6092 2009-12-04 07:46 c_mine_micro_opt
-rwxr-xr-x 1 shlomi shlomi 796825 2009-12-04 07:56 haskell_mine
-rwxr-xr-x 1 shlomi shlomi 571717 2009-12-04 07:46 haskell_zeroth
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
&#x3C;tt&#x3E;c_mine_half&#x3C;/tt&#x3E; is less than 1% the size of &#x3C;tt&#x3E;haskell_mine&#x3C;/tt&#x3E; (and
runs faster). When talking about this to other people, they said that Haskell
has a very optimised primes sequence generator, which I can try using (which
should be over 3 times as fast), and that it has two kinds of integers, which
the other type is faster, and that it has a better way to emulate assignment.
But the bottom line is that the na&#xEF;ve and intuitive way to write such
programs in Haskell is under-performant, even in comparison to Perl, and 100
or 1,000 times as much in comparison to C.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I&#x27;ve written this as a separate post and not as a comment to the original
blog post because I&#x27;m very limited with the markup in the commenting there
(I&#x27;m going to post a comment there with a link to this blog post, though). 
I should note that you can find all the code I mentioned inside 
&#x3C;a href=&#x22;http://github.com/shlomif/Project-Euler-Problem-10-Comparison&#x22;&#x3E;a
dedicated Github repository&#x3C;/a&#x3E;, and you can experiment with it further.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>problem</category>
<category>summary</category>
<category>primes</category>
<category>project</category>
<category>optimize</category>
<category>optimise</category>
<category>optimization</category>
<category>c</category>
<category>haskell</category>
<category>perl</category>
<category>10</category>
<category>speed</category>
<category>optimisation</category>
<category>euler</category>
<comments>http://community.livejournal.com/shlomif_tech/44006.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/44006.html</guid>
<pubDate>Sat, 30 Jan 2010 12:50:07 GMT</pubDate>
</item>
<item>
<title>XML-Grammar-Fortune version 0.0200 Was Released</title>
<link>http://community.livejournal.com/shlomif_tech/43620.html</link>
<description>&#x3C;p&#x3E;
I recently released version 0.0200 of the Perl 5 CPAN Module
&#x3C;a href=&#x22;http://web-cpan.berlios.de/modules/XML-Grammar-Fortune/&#x22;&#x3E;XML-Grammar-Fortune&#x3C;/a&#x3E;.
XML-Grammar-Fortune is a module to maintain a collection of Unix-like
fortune cookies as XML and convert them to XHTML and plain-text.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
New in this release are a heavily fixed and enhanced code for rendering the XML
to plaintext and a more enhanced META.yml file. XML-Grammar-Fortune was
successfully utilised for
&#x3C;a href=&#x22;http://www.shlomifish.org/humour/fortunes/&#x22;&#x3E;my collection of Fortune
Cookies&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>release</category>
<category>unix</category>
<category>text</category>
<category>fortune</category>
<category>grammar</category>
<category>hacktivity</category>
<category>xml-grammar-fortune</category>
<category>perl</category>
<category>xml</category>
<category>fortunes</category>
<category>cpan</category>
<comments>http://community.livejournal.com/shlomif_tech/43620.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/43620.html</guid>
<pubDate>Mon, 25 Jan 2010 15:49:53 GMT</pubDate>
</item>
<item>
<title>The CPAN Dependencies of Website Meta Language</title>
<link>http://community.livejournal.com/shlomif_tech/43345.html</link>
<description>&#x3C;p&#x3E;
In the past few days I resumed work on converting
the &#x3C;a href=&#x22;http://thewml.org/&#x22;&#x3E;Website Meta Language&#x3C;/a&#x3E; (WML) build-system
from the GNU Autotools (also known as &#x22;GNU Autohell&#x22;) to 
&#x3C;a href=&#x22;http://www.cmake.org/&#x22;&#x3E;CMake&#x3C;/a&#x3E;. This involved implementing a lot
of the existing makefile and autoconf logic in CMake and Perl. 
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Yesterday, I converted the &#x22;wml_common&#x22; sub-directory which turned out to
contain some ancient versions of CPAN distributions with a forced-upon way
to install under the WML prefix. I decided to forego installing all of them
and just check for their existence in the perl version that wml uses using 
some WML and &#x22;perl -MMyModule&#x22; code. 
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I was able to find all the needed modules in the Mandriva repository, except
one - 
&#x3C;a href=&#x22;http://search.cpan.org/dist/File-PathConvert/&#x22;&#x3E;File-PathConvert&#x3C;/a&#x3E;
, which I&#x27;ve never heard about.
I checked it on CPAN, and saw that it was deprecated and superseded by
File::Spec and Cwd. So I grepped the tree for its use and found it was used
only in one Perl program which I quickly converted to File::Spec and Cwd.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Now, the future build system of Website Meta Language will be simpler
and it won&#x27;t use deprecated modules.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Oh! And 
&#x3C;a href=&#x22;http://blog.mozilla.com/blog/2010/01/21/firefox-3-6-release/&#x22;&#x3E;Firefox
3.6 (Gamma) is out&#x3C;/a&#x3E;! I&#x27;ve been using the betas and RCs on Mandriva Cooker
for some time now, and now I&#x27;ve upgraded to the stable version and it&#x27;s
still great.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>eumm</category>
<category>wml</category>
<category>language</category>
<category>cmake</category>
<category>perl</category>
<category>firefox</category>
<category>gnu</category>
<category>autohell</category>
<category>website</category>
<category>meta</category>
<category>cpan</category>
<comments>http://community.livejournal.com/shlomif_tech/43345.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/43345.html</guid>
<pubDate>Fri, 22 Jan 2010 19:22:40 GMT</pubDate>
</item>
<item>
<title>Perl: Using Vim&#x27;s snipMate for Perl 5 snippets</title>
<link>http://community.livejournal.com/shlomif_tech/43262.html</link>
<description>&#x3C;p&#x3E;
I noticed that there was some Perl 5 code that I had to type or copy-and-paste
again and again on many occasions. So I decided to find a way to put it in
one place and then recall it. I thought of writing it myself, but then recalled
the &#x3C;a href=&#x22;http://www.vim.org/scripts/script.php?script_id=2540&#x22;&#x3E;snipMate
snippets extension for Vim&#x3C;/a&#x3E; (which 
&#x3C;a href=&#x22;http://www.catonmat.net/blog/vim-plugins-snipmate-vim/&#x22;&#x3E;Peteris
Krumins covered in a blog post&#x3C;/a&#x3E;), which allows that. After a little reading,
I was able to prepare the snippets.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I placed the following under &#x3C;tt&#x3E;~/.vim/snippets/perl/_slurp.snippet&#x3C;/tt&#x3E; :
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
sub _slurp
{
	my $filename = shift;

	open my $in, &#x22;&#x26;lt;&#x22;, $filename
		or die &#x22;Cannot open &#x27;$filename&#x27; for slurping - $!&#x22;;

	local $/;
	my $contents = &#x26;lt;$in&#x26;gt;;

	close($in);

	return $contents;
}
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
And now I can type &#x22;_slurp&#x26;lt;TAB&#x26;gt;&#x22; to recall it. The existing &#x22;slurp&#x22;
snippet in &#x3C;tt&#x3E;~/.vim/snippets/perl.snippets&#x3C;/tt&#x3E; is quite evil, with an
ugly inline line, typeglobs, and a two args open without a die statement. 
Thanks, but no thanks.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Afterwards I added the following in 
&#x3C;tt&#x3E;~/.vim/snippets/perl/_ltestb.snippet&#x3C;/tt&#x3E;
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;
	local $Test::Builder::Level = $Test::Builder::Level + 1;
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
And now I can type &#x22;_ltestb&#x22; (short for &#x22;local Test::Builder&#x22;) and put this 
line there to create my own custom Test::More/Test::Builder tests.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Thus, using snipMate, you can create your own short-hands for commonly-used
snippets like that.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>test</category>
<category>tip</category>
<category>local</category>
<category>slurp</category>
<category>perl</category>
<category>snipmate</category>
<category>vim tip</category>
<category>builder</category>
<category>snippets</category>
<category>vim</category>
<comments>http://community.livejournal.com/shlomif_tech/43262.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/43262.html</guid>
<pubDate>Thu, 21 Jan 2010 16:26:13 GMT</pubDate>
</item>
<item>
<title>Report on the TelFOSS &#x22;Moose for Beginners&#x22; Meeting</title>
<link>http://community.livejournal.com/shlomif_tech/42895.html</link>
<description>&#x3C;p&#x3E;
Last Sunday, &#x3C;a href=&#x22;http://tel.foss.org.il/&#x22;&#x3E;Tel Aviv Open Source club
(TelFOSS)&#x3C;/a&#x3E; met to listen to Sawyer&#x27;s presentation about &#x22;Moose for
Beginners&#x22;. Despite the fact that the meeting was well-publicised, very
few people came. Sawyer did not prepare a lot of slides and since there were
not many questions he finished quickly. After all that, he went to demonstrate
how to implement several use cases that the audience has proposed as Moose
programs, and despite that we still finished early.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I asked about implementing an &#x22;XML parser&#x22;, but in fact I wanted to implement
a processor for a certain XML grammar. In any case, he misunderstood and told
me to use Parse-RecDescent for that. I&#x27;ve grown to dislike P-RD for most stuff
though.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
In any case, I&#x27;m getting tired of the low attendance in TelFOSS meetings. We
do so much work in organising and publicising the meetings, and most people
don&#x27;t bother to come. Are the people too busy? Did they run out of steam? Why
don&#x27;t they come? This makes me frustrating and unwilling to further organise
the TelFOSS meetings.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>telux</category>
<category>telfoss</category>
<category>meeting</category>
<category>open</category>
<category>perl</category>
<category>club</category>
<category>sawyer</category>
<category>moose</category>
<category>tel aviv</category>
<category>source</category>
<category>report</category>
<comments>http://community.livejournal.com/shlomif_tech/42895.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/42895.html</guid>
<pubDate>Wed, 20 Jan 2010 12:35:04 GMT</pubDate>
</item>
<item>
<title>New Solver for &#x22;Black Hole&#x22; Solitaire in Perl</title>
<link>http://community.livejournal.com/shlomif_tech/42309.html</link>
<description>&#x3C;p&#x3E;
I wrote
&#x3C;a href=&#x22;http://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/&#x22;&#x3E;a
new solver for the solitaire &#x22;Black Hole&#x22;&#x3C;/a&#x3E;. Here&#x27;s the
complete story:
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Yesterday, I was going to play a game on
&#x3C;a href=&#x22;http://www.brainbashers.com/&#x22;&#x3E;Brain Bashers&#x3C;/a&#x3E; when I
remembered the Penguin solitaire variant, which is similar to Freecell and
which I wanted to cover on the Cards Wikia. So I did a Google search for
&#x22;penguin solitaire&#x22; and saw it had &#x3C;a href=&#x22;http://en.wikipedia.org/wiki/Penguin_%28solitaire%29&#x22;&#x3E;a page on the wikipedia&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
There I saw that it was invented by &#x3C;a href=&#x22;http://en.wikipedia.org/wiki/David_Parlett&#x22;&#x3E;David Parlett&#x3C;/a&#x3E; and I saw there that he also
invented
&#x3C;a href=&#x22;http://en.wikipedia.org/wiki/Black_Hole_%28solitaire%29&#x22;&#x3E;a solitaire called &#x22;Black Hole&#x22;&#x3C;/a&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
So I looked for it in &#x3C;a href=&#x22;http://pysolfc.sourceforge.net/&#x22;&#x3E;PySolFC&#x3C;/a&#x3E;,
read the instructions there and started to play. The game involves putting a
card that is one above or below the foundation (wrapping from kings to aces).
I noticed that there wasn&#x27;t any over-populated talon or something like that
there, which meant that I could probably build a DFS-based solver for it. So I
set out to see if it was possible.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The first thing I did was to adapt my PySol/PySolFC game generator to generate
the initial board of the PySolFC deals. This turned out to be a very
complicated and frustrating task for me, because I had to understand what&#x27;s
going on with the code. But after a lot of playing with it, I was able to get
it to generate the initial deals. The changes for that are in the Freecell
Solver trunk now.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Then I started working on the solver. I decided to write it in Perl 5 because
it&#x27;s a good prototyping language and I know it well. When writing it, I
heavily optimised for speed and low memory consumption by using bit fields (
see &#x3C;a href=&#x22;http://perldoc.perl.org/functions/vec.html&#x22;&#x3E;the 
vec() function&#x3C;/a&#x3E; ) and a gigantic hash lookup.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Then, after it was written, came the moment of truth: I ran it on the board
and it reported success. Great! But what&#x27;s the solution? So I added some
solution tracing logic, to output the cards that should be moved. Then I was
able to play it and the game was solved. Yay!
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I tried it on another game and it also worked. Then I ran it on the first few
games. Game #1 was reported as unsolvable, Game #2 was solved after a while,
and Game #3 consumed over 15% of my RAM and then was solved.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
So it seemed to be working nicely. Today I wrapped the code inside its own
CPAN package and prepared a nice app-in-a-module and a script for it. 
he solver&#x27;s code is made available under the permissive MIT/X11 licence - 
share and enjoy. And as I mentioned before 
&#x3C;a href=&#x22;http://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/&#x22;&#x3E;here 
is its home-page&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>automated</category>
<category>patience</category>
<category>black</category>
<category>perl</category>
<category>games</category>
<category>hole</category>
<category>game</category>
<category>cards</category>
<category>solver</category>
<category>solitaire</category>
<category>solvers</category>
<category>davi</category>
<category>python</category>
<comments>http://community.livejournal.com/shlomif_tech/42309.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/42309.html</guid>
<pubDate>Mon, 11 Jan 2010 17:32:29 GMT</pubDate>
</item>
<item>
<title>libtap-1.02 Was Released</title>
<link>http://community.livejournal.com/shlomif_tech/42035.html</link>
<description>&#x3C;p&#x3E;
libtap is a C library to implement the &#x3C;a href=&#x22;http://testanything.org/&#x22;&#x3E;Test
Anything Protocol (TAP)&#x3C;/a&#x3E;, which is used by the test suites of perl 5, 
CPAN modules and other programs. libtap allows one to write C code that can
be analysed by TAP harnesses such as &#x3C;a href=&#x22;http://web-cpan.berlios.de/modules/Test-Run/&#x22;&#x3E;Test-Run&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I started maintaining Nik Clayton&#x27;s libtap, which he seems to have abandoned 
&#x3C;a href=&#x22;http://www.shlomifish.org/open-source/projects/libtap/&#x22;&#x3E;on my
homepage&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
There&#x27;s also &#x3C;a href=&#x22;http://svn.berlios.de/svnroot/repos/web-cpan/libtap/&#x22;&#x3E;a 
Subversion repository&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Reading from the NEWS file:
&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
&#x3C;p&#x3E;&#x3C;b&#x3E;tap-1.02:&#x3C;/b&#x3E;&#x3C;/p&#x3E;

&#x3C;ol&#x3E;

&#x3C;li&#x3E;
Add the COPYING file.
&#x3C;/li&#x3E;

&#x3C;li&#x3E;
Now disabling the thread-safety by default (in order to have it add
&#x3C;tt&#x3E;-DLIBTAP_ENABLE_BROKEN_THREAD_SAFE&#x3C;/tt&#x3E; .
&#x3C;/li&#x3E;

&#x3C;li&#x3E;
Changed configure.in to configure.ac.
&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;

&#x3C;/blockquote&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>test</category>
<category>perl</category>
<category>release</category>
<category>anything</category>
<category>qa</category>
<category>testing</category>
<category>tap</category>
<category>new</category>
<category>c</category>
<category>libtap</category>
<category>protocol</category>
<comments>http://community.livejournal.com/shlomif_tech/42035.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/42035.html</guid>
<pubDate>Fri, 08 Jan 2010 11:18:19 GMT</pubDate>
</item>
<item>
<title>Next TelFOSS Meeting: Moose, the Perl OOP System on 17-January-2009</title>
<link>http://community.livejournal.com/shlomif_tech/41624.html</link>
<description>&#x3C;p&#x3E;
The &#x3C;a href=&#x22;http://www.cs.tau.ac.il/telux/&#x22;&#x3E;Tel Aviv Open Source Club&#x3C;/a&#x3E;
will host &#x3C;a href=&#x22;http://wiki.osdc.org.il/index.php/Tel_Aviv_Meeting_on_17_January_2010&#x22;&#x3E;the talk &#x22;Moose, the Perl OOP System&#x22; for beginners&#x3C;/a&#x3E; by
Yaron Meiry (Sawyer) on
Sunday, 17-January-2009,  at 18:00 (note the change of time since last
year) in Tel Aviv University, Holcblat Hall No. 007 in the corridor of the
exact sciences building (note the change of place from last year). Further
details, maps for arrival, etc. can be found on
&#x3C;a href=&#x22;http://www.cs.tau.ac.il/telux/&#x22;&#x3E;the web-site&#x3C;/a&#x3E;
&#x3C;a href=&#x22;http://wiki.osdc.org.il/index.php/Tel_Aviv_Meeting_on_17_January_2010&#x22;&#x3E;and in the Wiki&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Attendance is free, it is not necessary to RSVP and everyone are welcome.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
With any other problems, feel free to &#x3C;a href=&#x22;http://www.shlomifish.org/me/contact-me/&#x22;&#x3E;contact the organiser&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;&#x3C;b&#x3E;Abstract&#x3C;/b&#x3E;&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://moose.perl.org/&#x22;&#x3E;Moose&#x3C;/a&#x3E; is a post-modern Object-Oriented
Programming system for Perl 5. It was written since its originator (Stevan
Little) was jealous of the capabilities that Perl 6 provided in regards to OOP,
and so instead of switching to Ruby, he worked on developing a similar system
for Perl 5. Moose drew inspiration from the Object Oriented Programming
capabilities of many languages such as Perl 6, Smalltalk, Common Lisp (CLOS),
Ruby, Java, OCaml and other languages, while remaining faithful to its Perl 5
roots.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;&#x3C;b&#x3E;About the Lecturer&#x3C;/b&#x3E;&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Yaron Meiry is a systems&#x27; administrator and a Perl developer. He gives talks
about open source, free software, security and programming standards. Yaron
has previousl given the
&#x3C;a href=&#x22;http://wiki.osdc.org.il/index.php/Tel_Aviv_Meeting_on_28_June_2009&#x22;&#x3E;presentation
    about red flags in programming of very high languages&#x3C;/a&#x3E; in
the Tel Aviv Club.
&#x3C;/p&#x3E;

&#x3C;hr /&#x3E;

&#x3C;p&#x3E;
We are always looking for people who will volunteer to give presentations on
various topic that are related to open source code and to computers. In case
you are interested to give a talk, or that you have a suggestion for a talk
that interests you, we&#x27;ll be happy to hear from you.
&#x3C;/p&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>announcement</category>
<category>activities</category>
<category>open source</category>
<category>israel</category>
<category>telux</category>
<category>telfoss</category>
<category>meeting</category>
<category>foss</category>
<category>perl</category>
<category>linux</category>
<category>moose</category>
<category>tel aviv</category>
<comments>http://community.livejournal.com/shlomif_tech/41624.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/41624.html</guid>
<pubDate>Tue, 05 Jan 2010 08:48:18 GMT</pubDate>
</item>
<item>
<title>&#x5E4;&#x5D2;&#x5D9;&#x5E9;&#x5EA; &#x5E7;&#x5D5;&#x5D3;-&#x5E4;&#x5EA;&#x5D5;&#x5D7;-&#x5EA;&#x5DC;-&#x5D0;&#x5D1;&#x5D9;&#x5D1;: Moose &#x5DC;&#x5DE;&#x5EA;&#x5D7;&#x5D9;&#x5DC;&#x5D9;&#x5DD; - &#x5DE;&#x5E2;&#x5E8;&#x5DB;&#x5EA; &#x5D4;&#x5D0;&#x5D5;&#x5D1;&#x5D9;&#x5D9;&#x5E7;&#x5D8;&#x5D9;&#x5DD; &#x5DC;&#x5E4;&#x5E8;&#x5DC;</title>
<link>http://community.livejournal.com/shlomif_tech/41232.html</link>
<description>&#x3C;div dir=&#x22;rtl&#x22; align=&#x22;right&#x22;&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://www.cs.tau.ac.il/telux/&#x22;&#x3E;&#x5DE;&#x5D5;&#x5E2;&#x5D3;&#x5D5;&#x5DF; &#x5D4;&#x5E7;&#x5D5;&#x5D3; &#x5D4;&#x5E4;&#x5EA;&#x5D5;&#x5D7; &#x5D4;&#x5EA;&#x5DC;-&#x5D0;&#x5D1;&#x5D9;&#x5D1;&#x5D9; (&#x5EA;&#x5DC;&#x5D5;&#x5E7;&#x5E1;)&#x3C;/a&#x3E;
&#x5D9;&#x5D9;&#x5E4;&#x5D2;&#x5E9; &#x5E9;&#x5D5;&#x5D1; &#x5DB;&#x5D3;&#x5D9; &#x5DC;&#x5E9;&#x5DE;&#x5D5;&#x5E2; &#x5D0;&#x5EA;
&#x3C;a href=&#x22;http://wiki.osdc.org.il/index.php/Tel_Aviv_Meeting_on_17_January_2010&#x22;&#x3E;&#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5EA;&#x5D5; &#x5E9;&#x5DC; 
&#x5D9;&#x5E8;&#x5D5;&#x5DF; &#x5DE;&#x5D0;&#x5D9;&#x5E8;&#x5D9; (Sawyer) &#x5D0;&#x5D5;&#x5D3;&#x5D5;&#x5EA; &#x22;Moose, &#x5DE;&#x5E2;&#x5E8;&#x5DB;&#x5EA; &#x5EA;&#x5DB;&#x5E0;&#x5D5;&#x5EA; &#x5DE;&#x5D5;&#x5E0;&#x5D7;&#x5D4; &#x5D4;&#x5E2;&#x5E6;&#x5DE;&#x5D9;&#x5DD; &#x5DC;&#x5E9;&#x5E4;&#x5EA; &#x5E4;&#x5E8;&#x5DC; (&#x5DC;&#x5DE;&#x5EA;&#x5D7;&#x5D9;&#x5DC;&#x5D9;&#x5DD;)&#x22;&#x3C;/a&#x3E;. 
&#x5D4;&#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5D4; &#x5EA;&#x5EA;&#x5E7;&#x5D9;&#x5D9;&#x5DD; &#x5D1;&#x5D9;&#x5D5;&#x5DD; &#x5E8;&#x5D0;&#x5E9;&#x5D5;&#x5DF;, 17 &#x5D1;&#x5D9;&#x5E0;&#x5D5;&#x5D0;&#x5E8; 2010, &#x5D1;&#x5E9;&#x5E2;&#x5D4; 18:00 (&#x5E9;&#x5D9;&#x5DE;&#x5D5; &#x5DC;&#x5D1; &#x5DC;&#x5E9;&#x5D9;&#x5E0;&#x5D5;&#x5D9; &#x5D1;&#x5E9;&#x5E2;&#x5D4; &#x5DE;&#x5E9;&#x5E0;&#x5D4; &#x5E9;&#x5E2;&#x5D1;&#x5E8;&#x5D4;), 
&#x5D1;&#x5D0;&#x5D5;&#x5DC;&#x5DD; &#x5D4;&#x5D5;&#x5DC;&#x5E6;&#x5D1;&#x5DC;&#x5D8;, &#x5DE;&#x5E1;&#x27; 007 &#x5D1;&#x5DE;&#x5E1;&#x5D3;&#x5E8;&#x5D5;&#x5DF; &#x5D4;&#x5D1;&#x5E0;&#x5D9;&#x5D9;&#x5E0;&#x5D9;&#x5DD; &#x5DC;&#x5DE;&#x5D3;&#x5E2;&#x5D9;&#x5DD; &#x5DE;&#x5D3;&#x5D5;&#x5D9;&#x5E7;&#x5D9;&#x5DD; (&#x5E9;&#x5D9;&#x5DE;&#x5D5; &#x5DC;&#x5D1; &#x5DC;&#x5E9;&#x5D9;&#x5E0;&#x5D5;&#x5D9; &#x5D1;&#x5DE;&#x5D9;&#x5E7;&#x5D5;&#x5DD; &#x5DE;&#x5E9;&#x5E0;&#x5D4; &#x5E9;&#x5E2;&#x5D1;&#x5E8;&#x5D4;) &#x5D1;&#x5D0;&#x5D5;&#x5E0;&#x5D9;&#x5D1;&#x5E8;&#x5E1;&#x5D9;&#x5D8;&#x5EA; &#x5EA;&#x5DC; &#x5D0;&#x5D1;&#x5D9;&#x5D1;. &#x5E4;&#x5E8;&#x5D8;&#x5D9;&#x5DD; &#x5E0;&#x5D5;&#x5E1;&#x5E4;&#x5D9;&#x5DD;, &#x5DE;&#x5E4;&#x5D5;&#x5EA; &#x5DC;&#x5D4;&#x5D2;&#x5E2;&#x5D4; &#x5D5;&#x5DB;&#x5D9;&#x5D5;&#x5E6;&#x5D0; &#x5D1;&#x5D6;&#x5D4;, &#x5E0;&#x5D9;&#x5EA;&#x5DF; &#x5DC;&#x5DE;&#x5E6;&#x5D5;&#x5D0; 
&#x3C;a href=&#x22;http://www.cs.tau.ac.il/telux/&#x22;&#x3E;&#x5D1;&#x5D0;&#x5EA;&#x5E8;&#x3C;/a&#x3E;
&#x3C;a href=&#x22;http://wiki.osdc.org.il/index.php/Tel_Aviv_Meeting_on_17_January_2010&#x22;&#x3E;&#x5D5;&#x5D1;&#x5D5;&#x5D5;&#x5D9;&#x5E7;&#x5D9;&#x3C;/a&#x3E;.
&#x5D4;&#x5E0;&#x5D5;&#x5DB;&#x5D7;&#x5D5;&#x5EA; &#x5D1;&#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5D4; &#x5D4;&#x5D9;&#x5D0; &#x5D7;&#x5D9;&#x5E0;&#x5DE;&#x5D9;&#x5EA; &#x5D5;&#x5DC;&#x5D0; &#x5E0;&#x5D3;&#x5E8;&#x5E9;&#x5EA; &#x5D4;&#x5E8;&#x5E9;&#x5DE;&#x5D4; &#x5DE;&#x5E8;&#x5D0;&#x5E9;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://moose.perl.org/&#x22;&#x3E;Moose&#x3C;/a&#x3E;
&#x5D4;&#x5D9;&#x5E0;&#x5D4; &#x5DE;&#x5E2;&#x5E8;&#x5DB;&#x5EA; &#x5EA;&#x5DB;&#x5E0;&#x5D5;&#x5EA; &#x5DE;&#x5D5;&#x5E0;&#x5D7;&#x5D4;-&#x5E2;&#x5E6;&#x5DE;&#x5D9;&#x5DD; &#x5E4;&#x5D5;&#x5E1;&#x5D8;-&#x5DE;&#x5D5;&#x5D3;&#x5E8;&#x5E0;&#x5D9;&#x5EA; &#x5DC;&#x5E9;&#x5E4;&#x5D4; &#x5E4;&#x5E8;&#x5DC; 5. &#x5D4;&#x5D9;&#x5D0; &#x5E0;&#x5DB;&#x5EA;&#x5D1;&#x5D4; 
&#x5DE;&#x5DB;&#x5D9;&#x5D5;&#x5D5;&#x5DF; &#x5E9;&#x5D4;&#x5D4;&#x5D5;&#x5D2;&#x5D4; &#x5D4;&#x5DE;&#x5E7;&#x5D5;&#x5E8;&#x5D9; &#x5E9;&#x5DC;&#x5D4; (&#x5E1;&#x5D8;&#x5D9;&#x5D1;&#x5DF; &#x5DC;&#x5D9;&#x5D8;&#x5DC;) &#x5E7;&#x5D9;&#x5E0;&#x5D0; &#x5D1;&#x5DE;&#x5D4; &#x5E9;&#x5E4;&#x5E8;&#x5DC; 6 &#x5E1;&#x5D9;&#x5E4;&#x5E7;&#x5D4; 
&#x5D1;&#x5E0;&#x5D5;&#x5D2;&#x5E2; &#x5DC;&#x5EA;&#x5DB;&#x5E0;&#x5D5;&#x5EA; &#x5DE;&#x5D5;&#x5E0;&#x5D7;&#x5D4; &#x5E2;&#x5E6;&#x5DE;&#x5D9;&#x5DD;, &#x5D5;&#x5DC;&#x5DB;&#x5DF; &#x5D1;&#x5DE;&#x5E7;&#x5D5;&#x5DD; &#x5DC;&#x5E2;&#x5D1;&#x5D5;&#x5E8; &#x5DC;&#x5E8;&#x5D5;&#x5D1;&#x5D9; &#x5D4;&#x5D5;&#x5D0; &#x5E9;&#x5E7;&#x5D3; &#x5E2;&#x5DC; &#x5E4;&#x5D9;&#x5EA;&#x5D5;&#x5D7;
&#x5DE;&#x5E2;&#x5E8;&#x5DB;&#x5EA; &#x5D3;&#x5D5;&#x5DE;&#x5D4; &#x5DC;&#x5E4;&#x5E8;&#x5DC; 5. Moose &#x5E9;&#x5D0;&#x5D1;&#x5D4; &#x5D4;&#x5E9;&#x5E8;&#x5D0;&#x5D4; &#x5DE;&#x5D9;&#x5DB;&#x5D5;&#x5DC;&#x5D5;&#x5EA; &#x5D4;-OOP &#x5E9;&#x5DC; &#x5E9;&#x5E4;&#x5D5;&#x5EA; &#x5E8;&#x5D1;&#x5D5;&#x5EA; 
&#x5DB;&#x5DE;&#x5D5; &#x5E4;&#x5E8;&#x5DC; 6, Smalltalk, &#x5DC;&#x5D9;&#x5E1;&#x5E4;, &#x5E8;&#x5D5;&#x5D1;&#x5D9;, &#x5D2;&#x27;&#x5D0;&#x5D5;&#x5D5;&#x5D4;, OCaml &#x5D5;&#x5E9;&#x5E4;&#x5D5;&#x5EA; &#x5D0;&#x5D7;&#x5E8;&#x5D5;&#x5EA; &#x5DB;&#x5E9;&#x5D4;&#x5D9;&#x5D0; 
&#x5E0;&#x5E9;&#x5D0;&#x5E8;&#x5EA; &#x5E0;&#x5D0;&#x5DE;&#x5E0;&#x5D4; &#x5DC;&#x5E9;&#x5D5;&#x5E8;&#x5E9;&#x5D9; &#x5D4;-&#x5E4;&#x5E8;&#x5DC; 5 &#x5E9;&#x5DC;&#x5D4;. 
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x5D9;&#x5E8;&#x5D5;&#x5DF; &#x5DE;&#x5D0;&#x5D9;&#x5E8;&#x5D9; &#x5D4;&#x5D9;&#x5E0;&#x5D5; &#x5DE;&#x5E0;&#x5D4;&#x5DC; &#x5DE;&#x5E2;&#x5E8;&#x5DB;&#x5D5;&#x5EA; &#x5D5;&#x5DE;&#x5E4;&#x5EA;&#x5D7; &#x5E4;&#x5E8;&#x5DC;. &#x5D4;&#x5D5;&#x5D0; &#x5DE;&#x5E8;&#x5E6;&#x5D4; &#x5E2;&#x5DC; &#x5E7;&#x5D5;&#x5D3; &#x5E4;&#x5EA;&#x5D5;&#x5D7;, &#x5EA;&#x5D5;&#x5DB;&#x5E0;&#x5D4; &#x5D7;&#x5D5;&#x5E4;&#x5E9;&#x5D9;&#x5EA;, 
&#x5D0;&#x5D1;&#x5D8;&#x5D7;&#x5D4; &#x5D5;&#x5E1;&#x5D8;&#x5E0;&#x5D3;&#x5E8;&#x5D8;&#x5D9;&#x5DD; &#x5E9;&#x5DC; &#x5EA;&#x5DB;&#x5E0;&#x5D5;&#x5EA;. &#x5D9;&#x5E8;&#x5D5;&#x5DF; &#x5D4;&#x5E2;&#x5D1;&#x5D9;&#x5E8; &#x5D1;&#x5E2;&#x5D1;&#x5E8; &#x5D0;&#x5EA; 
&#x3C;a href=&#x22;http://wiki.osdc.org.il/index.php/Tel_Aviv_Meeting_on_28_June_2009&#x22;&#x3E;&#x5D4;&#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5D4; 
&#x5E2;&#x5DC; &#x5D3;&#x5D2;&#x5DC;&#x5D9;&#x5DD; &#x5D0;&#x5D3;&#x5D5;&#x5DE;&#x5D9;&#x5DD; &#x5D1;&#x5EA;&#x5DB;&#x5E0;&#x5D5;&#x5EA; &#x5E2;&#x5D1;&#x5D5;&#x5E8; &#x5E9;&#x5E4;&#x5D5;&#x5EA; &#x5E2;&#x5D9;&#x5DC;&#x5D9;&#x5D5;&#x5EA; &#x5D1;&#x5D9;&#x5D5;&#x5EA;&#x5E8;&#x3C;/a&#x3E; &#x5D1;&#x5DE;&#x5D5;&#x5E2;&#x5D3;&#x5D5;&#x5DF; &#x5D4;&#x5EA;&#x5DC;-&#x5D0;&#x5D1;&#x5D9;&#x5D1;&#x5D9;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x5D0;&#x5E0;&#x5D5; &#x5EA;&#x5DE;&#x5D9;&#x5D3; &#x5DE;&#x5D7;&#x5E4;&#x5E9;&#x5D9;&#x5DD; &#x5DE;&#x5E8;&#x5E6;&#x5D9;&#x5DD; &#x5E9;&#x5D9;&#x5EA;&#x5E0;&#x5D3;&#x5D1;&#x5D5; &#x5DC;&#x5EA;&#x5EA; &#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5D5;&#x5EA; &#x5D1;&#x5E0;&#x5D5;&#x5E9;&#x5D0;&#x5D9;&#x5DD; &#x5E9;&#x5D5;&#x5E0;&#x5D9;&#x5DD; &#x5D4;&#x5E7;&#x5E9;&#x5D5;&#x5E8;&#x5D9;&#x5DD; &#x5DC;&#x5E7;&#x5D5;&#x5D3;-&#x5E4;&#x5EA;&#x5D5;&#x5D7; &#x5D5;&#x5DC;&#x5DE;&#x5D7;&#x5E9;&#x5D1;&#x5D9;&#x5DD;. &#x5D1;&#x5DE;&#x5D9;&#x5D3;&#x5D4; &#x5E9;&#x5D0;&#x5EA;&#x5DD; &#x5DE;&#x5E2;&#x5D5;&#x5E0;&#x5D9;&#x5D9;&#x5E0;&#x5D9;&#x5DD; &#x5DC;&#x5EA;&#x5EA; &#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5D4;, &#x5D0;&#x5D5; &#x5E9;&#x5D9;&#x5E9; &#x5DC;&#x5DB;&#x5DD; &#x5D4;&#x5E6;&#x5E2;&#x5D4; &#x5DC;&#x5D4;&#x5E8;&#x5E6;&#x5D0;&#x5D4; &#x5E9;&#x5DE;&#x5E2;&#x5E0;&#x5D9;&#x5D9;&#x5E0;&#x5EA; &#x5D0;&#x5EA;&#x5DB;&#x5DD;, &#x5E0;&#x5E9;&#x5DE;&#x5D7; &#x5DC;&#x5E9;&#x5DE;&#x5D5;&#x5E2; &#x5DE;&#x5DE;&#x5DB;&#x5DD;. 
&#x3C;/p&#x3E;

&#x3C;/div&#x3E;</description>
<author>Shlomi Fish ( shlomif@iglu.org.il )</author>
<category>announcement</category>
<category>mobile</category>
<category>activities</category>
<category>open source</category>
<category>israel</category>
<category>telux</category>
<category>telfoss</category>
<category>meeting</category>
<category>foss</category>
<category>perl</category>
<category>linux</category>
<category>moose</category>
<category>tel aviv</category>
<category>phones</category>
<category>cellphones</category>
<comments>http://community.livejournal.com/shlomif_tech/41232.html</comments>
<guid isPermaLink="true">http://community.livejournal.com/shlomif_tech/41232.html</guid>
<pubDate>Sun, 03 Jan 2010 20:52:46 GMT</pubDate>
</item>
</channel>
</rss>