ארכיון חודשי: מרץ 2013

ניהול מאגרים מ scm

אני משתמש אצלי ב bundle עבור vim. זהו מנגנון אשר טוען אוטומטית תוספים עבור vim בתוך ספרייה מיוחדת:

$ $HOME/.vim/bundle/

כל התוספים בהם אני משתמש עבור vim, לקוחים מהמאגרים שלהם מscm כלשהו (בעיקר git), וכל פעם מחדש לעדכן ידנית את הכל זו משימה די מעצבנת.
אז החלטתי לכתוב סקריפט לנושא, והיות ואני לא מת על bash שמסוגל לעשות עבודה טובה כאן, החלטתי לכתוב זאת ברובי:

#!/usr/bin/env ruby
#

def update(dir, type) 
  Dir.chdir(dir)
  puts "Going to update #{dir}"
  system("#{type.to_s} pull")
  Dir.chdir('..')
end

scm = [ :git, :hg ]

Dir['*'].each do |f|
  if File.ftype(f) == 'directory'
     scm.each do |s|
       if Dir[f + "/.#{s.to_s}"][0]
         update(f, s)
         break
       end # if Dir[f + "/.#{s.to_s}"][0]
     end # scm.each do |s|
  end # if File.ftype(f) == 'directory'
end # Dir['*'].each do |f|

puts 'done'

הקוד נכתב ב5 דקות וגם נראה ככה, אבל עובד כמו שצריך.
הוא עובר על כל הקבצים במערכת הספריות הנוכחית, ובודק האם הם ספריה. במידה וכן, הוא נכנס פנימה ובודק האם יש בתוכה ספריית scm כלשהי אשר מוכר לי, ובמידה וכן, הוא נכנס פנימה ומעדכן לפי הscm.
הסקריפט חייב לשבת במיקום תחת bundle בשביל לעבוד (ככה תכננתי אותו).

תהנו.

 

זה לא כל כך נעים לראות גן סגור

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

profit by inertia

Some companies in this world have no legitimate right to exists, if you take what they sell vs what they have.

One such company was Sun, but one such giant that exists today is IBM.

I was asked by a friend to take a look at a product by IBM (it called connections), and I was shocked. IBM has a product that makes MS Sharepoint look like a bad written toy, yet I have never seen it, or heard about it prior to that request from my friend. The reason why my friend knew about it, was because he knows the manager behind the product at IBM.

A company asked me to look for them a replacement for sharepoint (they preferred open source based solution), and Google did not gave me any hint about this product back then or now, even though my search did not include open source.

But the product offer so much more then MS sharepoint. I don't know it's price, but it works on all standard based web browsers , and on many operating systems, such as Linux (deb and rpm based), Windows, Unix and Mac. It can integrate with many more tools then sharepoint, including MS Office, but not limited to it, and even offer web based office included.
It support Mobile based connection, and view that fit to your mobile devices, and the list of features just goes on and on.

And here is the Pitch that IBM needed to make, and remained silent. Such product is a sharepoint "killer", if it's price is the same as MS, or cheaper. And it's not the only product by IBM that you never heard about before, but can help you.

The same was with Sun and Open/Star office. They could make real "battle of the office suites" if they wanted, but they didn't, so MS kept selling their Office suite product.

Companies such as IBM earn the money that makes them run, by inertia, not by doing a good work of selling the things they do.

ActiveRecord sucks (English)*‎

Every Ruby developer knows an ORM named ActiveRecord.
It is so common, that it has even implementation on different programming languages, such as PHP.

At one hand, it is written in a way that truly understand Ruby, but on the other hand, it is written very badly. It is written so badly, that it has a lot of SQLi bugs inside, it uses too many resources to perform tasks, and the list just goes on and on …

If that was not enough, then it is very opinionated on how things would be created, even on places that you need different level of thinking, it does not provide it on it's own, and you find yourself write stored procedures that implement them, or functions for triggers instead.

I mostly use Ruby "clean", that is not writing any web based application, and on one of the non web program that I wrote, I needed to go over million records per day (not literally a day, but day in BI), and I find that after 200 requests for records, it opens too many connections to the database, even though it has a limit for "only" 120 connections for it's connection pool, but when I decrease it for 50 connections, it claims that it does not have enough connections to use.
Even an hour of inactivity, it does not release it's connections back, even though it has a "timeout" of 30 seconds to release it.

It ignores my timeout settings, it just take more resources, but does not release them back, regardless of what I tell it to do. So it renders as resource hog, and you require to release the resources "by hand" rather then do it's job right.

I found, many complaints about it on the web, and even few bug fixes, that didn't really fixed anything as I can see in real life situation, even when going to the last stable release of it.

S I started looking at other ORM for Ruby (and there are others as well), and it looks like a problem only with AR so far.

* This is a translation that was requested by few people for the original Hebrew post.

ActiveRecord sucks

מתכנתי רובי (בין אם מסילות או לא), מכירים את ה ORM שנקרא ActiveRecord.
הוא כל כך נפוץ, עד שנוצרו לו אפילו חיקויים בשפות אחרות כדוגמת PHP.

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

למשל יש לי מערכת לא מבוססת web בשום צורה, שעובדת עם מליוני רשומות ביום. הבעיה היא שכבר אחרי 200 גישות למסד הנתונים, למרות שה pool מוגדר רק ל120 חיבורים, אני מגלה שנפתחו עוד חיבורים שלא נסגרים. אם אני מוריד את זה ל50, אז הוא מתלונן שזה לא מספיק, אבל גם אחרי שעה של חוסר פעילות, הוא לא מסיים את החיבורים למסד הנתונים, וזה למרות שמוגדר לו להחזיר את החיבור לאחר 30 שניות ללא שימוש.

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

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

אז התחלתי לבדוק ORM אחרים ברובי (כן יש כמה וכמה), ונראה שזו בעיה ייחודית ל AR בלבד.

האם גוגל בצרות ?

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

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

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

בכל מקרה, התחושה כאן ממערכת שהרבה מאוד משתמשים בה, היא של טעם מאוד רע מגוגל.

encryptfs

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

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

על מנת להתחיל לעבוד, צריך קודם כל לטעון מודול קרנל:

$ sudo modprobe ecryptfs

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

$ ecryptfs-setup-private

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

לאחר מכן, צרו ספרייה רגילה ובצעו פעולת mount עם עצמה בשימוש במערכת הקבצים של ecryptfs:

$ sudo mount -t ecryptfs /path/to/directory /path/to/directory

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

Key type: passphrase
Passphrase: ThisIsAVeryWeakPassphrase
Cipher: aes
Key byte: 16
Plaintext passtrough: no
Filename encryption: no
Add signature to cache: yes 

החתימות נשמרות תחת ‎/root/.ecryptfs/sig-cache.txt .

לעוד מידע, וטיפים בנושא, אני ממליץ לכם בחום לקרוא את דף הוויקי הבא.

Goodbye Pascal

At 1993, I've started to learn Pascal. It was the first programming language that I actually enjoyed using, and programming was really fun.

I started with TP 5.5, later on with TP 7.0 that I bought myself, and a book. Later it was Delphi (2, 5 and 7).

Since my appearance at the internet, I found myself constantly in a need to "defend" my language of choice, because people didn't understand the language, but had a lot of wrong ideas what it is, and mostly what it can't do.

So I became by my own choice an evangelist for the language itself, and even helped people get started with it.

The problem is that I'm no longer believe in the path of the language, you can call it Delphi, you can call it Object Pascal, it does not matter. I think it goes the wrong way, and instead of able to talk about it with fellow developers, there is constantly arguments, and bickering about it.

I was told that if I raised an issue, it is actually attacking the people, not the features, and it seems no one car to listen inside the "community".

It's not about specific person, but the picture in whole, that I'm deciding (at least for now), for the first time since I first started to use the language, to stop using it.

All my Pascal related work on github remains "as-is", and people can use them if they wish, continue the work etc… But at least for now I will not longer do anything related to it.

So goodbye Pascal, and thanks for the fishes.

Arduino mega 2560 r3

arduino  mega 2560 r3חבר הביא לי לאחרונה לוח Arduino שהוא רכש לעצמו עבור פרוייקט אישי שלו, אבל בסוף החליט להשתמש בלוח אחר, אשר מכיל כמה רכיבים נוספים אשר הוא צריך, במקום לרכוש אותם בנפרד עבור הלוח הזה (יצא לו זול יותר ופחות עבודה).

בנוסף הוא גם רכש מודול bluetooth שנבנה במיוחד לעבוד עם Arduino (הלוח הקטן על ספוג הורוד).

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

אז קהילת קוד פתוח יקרה, איזה פרוייקט אתם ממליצים לי לעשות עם הלוח ?

Windows 8 לפי סמי

זוכרים ששאלתי האם Windows 8 מציג סוף עידן למיקרוסופט ?

התשובה היא שהמערכת ממש לא.
לפחות לא כל עוד יצרני המחשבים משתפים פעולה עם מיקרוסופט ומוכרים מערכות מובנות עם Windows.

כך שהמשתמש הממוצע ימשיך לעבוד עם מיקרוסופט. יקלל אותה, אבל כל מחשב חדש שימכר, יהיה עם Windows 8.

אבל זה לא הכל. הבעיה האמיתית היא עולם ה Enterprise. בעוד שנגיד כי לחברת IBM הגיוני הרבה יותר לתמוך באנדרואיד (הרי IBM מתפרנסת המון מג'אווה בין הייתר), אם היא תכניס Windows 8, אז זה לא יהיו גם מחשבי השולחן בחברה, אלא גם הלפטופים בחברה, ומשם מיקרוסופט גם תספק להם tablets ואפילו טלפונים, בייחד עם עסקה כוללת.

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

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

כך, שהמשתמשים פשוט יבכו על הממשק, אבל ישתמשו בו מחוסר ברירה.

What is the feature of Pascal ?

Borland created the name Object Pascal as a marketing way to sell Delphi, and set a boundary between Borland Pascal and Delphi.

Even though that Pascal constantly changing, and started so, not so long after it first released at 1968, only real developers learned the difference, and know what is going on.

Since then we see huge leap foreword with technology and with the language itself. For example the language itself support thread based programming, the object oriented syntax that was added by Apple in 1982 constantly expanding, and even creating support for thing that languages such as Java or C# lack of.

Pascal today is the only programming language that on one hand offer a very low level support for development – Yes! even lower level then with C, but support also very high level development that is closer to dynamic languages – such as mixin, string management, iteration syntax, and much much more…

Pascal today is also the only true multi-platform language, that can provide rich applications to desktop, web and smartphones/tablet platform with the same code base, and run native there. Yes, that includes iOS, Android with JVM/Dalvik.

Things looks good from far away, but closely there are more then few issues with the modern Pascal (and with some of the, I blame Embarcadero):

  • There are way too many dialects (FPC, Delphi, Delphi.NET, Oxygen, GNU Pascal [ISO Pascal] etc …)
  • There is some sort of vendor lock due to the dialect variation (Usually either Delphi or FPC to choose from)
  • Some of the syntax that is added to the language, well it's not longer Pascal, but closer to Java/C#/Ruby/D …
  • There are additions to closures – such as lambda, anonymous functions, generics and more, that not always implemented properly
  • There are support for dependency injection, extended namespace and much more
  • Not a single real standard, and lack of cooperation between Delphi developers and the true FOSS FPC project (due to Embarcadero side)

להמשיך לקרוא