פודקסטים מומלצים

מזמן לא המלצתי על כמה פודקסטים, אז הנה רשימה של פודקסטים, למעט TWit שממשיך וממשיך את כולם שמעתי במלואם.

Crescent
פיל רוסי (Phil rossi)
מדע בדיוני, אימה.
סיפור מפחיד ומסתורי, תחנת החלל קרסנט רדופת.. משהו.
לא לילדים ולנשים בהריון.
פיל רוסי גם כותב ומפיק את המוסיקה המצויינת שמלווה את הפודקסט.

The Arwen
טימות'י קלאהאן.
מדע בדיוני, הרפתקאות
שביט בגודל ירח קטן עומד לפגוע בעולם מאוכלס על ידי חיזרים, ברית כדור הארץ שולחת את הספינה הטובה ביותר שלה להשמיד את השביט.

Nocturnal
סקוט סיגלר
מדע בדיוני, מתח.
משהו מתגורר מתחת לרחובות סן פרנסיסקו, והוא כבר כבר מאות שנים.
המשהו הזה התחיל להרוג, ושני בלשים חוקרים את הרציחות.

The hacker crackdown
ברוס סטרלינג, נקרא על ידי קורי דוקטורו.
תיעודי.
הסיפור של קרן החזית האלקטרונית (EFF) ושרשרת האירועים שהובילה להקמתה, שהתחילה פחות או יותר במעצר המוני של האקרים בעקבות קריסת מערכת הטלפונים בארצות הברית ב1991.

TWiT
twit
ליאו לפורט, פטריק נורטון קווין רוס וג'ון דבורק (שלא ממש משתתף למרבה המזל) – לשעבר מטק-טיוי – מפיקים כמות מפחידה של נטקסטים (כמו פודקסט, רק שאפשר לשמוע גם בלי אי-פוד 🙂 ), במגוון רחב מאוד של נושאים שקשורים למחשבים, לטכנולוגיה, לקוד פתוח, לגדג'טים ועוד.
כדאי להתמקד במספר מצומצם של פודקסטים כי הם יוצאים יותר מהר ממה שאתם יכולים לשמוע אותם במסגרת הזמן הפנוי שלכם.
ליאו לפורט יודע על מה הוא מדבר, והוא מביא אנשים מעניינים מאוד לתוכניות (בתוכנית האחרונה ששמעתי הוא הביא את ג'ונתן קולטון, שכתב את השיר Code monkey ואת שיר הסיום של פורטל – Still alive).
מומלץ מאוד.

דקסטר

אחת הסדרות שלקחתי איתי לסיאטל בהמלצה של חבר היא דקסטר.
לקחתי את כל העונה הראשונה, וראיתי את הפרק האחרון בטיסה חזרה.
הגיבור הראשי בסדרה הוא.. תחזיקו – רוצח סדרתי בשם דקסטר מורגן (מייקל סי האל ששיחק את דיויד פישר בSix feet under).
דקסטר אומץ בגיל שלוש על ידי שוטר בשם הארי מורגן, שזיהה שיש בו דחפים אפלים, ולימד אותו לנתב אותם לכיוונים חיוביים כמו למשל שיסוף גרונם של רוצחים שטובחים בחפים מפשע.
דקסטר עובד במשטרת מיאמי בתור מנתח תבניות דם, מה שנותן לו גישה למידע וכלים שעוזרים לו למצוא קורבנות.
הסדרה מומלצת, אבל ממש לא לרכי לבב.
בקרוב בערוץ האינטרנט הקרוב לביתכם.

Wii

כבר בטיול האחרון להולנד וגרמניה חשבתי לקנות Nintendo Wii, אבל פשוט אי אפשר היה למצוא Wii באף חנות.
חצי שנה אחר כך, בחג המולד, המצב לא יותר טוב: למעשה, הוא יותר גרוע:
מי שרוצה לקנות Wii בחנות, יכול להרשם ולקבל אותו ב21 בינואר, שזה כמה שבועות אחרי שאני חוזר.
למזלי, השותף שלי לנסיעה – יניב – היה ממש לחוץ על Wii, והסכים לחפש בנרות בתנאי שאני אקנה אם הוא מוצא.
הוא גילה כמה אתרים שמתמחים בחיפושיי Wii, כשהמעניין בהם הוא wii.FindNearBy.net שמאפשר חיפוש עם אינטגרציה לגוגל מפות ולכמה רשתות מאוד משמעותיות (Ebay, אמזון, וולמארט, Target וכו').
במילים אחרות:
תמצא לי כל מי שמוכר Wii ברדיוס של 25 מיילים (או כל מרחק אחר) ממני.
מצאנו ככה Wii ב315$ בEbay, ובאותו יום נפגשתי עם המוכר בקניון South center שנמצא במרחק חמש דקות נסיעה מהמלון, והכסף החליף ידיים, וגם הWii. על הדרך קניתי בקניון את Super mario galaxy לWii, כדי שיהיה מה לשחק.
הWii ממש חדש, והגיע עם הניילונים בקופסא. מסתבר שהילדים שם רצו נורא PS3 לקריסמס, ופניהם נפלו למראה הWii.
החוויה של קניה באיביי בארצות הברית שונה לגמרי מאשר בארץ, ולו בגלל שקל מאוד למצוא מישהו שמוכר מה שאתם רוצים בקרבתכם. ההבדל משמעותי מאוד: במקום לשלם מחיר מופקע כדי לקבל את זה בדואר איטי לארץ, נפגשים באיזה מקום ואוספים את הרכש במהירות.

למרבה הצער, הטלוויזיה במלון מצו'קמקת למדי ואין לה חיבורים RCA מתאימים, אז לא יצא לי לבדוק את הרכש החדש, אבל הזמן לזה יגיע :).
הWii שלי צורך במתח ב110 וולט, ואני עדיין מחפש פתרון לזה:
או שאני אקנה פה ספק כוח שמתאים גם ל220 וולט (קצת קשה למצוא פה), או שאני אקנה בארץ ממיר 220 -> 110 וולט.
בכל מקרה, אני לא מודאג – הבעיה הזו פתירה.

בקרוב אצלי בסלון:

איך להוציא RSS מאתר שלא תומך בRSS?

לפני כמה שבועות הפיד RSS של TorrentLeech (להלן TL), ספק הסדרות העיקרי שלי, התחיל להחזיר 404 (דף לא נמצא).
אין פה שום דבר חדש, הפיד הזה אף פעם לא היה יציב במיוחד, לכן חיכיתי בסבלנות כשבוע, ואז התלוננתי בערוץ הIRC שהלינק של הפיד לא עובד.
גורם "רשמי" מסר לי שהפיד לא יחזור כי השתמשו בו לרעה.
ניסיתי לברר את פשר השימוש הפוחז, ואפילו הצעתי את עזרתי במציאת פיתרון, אך לשוא:
הילדון זב החוטם מסר שלא משנה מה אני אגיד או אעשה, הפיד לא חוזר.
הסברתי לו בדרכי נועם שאם המידע זמין באתר, אין שום הבדל כי אפשר להפוך אותו לפיד, אבל זה לא עזר.
אז החלטתי לעשות בדיוק את זה, וכך נולדה תוכנה חדשה – TorrentLeech2RSS.

בגדול, הרעיון הוא כזה:
שרת מקומי דוגם את TL, נניח פעם בחצי שעה.
השרת נכנס לTL, מזדהה עם שם המשתמש והסיסמא של המשתמש בTL, מוריד את דף הHTML שמכיל את רשימת הטורנטים בכל אחת מהקטגוריות הנבחרות, מפענח את הדף, ומחלץ ממנו את השם, הלינק, המזהה והתאריך של כל טורנט, ושומר אותם בזכרון.
במקום להשתמש בכתובת הRSS של TL (שאינה עימנו עוד), המשתמש מכניס כתובת של TorrentLeech2RSS, שמכין דף RSS ומחזיר אותו למבקש.
TorrentLeech2RSS גם משכתב את הלינקים בתוך הRSS שיעברו דרכו, כדי שיוכל להוסיף פרטי הזדהות שיעברו לשרת של TL ברגע שהמשתמש מנסה להוריד טורנט (אחרת הTracker של TL לא משתף פעולה עם המשתמש).

בחרתי לכתוב את tl2rss בשפת ג'אווה.
הצעד הראשון, וכנראה הכי קשה בתהליך, הוא להכנס תכנותית לאתר, התהליך מורכב יחסית וכולל כמה שלבים.
כדי להבין מה אני אמור לשלוח ומתי, השתמשתי בWireShark, וניטרתי את התעבורה שנוצרת כשאני מבצע לוגין בעזרת הדפדפן.
שימו לב במיוחד לאפשרת של Follow TCP Stream, שמציגה שיחת HTTP שלמה בצורה ברורה.
ברגע שהקוד הצליח להזדהות מול השרת, לבקש דף שמתאים לקטגוריה רלוונטית זה קל. אבל מה עושים עם הדף?
הדפים של TorrentLeech הם דוגמא לאיך נראה קוד HTML מבולגן ולא תקני, ערבוביה של תגיות HTML שכוללות תוכן, עיצוב ועימוד.
בקיצור, לא משהו שכיף במיוחד לחפוש בתוכו אחרי מידע.
הגישה הנאווית לבעיות כאלו היא שימוש בביטוי רגולרי, אבל זה לא יעבוד טוב בכל המקרים (מה קורה למשל אם יש HTML בתוך התאור של הטורנט?).
בחרתי ללכת לגישה טיפה יותר חזקה, והיא פירוק מלא של הHTML למבנה נתונים בזכרון, וניתוח של אותו מבנה.
ספרית ג'אווה שמאפשרת parsing כזה לHTML היא htmlparser הוותיקה.
אבל גם אם htmlparser מחזירה לנו עץ אובייקטים נוח, איך מוציאים ממנו את מה שמעניין? הוא ענק וסבוך ויותר מכל מסובך.
למזלי מצאתי בונה פילטרים ויזואלי עם htmlparser. אפשר להריץ אותו עם Java web start:
[code]
javaws http://htmlparser.sourceforge.net/samples/filterbuilder.jnlp
[/code]
או פשוט להריץ את הקוד ישירות (org.htmlparser.parserapplications.filterbuilder.FilterBuilder). עורך הפילטרים מאפשר ליצור פילטרים מורכבים בהדרגתיות תוך בדיקה מתמדת של התוצאה על דף הHTML שאתם רוצים לבדוק.
אזהרה: הוא לא הכי ידידותי בעולם, לוקח זמן להתרגל אליו – אבל הוא עובד.
לדוגמא, נניח שאנחנו רוצים לחלץ את רשימת השחקנים מהסרט ביוולף בIMDB.
קודם נכניס בשורה התחתונה את הURL, אחר כך נלחץ על fetch page, ואז נקבל את הHTML כעץ בחלק הימני.
filterbuilder-1.png

ברגע שיש לנו את הHTML, נתחיל לפלטר. חיפוש קצר אחרי שם של אחד השחקנים (Musician #2) מצא את הטבלא, ולמרבה הנוחות אפשר לראות שclass הCSS שלה הוא cast. זה מצויין, כי זה יאפשר לנו לדוג את הטבלא בקלות:

נוסיף פילטר של תכונות (attributes), נכניס בו את התכונה class עם הערך cast.
קליק ימני על הפילטר, execute filter, ונקבל חלון קטן בצד ימין עם התוצאות.
בינגו, יש לנו את הטבלה.
filterbuilder-2.png

אבל אנחנו רוצים רק את רשימת השחקנים, אז צריך לעדן את הפילטר.
נוסיף שאנחנו רוצים רק טגים בשם TR, שיש להם הורה שהוא טבלא עם תכונה של class שערכו cast:
filterbuilder-3.png

אפשר להמשיך, אבל הרעיון – אני מקווה – ברור.
ברגע שאנחנו מרוצים מהפילטר שיצרנו, אפשר לשמור אותו.
זה מה שיוצא (גרסא מקוצרת):
[code lang="java"]

// Generated by FilterBuilder. http://htmlparser.org
// [aced0005737200206f…….17374]

import org.htmlparser.*;
import org.htmlparser.filters.*;
import org.htmlparser.beans.*;
import org.htmlparser.util.*;

public class imdb
{
public static void main (String args[])
{
TagNameFilter filter0 = new TagNameFilter ();
filter0.setName ("TR");
HasAttributeFilter filter1 = new HasAttributeFilter ();
filter1.setAttributeName ("class");
filter1.setAttributeValue ("cast");
HasParentFilter filter2 = new HasParentFilter ();
filter2.setRecursive (false);
filter2.setParentFilter (filter1);
NodeFilter[] array0 = new NodeFilter[2];
array0[0] = filter0;
array0[1] = filter2;
AndFilter filter3 = new AndFilter ();
filter3.setPredicates (array0);
NodeFilter[] array1 = new NodeFilter[1];
array1[0] = filter3;
FilterBean bean = new FilterBean ();
bean.setFilters (array1);
if (0 != args.length)
{
bean.setURL (args[0]);
System.out.println (bean.getNodes ().toHtml ());
}
else
System.out.println ("Usage: java -classpath .:htmlparser.jar:htmllexer.jar imdb ");
}
}
[/code]
בראש הקובץ יש קידוד של הפילטר, מה שמאפשר לנו לטעון את הקובץ ולהמשיך לעבוד עליו מאותה נקודה.
כדי לקמפל את זה צריך כמובן את htmlfilter.jar בclasspath.

טוב, אז נניח שכתבנו פילטר מתאים, וגיבינו אותו בקצת קוד שמוציא את הנתונים לרשימה נוחה.
איך הופכים את זה לRSS?

בקלות, בעזרת ספרית ג'אווה בשם Rome.
השימוש ברומא פשוט מאוד, הנה דוגמא:
[code lang="java"]
public String getListRSS() throws FeedException
{
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType("rss_2.0");
feed.setTitle("My RSS!");
feed.setLink("http://firefang.net/blog/768");
feed.setDescription("A feed for you!");
List entries = new ArrayList();
feed.setEntries(entries);

Vector v = new Vector();
v.add("item1");
v.add("item2");
v.add("item3");

for (int i = 0; i < v.size(); i++) { SyndEntry entry = new SyndEntryImpl(); entry.setTitle((String) v.elementAt(i)); entry.setLink("http:://imdb.com/"); entries.add(entry); } SyndFeedOutput output = new SyndFeedOutput(); return output.outputString(feed); } [/code] שמפיקה את הRSS הזה: [code lang="xml"]


My RSS! http://firefang.net/blog/768 A feed for you!

item1 http:://imdb.com/ http:://imdb.com/


item2 http:://imdb.com/ http:://imdb.com/


item3 http:://imdb.com/ http:://imdb.com/



[/code]

אז עכשיו שאנחנו יודעים לקחת דף HTML ולהוציא ממנו טקסט של RSS, נשאר רק לאפשר לקורא RSS רגילים לגשת אליו.
הדרך הטבעית תהיה להריץ שרת ווב קטן, שיגיש את קובץ הRSS למי שמבקש.
בחרתי להשתמש בJetty, שהוא שרת ווב קטן וגמיש בג'אווה, שמאפשר גם שילוב פשוט וקל בתוך אפליקציות אחרות.
לא להבהל מגודל ההורדה שלו, כדי להשתמש בו בתוך האפליקציה שלכם מספיק לקחת שלושה Jarים בגודל כולל של כ700K.
ככה משלבים את Jetty בתוך הישום שלכם, שימו לב כמה שזה פשוט.
[code lang="java"]
Handler handler=new AbstractHandler()
{
public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
throws IOException, ServletException
{
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("

Hello

");
((Request)request).setHandled(true);
}
}

Server server = new Server(8080);
server.setHandler(handler);
server.start();
[/code]

כדי לגשת אליו, נפתח את הדפדפן על http://localhost:8080 במקרה שלנו.
עכשיו רק נשאר לקשור את החוטים ביחד.

פתחתי בלוג קטן לפרוייקט, וחיש מהר החשבון שלי בTorrentLeech הושעה. כשביררתי מה הסיפור נאמר לי שהם חוששים שאני אגנוב למשתמשים סיסמאות.
הצעתי להם לבדוק את הקוד, ושעד אז אני אוריד את הלינק, וכך עשיתי, והחשבון שלי שוחזר.
בינתיים הם עדיין לא חזרו אלי, והסבלנות קצת פקעה.
מי שרוצה להוריד את הקוד יכול להוריד אותו מפה עם לקוח Subversion.
מי שרוצה להוריד את הבינארי מוזמן להוריד אותו מפה.
יש הוראות שימוש בתוך קובץ הREADME.
tl2rss משוחרר תחת רשיון GPL-3.0.

ספויילראנוס בשבע דקות

מי שלא ראה את סופראנוס, לא להריץ ולא לקרוא את התגובות, לכו לראות את הסדרה. שלושה חודשים – זוז!
מי שכן, ויגיד איזה פרט עלילה חשוב מאוד חסר פה יזכה בתהילת עולם.

קלינגר, תגיד – זה שימוש הוגן? 🙂

Sansa e280 וRockbox

כמו שאמרתי, קניתי נגן MP3 נייד, Sansa e280 עם 8 ג'יגה זכרון פלאש ותמיכה ברדיו.
התקנתי עליו את הנגן פתוח הקוד, Rockbox, ואני מרוצה.
רוקבוקס תומך בכל מה שאני צריך מבחינת שמישות, וגם בכמה דברים שאני לא ממש צריך, כמו משחק דום :).
יש לו סייר קבצים שמאפשר לעיין בקבצים בקלות, למחוק, להזיז וליצר רשימות ניגון.
בנוסף, הוא מגיע עם די הרבה פלאינים, תוכנות פשוטות (מטרונום למשל, שמאפשר לשמור על קצב הליכה קבוע) וערכות נושא.
במבט ראשון רוקבוקס נראה די מכוער, במיוחד אחרי שרואים את התוכנה המקורית שמגיעה עם הנגן, אבל אחרי שמשחקים קצת עם ערכות הנושא הוא נראה הרבה יותר טוב.
מה שבטוח זה שהוא נותן הרבה יותר פונקציונליות, ומאפשר – למי שבאמת רוצה – לשנות ולהרחיב את הנגן שלו. ההגבלה היחידה היא הדמיון.

מומלץ לגבות את הסנסה לפני שמתקינים עליו את רוקבוקס, אתם לא רוצים להתקע עם משקולת נייר יקרה ולא כבדה מספיק.
לפני שמחברים את הסנסה למחשב צריך לשנות את זיהוי הUSB שלו לMass storage class, או MSC. זה יאפשר למחשב לזהות אותו ככונן כמו כל כונן קשיח.
ללינוקסאים, כדי לגבת את כל הSansa, בהנחה שהוא הופיע בשם /dev/sdb
השתמשו בפקודה:
[code]
dd if=/dev/sdb of=~/sansa.full.img
gzip ~/sansa.full.img
[/code]
שתיצור עותק בינארי של כל הכונן (זה 8 ג'יגה, אז זה יקח זמן).
אפשר לגבות רק את המחיצה השניה (sdb2), שמכילה את התוכנה של הנגן, אבל אני חושב שליתר ביטחון עדיף לגבות את הכל.
בהנחה שהסנסה שלכם ריק, הgzip יתפוס כ100 מגה-בייט.

משתמשי חלונות מוזמנים לחפש פתרון בעצמם (רצוי כזה שלא דורש הקלדת פקודות קצרות אך מוזרות).

Sansa E280

סוף הבצורת

אחרי חודשים יבשים בהם כל הסדרות היו בהפסקה, נגמרה הבצורת.
הסדרות האלו ממשיכות:
Prison break עונה שלישית.
Heroes עונה שניה.
The unit עונה שלישית.
כל פרקי הפתיחה של אלו היו מצויינים.

בדיקה קצרה מראה שTraveler הסתיימה, חבל – היה לה פוטנציאל.
המפיק עונה על כל השאלות הפתוחות בבלוג.

לגבי Lost, קצת קשה למצוא מידע על העונה הבאה, אבל מקור לא רשמי טוען שהיא תמשיך בינואר.
לפי אותו מקור, גם Battlestar galactica תמשיך בינואר, עם העונה הרביעית והאחרונה.

סדרה חדשה שכדאי לבדוק היא Journeyman, עם קווין מקיד המצויין מרומא (שגם הפסיקה, ימח שמם של HBO).

אם פיספתי עוד המשכים או סדרות טובות חדשות, ספרו בתגובות.