Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,3 @@ Markdown==2.3.1
Pygments==1.6

ipython==1.1.0
python-dateutil==2.1
Binary file modified src/blog/locale/he/LC_MESSAGES/django.mo
Binary file not shown.
13 changes: 8 additions & 5 deletions src/blog/locale/he/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-01-13 22:24+0200\n"
"POT-Creation-Date: 2014-01-21 00:18+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
Expand All @@ -18,10 +18,13 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: views.py:50
#: models.py:34 models.py:41
msgid "author"
msgstr "מאת"

#: views.py:50 views.py:55
msgid "date"
msgstr "תאריך"
#: templates/blog/_post.html:5
msgid "by"
msgstr "על-ידי"

#~ msgid "date"
#~ msgstr "תאריך"
49 changes: 35 additions & 14 deletions src/blog/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,53 +8,74 @@

from django.utils.translation import ugettext as _

import dateutil.parser
from codecs import open # fix opening unicode files
import datetime
import glob
import markdown
import os
import re
import UserDict

from uni_meta import uni_meta # our modified unicode metadata markdown extension

POSTS_PATH = "blog/posts"
# we decided that posts will be identified using a tuple of (year,month,day,slug) and the files are saved accordingly
# these three patterns below must agree with each other (and it's nicer if they agree with the urls)
POSTS_GLOB_PATTERN = "/*/*/*/*.md"
POSTS_FORMAT_PATTERN = "/%(year)s/%(month)s/%(day)s/%(slug)s.md"
POSTS_RE = re.compile(r'.*/(?P<year>\d*)/(?P<month>\d*)/(?P<day>\d*)/(?P<slug>\w*)\.md$')


class Post(object):
"""A pseudo-model for a blog post loaded from a single markdown file with its metadata"""
def __init__(self, slug):
with open('%s/%s.md' % (POSTS_PATH, slug), encoding='utf-8') as md_file:
def __init__(self, year, month, day, slug): # all fields in POSTS_FORMAT_PATTERN are needed
with open(POSTS_PATH + POSTS_FORMAT_PATTERN % locals(), encoding='utf-8') as md_file:
md = markdown.Markdown(extensions=[uni_meta, 'codehilite'])
html = md.convert(md_file.read())

missing_fields = {_('author'), _('date')}.difference(md.Meta)
missing_fields = {_('author')}.difference(md.Meta)
if missing_fields:
raise RuntimeError("Blog post metadata is missing for '%s'. Please add: %s" % (
slug, ', '.join(missing_fields)))
slug, ', '.join(missing_fields)))

self.slug = slug
self.html = html
self.author = md.Meta[_('author')][0]
self.created_date = dateutil.parser.parse(md.Meta[_('date')][0])
self.hidden = md.Meta.get("hidden") # we only care about the key here
self.year = year
self.month = month
self.day = day
self.created_date = datetime.date(self.year, self.month, self.day)


def list_posts():
posts_dir_files = (os.path.splitext(f) for f in os.listdir(POSTS_PATH))
return [slug for (slug, ext) in posts_dir_files if ext == ".md"]
def list_post_tuples():
posts_dir_files = glob.glob(POSTS_PATH + POSTS_GLOB_PATTERN)
posts_matches = [POSTS_RE.match(path) for path in posts_dir_files]
posts_dicts = [match.groupdict() for match in posts_matches if match]
return [(int(post['year']), int(post['month']), int(post['day']), post['slug']) for post in posts_dicts]


def get_posts():
return {slug: Post(slug) for slug in list_posts()}
return {post_tuple: Post(*post_tuple) for post_tuple in list_post_tuples()}


class AllPosts(UserDict.IterableUserDict):
class AllPosts(UserDict.UserDict):
"""A singleton class to hold the posts lazily loaded from disk"""
__posts = None
__posts_for_display = None

def __init__(self, *args, **kwargs):
UserDict.IterableUserDict.__init__(self)
UserDict.UserDict.__init__(self)
if not self.__posts:
AllPosts.__posts = get_posts()

if not self.__posts_for_display:
AllPosts.__posts_for_display = sorted([post for post in AllPosts.__posts.values() if not post.hidden],
key=lambda x: x.created_date, reverse=True)
self.data = AllPosts.__posts

@staticmethod
def get_page(num=0, size=5):
return AllPosts.__posts_for_display[num:num+size]


#TODO: add preloading of the posts (instantiate AllPosts) when in production mode?
#TODO: disable preloading of the posts when in development mode
45 changes: 45 additions & 0 deletions src/blog/posts/2014/1/15/InterviewWithOferBartal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
מאת: שרון שמורק דפנר

![עופר ברטל](/static/blog/images/OferBartal.jpg)

#ראיון עם עופר ברטל תלמיד במחזור הראשון של ה-hackita
####שאלה: מה הביא אותך ל"סדנא לידע ציבורי" ול-hackita?
שמעתי על הסדנא מכמה מקורות במקביל: כתבה ב-ynet, חבר… התחברתי מאוד לרעיון שבבסיס האידאולוגיה של הסדנא.
מידע הוא דבר בסיסי לדמוקרטיה ובכלל, לכל תהליך של קבלת החלטות.
לפעמים אנחנו נאלצים לקבל החלטות בלי ידע רלוונטי, אבל כשיש לנו ידע, זה משפר את תהליך קבלת ההחלטות.
וכאן הסדנא ממלאת תפקיד חשוב ומאיישת נישה חסרה.

####שאלה: איזה פרויקט בחרת לעשות? ולמה דווקא את הפרויקט הזה?
בחרתי לפתח פרויקט שקראתי לו "רכבת פתוחה". מטרת הפרויקט היא לספק מדד אלטרנטיבי לדיוק רכבות.
זה חשוב בעיני, כי המדד שרכבת ישראל מפרסמת מאוד חלקי.
הרכבת מפרסמת מדד יומי של אחוז הרכבות שאיחרו לתחנה האחרונה, ומתעלמת מרכבות שבוטלו.
אבל זה לא משקף את החוויה של הנוסעים. הרכבת עשויה להגיע בזמן לתחנה האחרונה אך לאחר לכל התחנות בדרך.
מבחינת הרכבת אין איחור אבל מבחינת הנוסעים כמובן שיש.
ראוי לציין בהקשר זה שהרכבת אמנם את מדד הדיוק היומי אבל לא מאפשרת גישה לנתונים הגולמיים שמהם הוא חושב.
כמו בהרבה פרויקטים של הסדנא חלק נכבד מהמאמץ הפיתוחי הוא לחלץ את הנתונים הגולמיים שבמדינה מודרנית צריכים להיות נגישים.
אני נוסע לא מעט ברכבת וחושב שזה כלי תחבורה מדהים. הייתי רוצה לראות את הרכבת בישראל מתפתחת לכדי אמצעי תחבורה יעיל ומדויק יותר.
יש לנו לאן להתפתח מהבחינה הזאת ומדינות בסביבה שאפשר לקחת מהם דוגמה.

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

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

####שאלה: מה את חושבת לעשות בהמשך במסגרת "הסדנא לידע ציבורי" עם הידע והניסיון שרכשת ב-hackita?
במסגרת התנדבותי בסדנא, אני מתכוונן להמשיך את הפרויקט של רכבת פתוחה. זה פרויקט גדול, אבל למזלי אני לא עובד עליו לבד.
יש פה חבר'ה ממש חזקים מבחינה טכנולוגית שהצטרפו אליי. רכבת פתוחה, משלבת אפליקציית אנדרואיד, שרת ווב ואלגוריתם לניתוח הנתונים.
בסדנא אין הרבה ניסיון באנדרואיד וזה דווקא חשוב כי כך מגיעים להרבה מאוד אנשים. אני מקווה שהפרויקט "רכבת פתוחה" ייתן כלים גם לפרויקטים אחרים להתפתח בכיוון של אפליקציות אנדרואיד.








Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
מאת: שרון שמורק דפנר
תאריך: 2013-01-15

![שרון שמורק דפנר](/static/blog/images/SharonDafner.jpg)

#ראיון עם שרון שמורק דפנר תלמידה במחזור הראשון של ה-hackita
####שאלה:
מה הביא אותך ל"סדנא לידע ציבורי" ול-hackita?

####שאלה: מה הביא אותך ל"סדנא לידע ציבורי" ול-hackita?
אני מתנדבת בסדנא כבר זמן מה. התחלתי את דרכי בצוות חינוך דווקא. אמנם אני מתכנתת
מנוסה אך לא היה לי שום ידע בפייתון, או טכנולוגיות ווב. אני שמחה מאוד שניתנה לי
ההזדמנות ללמוד את הטכנולוגיות האלו ולאפשר גם לידע ולכישורים שלי בתכנות לבוא לידי
Expand All @@ -17,6 +18,7 @@
עושה היא לתרום את חלקה לשינוי השיטה כך ששחיתות לא תתאפשר באותה הקלות כמו שהיא
מתאפשרת במערכת הממשל שקיימת היום. שקיפות וציבור שמבין מה קורה סביבו הם התרופות
הכי טובות שאני מכירה, לריפוי שחיתות.

####שאלה: איזה פרויקט בחרת לעשות? ולמה דווקא את הפרויקט הזה?
הפרויקט שבחרתי לעשות הוא להקים אתר שיאפשר לשתף מידע שרלוונטי למוסר התשלומים של
משרדי הממשלה ותאגידים ציבוריים. המטרה היא ליצור מוטיבציה וכלים לשיפור מוסר
Expand All @@ -28,14 +30,16 @@
לעשות בהם שינוי. מוסר תשלומים הוא נושא חשוב מכיוון שיש לו השלכה ישירה על האיתנות
הכלכלית של ספקים קטנים ובינוניים במשק, ומה שחשוב לי באופן אישי: הוא נראה לי
ממוקד ופשוט יחסית למימוש. בכל זאת יש לי עוד הרבה מה ללמוד…
####שאלה: איך את נהנית עד כה מהמסגרת? האם היא תואמת את הציפיות שהיו לך?

####שאלה: איך את נהנית עד כה מהמסגרת? האם היא תואמת את הציפיות שהיו לך?
אני מאוד נהנית מהמסגרת. גם מהשיעורים וגם מהחברים האחרים בכיתה. כולם אנשים יוצאי
דופן במובן הטוב של המילה. אני חושבת שהסבירו לנו היטב למה לצפות כבר במיונים כך
שלא היה מקום ליותר מידי הפתעות, אם זאת הופתעתי לגלות כמה הרבה חומר חדש יש לי
ללמוד, גם אם אני מתכנתת ג'אווה מנוסה. אמנם הידע החדש שרכשתי מאפשר במעט קוד לקבל
חלקים נכבדים מהאתר כמעט בחינם אבל בכל זאת יש הרבה שצריך להבין לגבי מה שקורה
מאחורי הקלעים והרבה ספריות שצריך ו/או כדאי להכיר כדי להוציא את המקסימום
מהטכנולוגיה.

####שאלה: מה את חושבת לעשות בהמשך במסגרת "הסדנא לידע ציבורי" עם הידע והניסיון שרכשת ב-hackita?
אני מקווה להמשיך לקדם את הפרויקט שהתחלתי ב-hackita, אבל איהנה לא פחות להשתלב בכל
צוות אחר שיש בסדנא.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
מאת: שרון שמורק דפנר
תאריך: 2013-01-15


![יוני נאור](/static/blog/images/YoniNaor.jpg)

#ראיון עם יוני נאור תלמיד ב-hackita

####שאלה: איך הגעת להיות מתנדב בסדנא ותלמיד בכיתה?
הקשר שלי עם הסדנא התחיל לפני כשנתיים. הייתי פעיל במסגרת קבוצה של פעילים
א-פוליטיים, והצעתי לקבוצה שנפתח לציבור נתונים פיננסים ואחרים של העיר אשדוד, העיר
Expand All @@ -16,6 +20,7 @@
שמרים את הפרויקט יותר טוב ממה שאני וחבריי היינו מסוגלים להרים. על הכיתה שמעתי
מהתכתובת של הסדנא. כרגע אני במקום בחיים שיש לי די הרבה זמן פנוי לתרום לחברה
(רצון יש תמיד) והרגשתי שהכיתה פותחת לי דלת לעשות זאת.

####שאלה: איזה פרויקט בחרת לעשות? ולמה דווקא את הפרויקט הזה?
אני פעיל במספר פרויקטים. שתפתי פעולה עם תלמיד נוסף בכיתה, ארנון, וביחד "גירדנו"
מאתר הכנסת את רשימת כל השדלנים בכנסת. ארנון ממשיך בפרויקט איסוף ועיבוד מידע מאתר
Expand All @@ -31,6 +36,7 @@
התנהלות הצדק במדינה. מה קורה משלב התלונה ועד שלב מיצוי הדין. ההרגשה שלי היא
שהרבה תלונות "הולכות לאיבוד" בדרך אל הצדק. אך הפרויקט שבראש מעייני הוא פרויקט
פוליטי דווקא, הצד הטכנולוגי הוא שולי יחסית ובעתיד תשמעו עליו פרטים נוספים.

####שאלה: איך אתה נהנה עד כה מהמסגרת? האם היא תואמת את הציפיות שהיו לך?
היו לי ציפיות גבוהות מהכיתה בשל ההתרשמות המוקדמת שלי מחברי הסדנא. היה ברור לי
שיהיה מעניין, כיף וכמובן שאלמד דברים חדשים. המציאות עלתה על הציפיות שהיו לי.
Expand All @@ -42,11 +48,12 @@
זה המקום לומר שכל זה לא היה קיים בלי אודי. חומרי הלימוד, התרגילים וההדרכות
המצוינות, כל אלו הם תרומה מאוד משמעותית ומרשימה שאודי תרם לנו ומגיע לו הרבה כבוד
ותודות.
####שאלה: מה אתה חושב לעשות בהמשך במסגרת "הסדנא לידע ציבורי" עם הידע והניסיון
שרכשת ב-hackita?

####שאלה: מה אתה חושב לעשות בהמשך במסגרת "הסדנא לידע ציבורי" עם הידע והניסיון שרכשת ב-hackita?
אני מקווה לעשות הרבה. גם להמשיך בפרויקטים שהתחלתי במסגרת הכיתה וגם להשתלב
בפעילות הקיימת בסדנא: גם הפעילות הטכנית וגם הפעילות במישור המדיני/אזרחי. אני
מקווה, להביא לי ולעם הזה מציאות טיפ-טיפה יותר טובה.

####שאלה: מה אתה חושב שקיבלת בכיתה ולא היית יכול לקבל במסגרת לימודים אחרת?
האווירה של שיתוף פעולה בכיתה, שאנחנו לומדים מאודי ואחד מהשני, ותחושת ההצלחה
שהסביבה נותנת לנו דוחפים אותנו קדימה, מאיצים את תהליך הלמידה ומאוד מקלים על
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
מאת: שרון שמורק דפנר
תאריך: 2013-01-15



#מותר הפייתון מהג'אווה
בתור מתכנתת מנוסה ב-C++ ובג'אווה, השיעורים הראשונים בפייתון, הותירו אותי בהרגשה
לא נוחה. הרבה מאי הנוחות נבעה מכך שבפייתון, בשונה מג'אווה, הקישור ל-type הוא
Expand All @@ -14,8 +16,10 @@
שמצאתי את הסיבה בהא הידיעה או אפילו שהתשובה שמצאתי היא נכונה, אבל מצאתי תשובה
שלכל הפחות היא מעניינת: לתשובה שמצאתי
קוראים חוק בויד של האיטרציה. אתם יכולים לקרוא [כאן](http://www.codinghorror.com/blog/2007/02/boyds-law-of-iteration.html)
את הפוסט המקורי שממנו למדתי על החוק. לטובת עצלנים ולמי שמעדיף הסבר בעברית אני
אסכם אותו כאן בקצרה: בויד לא היה מהנדס תוכנה אלה מהנדס אווירונאוטיקה ששאל את
את הפוסט המקורי שממנו למדתי על החוק.

לטובת עצלנים ולמי שמעדיף הסבר בעברית אני אסכם אותו כאן בקצרה:
בויד לא היה מהנדס תוכנה אלה מהנדס אווירונאוטיקה ששאל את
עצמו את השאלה הבאה אודות 2 סוגים שונים של מטוסים. מטוס א' עלה בביצועיו כמעט בכל
פרמטר שנחשב חשוב על מטוס ב' והיה הבחירה הראשונה של כל מהנדס אווירונטיקה.
היתרונות של מטוס ב' על פני מטוס א' נחשבו זניחים (ראייה צידית טובה יותר ומערכת
Expand All @@ -26,11 +30,13 @@
מהטיס במטוס ב' בעל ההיגוי ההידראולי. לאורך זמן המאמץ הנוסף עלה לטייס במהירות
תגובה וכך למרות שמטוס א' הגיב מהר יותר למוט ההיגוי, במטוס ב' הטייס הפעיל את מוט
ההיגוי מהר יותר.

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

חזרה לקרקע: חוק בויד מציע את האפשרות שאיטרציית פיתוח בפייתון מהירה יותר ושאולי
זה הפרמטר הקריטי בפיתוח מוצר. אישית, אני מקווה, שהמשמעות בשטח היא, שגם כאשר
מתפשרים על איכות בכל איטרציה, מהירות האיטרציה עוזרת להתכנס מהר יותר למוצר איכותי
Expand All @@ -40,7 +46,6 @@ overflow. ישנם שני טיעונים מהפוסט שמצאתי ראויים
פייתון ודומיה והשני מגן על ג'אווה/C++ ודומיה:



"__Those who would give up type safety to purchase a little temporary liberty,
deserve neither liberty nor type safety.__"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
מאת: יוני
תאריך: 2014-01-06
hidden:

# אנחנו בתוך המארקדאון
## כותרת משנית
Expand Down
Binary file added src/blog/static/blog/images/OferBartal.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/blog/static/blog/images/SharonDafner.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/blog/static/blog/images/YoniNaor.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading