summaryrefslogtreecommitdiffstats
path: root/vendor/fguillot/picofeed/tests
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/fguillot/picofeed/tests')
-rw-r--r--vendor/fguillot/picofeed/tests/Client/ClientTest.php17
-rw-r--r--vendor/fguillot/picofeed/tests/Client/HttpHeadersTest.php19
-rw-r--r--vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php38
-rw-r--r--vendor/fguillot/picofeed/tests/Parser/FeedTest.php24
-rw-r--r--vendor/fguillot/picofeed/tests/Parser/ParserTest.php8
-rw-r--r--vendor/fguillot/picofeed/tests/Reader/ReaderTest.php4
-rw-r--r--vendor/fguillot/picofeed/tests/fixtures/hamakor.xml527
7 files changed, 634 insertions, 3 deletions
diff --git a/vendor/fguillot/picofeed/tests/Client/ClientTest.php b/vendor/fguillot/picofeed/tests/Client/ClientTest.php
index 0a480c5c0..3f094d04c 100644
--- a/vendor/fguillot/picofeed/tests/Client/ClientTest.php
+++ b/vendor/fguillot/picofeed/tests/Client/ClientTest.php
@@ -18,16 +18,33 @@ class ClientTest extends PHPUnit_Framework_TestCase
$this->assertNotEmpty($client->getLastModified());
}
+ public function testCacheBothHaveToMatch()
+ {
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/robots.txt');
+ $client->execute();
+ $etag = $client->getEtag();
+
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/robots.txt');
+ $client->setEtag($etag);
+ $client->execute();
+
+ $this->assertTrue($client->isModified());
+ }
+
public function testCacheEtag()
{
$client = Client::getInstance();
$client->setUrl('http://php.net/robots.txt');
$client->execute();
$etag = $client->getEtag();
+ $lastModified = $client->getLastModified();
$client = Client::getInstance();
$client->setUrl('http://php.net/robots.txt');
$client->setEtag($etag);
+ $client->setLastModified($lastModified);
$client->execute();
$this->assertFalse($client->isModified());
diff --git a/vendor/fguillot/picofeed/tests/Client/HttpHeadersTest.php b/vendor/fguillot/picofeed/tests/Client/HttpHeadersTest.php
new file mode 100644
index 000000000..f577d00fa
--- /dev/null
+++ b/vendor/fguillot/picofeed/tests/Client/HttpHeadersTest.php
@@ -0,0 +1,19 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+
+class HttpHeadersTest extends PHPUnit_Framework_TestCase
+{
+
+ public function testHttpHeadersSet() {
+ $headers = new HttpHeaders(array('Content-Type' => 'test'));
+ $this->assertEquals('test', $headers['content-typE']);
+ $this->assertTrue(isset($headers['ConTent-Type']));
+
+ unset($headers['Content-Type']);
+ $this->assertFalse(isset($headers['ConTent-Type']));
+ }
+
+} \ No newline at end of file
diff --git a/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php b/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php
index 394734ca1..fc807c688 100644
--- a/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php
+++ b/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php
@@ -3,7 +3,6 @@ namespace PicoFeed\Parser;
use PHPUnit_Framework_TestCase;
-
class AtomParserTest extends PHPUnit_Framework_TestCase
{
/**
@@ -65,6 +64,10 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
$parser = new Atom(file_get_contents('tests/fixtures/groovehq.xml'), '', 'http://groovehq.com/');
$feed = $parser->execute();
$this->assertEquals('http://groovehq.com/articles.xml', $feed->getFeedUrl());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
+ $feed = $parser->execute();
+ $this->assertEquals('http://planet.hamakor.org.il/atom.xml', $feed->getFeedUrl());
}
public function testSiteUrl()
@@ -84,6 +87,10 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
$parser = new Atom(file_get_contents('tests/fixtures/groovehq.xml'));
$feed = $parser->execute();
$this->assertEquals('', $feed->getSiteUrl());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
+ $feed = $parser->execute();
+ $this->assertEquals('http://planet.hamakor.org.il/', $feed->getSiteUrl());
}
public function testFeedId()
@@ -126,6 +133,10 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
$this->assertNotEmpty($feed->items);
$this->assertEquals('fr', $feed->getLanguage());
$this->assertEquals('fr', $feed->items[0]->getLanguage());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
+ $feed = $parser->execute();
+ $this->assertEquals('he', $feed->getLanguage());
}
public function testItemId()
@@ -138,6 +149,23 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
public function testItemUrl()
{
+ $parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://idkn.wordpress.com/2014/12/20/modular-sinatra/', $feed->items[0]->getUrl());
+ $this->assertEquals('http://www.guyrutenberg.com/2014/12/20/kindle-paperwhite-unable-to-open-item/', $feed->items[1]->getUrl());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://example.org/2003/12/13/atom03', $feed->items[0]->getUrl());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/bbc_urdu.xml'));
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('http://www.bbc.co.uk/urdu/world/2014/03/140316_missing_malaysia_plane_pilot_mb.shtml', $feed->items[0]->getUrl());
+ $this->assertEquals('http://www.bbc.co.uk/urdu/pakistan/2014/03/140316_taliban_talks_pro_ibrahim_zs.shtml', $feed->items[1]->getUrl());
+
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
$feed = $parser->execute();
$this->assertNotEmpty($feed->items);
@@ -176,6 +204,14 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
$feed = $parser->execute();
$this->assertNotEmpty($feed->items);
$this->assertEquals('', $feed->items[1]->getLanguage());
+
+ $parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
+ $feed = $parser->execute();
+ $this->assertNotEmpty($feed->items);
+ $this->assertEquals('he', $feed->items[0]->getLanguage());
+ $this->assertTrue($feed->items[0]->isRTL());
+ $this->assertEquals('en-US', $feed->items[1]->getLanguage());
+ $this->assertFalse($feed->items[1]->isRTL());
}
public function testItemAuthor()
diff --git a/vendor/fguillot/picofeed/tests/Parser/FeedTest.php b/vendor/fguillot/picofeed/tests/Parser/FeedTest.php
new file mode 100644
index 000000000..afa9dd27d
--- /dev/null
+++ b/vendor/fguillot/picofeed/tests/Parser/FeedTest.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace PicoFeed\Parser;
+
+use PHPUnit_Framework_TestCase;
+
+class FeedTest extends PHPUnit_Framework_TestCase
+{
+ public function testLangRTL()
+ {
+ $item = new Feed;
+ $item->language = 'fr_FR';
+ $this->assertFalse($item->isRTL());
+
+ $item->language = 'ur';
+ $this->assertTrue($item->isRTL());
+
+ $item->language = 'syr-**';
+ $this->assertTrue($item->isRTL());
+
+ $item->language = 'ru';
+ $this->assertFalse($item->isRTL());
+ }
+} \ No newline at end of file
diff --git a/vendor/fguillot/picofeed/tests/Parser/ParserTest.php b/vendor/fguillot/picofeed/tests/Parser/ParserTest.php
index 449e0c9ce..5d786b8ee 100644
--- a/vendor/fguillot/picofeed/tests/Parser/ParserTest.php
+++ b/vendor/fguillot/picofeed/tests/Parser/ParserTest.php
@@ -55,6 +55,14 @@ class ParserTest extends PHPUnit_Framework_TestCase
$this->assertEquals('da23614e02469a0d7c7bd1bdab5c9c474b1904dc', $parser->generateId('a', 'b'));
}
+ public function testLangRTL()
+ {
+ $this->assertFalse(Parser::isLanguageRTL('fr-FR'));
+ $this->assertTrue(Parser::isLanguageRTL('ur'));
+ $this->assertTrue(Parser::isLanguageRTL('syr-**'));
+ $this->assertFalse(Parser::isLanguageRTL('ru'));
+ }
+
public function testNamespaceValue()
{
$xml = XmlParser::getSimpleXml(file_get_contents('tests/fixtures/rue89.xml'));
diff --git a/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php b/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php
index e9d1bb925..ec2d7d6eb 100644
--- a/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php
+++ b/vendor/fguillot/picofeed/tests/Reader/ReaderTest.php
@@ -145,10 +145,10 @@ class ReaderTest extends PHPUnit_Framework_TestCase
$feed = $parser->execute();
- $this->assertEquals('http://www.groovehq.com/blog/feed', $client->getUrl());
+ $this->assertEquals('https://www.groovehq.com/blog/feed', $client->getUrl());
$this->assertEquals('http://www.groovehq.com/blog/feed', $feed->getFeedUrl());
$this->assertNotEquals('http://www.groovehq.com/blog/feed', $feed->items[0]->getUrl());
$this->assertTrue(strpos($feed->items[0]->getUrl(), 'http://') === 0);
$this->assertTrue(strpos($feed->items[0]->getUrl(), 'feed') === false);
}
-} \ No newline at end of file
+}
diff --git a/vendor/fguillot/picofeed/tests/fixtures/hamakor.xml b/vendor/fguillot/picofeed/tests/fixtures/hamakor.xml
new file mode 100644
index 000000000..29d49f58b
--- /dev/null
+++ b/vendor/fguillot/picofeed/tests/fixtures/hamakor.xml
@@ -0,0 +1,527 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title>פלאנט תוכנה חופשית בישראל (Planet FOSS-IL)</title>
+ <link rel="self" href="http://planet.hamakor.org.il/atom.xml"/>
+ <link href="http://planet.hamakor.org.il"/>
+ <id>http://planet.hamakor.org.il/atom.xml</id>
+ <updated>2014-12-22T02:31:42+00:00</updated>
+ <generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>
+
+ <entry xml:lang="he">
+ <title type="html">סינטרה מודולרית</title>
+ <link href="http://idkn.wordpress.com/2014/12/20/modular-sinatra/"/>
+ <id>http://idkn.wordpress.com/?p=7223</id>
+ <updated>2014-12-20T20:00:02+00:00</updated>
+ <content type="html">&lt;p&gt;ב2012 ניסיתי ליצור פוסטים בנושא של &lt;a href=&quot;http://idkn.wordpress.com/2012/11/19/advanced-usage-in-sinatra-first-part/&quot;&gt;כיצד ניתן להגיע למצב הדומה לrails עם סינטרה&lt;/a&gt;.&lt;br /&gt;
+בשל חוסר סבלנות וזמן, זנחתי את הפוסט, אבל לא את הרעיון לבצע אותו.&lt;br /&gt;
+למעשה זה היה רעיון טוב מאוד לזנוח אותו בזמנו, היות ואז הייתי עושה דברים לא נכון, וכיום יש לי יותר ידע וניסיון בנושא, וגם איך לעבוד נכון יותר, וכן גם גרסת הרובי מאפשרת לנו לעבוד קל יותר.&lt;/p&gt;
+&lt;p&gt;באותו הזמן של הרצון לחזור ולכתוב על הנושא, מצאתי את עצמי זקוק בדחיפות למערכת שתסייע לי לדבג API שאני יוצר בפרוייקט שמתבצע באמצעות REST, אז החלטתי לצרף שני צרכים עם דבר אחד.&lt;/p&gt;
+&lt;p&gt;הרעיון שלי הוא למעשה שרת אשר משמש לקוח בדיקות עבור REST, כך שאפשר להתקין אותו על שרת כלשהו בארגון וכולם יכולים להשתמש בו, במקום תוכנה מקומית על המחשב.&lt;/p&gt;
+&lt;p&gt;הקוד שלי די ממוקד לרובי 2.1 (אני מקווה כי גם מעלה, 2.2 נראה שיתמוך בקוד שלי), ופחות מזה, יצעק לכם על מספר דברים, אשר בקלות ניתן לפתור, אך ראו הוזהרתם.&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;https://github.com/ik5/ruby_rest_wui&quot;&gt;התחלתי ליצור את הפרוייקט&lt;/a&gt;, והוא עובד עם סינטרה, ומחזיק נכון לכתיבת הפוסט שלוש מחלקות שונות בשביל ביצוע routing.&lt;br /&gt;
+בנוסף, יצרתי לעצמי מבנה ספריות המתאימות למה שאני רוצה לבצע, לפי לוגיקה, כך שהלוגיקה השייכת לממשק, &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/tree/master/logic&quot;&gt;נמצאת כאן&lt;/a&gt;, בעוד ש&lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/tree/master/config&quot;&gt;ההגדרות בכלל נמצאות כאן&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://rack.github.io/&quot;&gt;אנחנו משתמשים בRack&lt;/a&gt; בעצם, היות וכמעט וכל הframeworks עבור בניית מערכות web ברובי משתמשים בו, אנו זקוקים לקובץ קבוע בשם &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/config.ru&quot;&gt;config.ru&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;הקובץ הזה, בעצם אחראי על התחלת השרת, וטעינה של המערכת שלנו, כאשר הוא תומך בטעינה של יותר ממערכת אחת בו זמנית, כולל שני framework או יותר, אך נכון לגרסה הנוכחית, אני משתמש בו רק עבור Sinatra.&lt;/p&gt;
+&lt;p&gt;אני משתמש גם ב &lt;a href=&quot;http://bundler.io/&quot;&gt;Bundler&lt;/a&gt; לניהול תלויות, אשר מאפשר לנו גם לדאוג לצעוק על דברים שלא נטענו, ובעיקר עושה לנו סדר של גרסאות של תלויות, ובכך שדברים לא יתנגשו אחד בשני.&lt;/p&gt;
+&lt;p&gt;לאחר טעינת התלויות, אני טוען קובץ בודד בשם app.rb שהוא בעצם מה שמנהל את האפליקציה שלי. אך במקום להשתמש ב &lt;a href=&quot;http://ruby-doc.org/core-2.1.5/Kernel.html#method-i-require&quot;&gt;require&lt;/a&gt; &amp;quot;רגיל&amp;quot;, אני משתמש בפונקציה בשם &lt;a href=&quot;http://ruby-doc.org/core-2.1.5/Kernel.html#method-i-require_relative&quot;&gt;require_relative&lt;/a&gt;, אשר מאפשרת לטעון דברים מהמיקום הנוכחי של הקובץ המנסה לטעון אותה.&lt;/p&gt;
+&lt;p&gt;כל הקסם של ניהול מספר מחלקות, נעוץ אצלי ב &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/logic/app.rb&quot;&gt;app.rb&lt;/a&gt;.&lt;br /&gt;
+אני יצרתי אותו שיהיה מאוד פשוט &amp;#8211; טען לי את המחלקות האחרון והכנס אותן לסביבת העבודה של רובי, על ידי שימוש ב &lt;a href=&quot;https://github.com/sinatra/sinatra/blob/v1.4.5/lib/sinatra/base.rb#L1406&quot;&gt;use&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;למערכת שיצרתי ישנם שני מצבים &amp;#8211; מערכת לדיבוג REST, ומערכת &amp;quot;בדיקות&amp;quot; אשר עליה אפשר לבדוק שדברים עובדים, והיא בעיקר על תקן &amp;quot;echo&amp;quot; כלשהו.&lt;/p&gt;
+&lt;p&gt;את המערכת של יצירת המסכים, ושליחת ה REST, יצרתי בקובץ &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/logic/rest.rb&quot;&gt;rest.rb&lt;/a&gt;, והכל מאוגד שם.&lt;br /&gt;
+יש שם משהו שהולך לעבור למקום אחר בקרוב, וזה מספר מתודות לסיוע בפעולות.&lt;/p&gt;
+&lt;p&gt;הקובץ לביצוע הבדיקות, קיבל את השם &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/logic/testing.rb&quot;&gt;tests.rb&lt;/a&gt;, והוא מי שמנהל את כל הניתובים בנושא.&lt;br /&gt;
+הגרסה הבאה, הולכת לגרום לו להיות גנרי יותר, מצד אחד, וגמיש יותר מצד שני, ובכך הכוח של סינטרה יכנס ממש לפעולה, עם ניתובים ממש דינאמיים וחכמים.&lt;/p&gt;
+&lt;p&gt;Sinatra תומך במשהו אשר קיבל את השם &lt;a href=&quot;http://www.sinatrarb.com/intro.html#Helpers&quot;&gt;Helpers&lt;/a&gt;, וזה מתודות אשר מסייעות לנו לבצע דברים, בצורה שלא נהיה צריכים לחזור עליה כל פעם, וזה זמין גם ל view שלנו, ובגרסה הבאה שאשחרר (נכון לכתיבת הפוסט), המידע יעבור לקובץ בשם helpers.rb ואיתו עובדים קצת שונה ברובי.&lt;/p&gt;
+&lt;p&gt;כל מחלקה של סינטרה, מחזיקה חלק של &lt;a href=&quot;http://www.sinatrarb.com/intro.html#Configuration&quot;&gt;configure&lt;/a&gt; משל עצמה, שזה טוב ורע באותו הזמן. זה טוב, כי זה מספק גמישות, אבל זה רע, כי לפעמים יש לנו קצת חזרה על עצמנו.&lt;/p&gt;
+&lt;p&gt;במקרה הזה, הגדרתי כי במצב של ‎:development משתמשים ב &lt;a href=&quot;http://www.sinatrarb.com/contrib/reloader.html&quot;&gt;Sinatra::Reloader&lt;/a&gt;, אשר מגיע עם &lt;a href=&quot;http://www.sinatrarb.com/contrib/reloader.html&quot;&gt;Sinatra-Contrib&lt;/a&gt; &amp;#8211; תת פרוייקט המספק הרבה כלי עזר לדברים שונים.&lt;br /&gt;
+הסיבה לשימוש ב Reloader הוא לא לאתחל את השרת בכל שינוי שעושים למחלקה של סינטרה, כאשר Reloader מגלה כי התוכן של הקובץ השתנה, הוא גורם ל rack לטעון אותו שוב, וככה אנחנו לא זקוקים לטעינה מחודשת של השרת עצמו.&lt;/p&gt;
+&lt;p&gt;המערכת שכתבתי, משתמשת ב template בשם &lt;a href=&quot;http://haml.info/&quot;&gt;haml&lt;/a&gt;, למעשה פעם ראשונה אשר אני משתמש בה מרצון. תוכלו למצוא את ה &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/views/layout.haml&quot;&gt;layout.haml&lt;/a&gt; שהוא המסגרת הרגילה וכן כרגע קובץ בשם &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/views/index.haml&quot;&gt;index.haml&lt;/a&gt; תחת ספריית &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/tree/master/views&quot;&gt;view&lt;/a&gt;.&lt;br /&gt;
+ועבור העיצוב, אני משתמש ב &lt;a href=&quot;http://foundation.zurb.com/&quot;&gt;Foundation 5&lt;/a&gt;, אשר אני אוהב אותה יותר מאשר bootstrap.&lt;br /&gt;
+עבור Javascript יש גם את jQuery וגם את &lt;a href=&quot;http://idkn.wordpress.com/2014/11/04/knockout-js/&quot;&gt;knockout.js&lt;/a&gt;, כאשר אני נעזר גם ב &lt;a href=&quot;https://lodash.com/&quot;&gt;lodash.js&lt;/a&gt; למספר דברים פשוטים, והיא מספקת בעצם גרסה שעברה אופטימיזציה ל underscore.&lt;/p&gt;
+&lt;p&gt;את הקבצים של Foundation, וכל ה Javascript ניתן למצוא תחת &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/tree/master/public&quot;&gt;public&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;דבר אחרון שנשאר לספר עליו הוא שאני משתמש במשהו אשר נקרא &lt;a href=&quot;http://puma.io/&quot;&gt;puma&lt;/a&gt;.&lt;br /&gt;
+מה זה ?&lt;br /&gt;
+puma הוא משהו שלוקח את rack וגורם לו להיות שרת לכל דבר ועניין, אשר ניתן לבצע עליו חיבור לשרתי HTTP שונים, כדוגמץ apache או nginx.&lt;br /&gt;
+החיבור נעשה על ידי הגדרת proxy בשרתים.&lt;/p&gt;
+&lt;p&gt;ההגדרות של puma, נמצאות תחת config, וכפי שניתן לראות את &lt;a href=&quot;https://github.com/ik5/ruby_rest_wui/blob/master/config/puma.rb&quot;&gt;הקובץ הראשי והחשוב&lt;/a&gt;, הוא גם יודע לבנות לעצמו מבנה ספריות במידה והן לא קיימות, דבר שהוספתי לקוד עצמו. הוא כרגע מכוון למצב של development, ולכן יש לשנות קצת הגדרות בשביל שזה יעבור למצב production.&lt;/p&gt;
+&lt;p&gt;אתם מוזמנים לבצע fork, לשחק עם הקוד וגם להחזיק לי תיקונים ותוספות.&lt;/p&gt;&lt;br /&gt;תויק תחת:&lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/%d7%a4%d7%99%d7%aa%d7%95%d7%97/ruby/&quot;&gt;Ruby&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/ui/&quot;&gt;ui&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/operating-systems/unix/&quot;&gt;unix&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/%d7%90%d7%99%d7%a0%d7%98%d7%a8%d7%a0%d7%98/&quot;&gt;אינטרנט&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%99%d7%a4%d7%99%d7%9d-%d7%95%d7%98%d7%a8%d7%99%d7%a7%d7%99%d7%9d/&quot;&gt;טיפים וטריקים&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/&quot;&gt;טכנולוגיה&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/operating-systems/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/&quot;&gt;לינוקס&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/%d7%a4%d7%99%d7%aa%d7%95%d7%97/&quot;&gt;פיתוח&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/&quot;&gt;קוד פתוח&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/&quot;&gt;רשתות&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%a9%d7%a8%d7%aa%d7%99%d7%9d/&quot;&gt;שרתים&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/&quot;&gt;תוכנה&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/%d7%aa%d7%9b%d7%a0%d7%95%d7%aa/&quot;&gt;תכנות&lt;/a&gt;, &lt;a href=&quot;http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/&quot;&gt;תקשורת&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/idkn.wordpress.com/7223/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/idkn.wordpress.com/7223/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=idkn.wordpress.com&amp;#038;blog=3104636&amp;#038;post=7223&amp;#038;subd=idkn&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content>
+ <author>
+ <name>ik_5</name>
+ <uri>http://idkn.wordpress.com</uri>
+ </author>
+ <source>
+ <title type="html">לראות שונה » קוד פתוח</title>
+ <subtitle type="html">מבט שונה בעיקר על (פיתוח) תוכנה, עסקים והקוד הפתוח</subtitle>
+ <link rel="self" href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/feed/atom/"/>
+ <id>http://idkn.wordpress.com/feed/atom/</id>
+ <updated>2014-12-22T02:31:34+00:00</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="en-US">
+ <title type="html">Kindle Paperwhite &amp;#8220;Unable to Open Item&amp;#8221;</title>
+ <link href="http://www.guyrutenberg.com/2014/12/20/kindle-paperwhite-unable-to-open-item/"/>
+ <id>http://www.guyrutenberg.com/?p=69803</id>
+ <updated>2014-12-20T14:40:04+00:00</updated>
+ <content type="html">&lt;p&gt;Recently, I tried transfering some new ebook to my Kindle Paperwhite (first generation), the books were listed properly. However, when I tried to open them I got&lt;br /&gt;
+&amp;#8220;Unable to Open Item&amp;#8221; error, suggesting I re-download the books from Amazon. I tried transferring the files again and again, but it didnt&amp;#8217; help. Some of the books were &lt;code&gt;mobi&lt;/code&gt; files while others were &amp;#8220;AZW` (which I got from &lt;a href=&quot;http://indiebook.co.il/&quot;&gt;אינדיבוק&lt;/a&gt;) and all of them opened fine on my computer.&lt;/p&gt;
+&lt;p&gt;Finally, I followed an advice from a &lt;a href=&quot;http://kindledfans.livejournal.com/71655.html?thread=388839#t388839&quot;&gt;comment in the KindledFans blog&lt;/a&gt;, and converted the files to &lt;code&gt;AZW3&lt;/code&gt; (the original comment suggested &lt;code&gt;mobi&lt;/code&gt; but &lt;code&gt;AZW3&lt;/code&gt; works better with Hebrew). After converting, I moved the files to my Kindle and they opened just fine.&lt;/p&gt;</content>
+ <author>
+ <name>Guy</name>
+ <uri>http://www.guyrutenberg.com</uri>
+ </author>
+ <source>
+ <title type="html">Guy Rutenberg</title>
+ <subtitle type="html">Keeping track of what I do</subtitle>
+ <link rel="self" href="http://www.guyrutenberg.com/feed/atom/"/>
+ <id>http://www.guyrutenberg.com/feed/atom/</id>
+ <updated>2014-12-20T18:48:18+00:00</updated>
+ </source>
+ </entry>
+
+ <entry xml:lang="he-IL">
+ <title type="html">Docker – חלק חמישי</title>
+ <link href="http://ilsh.info/archives/4571"/>
+ <id>http://ilsh.info/?p=4571</id>
+ <updated>2014-12-19T11:00:31+00:00</updated>
+ <content type="html">&lt;p&gt;&lt;a href=&quot;http://ilsh.info/archives/4487&quot;&gt;בפרק הקודם&lt;/a&gt; הדגמתי הרצת שתי פקודות במיכל (באמצעות הפקודה docker run): האחת איפשרה גישה אינטרקטיבית לעבודה עם המיכל ובשניה הרצנו Daemon שסיפק שירות.&lt;/p&gt;
+&lt;p&gt;כרגע אתמקד בעבודה עם docker client. עבודה עם docker client מאוד פשוטה (באמצעות דגלים וארגומנטים ניתן לשלוט בהוראות ל- Docker Client):&lt;/p&gt;
+&lt;div class=&quot;codesnip-container&quot;&gt;
+&lt;div class=&quot;sql codesnip&quot;&gt;Usage: &amp;nbsp;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;sudo&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; docker &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;command&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;flags&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;arguments&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;..&lt;/span&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;p&gt;&lt;span id=&quot;more-4571&quot;&gt;&lt;/span&gt;&lt;/p&gt;
+&lt;p&gt;הרצת הפקודה docker version תספק לנו אינפורמציה נוספת על גרסת docker בצד השרת ובצד הלקוח (בצד אינפורמציה רבה נוספת).&lt;/p&gt;
+&lt;div class=&quot;codesnip-container&quot;&gt;
+&lt;div class=&quot;sql codesnip&quot;&gt;$ sudo docker version&lt;br /&gt;
+&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;sudo&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; password &lt;span class=&quot;kw1&quot;&gt;FOR&lt;/span&gt; ilan: &lt;br /&gt;
+Client version: 1&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;3&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;2&lt;br /&gt;
+Client API version: &lt;span class=&quot;nu0&quot;&gt;1.15&lt;/span&gt;&lt;br /&gt;
+Go version &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;client&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;: go1&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;3&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;3&lt;br /&gt;
+Git commit &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;client&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;: 39fa2fa&lt;br /&gt;
+OS&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Arch &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;client&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;: linux&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;amd64&lt;br /&gt;
+Server version: 1&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;3&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;2&lt;br /&gt;
+Server API version: &lt;span class=&quot;nu0&quot;&gt;1.15&lt;/span&gt;&lt;br /&gt;
+Go version &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;server&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;: go1&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;3&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;3&lt;br /&gt;
+Git commit &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;server&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;: 39fa2fa&lt;/div&gt;
+&lt;/div&gt;
+&lt;p&gt;&lt;br /&gt;
+&lt;br /&gt;
+כדי לקבל עזרה על פקודה מסויימת (נניח attach) נוסיף את הדגל help:&lt;/p&gt;
+&lt;div class=&quot;codesnip-container&quot;&gt;
+&lt;div class=&quot;sql codesnip&quot;&gt;$ sudo docker attach &lt;span class=&quot;co1&quot;&gt;&amp;#8211;help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
+&lt;p&gt;Usage: docker attach &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;OPTIONS&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; CONTAINER&lt;/p&gt;
+&lt;p&gt;Attach &lt;span class=&quot;kw1&quot;&gt;TO&lt;/span&gt; a running container&lt;/p&gt;
+&lt;p&gt;&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;&amp;#8211;no-stdin=false &amp;nbsp; &amp;nbsp;Do not attach STDIN&lt;/span&gt;&lt;br /&gt;
+&amp;nbsp; &lt;span class=&quot;co1&quot;&gt;&amp;#8211;sig-proxy=true &amp;nbsp; &amp;nbsp;Proxy all received signals to the process (even in non-TTY mode). SIGCHLD, SIGKILL, and SIGSTOP are not proxied.&lt;/span&gt;&lt;/p&gt;
+
+&lt;p&gt;&lt;strong&gt;הערה&lt;/strong&gt;: כדי לצפות בכל באפשרויות שהפקודה docker תומכת יש להריץ את הפקודה docker בלבד.&lt;br /&gt;
+&lt;br /&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;הרצת אפליקציית רשת באמצעות docker&lt;/strong&gt;:&lt;/p&gt;
+&lt;div class=&quot;codesnip-container&quot;&gt;
+&lt;div class=&quot;sql codesnip&quot;&gt;$ sudo docker run &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;d &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;P training&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;webapp python app&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;py&lt;br /&gt;
+Unable &lt;span class=&quot;kw1&quot;&gt;TO&lt;/span&gt; find image &lt;span class=&quot;st0&quot;&gt;'training/webapp'&lt;/span&gt; locally&lt;br /&gt;
+Pulling repository training&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;webapp&lt;br /&gt;
+31fa814ba25a: Download complete &lt;br /&gt;
+511136ea3c5a: Download complete &lt;br /&gt;
+f10ebce2c0e1: Download complete &lt;br /&gt;
+82cdea7ab5b5: Download complete &lt;br /&gt;
+5dbd9cb5a02f: Download complete &lt;br /&gt;
+74fe38d11401: Download complete &lt;br /&gt;
+64523f641a05: Download complete &lt;br /&gt;
+0e2afc9aad6e: Download complete &lt;br /&gt;
+e8fc7643ceb1: Download complete &lt;br /&gt;
+733b0e3dbcee: Download complete &lt;br /&gt;
+a1feb043c441: Download complete &lt;br /&gt;
+e12923494f6a: Download complete &lt;br /&gt;
+a15f98c46748: Download complete &lt;br /&gt;
+&lt;span class=&quot;kw1&quot;&gt;STATUS&lt;/span&gt;: Downloaded newer image &lt;span class=&quot;kw1&quot;&gt;FOR&lt;/span&gt; training&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;webapp:latest&lt;br /&gt;
+52d212d850c52cf8553f729ecc0850647d1bb50f274f6ef9316ea19b3d3b7fe5&lt;/div&gt;
+&lt;/div&gt;
+&lt;ul&gt;
+&lt;li&gt;הדגל d- מוכר: האפליקציה במיכל תורץ ברקע ותספק את השירות&lt;/li&gt;
+&lt;li&gt;הדגל p- מציין שיש למפות כל פורט נדרש במיכל ולשייך אותו למיכל הנוכחי&lt;/li&gt;
+&lt;li&gt;מאחר שהמיכל 'training/webapp' לא נמצא במאגר המקומי, הוא הורד מהרשת (Docker Hub). המיכל מכיל סקריפט פייתון פשוט (app.py) שמיישם אפליקצית רשת.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;&lt;br /&gt;
+&lt;br /&gt;
+נריץ שוב את הפקודה docker ps (הפעם עם הדגל l- בו נבקש לקבל מידע נוסף על זמן הרצת הסקריפט)&lt;/p&gt;
+&lt;div class=&quot;codesnip-container&quot;&gt;
+&lt;div class=&quot;sql codesnip&quot;&gt;$ sudo docker ps &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;l&lt;br /&gt;
+CONTAINER ID &amp;nbsp;IMAGE &amp;nbsp;COMMAND &amp;nbsp;CREATED &amp;nbsp;&lt;span class=&quot;kw1&quot;&gt;STATUS&lt;/span&gt; &amp;nbsp; PORTS NAMES 2d212d850c5 &amp;nbsp;training&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;webapp:latest &amp;nbsp;&lt;span class=&quot;st0&quot;&gt;&amp;quot;python app.py&amp;quot;&lt;/span&gt; &amp;nbsp;&lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt; minutes ago &amp;nbsp; Up &lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt; minutes &amp;nbsp;0&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;0&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;0&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;0:&lt;span class=&quot;nu0&quot;&gt;49153&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;tcp &amp;nbsp;clever_lumiere&lt;/div&gt;
+&lt;/div&gt;
+&lt;p&gt;הערה: הפורט 49153 בצד הלקוח מופה לפורט 5000 בצד השרת.&lt;/p&gt;
+&lt;p&gt;נגלוש לכתובת זאת ונקבל את המסך הבא:&lt;/p&gt;
+&lt;p&gt;&lt;a href=&quot;http://ilsh.info/wp-content/uploads/2014/12/webapp1.png&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;http://ilsh.info/wp-content/uploads/2014/12/webapp1-300x115.png&quot; alt=&quot;webapp1&quot; width=&quot;300&quot; height=&quot;115&quot; class=&quot;aligncenter size-medium wp-image-4593&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;br /&gt;
+&lt;br /&gt;
+כדי לצפות בלוגים של השרת נריץ את הפקודה הבאה:&lt;/p&gt;
+&lt;div class=&quot;codesnip-container&quot;&gt;
+&lt;div class=&quot;sql codesnip&quot;&gt;$ sudo docker logs &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;f clever_lumiere&lt;br /&gt;
+&amp;nbsp;&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; Running &lt;span class=&quot;kw1&quot;&gt;ON&lt;/span&gt; http:&lt;span class=&quot;sy0&quot;&gt;//&lt;/span&gt;0&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;0&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;0&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;0:&lt;span class=&quot;nu0&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;br /&gt;
+172&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;17&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;42&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;1 &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;07&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Dec&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2014&lt;/span&gt; 03:&lt;span class=&quot;nu0&quot;&gt;49&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;33&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;GET / HTTP/1.1&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;200&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;br /&gt;
+172&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;17&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;42&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;1 &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;07&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;Dec&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;2014&lt;/span&gt; 03:&lt;span class=&quot;nu0&quot;&gt;49&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;34&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;GET /favicon.ico HTTP/1.1&amp;quot;&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;404&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;br /&gt;
+172&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;17&lt;