528 lines
68 KiB
XML
528 lines
68 KiB
XML
|
<?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"><p>ב2012 ניסיתי ליצור פוסטים בנושא של <a href="http://idkn.wordpress.com/2012/11/19/advanced-usage-in-sinatra-first-part/">כיצד ניתן להגיע למצב הדומה לrails עם סינטרה</a>.<br />
|
|||
|
בשל חוסר סבלנות וזמן, זנחתי את הפוסט, אבל לא את הרעיון לבצע אותו.<br />
|
|||
|
למעשה זה היה רעיון טוב מאוד לזנוח אותו בזמנו, היות ואז הייתי עושה דברים לא נכון, וכיום יש לי יותר ידע וניסיון בנושא, וגם איך לעבוד נכון יותר, וכן גם גרסת הרובי מאפשרת לנו לעבוד קל יותר.</p>
|
|||
|
<p>באותו הזמן של הרצון לחזור ולכתוב על הנושא, מצאתי את עצמי זקוק בדחיפות למערכת שתסייע לי לדבג API שאני יוצר בפרוייקט שמתבצע באמצעות REST, אז החלטתי לצרף שני צרכים עם דבר אחד.</p>
|
|||
|
<p>הרעיון שלי הוא למעשה שרת אשר משמש לקוח בדיקות עבור REST, כך שאפשר להתקין אותו על שרת כלשהו בארגון וכולם יכולים להשתמש בו, במקום תוכנה מקומית על המחשב.</p>
|
|||
|
<p>הקוד שלי די ממוקד לרובי 2.1 (אני מקווה כי גם מעלה, 2.2 נראה שיתמוך בקוד שלי), ופחות מזה, יצעק לכם על מספר דברים, אשר בקלות ניתן לפתור, אך ראו הוזהרתם.</p>
|
|||
|
<p><a href="https://github.com/ik5/ruby_rest_wui">התחלתי ליצור את הפרוייקט</a>, והוא עובד עם סינטרה, ומחזיק נכון לכתיבת הפוסט שלוש מחלקות שונות בשביל ביצוע routing.<br />
|
|||
|
בנוסף, יצרתי לעצמי מבנה ספריות המתאימות למה שאני רוצה לבצע, לפי לוגיקה, כך שהלוגיקה השייכת לממשק, <a href="https://github.com/ik5/ruby_rest_wui/tree/master/logic">נמצאת כאן</a>, בעוד ש<a href="https://github.com/ik5/ruby_rest_wui/tree/master/config">ההגדרות בכלל נמצאות כאן</a>.</p>
|
|||
|
<p><a href="http://rack.github.io/">אנחנו משתמשים בRack</a> בעצם, היות וכמעט וכל הframeworks עבור בניית מערכות web ברובי משתמשים בו, אנו זקוקים לקובץ קבוע בשם <a href="https://github.com/ik5/ruby_rest_wui/blob/master/config.ru">config.ru</a>.</p>
|
|||
|
<p>הקובץ הזה, בעצם אחראי על התחלת השרת, וטעינה של המערכת שלנו, כאשר הוא תומך בטעינה של יותר ממערכת אחת בו זמנית, כולל שני framework או יותר, אך נכון לגרסה הנוכחית, אני משתמש בו רק עבור Sinatra.</p>
|
|||
|
<p>אני משתמש גם ב <a href="http://bundler.io/">Bundler</a> לניהול תלויות, אשר מאפשר לנו גם לדאוג לצעוק על דברים שלא נטענו, ובעיקר עושה לנו סדר של גרסאות של תלויות, ובכך שדברים לא יתנגשו אחד בשני.</p>
|
|||
|
<p>לאחר טעינת התלויות, אני טוען קובץ בודד בשם app.rb שהוא בעצם מה שמנהל את האפליקציה שלי. אך במקום להשתמש ב <a href="http://ruby-doc.org/core-2.1.5/Kernel.html#method-i-require">require</a> &quot;רגיל&quot;, אני משתמש בפונקציה בשם <a href="http://ruby-doc.org/core-2.1.5/Kernel.html#method-i-require_relative">require_relative</a>, אשר מאפשרת לטעון דברים מהמיקום הנוכחי של הקובץ המנסה לטעון אותה.</p>
|
|||
|
<p>כל הקסם של ניהול מספר מחלקות, נעוץ אצלי ב <a href="https://github.com/ik5/ruby_rest_wui/blob/master/logic/app.rb">app.rb</a>.<br />
|
|||
|
אני יצרתי אותו שיהיה מאוד פשוט &#8211; טען לי את המחלקות האחרון והכנס אותן לסביבת העבודה של רובי, על ידי שימוש ב <a href="https://github.com/sinatra/sinatra/blob/v1.4.5/lib/sinatra/base.rb#L1406">use</a>.</p>
|
|||
|
<p>למערכת שיצרתי ישנם שני מצבים &#8211; מערכת לדיבוג REST, ומערכת &quot;בדיקות&quot; אשר עליה אפשר לבדוק שדברים עובדים, והיא בעיקר על תקן &quot;echo&quot; כלשהו.</p>
|
|||
|
<p>את המערכת של יצירת המסכים, ושליחת ה REST, יצרתי בקובץ <a href="https://github.com/ik5/ruby_rest_wui/blob/master/logic/rest.rb">rest.rb</a>, והכל מאוגד שם.<br />
|
|||
|
יש שם משהו שהולך לעבור למקום אחר בקרוב, וזה מספר מתודות לסיוע בפעולות.</p>
|
|||
|
<p>הקובץ לביצוע הבדיקות, קיבל את השם <a href="https://github.com/ik5/ruby_rest_wui/blob/master/logic/testing.rb">tests.rb</a>, והוא מי שמנהל את כל הניתובים בנושא.<br />
|
|||
|
הגרסה הבאה, הולכת לגרום לו להיות גנרי יותר, מצד אחד, וגמיש יותר מצד שני, ובכך הכוח של סינטרה יכנס ממש לפעולה, עם ניתובים ממש דינאמיים וחכמים.</p>
|
|||
|
<p>Sinatra תומך במשהו אשר קיבל את השם <a href="http://www.sinatrarb.com/intro.html#Helpers">Helpers</a>, וזה מתודות אשר מסייעות לנו לבצע דברים, בצורה שלא נהיה צריכים לחזור עליה כל פעם, וזה זמין גם ל view שלנו, ובגרסה הבאה שאשחרר (נכון לכתיבת הפוסט), המידע יעבור לקובץ בשם helpers.rb ואיתו עובדים קצת שונה ברובי.</p>
|
|||
|
<p>כל מחלקה של סינטרה, מחזיקה חלק של <a href="http://www.sinatrarb.com/intro.html#Configuration">configure</a> משל עצמה, שזה טוב ורע באותו הזמן. זה טוב, כי זה מספק גמישות, אבל זה רע, כי לפעמים יש לנו קצת חזרה על עצמנו.</p>
|
|||
|
<p>במקרה הזה, הגדרתי כי במצב של :development משתמשים ב <a href="http://www.sinatrarb.com/contrib/reloader.html">Sinatra::Reloader</a>, אשר מגיע עם <a href="http://www.sinatrarb.com/contrib/reloader.html">Sinatra-Contrib</a> &#8211; תת פרוייקט המספק הרבה כלי עזר לדברים שונים.<br />
|
|||
|
הסיבה לשימוש ב Reloader הוא לא לאתחל את השרת בכל שינוי שעושים למחלקה של סינטרה, כאשר Reloader מגלה כי התוכן של הקובץ השתנה, הוא גורם ל rack לטעון אותו שוב, וככה אנחנו לא זקוקים לטעינה מחודשת של השרת עצמו.</p>
|
|||
|
<p>המערכת שכתבתי, משתמשת ב template בשם <a href="http://haml.info/">haml</a>, למעשה פעם ראשונה אשר אני משתמש בה מרצון. תוכלו למצוא את ה <a href="https://github.com/ik5/ruby_rest_wui/blob/master/views/layout.haml">layout.haml</a> שהוא המסגרת הרגילה וכן כרגע קובץ בשם <a href="https://github.com/ik5/ruby_rest_wui/blob/master/views/index.haml">index.haml</a> תחת ספריית <a href="https://github.com/ik5/ruby_rest_wui/tree/master/views">view</a>.<br />
|
|||
|
ועבור העיצוב, אני משתמש ב <a href="http://foundation.zurb.com/">Foundation 5</a>, אשר אני אוהב אותה יותר מאשר bootstrap.<br />
|
|||
|
עבור Javascript יש גם את jQuery וגם את <a href="http://idkn.wordpress.com/2014/11/04/knockout-js/">knockout.js</a>, כאשר אני נעזר גם ב <a href="https://lodash.com/">lodash.js</a> למספר דברים פשוטים, והיא מספקת בעצם גרסה שעברה אופטימיזציה ל underscore.</p>
|
|||
|
<p>את הקבצים של Foundation, וכל ה Javascript ניתן למצוא תחת <a href="https://github.com/ik5/ruby_rest_wui/tree/master/public">public</a>.</p>
|
|||
|
<p>דבר אחרון שנשאר לספר עליו הוא שאני משתמש במשהו אשר נקרא <a href="http://puma.io/">puma</a>.<br />
|
|||
|
מה זה ?<br />
|
|||
|
puma הוא משהו שלוקח את rack וגורם לו להיות שרת לכל דבר ועניין, אשר ניתן לבצע עליו חיבור לשרתי HTTP שונים, כדוגמץ apache או nginx.<br />
|
|||
|
החיבור נעשה על ידי הגדרת proxy בשרתים.</p>
|
|||
|
<p>ההגדרות של puma, נמצאות תחת config, וכפי שניתן לראות את <a href="https://github.com/ik5/ruby_rest_wui/blob/master/config/puma.rb">הקובץ הראשי והחשוב</a>, הוא גם יודע לבנות לעצמו מבנה ספריות במידה והן לא קיימות, דבר שהוספתי לקוד עצמו. הוא כרגע מכוון למצב של development, ולכן יש לשנות קצת הגדרות בשביל שזה יעבור למצב production.</p>
|
|||
|
<p>אתם מוזמנים לבצע fork, לשחק עם הקוד וגם להחזיק לי תיקונים ותוספות.</p><br />תויק תחת:<a href="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/">Ruby</a>, <a href="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/">ui</a>, <a href="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/">unix</a>, <a href="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/">אינטרנט</a>, <a href="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/">טיפים וטריקים</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/">טכנולוגיה</a>, <a href="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/">לינוקס</a>, <a href="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/">פיתוח</a>, <a href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/">קוד פתוח</a>, <a href="http://idkn.wordpress.com/category/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/">רשתות</a>, <a href="http://idkn.wordpress.com/category/%d7%a9%d7%a8%d7%aa%d7%99%d7%9d/">שרתים</a>, <a href="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/">תוכנה</a>, <a href="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/">תכנות</a>, <a href="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/">תקשורת</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/idkn.wordpress.com/7223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/idkn.wordpress.com/7223/" /></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=idkn.wordpress.com&#038;blog=3104636&#038;post=7223&#038;subd=idkn&#038;ref=&#038;feed=1" width="1" height="1" /></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 &#8220;Unable to Open Item&#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"><p>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<br />
|
|||
|
&#8220;Unable to Open Item&#8221; error, suggesting I re-download the books from Amazon. I tried transferring the files again and again, but it didnt&#8217; help. Some of the books were <code>mobi</code> files while others were &#8220;AZW` (which I got from <a href="http://indiebook.co.il/">אינדיבוק</a>) and all of them opened fine on my computer.</p>
|
|||
|
<p>Finally, I followed an advice from a <a href="http://kindledfans.livejournal.com/71655.html?thread=388839#t388839">comment in the KindledFans blog</a>, and converted the files to <code>AZW3</code> (the original comment suggested <code>mobi</code> but <code>AZW3</code> works better with Hebrew). After converting, I moved the files to my Kindle and they opened just fine.</p></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"><p><a href="http://ilsh.info/archives/4487">בפרק הקודם</a> הדגמתי הרצת שתי פקודות במיכל (באמצעות הפקודה docker run): האחת איפשרה גישה אינטרקטיבית לעבודה עם המיכל ובשניה הרצנו Daemon שסיפק שירות.</p>
|
|||
|
<p>כרגע אתמקד בעבודה עם docker client. עבודה עם docker client מאוד פשוטה (באמצעות דגלים וארגומנטים ניתן לשלוט בהוראות ל- Docker Client):</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">Usage: &nbsp;<span class="br0">&#91;</span>sudo<span class="br0">&#93;</span> docker <span class="br0">&#91;</span>command<span class="br0">&#93;</span> <span class="br0">&#91;</span>flags<span class="br0">&#93;</span> <span class="br0">&#91;</span>arguments<span class="br0">&#93;</span> <span class="sy0">..</span></div>
|
|||
|
</div>
|
|||
|
<p><span id="more-4571"></span></p>
|
|||
|
<p>הרצת הפקודה docker version תספק לנו אינפורמציה נוספת על גרסת docker בצד השרת ובצד הלקוח (בצד אינפורמציה רבה נוספת).</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker version<br />
|
|||
|
<span class="br0">&#91;</span>sudo<span class="br0">&#93;</span> password <span class="kw1">FOR</span> ilan: <br />
|
|||
|
Client version: 1<span class="sy0">.</span>3<span class="sy0">.</span>2<br />
|
|||
|
Client API version: <span class="nu0">1.15</span><br />
|
|||
|
Go version <span class="br0">&#40;</span>client<span class="br0">&#41;</span>: go1<span class="sy0">.</span>3<span class="sy0">.</span>3<br />
|
|||
|
Git commit <span class="br0">&#40;</span>client<span class="br0">&#41;</span>: 39fa2fa<br />
|
|||
|
OS<span class="sy0">/</span>Arch <span class="br0">&#40;</span>client<span class="br0">&#41;</span>: linux<span class="sy0">/</span>amd64<br />
|
|||
|
Server version: 1<span class="sy0">.</span>3<span class="sy0">.</span>2<br />
|
|||
|
Server API version: <span class="nu0">1.15</span><br />
|
|||
|
Go version <span class="br0">&#40;</span>server<span class="br0">&#41;</span>: go1<span class="sy0">.</span>3<span class="sy0">.</span>3<br />
|
|||
|
Git commit <span class="br0">&#40;</span>server<span class="br0">&#41;</span>: 39fa2fa</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
כדי לקבל עזרה על פקודה מסויימת (נניח attach) נוסיף את הדגל help:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker attach <span class="co1">&#8211;help</span></div></div>
|
|||
|
<p>Usage: docker attach <span class="br0">&#91;</span>OPTIONS<span class="br0">&#93;</span> CONTAINER</p>
|
|||
|
<p>Attach <span class="kw1">TO</span> a running container</p>
|
|||
|
<p>&nbsp; <span class="co1">&#8211;no-stdin=false &nbsp; &nbsp;Do not attach STDIN</span><br />
|
|||
|
&nbsp; <span class="co1">&#8211;sig-proxy=true &nbsp; &nbsp;Proxy all received signals to the process (even in non-TTY mode). SIGCHLD, SIGKILL, and SIGSTOP are not proxied.</span></p>
|
|||
|
|
|||
|
<p><strong>הערה</strong>: כדי לצפות בכל באפשרויות שהפקודה docker תומכת יש להריץ את הפקודה docker בלבד.<br />
|
|||
|
<br /></p>
|
|||
|
<p><strong>הרצת אפליקציית רשת באמצעות docker</strong>:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker run <span class="sy0">-</span>d <span class="sy0">-</span>P training<span class="sy0">/</span>webapp python app<span class="sy0">.</span>py<br />
|
|||
|
Unable <span class="kw1">TO</span> find image <span class="st0">'training/webapp'</span> locally<br />
|
|||
|
Pulling repository training<span class="sy0">/</span>webapp<br />
|
|||
|
31fa814ba25a: Download complete <br />
|
|||
|
511136ea3c5a: Download complete <br />
|
|||
|
f10ebce2c0e1: Download complete <br />
|
|||
|
82cdea7ab5b5: Download complete <br />
|
|||
|
5dbd9cb5a02f: Download complete <br />
|
|||
|
74fe38d11401: Download complete <br />
|
|||
|
64523f641a05: Download complete <br />
|
|||
|
0e2afc9aad6e: Download complete <br />
|
|||
|
e8fc7643ceb1: Download complete <br />
|
|||
|
733b0e3dbcee: Download complete <br />
|
|||
|
a1feb043c441: Download complete <br />
|
|||
|
e12923494f6a: Download complete <br />
|
|||
|
a15f98c46748: Download complete <br />
|
|||
|
<span class="kw1">STATUS</span>: Downloaded newer image <span class="kw1">FOR</span> training<span class="sy0">/</span>webapp:latest<br />
|
|||
|
52d212d850c52cf8553f729ecc0850647d1bb50f274f6ef9316ea19b3d3b7fe5</div>
|
|||
|
</div>
|
|||
|
<ul>
|
|||
|
<li>הדגל d- מוכר: האפליקציה במיכל תורץ ברקע ותספק את השירות</li>
|
|||
|
<li>הדגל p- מציין שיש למפות כל פורט נדרש במיכל ולשייך אותו למיכל הנוכחי</li>
|
|||
|
<li>מאחר שהמיכל 'training/webapp' לא נמצא במאגר המקומי, הוא הורד מהרשת (Docker Hub). המיכל מכיל סקריפט פייתון פשוט (app.py) שמיישם אפליקצית רשת.</li>
|
|||
|
</ul>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
נריץ שוב את הפקודה docker ps (הפעם עם הדגל l- בו נבקש לקבל מידע נוסף על זמן הרצת הסקריפט)</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker ps <span class="sy0">-</span>l<br />
|
|||
|
CONTAINER ID &nbsp;IMAGE &nbsp;COMMAND &nbsp;CREATED &nbsp;<span class="kw1">STATUS</span> &nbsp; PORTS NAMES 2d212d850c5 &nbsp;training<span class="sy0">/</span>webapp:latest &nbsp;<span class="st0">&quot;python app.py&quot;</span> &nbsp;<span class="nu0">11</span> minutes ago &nbsp; Up <span class="nu0">11</span> minutes &nbsp;0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">49153</span><span class="sy0">-&gt;</span><span class="nu0">5000</span><span class="sy0">/</span>tcp &nbsp;clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p>הערה: הפורט 49153 בצד הלקוח מופה לפורט 5000 בצד השרת.</p>
|
|||
|
<p>נגלוש לכתובת זאת ונקבל את המסך הבא:</p>
|
|||
|
<p><a href="http://ilsh.info/wp-content/uploads/2014/12/webapp1.png" rel="lightbox"><img src="http://ilsh.info/wp-content/uploads/2014/12/webapp1-300x115.png" alt="webapp1" width="300" height="115" class="aligncenter size-medium wp-image-4593" /></a></p>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
כדי לצפות בלוגים של השרת נריץ את הפקודה הבאה:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker logs <span class="sy0">-</span>f clever_lumiere<br />
|
|||
|
&nbsp;<span class="sy0">*</span> Running <span class="kw1">ON</span> http:<span class="sy0">//</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">5000</span><span class="sy0">/</span><br />
|
|||
|
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">49</span>:<span class="nu0">33</span><span class="br0">&#93;</span> <span class="st0">&quot;GET / HTTP/1.1&quot;</span> <span class="nu0">200</span> <span class="sy0">-</span><br />
|
|||
|
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">49</span>:<span class="nu0">34</span><span class="br0">&#93;</span> <span class="st0">&quot;GET /favicon.ico HTTP/1.1&quot;</span> <span class="nu0">404</span> <span class="sy0">-</span><br />
|
|||
|
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">50</span>:04<span class="br0">&#93;</span> <span class="st0">&quot;GET / HTTP/1.1&quot;</span> <span class="nu0">200</span> <span class="sy0">-</span><br />
|
|||
|
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">50</span>:04<span class="br0">&#93;</span> <span class="st0">&quot;GET /favicon.ico HTTP/1.1&quot;</span> <span class="nu0">404</span> <span class="sy0">-</span><br />
|
|||
|
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">50</span>:04<span class="br0">&#93;</span> <span class="st0">&quot;GET /favicon.ico HTTP/1.1&quot;</span> <span class="nu0">404</span> <span class="sy0">-</span></div>
|
|||
|
</div>
|
|||
|
<p><strong>הערה</strong>: הדגל f- גורם ל- docker להתנהג כמו הפקודה tail -f (כלומר להמשיך להאזין ללוגים ולא לצאת מהמשימה בסיום הרצת הפקודה).</p>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
כדי לצפות בתהליכים הרצים בתוך המיכל נריץ את הפקודה top: </p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker top clever_lumiere<br />
|
|||
|
UID &nbsp;PID &nbsp; PPID &nbsp;C &nbsp;STIME &nbsp;TTY &nbsp;TIME &nbsp;CMD<br />
|
|||
|
root &nbsp;<span class="nu0">23777</span> &nbsp;<span class="nu0">1774</span> &nbsp;<span class="nu0">0</span> &nbsp;05:<span class="nu0">33</span> &nbsp;? &nbsp;00:00:00 &nbsp;python app<span class="sy0">.</span>py</div>
|
|||
|
</div>
|
|||
|
<p>ניתן להבחין שהפקודה python app.py היא הפקודה היחידה שרצה במיכל.</p>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
כדי לעצור את עבודת המיכל נריץ את הפקודה הבאה:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker stop clever_lumiere<br />
|
|||
|
clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
אם נרצה להריץ שוב את המיכל יש לנו שתי אפשרויות: לחדש את ריצת המיכל (מאותה הנקודה שרץ בעבר) או לאתחל אותו:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">~$ sudo docker start clever_lumiere<br />
|
|||
|
clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
נריץ שוב את הפקודה pocker ps -l וניראה שהמיכל רץ כבר 41 דקות &#8211; כלומר חידשנו את פעולתו.</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker ps <span class="sy0">-</span>l<br />
|
|||
|
CONTAINER ID &nbsp;IMAGE &nbsp;COMMAND &nbsp;CREATED &nbsp;<span class="kw1">STATUS</span> &nbsp;PORTS &nbsp;NAMES<br />
|
|||
|
52d212d850c5 &nbsp;training<span class="sy0">/</span>webapp:latest &nbsp;<span class="st0">&quot;python app.py&quot;</span> &nbsp;<span class="nu0">41</span> minutes ago &nbsp;Up <span class="nu0">50</span> seconds &nbsp;0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">49154</span><span class="sy0">-&gt;</span><span class="nu0">5000</span><span class="sy0">/</span>tcp &nbsp;clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
לעומת זאת הפקודה restart תגרום להפסקת פעולת המיכל וריצתו מחדש (מאפס):</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker restart clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
כפי שניתן להיווכח:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker ps <span class="sy0">-</span>l<br />
|
|||
|
CONTAINER ID &nbsp;IMAGE &nbsp;COMMAND &nbsp;CREATED &nbsp;<span class="kw1">STATUS</span> &nbsp;PORTS &nbsp;NAMES<br />
|
|||
|
52d212d850c5 &nbsp;training<span class="sy0">/</span>webapp:latest &nbsp;<span class="st0">&quot;python app.py&quot;</span> &nbsp;<span class="nu0">44</span> minutes ago &nbsp;Up <span class="nu0">2</span> seconds &nbsp;0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">49155</span><span class="sy0">-&gt;</span><span class="nu0">5000</span><span class="sy0">/</span>tcp &nbsp;clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
כדי להסיר את המיכל יש תחילה לעצור אותו (stop) ורק לאחר מכן נוכל להסיר אותו באמצעות בפקודה rm:</p>
|
|||
|
<div class="codesnip-container">
|
|||
|
<div class="sql codesnip">$ sudo docker rm clever_lumiere<br />
|
|||
|
Error response <span class="kw1">FROM</span> daemon: You cannot remove a running container<span class="sy0">.</span> Stop the container before attempting removal <span class="kw1">OR</span> <span class="kw1">USE</span> <span class="sy0">-</span>f<br />
|
|||
|
2014<span class="sy0">/</span>12<span class="sy0">/</span>07 06:21:14 Error: failed <span class="kw1">TO</span> remove one <span class="kw1">OR</span> more containers<br />
|
|||
|
ilan@ilan<span class="sy0">-</span>HP<span class="sy0">-</span>ProBook<span class="sy0">-</span>6450b:~$ sudo docker stop clever_lumiere<br />
|
|||
|
clever_lumiere<br />
|
|||
|
ilan@ilan<span class="sy0">-</span>HP<span class="sy0">-</span>ProBook<span class="sy0">-</span>6450b:~$ sudo docker rm clever_lumiere<br />
|
|||
|
clever_lumiere</div>
|
|||
|
</div>
|
|||
|
<p><br />
|
|||
|
<br />
|
|||
|
עד לנקודה זאת תמיד השתמשנו במיכלים מוכנים שהורדנו מ- Docker Hub. בפרק הבא נלמד להכין מיכלים בעצמנו</p>
|
|||
|
<img src="http://ilsh.info/wp-content/uploads/2007/08/signature.png" alt="My Signature" /><div class="fcbk_share"><div class="fcbk_like"></div></div></content>
|
|||
|
<author>
|
|||
|
<name>Ilan Shavit</name>
|
|||
|
<uri>http://ilsh.info</uri>
|
|||
|
</author>
|
|||
|
<source>
|
|||
|
<title type="html">האתר של שביט אילן » לינוקס ותוכנה חופשית</title>
|
|||
|
<subtitle type="html">בלוג על לינוקס ותוכנה חופשית</subtitle>
|
|||
|
<link rel="self" href="http://ilsh.info/archives/category/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/feed"/>
|
|||
|
<id>http://ilsh.info/archives/category/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/feed</id>
|
|||
|
<updated>2014-12-19T11:03:37+00:00</updated>
|
|||
|
</source>
|
|||
|
</entry>
|
|||
|
|
|||
|
<entry xml:lang="en-US">
|
|||
|
<title type="html">Orchestrator 1.2.9 GA released</title>
|
|||
|
<link href="http://code.openark.org/blog/mysql/orchestrator-1-2-9-ga-released"/>
|
|||
|
<id>http://code.openark.org/blog/?p=7177</id>
|
|||
|
<updated>2014-12-18T16:24:59+00:00</updated>
|
|||
|
<content type="html"><p><a href="https://github.com/outbrain/orchestrator">Orchestrator</a> <strong>1.2.9 GA</strong> <a href="https://github.com/outbrain/orchestrator/releases/tag/v1.2.9">has been released</a>. Noteworthy:</p>
|
|||
|
<ul>
|
|||
|
<li>Added "<strong>ReadOnly</strong>" (true/false) configuration param. You can have orchestrator completely read-only</li>
|
|||
|
<li>Added <strong>"AuthenticationMethod": "multi"</strong>: works like BasicAuth (your normal HTTP user+password) only it also accepts the special user called <strong>"readonly"</strong>, which, surprise, can only view and not modify</li>
|
|||
|
<li>Centralized/serialized most backend database writes (with hundreds/thousands monitored servers it was possible or probable that high concurrency led to too-many-connections openned on the backend database).</li>
|
|||
|
<li>Fixed evil evil bug that would skip some checks if binary logs were not enabled</li>
|
|||
|
<li>Better hostname resolve (now also asking MySQL server to resolve hostname; resolving is cached)</li>
|
|||
|
<li><strong>Pseudo-GTID</strong> (read <a href="http://code.openark.org/blog/mysql/refactoring-replication-topology-with-pseudo-gtid">here</a>, <a href="http://code.openark.org/blog/mysql/orchestrator-1-2-1-beta-pseudo-gtid-support-reconnect-slaves-even-after-master-failure">here</a>, <a href="http://code.openark.org/blog/mysql/refactoring-replication-topologies-with-pseudo-gtid-a-visual-tour">here</a>) support now considered stable (apart from being tested it has already been put to practice multiple times in production at <strong>Outbrain</strong>, in different planned and unplanned crash scenarios)</li>
|
|||
|
</ul>
|
|||
|
<p>I continue developing <em>orchestrator</em> as free and open source at my new employer, <a href="http://www.booking.com">Booking.com</a>.</p>
|
|||
|
<p>&nbsp;</p>
|
|||
|
<p>&nbsp;</p></content>
|
|||
|
<author>
|
|||
|
<name>shlomi</name>
|
|||
|
<uri>http://code.openark.org/blog</uri>
|
|||
|
</author>
|
|||
|
<source>
|
|||
|
<title type="html">code.openark.org » MySQL</title>
|
|||
|
<subtitle type="html">Blog by Shlomi Noach</subtitle>
|
|||
|
<link rel="self" href="http://code.openark.org/blog/category/mysql/feed/atom"/>
|
|||
|
<id>http://code.openark.org/blog/feed/atom</id>
|
|||
|
<updated>2014-12-18T16:31:32+00:00</updated>
|
|||
|
</source>
|
|||
|
</entry>
|
|||
|
|
|||
|
<entry xml:lang="he-IL">
|
|||
|
<title type="html">Dynamic DNS with CloudFlare</title>
|
|||
|
<link href="http://blog.rabin.io/328/dynamic-dns-cloudflare"/>
|
|||
|
<id>https://blog.rabin.io/?p=328</id>
|
|||
|
<updated>2014-12-17T23:25:43+00:00</updated>
|
|||
|
<content type="html"><div><p>This is a simple hack I found for my self to have a &#8220;Dynamic DNS&#8221; for my home IP.</p>
|
|||
|
<p>I&#8217;m using CloudFlare as my name server to manage the zone file for my domain, And one of the nice things about FC is that they have nice <a href="https://www.cloudflare.com/docs/client-api.html" target="_blank">API</a> to manage your account. One of the options this API provides is the capability to <a href="https://www.cloudflare.com/docs/client-api.html#s5.2" target="_blank">update you DNS entries in the Zone</a>.</p>
|
|||
|
<p><span id="more-328"></span></p>
|
|||
|
<h2>Get your token</h2>
|
|||
|
<p>For all the action with the API you&#8217;ll 3 thinks, your privet token (called tkn in the API), email and the action you like to perform.</p>
|
|||
|
<p>You can find your token under your <a href="https://www.cloudflare.com/my-account.html" target="_blank">Account page</a></p>
|
|||
|
<h2>DNS Record ID</h2>
|
|||
|
<p>Next you&#8217;ll need to find the action you like to perform, in my case is to <a href="https://www.cloudflare.com/docs/client-api.html#s5.2" target="_blank">edit the zone file</a>. which is under the &#8220;DNS Record Management&#8221; -&gt; rec_edit menu, but for using this action you will need the ID number for the recored you like to change, and for that you will need to use &#8220;<a href="https://www.cloudflare.com/docs/client-api.html#s3.3" target="_blank">rec_load_all</a>&#8221; action.</p>
|
|||
|
<p>e.g</p><pre class="crayon-plain-tag">curl https://www.cloudflare.com/api_json.html \
|
|||
|
-d 'a=rec_load_all' \
|
|||
|
-d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
|
|||
|
-d 'email=sample@example.com' \
|
|||
|
-d 'z=example.com'</pre><p>The output will be in a JSON format, and the part you are looking for will look similar to this,</p><pre class="crayon-plain-tag">...
|
|||
|
{
|
|||
|
"rec_id": "18136402",
|
|||
|
"rec_tag": "3bcef45cdf5b7638b13cfb89f1b6e716",
|
|||
|
"zone_name": "example.com",
|
|||
|
"name": "test.example.com",
|
|||
|
"display_name": "test",
|
|||
|
"type": "A",
|
|||
|
"prio": null,
|
|||
|
"content": "[server IP]",
|
|||
|
"display_content": "[server IP]",
|
|||
|
"ttl": "1",
|
|||
|
"ttl_ceil": 86400,
|
|||
|
"ssl_id": null,
|
|||
|
"ssl_status": null,
|
|||
|
"ssl_expires_on": null,
|
|||
|
"auto_ttl": 1,
|
|||
|
"service_mode": "0",
|
|||
|
-
|
|||
|
"props": {
|
|||
|
"proxiable": 1,
|
|||
|
"cloud_on": 0,
|
|||
|
"cf_open": 1,
|
|||
|
"ssl": 0,
|
|||
|
"expired_ssl": 0,
|
|||
|
"expiring_ssl": 0,
|
|||
|
"pending_ssl": 0
|
|||
|
}
|
|||
|
...</pre><p></p>
|
|||
|
<h2>Edit/Update the DNS record</h2>
|
|||
|
<p>Now that you have the ID for the record you like to change, it&#8217;s a matter of a simple curl command,</p><pre class="crayon-plain-tag">curl https://www.cloudflare.com/api_json.html \
|
|||
|
-d 'a=rec_edit' \
|
|||
|
-d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
|
|||
|
-d 'id=18136402' \
|
|||
|
-d 'email=sample@example.com' \
|
|||
|
-d 'z=example.com' \
|
|||
|
-d 'type=A' \
|
|||
|
-d 'name=test' \
|
|||
|
-d 'content=1.2.3.4' \
|
|||
|
-d 'service_mode=0' \
|
|||
|
-d 'ttl=1'</pre><p>This command will update the IP to 1.2.3.4 for test.example.com entery.</p>
|
|||
|
<h3>Automate the update process</h3>
|
|||
|
<p>To automate the process, i have a cron job which runs every 5 minutes, and query my external IP and compare it to the resolved IP form my DNS.</p><pre class="crayon-plain-tag">#!/bin/bash
|
|||
|
|
|||
|
CURRENT_IP=$(dig myip.opendns.com @resolver1.opendns.com +short)
|
|||
|
RESOLVE_IP=$(dig dyn.example.com +short @jean.ns.cloudflare.com)
|
|||
|
|
|||
|
if [[ ${CURRENT_IP} != ${RESOLVE_IP} ]] ;
|
|||
|
then
|
|||
|
echo "need to update IP from: ${RESOLVE_IP} -&gt; ${CURRENT_IP}"
|
|||
|
curl https://www.cloudflare.com/api_json.html -d 'a=rec_edit' \
|
|||
|
-d 'tkn=c7ee1aef8131daf52e103a21a786ecbd99193' \
|
|||
|
-d 'email=X@Y.Z' \
|
|||
|
-d 'id=42' \
|
|||
|
-d 'z=example.com' \
|
|||
|
-d 'type=A' \
|
|||
|
-d 'name=dyn' \
|
|||
|
-d 'content='${CURRENT_IP} \
|
|||
|
-d 'service_mode=0' \
|
|||
|
-d 'ttl=120' \
|
|||
|
|
|||
|
|
|||
|
else
|
|||
|
echo "nothing to do"
|
|||
|
exit 0;
|
|||
|
fi</pre><p>&nbsp;</p>
|
|||
|
</div></content>
|
|||
|
<author>
|
|||
|
<name>Rabin Yasharzadeh</name>
|
|||
|
<uri>http://blog.rabin.io</uri>
|
|||
|
</author>
|
|||
|
<source>
|
|||
|
<title type="html">Rabin.IO » FOSS</title>
|
|||
|
<subtitle type="html">/home/rabin.io/notes</subtitle>
|
|||
|
<link rel="self" href="http://blog.rabin.io/tag/foss/feed"/>
|
|||
|
<id>http://blog.rabin.io/tag/foss/feed</id>
|
|||
|
<updated>2014-12-17T23:33:41+00:00</updated>
|
|||
|
</source>
|
|||
|
</entry>
|
|||
|
|
|||
|
<entry xml:lang="en-US">
|
|||
|
<title type="html">Drupal Performance Tip – “I’m too young to die” – know your DB engines</title>
|
|||
|
<link href="http://enginx.com/blog/drupal-performance-tip-im-young-die-know-db-engines/"/>
|
|||
|
<id>http://enginx.com/?p=512</id>
|
|||
|
<updated>2014-12-15T07:16:00+00:00</updated>
|
|||
|
<content type="html"><div class="seriesmeta">This entry is part 4 of 4 in the series <a href="http://enginx.com/series/drupal-performance-tips/" class="series-60" title="Drupal Performance Tips">Drupal Performance Tips</a></div><p>In the spirit of the computer video game <a href="http://doom.wikia.com/wiki/Doom" target="_blank">Doom </a>and its <a href="http://doom.wikia.com/wiki/Skill_level" target="_blank">skill levels</a>, we&#8217;ll review a few ways you can improve your <a href="http://drupal.org" target="_blank">Drupal </a>speed performance and optimize for better results and server response time. These tips that we&#8217;ll cover may be at times specific to Drupal 6 versions, although you can always learn the best practices from these examples and apply them on your own code base.</p>
|
|||
|
<p><img class="alignleft" src="http://adamatomic.com/pics/blog/doom/doom2.jpg" alt="Doom" width="298" height="212" /></p>
|
|||
|
<p>Doom skill levels: (easiest first)</p>
|
|||
|
<p>1.<strong> I&#8217;m too young to die</strong></p>
|
|||
|
<p>2. Hey, not too rough</p>
|
|||
|
<p>3. Hurt me plenty</p>
|
|||
|
<p>4. Ultra-violence</p>
|
|||
|
<p>5. Nightmare!</p>
|
|||
|
<p><strong> This post is rated &#8220;I&#8217;m too young too die&#8221; difficulty level</strong>.</p>
|
|||
|
<p>&nbsp;</p>
|
|||
|
<p><a href="http://drupal.org" target="_blank">Drupal </a>6 shipped with all tables being <a href="http://drupal.stackexchange.com/questions/20893/drupal-database-innodb-or-myisam" target="_blank">MyISAM</a>, and then Drupal 7 changed all that and shipped with all of its tables using the <a href="http://drupal.stackexchange.com/questions/20893/drupal-database-innodb-or-myisam" target="_blank">InnoDB </a>database engine. Each one with its own <a href="https://www.drupal.org/node/1553474" target="_blank">strengths and weaknesses</a> but it&#8217;s quite clear that InnoDB will probably perform better for your Drupal site (though it has quite a bit of fine tuning configuration to be tweaked on my.cnf).</p>
|
|||
|
<p>Some modules, whether on Drupal 6, or those on Drupal 7 that simply upgraded but didn&#8217;t quite review all of their code, might ship with queries like <a href="http://www.percona.com/blog/2006/12/01/count-for-innodb-tables/" target="_blank">SELECT COUNT() which if you have migrated your tables to InnoDB (or simply using Drupal 7) then this will hinder on database performance</a>. That&#8217;s mainly because InnoDB and MyISAM work differently, and where-as this proved as quite a fast responding query being executed on a MyISAM database which uses the main index to store this information, for InnoDB the situation is different and will result in doing a full table scan for the count. Obviously, on an InnoDB configuration running such queries on large tables will result in very poor performance</p>
|
|||
|
<p><a href="http://enginx.com/wp-content/uploads/2014/11/drupal_perf-5.png"><img class="aligncenter size-full wp-image-513" src="http://enginx.com/wp-content/uploads/2014/11/drupal_perf-5.png" alt="drupal_perf-5" width="535" height="256" /></a></p>
|
|||
|
<p>Note to ponder upon &#8211; what about the Views module which uses similar type of COUNT() queries to create the pagination for its views?</p>
|
|||
|
|
|||
|
<!-- Easy AdSense V7.43 -->
|
|||
|
<!-- [leadout: 1 urCount: 1 urMax: 0] -->
|
|||
|
<div class="ezAdsense adsense adsense-leadout">
|
|||
|
<!-- enginx-blog-wide-post -->
|
|||
|
<ins class="adsbygoogle"></ins>
|
|||
|
</div>
|
|||
|
<!-- Easy AdSense V7.43 -->
|
|||
|
<p>The post <a rel="nofollow" href="http://enginx.com/blog/drupal-performance-tip-im-young-die-know-db-engines/">Drupal Performance Tip &#8211; &#8220;I&#8217;m too young to die&#8221; &#8211; know your DB engines</a> appeared first on <a rel="nofollow" href="http://enginx.com">Liran Tal&#039;s Enginx</a>.</p></content>
|
|||
|
<author>
|
|||
|
<name>Liran Tal</name>
|
|||
|
<uri>http://enginx.com</uri>
|
|||
|
</author>
|
|||
|
<source>
|
|||
|
<title type="html">Liran Tal's Enginx » opensource</title>
|
|||
|
<subtitle type="html">Liran is 31 years old, leader of open source projects and avid community advocate. Entrepreneur at heart, married to his soul-mate Tal.</subtitle>
|
|||
|
<link rel="self" href="http://enginx.com/tag/opensource/feed/"/>
|
|||
|
<id>http://enginx.com/tag/opensource/feed/</id>
|
|||
|
<updated>2014-12-15T07:17:04+00:00</updated>
|
|||
|
</source>
|
|||
|
</entry>
|
|||
|
|
|||
|
<entry xml:lang="he-IL">
|
|||
|
<title type="html">צריבה של ROM עבור Galaxy S1 i9000 מלינוקס</title>
|
|||
|
<link href="http://cucomania.mooo.com/he/posts/352/%d7%a6%d7%a8%d7%99%d7%91%d7%94-%d7%a9%d7%9c-rom-%d7%a2%d7%91%d7%95%d7%a8-galaxy-s1-i9000-%d7%9e%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1"/>
|
|||
|
<id>http://cucomania.mooo.com/?p=352</id>
|
|||
|
<updated>2014-12-15T06:28:39+00:00</updated>
|
|||
|
<content type="html"><p>בפוסט קודם הסברתי על אודות מחיצות באנדרויד. &quot;הקהילה&quot; קוראת לאסופה של ה־images של המחיצות הללו בתור ROM. אין הרבה הסברים באינטרנט שמסבירים איך לצרוב מכשירי Galaxy S i9000 בעברית בלינוקס. אז &#8211; מעכשיו יש.</p>
|
|||
|
<ol>
|
|||
|
<li>תורידו את ה־ROM־ים המקוריים של החברה המתאימה לכם. אין בעייה גדולה לשים רום של חברה אחרת. אם זה לא עובד, אפשר לצרוב את המודם המתאים. באתר של iAndroid יש קישורים להורדה: <a href="http://iandroid.co.il/forum/viewtopic.php?f=42&amp;t=18962">http://iandroid.co.il/forum/viewtopic.php?f=42&amp;t=18962</a></li>
|
|||
|
<li>הקבצים שתורידו הם self extracting exe לחלונות. אצלי <a href="https://www.winehq.org/">wine</a> עשה את מלאכתו נאמנה והקבצים שנוצרו וחתימות ה־MD5 הם (קבצי ה־exe הם ממש ישנים, ייתכן ועכשיו יש קבצים עם חתימה שונה, מה שחושב זה קבצי ה־tar שנוצרים מהם):
|
|||
|
<pre dir="ltr">82d5a5fffd1fea566aab7fe39522aa2c I9000.Cellcom.JIJVG.exe
|
|||
|
0cb6ef26ce3076c5b3ffde7cb2ad2a1a I9000.Partner.JHJVG.exe
|
|||
|
254ef10b0ddacfeabc44cf547082e856 I9000.Pelephone.JJJVB.exe
|
|||
|
eedb05d074db2026b38c8f00ca18f935 Cellcom.JIJVG.tar
|
|||
|
33535d9aff3e39d04b0cc504ac389b51 Pelephone.JJJVB.tar
|
|||
|
7d593eae36a2d5151e6a84454c739827 Partner.JHJVG.tar</pre>
|
|||
|
</li>
|
|||
|
<li>עכשיו צריך לפתוח את אחד הקבצים, בתוך ספרייה חדשה (לדוגמה):
|
|||
|
<pre dir="ltr"> mkdir open-android-firmware
|
|||
|
cd open-android-firmware
|
|||
|
tar xf ../Cellcom.JIJVG.tar</pre>
|
|||
|
</li>
|
|||
|
<li>כדי לצרוב צריך גם קובץ pit שמגדיר את מבנה המחיצות. חיפוש ברשת אחר <a href="http://www.lmgtfy.com/?q=s1_odin_20100512.pit">s1_odin_20100512.pit</a> תניב קובץ שהתחימה שלו היא 1d927b36d2fa807a22e64fc86b445130</li>
|
|||
|
<li>צריך גם קובץ שמגדיר dbdatafs, הוא נקרא גם PDA (אין לי שמץ של מושג מה זה). אותו אפשר להוריד מכאן: <a href="http://forum.xda-developers.com/showthread.php?t=2184403">http://forum.xda-developers.com/showthread.php?t=2184403</a> החתימה של מה שהורדתי היא 868b81b9e28d30c82a00038d29e65d8c</li>
|
|||
|
<li>הצריבה תיעשה על ידי תוכנה heimdall. היא זמינה מהמאגרים החופשיים של דביאן. להתקנה:
|
|||
|
<pre dir="ltr"> sudo apt install heimdall-flash</pre>
|
|||
|
</li>
|
|||
|
<li><span><strong>אופציונאלי</strong></span>: אני לא אוהב להשתמש ב־root, ולכן הגדרתי חוק udev שהמכשיר יהיה ניתן לתכנות גם בעזרת המשתמש שלי. צריך רק לדאוג שהמשתמש יהיה תחת הקבוצה plugdev ואז החוק הבא יעבוד (זה גם טוב לעבודה מול adb בתור משתמש רגיל, ולכן מומלץ).השורה אחרונה מתאימה לגלקסי, האחרות לנקסוס וואללה, לא זוכר <img src="http://cucomania.mooo.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" />
|
|||
|
<pre dir="ltr">elcuco@pinky ~ $ cat /etc/udev/rules.d/51-android.rules
|
|||
|
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
|
|||
|
SUBSYSTEM=="usb", ATTR{idVendor}=="681c", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"</pre>
|
|||
|
</li>
|
|||
|
<li>בשלב זה נשים את המכשיר במצב download. תוציאו את המכסה האחורי,ואז תוציאו את הסוללה (פשוט לתת מכה והיא יוצאת). תכניסו מחדש את הסוללה ואז ללחוץ על השילוש הקדוש: מקש הבית, כפתור שמע תחתון וכפתור ההדלקה. <a href="https://www.tinhte.vn/threads/huong-dan-up-room-root-galaxy-win-i8552.2132717/">על הצג יהיה אנדרויד צהוב</a>.<br />
|
|||
|
<span><strong>המלצה:</strong></span> לא לשים את המכסה אחורי. יהיה יותר קל להוציא את הסוללה ולהתחיל מההתחלה, ואני מבטיח שיהיה צורך בזה <img src="http://cucomania.mooo.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></li>
|
|||
|
<li>כעת פשוט מפעילים את הפקודה הבאה (אני שמרתי אותה בתסריט בשם flash-all.sh)
|
|||
|
<pre dir="ltr">heimdall flash --repartition \
|
|||
|
--pit s1_odin_20100512.pit \
|
|||
|
--FACTORYFS factoryfs.rfs \
|
|||
|
--CACHE cache.rfs \
|
|||
|
--DBDATAFS dbdata.rfs \
|
|||
|
--IBL+PBL boot.bin \
|
|||
|
--SBL Sbl.bin \
|
|||
|
--PARAM param.lfs \
|
|||
|
--KERNEL zImage \
|
|||
|
--MODEM modem.bin</pre>
|
|||
|
</li>
|
|||
|
<li>זהו. הצריבה לוקחת כמה דקות ואחרי המכשיר עולה כמו חדש.</li>
|
|||
|
</ol>
|
|||
|
<p>שימו לב לאותיות הגדולות. הטקסט הזה מגדיר את שמות המחיצות כפי שמוגדרות בקובץ pit שבחרתם (תפתחו אותו בעורך טקסט ותבינו). אני מניח שאם נשנה את שמות המחיצות לאותיות קטנות נוכל לשנות את הפקודה שתהיה באותיות קטנות. אם מישהו בודק את זה &#8211; תכתוב את זה בתגובות, זה יהיה נחמד לדעת.</p>
|
|||
|
<p><span>המלצות נוספות:</span></p>
|
|||
|
<ol>
|
|||
|
<li>אל תנסו את זה בחלונות. צריך להשתמש בתוכנה odin שאין לי מושג מה היא עושה מי כתב אותה. זאת הדלפה של מישהו ואני לא סומך על קוד של מישהו אחר במחשב שלי. התוכנות שיש בלינוקס נבדקו והן קוד פתוח, אני סומך עליהן יותר.</li>
|
|||
|
<li>תוודאו את החתימות (md5 במיקרה של מה שאני נותן כאן).</li>
|
|||
|
<li>כמה שיותר מהר נסו לשים רום אלטרנטיבי. <a href="https://download.cyanogenmod.org/?device=galaxysmtd">cyanogenmod</a> הוא בסדר גמור. אני חושב ש־<a href="http://redmine.replicant.us/projects/replicant/wiki/GalaxySI9000">Replicant</a> יהיה יותר טוב &#8211; אבל לא בדקתי אישית, והוא לא זמין לכל מכשיר.</li>
|
|||
|
<li>על מכשיר ישן זה, לא הייתי ממליץ על gapps כלל. אני השתמשתי ב־<a href="https://f-droid.org/">FDroid</a> והשלמתי כמה תוכנות עם <a href="http://m.aptoide.com/installer">Aptoid</a>. האחרון מפוקפק משהו&#8230; אבל זאת פשרה שאני נאלץ לחיות איתה.</li>
|
|||
|
<li>כדי להחליף מודם, יש לשים את המכשיר במצב download ולצרוב בעזרת הפקודה הבאה (את המודם צריך לקחת מהרום המתאים):
|
|||
|
<pre dir="ltr">heimdall flash --MODEM modem.bin</pre>
|
|||
|
</li>
|
|||
|
<li>אם דילגת על השלב של udev פשוט לשים sudo לפני כל פקודה.</li>
|
|||
|
</ol>
|
|||
|
<p><span>שאלות שנותרו לי ללא מענה:</span></p>
|
|||
|
<ol>
|
|||
|
<li>מה התוכן של dbdata.rfs ומה המטרה של המחיצה הזאת.</li>
|
|||
|
<li>מה זה param.lfs.</li>
|
|||
|
</ol>
|
|||
|
<p>תזכורת: <a title="מחיצות באנדרואיד" href="http://cucomania.mooo.com/he/posts/349/%d7%9e%d7%97%d7%99%d7%a6%d7%95%d7%aa-%d7%91%d7%90%d7%a0%d7%93%d7%a8%d7%95%d7%99%d7%93">מחיצות באנדרויד</a></p></content>
|
|||
|
<author>
|
|||
|
<name>Diego Iastrubni</name>
|
|||
|
<uri>http://cucomania.mooo.com</uri>
|
|||
|
</author>
|
|||
|
<source>
|
|||
|
<title type="html">עברית בלינוקס » המקור</title>
|
|||
|
<subtitle type="html">משתמש לינוקס ממוצע, בערך</subtitle>
|
|||
|
<link rel="self" href="http://cucomania.mooo.com/he/category/hamakor/feed"/>
|
|||
|
<id>http://cucomania.mooo.com/he/category/hamakor/feed</id>
|
|||
|
<updated>2014-12-15T06:33:44+00:00</updated>
|
|||
|
</source>
|
|||
|
</entry>
|
|||
|
|
|||
|
<entry xml:lang="he">
|
|||
|
<title type="html">האקינג לראוטר, או איך להפוך ראוטר לקוד פתוח</title>
|
|||
|
<link href="http://idkn.wordpress.com/2014/12/11/router-hacking/"/>
|
|||
|
<id>http://idkn.wordpress.com/?p=7265</id>
|
|||
|
<updated>2014-12-14T08:15:49+00:00</updated>
|
|||
|
<content type="html"><p><a href="http://idkn.wordpress.com/2009/03/20/%D7%A6%D7%A2%D7%93-%D7%A7%D7%98%D7%9F-%D7%9C%D7%90%D7%95%D7%A4%D7%9F-%D7%9E%D7%95%D7%A7%D7%95-%D7%A6%D7%A2%D7%93-%D7%92%D7%93%D7%95%D7%9C-%D7%9C%D7%A2%D7%99%D7%93%D7%95/">לפני מספר שנים, רכשתי מדורון OpenMoko</a>, ועשיתי עליו מספר פעולות האקינג די נחמדות בשביל לשלוט בטלפון כמו שאני רוצה, או למעשה במודם סלולרי, ושאר הרכיבים, כולל כתיבה של מספר תוכנות ממש קטנות לעצמי, רק כהוכחת יכולת ולא מעבר.</p>
|
|||
|
<p>מאז לא היו לי אתגרים באמת מעניינים בנושא ההאקינג של מכשירים, עד שרכשתי את WDR4300 של TP-Link והחלטתי שאני לא אוהב את הרעיון שאין לי שליטה על הראוטר שלי.</p>
|
|||
|
<p>גיליתי שאני מוגבל, היות ובמדינת ישראל יש הגבלת תדרים על ידי משרד הביטחון (ולא משרד התקשורת) &#8211; WTF ?!<br />
|
|||
|
אז בגלל זה אני למשל לא הייתי יכול לעדכן את הראוטר לגרסה חדשה יותר של TP-Link, כי אין להם הורדה של גרסה &quot;ישראלית&quot; המגבילה תדרים (מצטער אבל זה הזוי).</p>
|
|||
|
<p>אז התקנתי openwrt, ופתאום נזכרתי לטובה במוקו, אשר דרש ממני קצת האקינג בשביל לגרום לו לעבוד.<br />
|
|||
|
מצאתי את עצמי ב7 בערב עד 1 לפנות בוקר מתאים אותו לצרכים שלי.</p>
|
|||
|
<p>זה כיף להיכנס למכשיר דרך telnet ולהתחיל להגדיר את הפצת הלינוקס כפי שאתה רוצה. וזה עוד יותר כיף, כשמערכת החבילות זהה למוקו <span class="wp-smiley wp-emoji wp-emoji-smile" title=":)">:)</span> .<br />
|
|||
|
אחרי שאתה מגדיר סיסמה ל root, ה telnet מתבטל, ואתה חייב לעבוד עם ssh, שגם עברה מספר שיפצורים על ידי.</p>
|
|||
|
<p>אני קיבלתי את הראוטר עם חומרה v1.7, שזה השיפצור האחרון של tplink (נכון לכתיבת הפוסט הזה) בנושא החומרה, ונראה שהכל עובד מהקופסא, אחרי שאפשרתי מספר דברים <span class="wp-smiley wp-emoji wp-emoji-smile" title=":)">:)</span></p>
|
|||
|
<p>זו פעם ראשונה שאני עובד עם אחד מפרוייקטי wrt, ואת האמת, אני נהנה מכל שניה, עם המשחקים האלו, אבל בסופו של דבר, אם הראוטר לא עובד ועושה את העבודה, הוא לא שווה הרבה.</p>
|
|||
|
<p>אבל כאן הוא עושה בדיוק מה שאני רוצה, כמו שאני רוצה, בלי שמתערבים לי בו.<br />
|
|||
|
המטרה של הראוטר להחליף את הראוטר שבזק מספקים, היות ואם אגיד שהוא זבל, אתן לזבל שם רע.</p>
|
|||
|
<p>הראוטר של בזק מנתק את ה wifi כל כמה זמן לכמה שניות. כלומר את המכשירים המחוברים אליו.<br />
|
|||
|
מדפסת הרשת שלי, משום מה לא עובדת כמו שצריך עם הראוטר הזה, אבל הכי גרוע זה ה <a href="http://en.wikipedia.org/wiki/TR-069">TR-069</a> שיש בראוטר ואני לא יכול לבטל אותו, הוא סוג של back-door לכל הראוטרים האלו, המאפשרים לבזק לבצע provision מרחוק, אבל מסכנים את הראוטר לחלוטין.</p>
|
|||
|
<p>אז אחרי הרבה התלבטויות, הגיע הזמן פשוט לעבוד עם ראוטר טוב ואיכותי במקום, שאני יכול להחליט עליו כל דבר שרק ארצה, וכמובן שזה מה ש open-wrt מאפשר לי.</p>
|
|||
|
<p>אני יכול לבצע אפילו התקנת freeswitch עליו, מגרסת הפיתוח (משום מה), שלא לדבר על אסטריסק, או <a href="http://yate.null.ro/pmwiki/">yate</a>.<br />
|
|||
|
התקנה של מרכזיה כדוגמת freeswitch למשל, מאפשרת אם מתבצעת נכון, להעביר את הכוח לסוג של DMZ, שמוגן מתקיפות למינהן, אבל כן מסוגל לבצע שיחות.<br />
|
|||
|
אך אין לי כוונה להתקין מרכזיה כלשהי על הראוטר.<br />
|
|||
|
אם זה לא מספיק, אני יכול גם להתקין את Kamailio מסדרת שלוש וסדרת ארבע, מה שאומר שאני גם יכול לקבל SIP Proxy שאני יכול לתכנת כפי שאני רוצה, אך גם כאן, זה לא יהיה מה שאעשה.</p>
|
|||
|
<p>פשוט כיף הכוח שאתה מקבל חזרה לציוד שאתה רוכש לעצמך, ואמנם אינני אוהב שיש ריבוי חוקים, למעט חוקים שנועדו לאזן את החיים, אך לדעתי חוק אשר מחייב כל יצרן חומרה בסגנון ראוטרים, טלפונים וכיוב', לאפשר לבצע מה שרוצים על החומרה עצמה, יעשה רק טוב.</p>
|
|||
|
<p>בכל מקרה, אני מאוד נהנה <span class="wp-smiley wp-emoji wp-emoji-smile" title=":)">:)</span></p><br />תויק תחת:<a href="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%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/asterisk/">asterisk</a>, <a href="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%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/freeswitch/">freeswitch</a>, <a href="http://idkn.wordpress.com/category/kamailio/">kamailio</a>, <a href="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%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/%d7%a1%d7%9c%d7%95%d7%9c%d7%a8%d7%99/openmoko/">OpenMoko</a>, <a href="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/">Operating Systems</a>, <a href="http://idkn.wordpress.com/category/yate/">yate</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%97%d7%95%d7%9e%d7%a8%d7%94/">חומרה</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/">טכנולוגיה</a>, <a href="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%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/">טלפוניה</a>, <a href="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/">לינוקס</a>, <a href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/">קוד פתוח</a>, <a href="http://idkn.wordpress.com/category/%d7%a8%d7%90%d7%95%d7%98%d7%a8%d7%99%d7%9d/">ראוטרים</a>, <a href="http://idkn.wordpress.com/category/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/">רשתות</a>, <a href="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/">תוכנה</a> Tagged: <a href="http://idkn.wordpress.com/tag/freeswitch/">freeswitch</a>, <a href="http://idkn.wordpress.com/tag/hardware-hacking/">hardware hacking</a>, <a href="http://idkn.wordpress.com/tag/kamailio/">kamailio</a>, <a href="http://idkn.wordpress.com/tag/openwrt/">openwrt</a>, <a href="http://idkn.wordpress.com/tag/tr-069/">tr-069</a>, <a href="http://idkn.wordpress.com/tag/wdr4300/">wdr4300</a>, <a href="http://idkn.wordpress.com/tag/wrt/">wrt</a>, <a href="http://idkn.wordpress.com/tag/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/">לינוקס</a>, <a href="http://idkn.wordpress.com/tag/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/">קוד פתוח</a>, <a href="http://idkn.wordpress.com/tag/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/">רשתות</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/idkn.wordpress.com/7265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/idkn.wordpress.com/7265/" /></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=idkn.wordpress.com&#038;blog=3104636&#038;post=7265&#038;subd=idkn&#038;ref=&#038;feed=1" width="1" height="1" /></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>
|
|||
|
|
|||
|
</feed>
|