פלאנט תוכנה חופשית בישראל (Planet FOSS-IL)

01 August, 2015

Hamakor

אוגוסט פינגווין בסוף השבוע הקרוב

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

שתי בקשות נותרו לנו, המארגנים:

להתראות בכנס!

 

Share

01 August, 2015 05:02 PM

Boris Shtrasman

MMS

עידו כתב פוסט והיו שם מספר שאלות שאני חושב שהם ראויות לפוסט שלם, נתחיל מהתחלה איך בכלל מדברים עם הודעות מולטימדיה (EMS ו MMS).

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

  • קיים "ענן" של שירותים שנקרא MMSE (סביבת ה MMS)
  • קיימת רשת תקשורת IP בתוך ספק הסלולאר, ובתוכה קיים רכיב ( SGSN ) שדרכו משתמשי קצה יתקשרו.
  • אדם מחזיק במכשיר קצה (מודם/ מכשיר סלולאר) שרוצה לקבל או לשלוח הודעות מולטימדיה (MMS UA) 
  • קיים שירות שמספק את תוכן ההודעות עצמן.
  • קיים רכיב מקשר שהוא ה MMS relay/server (יכול להיות שרת בודד או מחולק)

ה MMS UA יתחבר לMMSE שם ידבר עם רכיב ה MMS Relay, יש הרבה דרכים לתקשר אם "הענן" הפופולריים הם WAP gateway, SIP ו IMAP4/SMTP.

אני משתמש פה במושג MMSE ולא MMSC כי אני מאמין שזה פשוט יותר להבנה , כי  MMSC לא  מוגדר הייטב  כי לפעמים זה רק ה Realy/Server לפעמים זה כולל את השרתים שמספקים את המידע  ( בTS23140 שמגדיר את MMS השם MMSC לא קיים)  .

ברמה הקלאסית ה MMS Relay מדבר עם רכיבים אחרים  בתוך סביבת ה MMSE שיספקו את המידע מול רכיבי האימות-הרשאה-חשבונאות של הרשת, שירותי אימייל (מדובר בתקשורת IP קלאסית עם פרוטקולים כמו IMAP4 ), שירותי המרת מידע ושירותים הקשורים להעברת ההודעה עצמה. הרכיב גם יכול לדבר עם ספקי שירות ברשתות אחרות (בין חברות שונות).

ממה שאני מכיר בדרך כלל מכשיר הקצה יתחבר דרך ה SGSN לכתובת מיוחדת או אפילו ל APN מיוחד בשביל למשוך או לשלוח הודעות.

במכשיר הקצה יוגדרו דרכי הגישה ל MMSc :

רוב הספקים שאני מכיר מספקים גישת HTTP שפתוחה לכל משתמשי הרשת הסלולרית שכוללת לקוחות ארעיים (לקוח O2 שמחורבר ל SGSN של O2 יקבל גישה ל MMSC של O2 אבל לא של BT) ע"ג רשת הנתונים שמספקת חברת התקשורת.

יש ספקים משספקים חיבור SIPי מה שמאפשר ללמשתמש קצה שמתחבר בלקוח SIP כמו linphone יוכל לקבל את הודעות ה MMS כהודעות IM רגילות.

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

שרתי ה MMS Relay בינם לבין עצמם יכולים לדבר ב SMTP (משתמש של BT שולח הודעה ל O2 , ה MMS Relay של BT ו O2 יכולים לדברים ב SMTP בינם לבין עצמם) ובין עצמם לחיצוניים מדברים M4.

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

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

במידה ומדובר על שירות WAP ה MMS UA ידבר WSP מול שירות ה gateway , שירות ה gateway ידבר HTTP מול ה MMS relay. כל אחד מההודעות תהיה בערך כך :

MMS UA send ----MMS Send request     ----> MMSE
MMS UA send <---MMS Send confirmation---- MMSE
MMS UA send MMSE
MMS UA send MMSE ---- notification request ---> MMS UA
MMS UA send MMSE <--- notification response --- MMS UA
MMS UA send MMSE <--- get request ---- MMS UA
MMS UA send MMSE --- retrieve confirmation---> MMS UA
MMS UA send MMSE <-- ACK --- MMS UA
MMS UA send <---MMS Delivry result ---- MMSE


התעבורה בין MMS UA אחד ל MMSE מבוצעת באמצעות שימוש בMM1,
בתוך רשת ה MMSE יהיו מספר צורות שיחה. ובין שרת RELAY אחד לחיצוני ידברו MM4. אם נרכיב את הדוגמה הקודמת נקבל:


MMS UA @BT                MMS relay @BT            MMS relay @O2               MMS UA @ O2
| | | |
|--> MM1 submit.req --> | | |
|<--MM1 sumbit.res | | |
| | --MM4 forward.req ----> | |
| | <--MM4 forward.res ---- | |
| | | -MM1 notification.req-> |
| | | <-MM1 notification.res |
| | | |
| | | <-MM1 retrieve.req- |
| | | --MM1 retrieve.res-> |
| | | <--MM1 ACK .req- |
| | <-MM4 Delivry report.req | |
| | MM4 Delivry report.res-> | |
| | | |
|<-MM1 Delivry report.req | | |


דוגמה לשימוש כזה אפשר לראות כאן.


במקרה SIPי המצב טיפה שונה :

יש לא רק MMS UA אלא גם SIP UA ומה שיקרה שיהיה זיהוי מול השרת שמספק SIP ושרת זה ידבר מול ה MMS relay (לדוגמה ע"י register).

בקשות ה MM1 submit מומרות ל SIP MESSAGE.

התוכן יהיה multipart mime כאשר חלק ראשון יהיה בעל Content type מסוג application/vnd.wap.mms-message ומכיל את ה PDU של MM1 submit.

החלק השני יהיה תוכן הבקשה עצמה או קישור לתוכן.

בתלות בספק ראיתי כי יש או העלאה http put של תוכן ההודעה בספק השירות ואז שליחת קישור לתוכן בתוך ההודעות או העברה של התוכן מקודד.

MMS SIP UA                                    MMS HSP                             MMS Relay

| | |
| -----REGISTER ---> | |
| <----200 --- | |
| | -- Register MMS SIP UA ---> |
| | <-- 200 |
| | |
| SIP message (submit.req)---> | -- SIP MESSAGE ----------> |
| | <-- SIP MESSAGE response - |
| <--- SIP message response (submit.res) | |
| | |



לקריאה נוספת :
 rfc3428
rfc3261 
MMS stage 3 sip


במקרה שמדובר על חיבור ל IMAP4 / SMTP -
מרבית הספקים שאני מכיר מספקים SMTP שקוף למשתמש, כלומר משתמש שולח הודעת MMS לכתובת מייל וזה עובד ישירות ללא שום הגדרה מיוחדת.

הצד המקבל יקבל הודעה מ msisdn@mms.bt כאשר ה msisdn הוא msisdn של השולח.

ממה שראיתי המימוש מורכב מ שרת postfix שמקבל מידע משרת שמבצע המרת תעבורת MM1 + store להודעת SMTP. במקרה הזה הודעת הקבלה לא מתקבלת , אבל בגלל שמדובר על הודעה שהיא אופציונלית אין שום בעייה בנושא.
 
ספקי שירות (VAS) לעומת זאת ישתמשו ב MM7 (שזה בסה"כ SOAP ) ויוכלו לשלוח מסות של הודעות.

רשתות סלולאר מכילות רכיב חשוב נוסף שהוא ה SMSC .

בגלל שיש לנו את SMPP (פרוטקול תקשורת שמאפשר לנו לתקשר בין SMSC שונים) הדבר מאפשר לנו לחבר בין שני שרתים שונים ע"ג IP (הרבה יותר נוח משאר SS7), רכיב ה SMSC הוא בדר"כ שונה מ MMSC אבל ניתן לבנות מערכת שתבצע קישור בין SMSC ל MMSC (רואים את זה בדר"כ בשירותי תוכן בהם שולחים MMS ומקבלים תשובה ב SMS).

אחד ההבדלים העיקרים בין עבודת SMSC ל MMSC שאני רואה (פרט לעובדה של טיפול ב SMS וטיפול ב MMS) הוא התגובה - ב SMSC יש דרישה לאבטחת שליחת מידע ואימות השליחה בעוד ב MMSC זה אופציונאלי.

עכשיו נחזור לשאלה המקורית,

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

בכל אחד מצורות החיבור יש מנגנוני זיהוי ב WAP מדובר ע"י מערכות רשת הסלולאר ב SIP ו IMAP מדובר על אחזקה כמו כל שרת SIP ו IMAP אחר.

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

 במערכות שיש VAS (שעליו שולח ההודעות משלם הייטב) יש העתק אחד ונשלח קישור לתוכן.

01 August, 2015 04:48 PM

31 July, 2015

ik

אנדרואיד, mms ובעיית אבטחה עם פתרון ישים

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

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

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

בעולם הסלולרי, יש לנו יכולת לשלוח הודעות קצרות (אם כי לאחרונה זה הפך להיות יותר כמו מגילה מאשר הודעה קצרה) בשם SMS. הפירוש של SMS הוא Short Message Service.
הוא נשלח באמצעות אותות בשם ss7 ממכשיר לאנטנה, ומאנטנה לספק טלפון כלשהו. עכשיו הספק מעביר את זה הלאה לספק אחר שהוא שולח את ההודעה למכשיר אחר.

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

אחרי שהגיע אלינו WAP, הגיעו מהנדסים ושאלו מדוע לא ניתן "לנצל" את ה WAP ואת ה SMS ביחד ולשלוח בעצם מולטימידיה באמצעות הודעות קצרות (דמיינו מם לזה). וכך נולד לנו ה MMS.

כיצד עובד ה MMS? אני שולח הודעת SMS במבנה מסוים שאומר כי יש לי משהו כדוגמת תמונה בשרת שניתן להוריד באמצעות WAP.

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

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


תויק תחת:android, Operating Systems, אבטחת מידע, אינטרנט, חומרה, טכנולוגיה, טלפוניה, סלולרי, קוד פתוח, רשתות, תוכנה, תקשורת

31 July, 2015 07:30 AM

29 July, 2015

Shlomi Noach

Pseudo GTID, ASCENDING

Pseudo GTID is a technique where we inject Globally Unique entries into MySQL, gaining GTID abilities without using GTID. It is supported by orchestrator and described in more detail here, here and here.

Quick recap: we can join two slaves to replicate from one another even if they never were in parent-child relationship, based on our uniquely identifiable entries which can be found in the slaves' binary logs or relay logs. Having Pseudo-GTID injected and controlled by us allows us to optimize failovers into quick operations, especially where a large number of server is involved.

Ascending Pseudo-GTID further speeds up this process for delayed/lagging slaves.

Recap, visualized

(but do look at the presentation):

pseudo-gtid-quick

  1. Find last pseudo GTID in slave’s binary log (or last applied one in relay log)
  2. Search for exact match on new master’s binary logs
  3. Fast forward both through successive identical statements until end of slave’s applied entries is reached
  4. Point slave into cursor position on master

What happens if the slave we wish to reconnect is lagging? Or perhaps it is a delayed replica, set to run 24 hours behind its master?

The naive approach would expand bullet #2 into:

The last Pseudo-GTID executed by the slave was issued by the master over 24 hours ago. Suppose the master generates one binary log per hour. This means we would need to full-scan 24 binary logs of the master where the entry will not be found; to only be matched in the 25th binary log (it's an off-by-one problem, don't hold the exact number against me).

Ascending Pseudo GTID

Since we control the generation of Pseudo-GTID, and since we control the search for Pseudo-GTID, we are free to choose the form of Pseudo-GTID entries. We recently switched into using Ascending Pseudo-GTID entries, and this works like a charm. Consider these Pseudo-GTID entries:

drop view if exists `meta`.`_pseudo_gtid_hint__asc:55B364E3:0000000000056EE2:6DD57B85`
drop view if exists `meta`.`_pseudo_gtid_hint__asc:55B364E8:0000000000056EEC:ACF03802`
drop view if exists `meta`.`_pseudo_gtid_hint__asc:55B364ED:0000000000056EF8:06279C24`
drop view if exists `meta`.`_pseudo_gtid_hint__asc:55B364F2:0000000000056F02:19D785E4`

The above entries are ascending in lexical order. The above is generated using a UTC timestamp, along with other watchdog/random values. For a moment let's trust that our generation is indeed always ascending. How does that help us?

Suppose the last entry found in the slave is

drop view if exists `meta`.`_pseudo_gtid_hint__asc:55B364E3:0000000000056EE2:6DD57B85`

And this is what we're to search on the master's binary logs. Starting with the optimistic hope that the entry is in the master's last binary log, we start reading. By nature of binary logs we have to scan them sequentially from start to end. As we read the binary log entries, we soon meet the first Pseudo-GTID injection, and it reads:

drop view if exists `meta`.`_pseudo_gtid_hint__asc:55B730E6:0000000000058F02:19D785E4`

 

At this stage we know we can completely skip scanning the rest of the binary log. Our entry will not be there: this entry is larger than the one we're looking for, and they'll only get larger as we get along in the binary log. It is therefore safe to ignore the rest of this file and move on to the next-older binary log on the master, to repeat our search there.

Binary logs where the entry cannot be in are only briefly examined: orchestrator will probably read no more than first 1,000 entries or so (can't give you a number, it's your workload) before giving up on the binary log.

On every topology chain we have 2 delayed replica slaves, to help us out in the case we make a grave mistake of DELETing the wrong data. These slaves would take, on some chains, 5-6 minutes to reconnect to a new master using Pseudo-GTID, since it required scanning many many GBs of binary logs. This is no longer the case; we've reduced scan time for such servers to about 25s at worst, and much quicker on average. There can still be dozens of binary logs to open, but all but one are given up very quickly. I should stress that those 25s are nonblocking for other slaves which are mote up to date than the delayed replicas.

Can there be a mistake?

Notice that the above algorithm does not require each and every entry to be ascending; it just compares the first entry in each binlog to determine whether our target entry is there or not. This means if we've messed up our Ascending order and injected some out-of-order entries, we can still get away with it -- as long as those entries are not the first ones in the binary log, nor are they the last entries executed by the slave.

But why be so negative? We're using UTC timestamp as the major sorting order, and inject Pseudo-GTID every 5 seconds; even with leap second we're comfortable.

On my TODO is to also include a "Plan B" full-scan search: if the Ascending algorithm fails, we can still opt for the full scan option. So there would be no risk at all.

Example

We inject Pseudo-GTID via event-scheduler. These are the good parts of the event definition:

create event if not exists
  create_pseudo_gtid_event
  on schedule every 5 second starts current_timestamp
  on completion preserve
  enable
  do
    begin
      set @connection_id := connection_id();
      set @now := now();
      set @rand := floor(rand()*(1 << 32));
      set @pseudo_gtid_hint := concat_ws(':', lpad(hex(unix_timestamp(@now)), 8, '0'), lpad(hex(@connection_id), 16, '0'), lpad(hex(@rand), 8, '0'));

      set @_create_statement := concat('drop ', 'view if exists `meta`.`_pseudo_gtid_', 'hint__asc:', @pseudo_gtid_hint, '`');
      PREPARE st FROM @_create_statement;
      EXECUTE st;
      DEALLOCATE PREPARE st;

We accompany this by the following orchestrator configuration:

 "PseudoGTIDPattern": "drop view if exists .*?`_pseudo_gtid_hint__",
 "PseudoGTIDMonotonicHint": "asc:",

"PseudoGTIDMonotonicHint" notes a string; if that string ("asc:") is found in the slave's Pseudo-GTID entry, then the entry is assumed to have been injected as part of ascending entries, and the optimization kicks in.

The Manual has more on this.

29 July, 2015 10:59 AM

27 July, 2015

Boris Shtrasman

muni grabber

לא היה לי ערוץ RSS להודעות באתר העירייה אז התוצאה לפניכם, יכול להיות שזה יעבוד גם לאחרים אם גם העירייה שלהם משתמשת במערכת ההודעות דומה.
#!/usr/bin/perl  

use LWP 5.64; # Loads all important LWP classes, and makes
use HTTP::Cookies; # Allow work with cookies
use XML::RSS;
use Encode qw(decode encode);

my $browser = LWP::UserAgent->new;
if ( $#ARGV != 0 ) {
print "incorrect number of params, you should provide only basepath example : $0 http://url.muni.tld\n";
die "";
}

$browser->cookie_jar( HTTP::Cookies->new(
'file' => '/tmp/headers',
# where to read/write cookies
'autosave' => 1,
# save it to disk when done
));



$browser->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
my $basepath = "$ARGV[0]";
my $url = "$basepath/openning.asp?Lang=1";
my $response = $browser->get( $url );


#for each cookie we got, add it to the current jar
$browser->cookie_jar->extract_cookies( $response );

$response = $browser->get( "$basepath/apps/hebrew/resulttest.asp?AppId=4&TableName=MESSAGES&Categories=65&From=" );

my $rss = XML::RSS->new( version => '0.9' );
$rss->channel(
title => "MUNI for $basepath",
link => "$basepath",
description => "MUNI RSS");

#the intersting stuff is inside Parse_Html_Template(...)
#I was too lazy to use better modules so I just went to the source , please don't shoot me ;)
#
#
for my $item ($response->content =~ /Parse_Html_Template\((.*?)\)/g) {
#first line always have garbage data (just skip it)
next unless ($item =~ /.*,.*/) ;
#Format #### , "title","date"
# ### may be a version number
#
#
$item =~ s/[^,]*,[^,]*,[^,]*,//;#remove useless headers
#the next come in the format :
#"<a href='relative_path'>text</a>","<a href='relative path'>date</a>"
while ( $item =~ q/"([^"]*)","([^"]*)"/)
{
my $firstpart = $1 ;
my $secondpart = $2 ;
$firstpart=~ /<a.*href=["']([\s\S]+?)['"].*>/;
$link = $1;
$firstpart=~ /<a.*href.*>([\s\S]+?)<\/a>/;
$text = $1;
$text = decode("iso-8859-8", $text);
$rss->add_item( title => $text, link => $basepath . $link);
$item =~ s/"([^"]*)","([^"]*)"//;
}
}

$rss->save("$0.rss");

__END__

=head1 NAME

muni RSS - a script to get an RSS from old municipal websites which are lacking an RSS/Atom features.

=head1 SYNOPSIS

Create an RSS 0.9 file based on the messages page.

=head1 DESCRIPTION

This script provide a basic example on how one could get the RSS from the rusty pages without the RSS interface,

=head1 BUGS

=head1 AUTHOR

Original code:Boris Shtrasman

=head1 COPYRIGHT

Copyright (c) 2015 Boris Shtrasman

=head1 LICENSE

this script is free software. You can redistribute it and/or modify it under the same terms as Perl itself.

=head1 CREDITS

Rael Dornfest <rael@oreilly.com>
Jonathan Eisenzopf <eisen@pobox.com>
Wojciech Zwiefka <wojtekz@cnt.pl>
Chris Nandor <pudge@pobox.com>

=head1 SEE ALSO

perl(1), XML::Parser(3), LWP(3), XML::RSS(3),HTTP::Cookies(3)

=cut


27 July, 2015 04:57 AM

25 July, 2015

Shlomi Noach

What makes a MySQL server failure/recovery case?

Or: How do you reach the conclusion your MySQL master/intermediate-master is dead and must be recovered?

This is an attempt at making a holistic diagnosis of our replication topologies. The aim is to cover obvious and not-so-obvious crash scenarios, and to be able to act accordingly and heal the topology.

At Booking.com we are dealing with very large amounts of MySQL servers. We have many topologies, and many servers in each topology. See past numbers to get a feel for it. At these numbers failures happen frequently. Typically we would see normal slaves failing, but occasionally -- and far more frequently than we would like to be paged for -- an intermediate master or a master would crash. But our current (and ever in transition) setup also include SANs, DNS records, VIPs, any of which can fail and bring down our topologies.

Tackling issues of monitoring, disaster analysis and recovery processes, I feel safe to claim the following statements:

Bummer. Let's review a simplified topology with a few failure scenarios. Some of these scenarios you will find familiar. Some others may be caused by setups you're not using. I would love to say I've seen it all but the more I see the more I know how strange things can become.

We will consider the simplified case of a master with three replicas: we have M as master, A, B, C as slaves.

mysql-topologies-failures

 

A common monitoring scheme is to monitor each machine's IP, availability of MySQL port (3306) and responsiveness to some simple query (e.g. "SELECT 1"). Some of these checks may run local to the machine, others remote.

Now consider your monitoring tool fails to connect to your master.

mysql-topologies-failures (1)

I've marked the slaves with question marks as the common monitoring schema does not associate the master's monitoring result to the slaves'.  Can you safely conclude your master is dead? Are your feeling comfortable with initiating a failover process? How about:

Now consider the following case: a first tier slave is failing to connect to the master:

mysql-topologies-failures (2)

The slave's IO thread is broken; do we have a problem here? Is the slave failing to connect because the master is dead, or because the slave itself suffers from a network partitioning glitch?

A holistic diagnosis

In the holistic approach we couple the master's monitoring with that of its direct slaves. Before I continue to describe some logic, the previous statement is something we must reflect upon.

We should associate the master's state with that of its direct slaves. Hence we must know which are its direct slaves. We might have slaves D, E, F, G replicating from B, C. They are not in our story. But slaves come and go. Get provisioned and de-provisioned. They get repointed elsewhere. Our monitoring needs to be aware of the state of our replication topology.

My preferred tool for the job is orchestrator, since I author it. It is not a standard monitoring tool and does not serve metrics; but it observes your topologies and records them. And notes changes. And acts as a higher level failure detection mechanism which incorporates the logic described below.

We continue our discussion under the assumption we are able to reliably claim we know our replication topology. Let's revisit our scenarios from above and then add some.

We will further only require MySQL client protocol connection to our database servers.

Dead master

A "real" dead master is perhaps the clearest failure. MySQL has crashed (signal 11); or the kernel panicked; or the disks failed; or power went off. The server is really not serving. This is observed as:

mysql-topologies-failures (3)

In the holistic approach, we observe that:

We have now cross referenced the death of the master with its three slaves. Funny thing is the MySQL server on the master may still be up and running. Perhaps the master is suffering from some weird network partitioning problem (when I say "weird", I mean we have it; discussed further below). And perhaps some application is actually still able to talk to the master!

And yet our entire replication topology is broken. Replication is not there for beauty; it serves our application code. And it's turning stale. Even if by some chance things are still operating on the master, this still makes for a valid failover scenario.

Unreachable master

Compare the above with:

mysql-topologies-failures (4)

Our monitoring scheme cannot reach our master. But it can reach the slaves, an they're all saying: "I'm happy!"

This gives us suspicion enough to avoid failing over. We may not actually have a problem: it's just us that are unable to connect to the master.

Right?

There are still interesting use cases. Consider the problem of "Too many connections" on the master. You are unable to connect; the application starts throwing errors; but the slaves are happy. They were there first. They started replicating at the dawn of time, long before there was an issue. Their persistent connections are good to go.

Or the master may suffer a deadlock. A long, blocking ALTER TABLE. An accidental FLUSH TABLES WITH READ LOCK. Or whatever occasional bug we hit. Slaves are still connected; but new connections are hanging; and your monitoring query is unable to process.

And still our holistic approach can find that out: as we are able to connect to our slaves, we are also able to ask them: well what have your relay logs have to say about this? Are we progressing in replication position? Do we actually find application content in the slaves' relay logs? We can do all this via MySQL protocol ("SHOW SLAVE STATUS", "SHOW RELAYLOG EVENTS").

Understanding the topology gives you greater insight into your failure case; you have increasing leevels of confidentiality in your analysis. Strike that: in your automated analysis.

Dead master and slaves

They're all gone!

mysql-topologies-failures (5)

You cannot reach the master and you cannot reach any of its slaves. Once you are able to associate your master and slaves you can conclude you either have a complete DC power failure problem (or is this cross DC?) or you are having a network partitioning problem. Your application may or may not be affected -- but at least you know where to start. Compare with:

Failed DC

mysql-topologies-failures (6)

I'm stretching it now, because when a DC fails all the red lights start flashing. Nonetheless, if M, A, B are all in one DC and C is on another, you have yet another diagnosis.

Dead master and some slaves

mysql-topologies-failures (7)

Things start getting complicated when you're unable to get an authorized answer from everyone. What happens if the master is dead as well as one of its slaves? We previously expected all slaves to say "we cannot replicate". For us, master being unreachable, some slaves being dead and all other complaining on IO thread is good enough indication that the master is dead.

All first tier slaves not replicating

mysql-topologies-failures (9)

Not a failover case, but certainly needs to ring the bells. All master's direct slaves are failing replication on some SQL error or are just stopped. Our topology is turning stale.

Intermediate masters

With intermediate master the situation is not all that different. In the below:

Untitled presentation

The servers E, F, G replicating from C provide us with the holistic view on C. D provides the holistic view on A.

Reducing noise

Intermediate master failover is a much simpler operation than master failover. Changing masters require name resolve changes (of some sort), whereas moving slaves around the topology affects no one.

This implies:

Sure, we don't mind failing over D elsewhere, but as D is the only slave of A, it's enough that D hiccups that we might get an alert ("all" intermediate master's slaves are not replicating). To that effect orchestrator treats single slave scenarios differently than multiple slaves scenarios.

Not so fun setups and failures

At Booking.com we are in transition between setups. We have some legacy configuration, we have a roadmap, two ongoing solutions, some experimental setups, and/or all of the above combined. Sorry.

Some of our masters are on SAN. We are moving away from this; for those masters on SANs we have cold standbys in an active-passive mode; so master failure -> unmount SAN -> mount SAN on cold standby -> start MySQL on cold standby -> start recovery -> watch some TV -> go shopping -> end recovery.

Only SANs fail, too. When the master fails, switching over to the cold standby is pointless if the origin of the problem is the SAN. And given that some other masters share the same SAN... whoa. As I said we're moving away from this setup for Pseudo GTID and then for Binlog Servers.

The SAN setup also implied using VIPs for some servers. The slaves reference the SAN master via VIP, and when the cold standby start up it assumes the VIP, and the slaves know nothing about this. Same setup goes for DC masters. What happens when the VIP goes down? MySQL is running happily, but slaves are unable to connect. Does that make for a failover scenario? For intermediate masters we're pushing it to be so, failing over to a normal local-disk based server; this improves out confidence in non-SAN setups (which we have plenty of, anyhow).

Double checking

You sample your server once every X seconds. But in a failover scenario you want to make sure your data is up to date. When orchestrator suspects a dead master (i.e. cannot reach the master) it immediately contacts its direct slaves and checks their status.

Likewise, when orchestrator sees a first tier slave with broken IO thread, it immediately contacts the master to check if everything is fine.

For intermediate masters orchestrator is not so concerned and does not issue emergency checks.

How to fail over

Different story. Some other time. But failing over makes for complex decisions, based on who the replicating slaves are; with/out log-slave-updates; with-out GTID; with/out Pseudo-GTID; are binlog servers available; which slaves are available in which data centers. Or you may be using Galera (we're not) which answers most of the above.

Anyway we use orchestrator for that; it knows our topologies, knows how they should look like, understands how to heal them, knows MySQL replication rules, and invokes external processes to do the stuff it doesn't understand.

25 July, 2015 07:00 AM

23 July, 2015

ik

פיתון מול רובי, לא מה שחשבתם

הקדמה

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

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

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

ואז אני רואה שאלות (הדגמה בלבד: 1, 2, 3, 4) שונות על פיתון (כי הרי דוחפים אותה לכל שיחה בערך), ואני רואה איפה למעשה אנשים מסתבכים איתה, ואני מנסה להשוות את זה לרובי, ואני יודע שבמקומות האלו לא ממש יפלו לי שם עם רובי (וזה לא בגלל שאין מקומות ליפול בהם ברובי), והייתי רוצה להסביר גם למה.

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

שאלה ראשונה

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

a = 10.times.select{ |x| x % 2 == 0 }
a
=&gt; [0, 2, 4, 6, 8]

זהו, זה כל מה שצריך, שורה אחת :)
אסביר אותה בקצרה. ברובי כל דבר הוא אובייקט, אין כזה דבר משהו שהוא "פרימיטיבי" (בהשוואה לג'אווה למשל).
מספר שלם "רגיל", הוא אובייקט מסוג Fixnum. יש לו מתודה אשר מקבלת ירושה ממחלקת האב – Integer בשם times, אשר מבצעת כמות הפעמים של המספר המבוקש איטרציה.
במידה ולא יוצרים block או proc בשביל לרוץ כמניית האיטרציה, חוזרת לנו מחלקה מסוג Enumerator אשר היא מחלקת בסיס לדברים בעלי יכולת מנייה (כדוגמת מערכים). במחלקת ה Enumerator ישנה מתודה בשם select, המאפשרת להגדיר אילו ערכים באיטרציה כלשהי יחזרו אלי כמערך, כאשר אני יצרתי כאן למעשה proc עם הוראות.
היות וברובי השורה האחרונה בהכרח תמיד חוזרת (אם אין explicit return), אז הוא יודע שכאשר יש מספר זוגי, אז אני רוצה שזה הערך אשר יחזור אלי.
עכשיו הנה משהו מעניין על רובי תוך כדי ההסבר – אין ברובי אופרטורים. כל מה שנראה כאופרטור (כדוגמת חילוק השארית ופעולת השוויון), הם למעשה מתודות, ולכן מתודה כדוגמת even?‎ זהה למה שהייתי צריך, ויתר מזה, אין צורך בסוגריים, ולכן זה יכול גם להראות כך:

a = 10.times.select{ |x| x.even? }
a
=&gt; [0, 2, 4, 6, 8]

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

שאלה ראשונה – תת שאלה

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

a = []
10.times do |i|
  a.push(i) if i.even?
  puts a.inspect
end

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

ובנוסף, לרובי גם יש תמיכה בשני תחבירים של משפט טרינארי אשר שם נפל השואל:

i = 1
a = if i.even? then 't' else 'f' end
b = i.even? ? 't' : 'f'

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

c = unless i.even? then 'f' else 't' end

שאלה שניה

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

a = [1, 2, ['a', 'b', [0xa, 0xb] ]]
=&gt; [1, 2, ["a", "b", [10, 11]]]
a.flatten
=&gt; [1, 2, "a", "b", 10, 11]

קצת הארכתי את הקוד, אשר יכול להיות בשורה אחת בלבד, אך רציתי להדגים את הערך שיחזור אלי.

כפי שכתבתי בתשובה לשאלה הראשונה, מערך ברובי, יורש מ Enumerable, אבל יש לו גם הרבה מתודות משל עצמו.
מתודה אחת כזו היא flatten, אשר עושה בדיוק את מה שאותו בחור ביקש.
המתודה יכולה להגיע גם בעוד צורה בשם flatten!‎ אשר התפקיד שלה הוא זהה, עם שינוי קטן אחד – היא לא מחזירה מערך חדש בלי לגעת בקיים (כפי ש flatten עושה), אלא היא משנה את המערך הקיים וחוזרת עם אובייקט המערך עצמו.

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

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

שאלה שלישית

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

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

str1 = 'yoyo'
print 'sdfsdfsfsdfsfsdf' if str1.eql?('aaaaa') || str1 == 'yopo' || str1 === 'yoyo'

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

שאלה רביעית

בשאלה הרביעית, רצו להוריד קובץ מאתר מאובטח.
הנה משהו פשוט שמוריד תמונה מגוגל בגישה מאובטחת:

require 'open-uri'

image = open('https://www.google.com/images/srpr/logo11w.png')
open('/tmp/image.png', 'wb+') { |a| a.write(image.read) }
image.close

קצת פירקתי את הדברים לקריאות.
אני טוען את הספרייה open-uri, אשר תפקידה הוא לדעת לפתוח קישורים של ftp, http ו https כאילו היו file descriptor של רובי.

אני במקרה הזה ניגש לקובץ תמונה של גוגל, ושומר אותו כקובץ בינארי בספריית /tmp/ .
שימו לב כי אינני סוגר את הקובץ תמונה שאני שומר בדיסק, והוא נסגר לבד, בזכות פעולת ה proc, אשר בעצם מתבצעת "מאחורי הקלעים" באמצעות yield. וכאשר פקודה זו מסתיימת, הפונקציה של open סוגרת את עצמה לבד.

סיכום

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


תויק תחת:Python, Ruby, טכנולוגיה, פיתוח, קוד פתוח, תוכנה, תכנות

23 July, 2015 09:40 PM

16 July, 2015

Oz Nahum

Introducing psutil in Munich Python Users

I gave a quick talk in Python Munich User Group about one of my favourite Python tools. Here is a link to the presentation about psutil. ... continue reading...

16 July, 2015 08:40 PM

15 July, 2015

Ram on Agmon

זן ותכנון מסלולי רכיבה באופני הרים

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

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

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

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

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

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

 

הטקסט המלא

15 July, 2015 08:12 PM

14 July, 2015

Artyom Beilis

שעון קיץ בישראל ומחשבים

ביום ראשון האחרון, חצי מדינת ישראל התעוררה עם שעונים לא נכונים.

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

בזיון. מרבית הפצות לינוקס לא הספיקו לעדכן את tzdata, למשל לא Debian ולא Ubuntu יציבות קיבלו איזורי זמן נכונים (גם בעדכונים אחרונים), העדכון האחרון של Red Hat גם הוא יצא ממש לא מזמן. כמובן גם Windows לא הספיקו להוציא עדכונים - כך שגם אשתי שלא משתמשת בלינוקס התעוררה עם שעון לא תקין במחשב שלה - והוא תמיד מעודכן אצלה עד לדקה האחרונה.

אני כמובן כבר לא מדבר על יישומים שמנהלים את IANA Time Zone Database בעצמם, יישומים זניחים כמו Java או ICU וכד.

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

עדכון החוק האחרון היה ביולי 2013 - אז האם אפשר להאשים את מאות (אם לא אלפי) האנשים והארגונים האחראים על עדכונים שוטפים שלא הספיקו להפיץ את עדכוני איזור הזמן האחרונים? האם אפשר להאשים מיליוני משתמשים בישראל בכך שלא התקינו את העדכונים האחרונים (אם הם היו בכלל)?

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

הטקסט המלא

14 July, 2015 09:16 PM

לשרת את כל אתרי החדשות בארץ בעזרת... CppCMS

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

הפרויקט נקרא ליניקום.

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

מספר מילים על "ליניקום":

"ליניקום" הוא מנוע שמביא פרסומות תלויות תוכן ומותאמות למשתמש לאתרים שונים בקלות רבה. מרבית אתרי החדשות הגדולים בארץ משתמשים בשירותי ליניקום, ביניהם: ynet, הארץ, מאקו, Jerusalem Post, ואללה ועוד רבים אחרים כולל מספר אתרים גדולים בחו"ל.

להלן כמה עובדות מעניינות:

  • ליניקום מבוססת על טכנולוגית CppCMS
  • המערכת משרתת כ־10,000,000 פניות המותאמות למשתמש ביום - קרי כ־115 פניות בשניה.
  • בשעות העמוסות הקצב מגיע לכ־160 פניות בשניה.
  • השרת מייצר תעבורה יוצאת ממוצעת של כ־11 מגאביט בשניה.
  • צריכת זיכרון הכוללת של המערכת (שרת וואב, בסיס נתונים, יישום, מערכת ההפעלה) הוא בסביבות 360MB
  • העומס הממוצע על המעבדים הוא כ-5%
  • השרת רץ על c1.medium instance בודד ב־Amazon EC2

המערכת רצה מאחורי lighttpd ומשתמשת ב־PosgreSQL לשמירה וניהול הנתונים בצורה אינטנסיבית, עם זאת, מרבית הנתונים הנדרשים בזמן אמת שמורים ומנוהלים בזיכרון.

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

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

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

הטקסט המלא

14 July, 2015 09:16 PM

13 July, 2015

Hamakor

נפתחה ההרשמה לאוגוסט פינגווין 2015

עמותת „המקור” שמחה להודיע על פתיחת ההרשמה לכנס אוגוסט פינגווין השנה.

הכנס יתקיים, כפי שפורסם, ביום ששי 7.8 במכללת שנקר ברמת־גן.

ההרשמה דרך אתר הכנס, כמובן, ואינה נדרשת עבור חברי וידידי העמותה ששילמו דמי חבר.

להתראות בכנס!

Share

13 July, 2015 09:02 PM

Gabor Szabo

YouTube Channel at 100,000 views

I know I am far from being a celebrity but it is still nice to see that the videos and screencasts on my YouTube channel has just passed 100,000 views.

For the full article visit YouTube Channel at 100,000 views

13 July, 2015 08:34 PM

12 July, 2015

Ram on Agmon

המועמדים שלי לפרס המקור 2015 :)

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

​.​

הותקן ביותר מ34 אלף אפליקציות.

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

 

הטקסט המלא

12 July, 2015 08:01 AM

09 July, 2015

Yoav Farhi

המשרד שלי היום

image


09 July, 2015 06:36 PM

24 June, 2015

Gabor Szabo

YAPC and Perl Workshop participant numbers

I went over the web-site of some of the recent Perl workshops and most of the Perl Conferences (YAPCs) looking for the number of participant and the number of talks on each event. I managed to collect the data from most of YAPCs in Europe and North America, but unfortunately I could not find the respective information in the YAPC::Asia sites.

For the full article visit YAPC and Perl Workshop participant numbers

24 June, 2015 05:39 PM

21 June, 2015

Yoav Farhi

גלידת שפרעם

image

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


21 June, 2015 10:26 AM

11 June, 2015

Oz Nahum

Dictionaries in bash scripts - it is possible

Apparently, bash offeres assosiative arrays, similar to Python dictionary ... continue reading...

11 June, 2015 06:05 AM

29 May, 2015

Shlomi Fish

Vim Tip: Going to the top or bottommost window/viewport

In the Vim and GVim text editors, one can use Ctrl+W;t (or Ctrl+w;Ctrl+t) to go to the topmost/most top window (= a section of the screen in Vim terminology) and Ctrl+W;b to go to the bottommost/most bottom one.

Cheers!

29 May, 2015 05:08 PM

16 May, 2015

Kobi Zamir

libhdate-js

אחרי שתרגמתי את את libhdate ל php החלטתי לתרגם את הקוד גם ל javascript , הסיבה העיקרית היתה שאני יכול :-) התרגום נעשה קודם ל typescript ואח"כ ל javascript.

הטקסט המלא

16 May, 2015 06:41 PM

14 May, 2015

Kobi Zamir

libhdate-php

libhdate-php הוא מימוש ב php נקי של ספרית libhdate. המימוש משתמש באותם אלגורתמים וקבועים כמו הספריה ב C. אך כתוב כולו ב php. הספריה יודעת להמיר תאריכים לועזיים ועבריים, להציג חגים, קריאות בתורה וגם לחשב את זמני היום.

הטקסט המלא

14 May, 2015 04:02 PM

13 April, 2015

Liran Tal

The Drupal Rap song – Everyday I’m Drupalin’

This YouTube video doesn’t need any further explanation beside it’s title: The Drupal Rap song – Everyday I’m Drupalin’

 

 

 

Lyrics:

Chorus
Everyday I’m drupalin

Verse
Where them forms you gettin fapi with I’m the fapi boss/ hookin into edit form and webforms is my specialty sauce/ I’ll hook form alter by form id’s or entities/ put a list on Ajax/ just to keep it callin back/

I got them distrobutions, I’m like acqia/
Check my public repos, I didn’t copy nuttin/ I know dries n webchick, I kno Ryan szrama/ all the commerce guys we hipchat when they got some drama/
Might not be pretty code but it gets me paid/ I’m using rules like php loopin through arrays/ I put it all in features, so the code is stable/ it might take longer, but next time I just click enable/ These dudes clearin caches, on every hook init/ queries by thousands, page loads by the minutes

Verse
No matter the language we compress it hard/ drugs cc all, we just drugs cc all/
Where’s all of the changes, you never saw/ so drush cc all, we just drugs cc all/ I lean heavy on smacss, compass compilin my sass/ you just installed flexslider now you teachin a class/
I seen your content types, I don’t need to kno you/ to know that we ain’t even in the same nodequeue/
I’m on drupal answers, check my reputation/ I’m on my tablet earnin karma while I’m on vacation/ ya girl like a module, she stay hookin n/ you couldn’t code an info file, without lookin in/
Mo scrums, equals better sprints, break the huddle, n the work begins

Thanks to New Valley Media for helping with the video http://www.newvalleymedia.com/
Thanks to Broadstreet Consullting http://www.broadstreetconsulting.net

The post The Drupal Rap song – Everyday I’m Drupalin’ appeared first on Liran Tal's Enginx.

13 April, 2015 05:26 PM

28 March, 2015

Lior Kaplan

תשע שנים כמפתח דביאן

החודש עברו 9 שנים מאז שקיבלתי מעמד פורמלי בדביאן כמפתח (Debian Developer). למרות השם, עיקר הפעילות היא תחזוקת חבילות ולא פיתוח קוד נטו. תהליך הכניסה היה ארוך ומתיש, אך ללא ספק העמיק את ההבנה והיכולות הטכניות שלי. בבלוג הישן שלי יש פוסט "סיום ההסמכה וקבלת הכרה רשמית" שנותן מבט-על על התהליך.

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

מעבר לצד הטכני, אני משתדל להגיע לכנסי דביאן לאורך השנים (2005, 2006, 2007, 2011, 2013) כדי לפגוש את הקהילה פנים מול פנים וכדי לפגוש אנשים מפרוייקטי קוד פתוח אחרים שמגיעים לאירוע. בגלל הצד האנושי, אני מוכרח להודות שמפגשים אלה, הגם שכרוכים בהם המון שעות מול המחשב (סוף סוף זמן שקט לקוד פתוח) הם עדיין סוג של חופשה שנתית. להרגשתי, זה גם אחד הדברים ששומרים על הגחלת של המשך הפעילות בפרוייקט – שיש משהו מעבר לצד הטכני נטו.


תויק תחת:Debian GNU/Linux

28 March, 2015 11:07 AM

19 March, 2015

Lior Kaplan

CVE assignment without upstream knowledge

In the past few months I’ve been dealing with aligning PHP CVE information to enable easier tracking of security fixes. The two main locations are the NEWS file which is part of each release and the changelog available on the website which is more popular (and easier to update).

Usually the CVE are assigned per PHP.net security team request or with cooperation with one of the Linux distribution’s teams (either PHP or security), as should be in a good ecosystem.

Recently I got a few notifications issued by Debian about its PHP package, which I wasn’t familiar with these CVE IDS. When checking this, I found out a few CVE assigned per 3rd party (Linux distribution, bug reporter, etc…) request without upstream knowledge. Digging deeper I found out that some CVE were assigned a month after the fixes were released, while others were only a week or two after. While this makes sure the security information is documented, it’s harder to add the information after tagging and releasing.

In another case, while discussing about a CVE for a specific bug, we found out one was already assigned per the reporter’s request but without the our or the upstream library knowledge. Even if the issue isn’t severe, upstream should get a fair chance to fix issue before making them public. Which also leads to a problem with requesting CVE IDs on a public mailing list which in some cases leads to security information leakage. We should balance transparency with some grace period for upstreams (as projects share code).


Filed under: Debian GNU/Linux, PHP

Full text

19 March, 2015 05:33 PM

16 March, 2015

Liran Tal

Prevent clickjacking on Drupal and other Apache web applications

Security is an important aspect to keep an eye for, and this time it’s about preventing clickjacking on Drupal and other Apache web applications.

Edit apache’s configuration file, which may be your declared vhost or such, usually at a location like /etc/httpd/conf.d/default.conf and make sure the  following

 

<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>

 

This will disable embedding your website as an iFrame.

0013_clickjacking

The post Prevent clickjacking on Drupal and other Apache web applications appeared first on Liran Tal's Enginx.

16 March, 2015 01:23 PM

13 March, 2015

Lior Kaplan

PHP7 replaces non-free JSON extension

For many the PHP JSON extension license might look like a storm in a teacup, but for many Linux distributions the bits of the free software licenses are very important. That was the case when Debian decided (#692613) to remove the non-free JSON extension as part of the transition to PHP 5.5 in May 2013 (after the Debian 7 release).

This change was done with the help of Remi Collet (from Fedora / Red Hat) who wrote an alternative extension based on JSON-C implementation. A similar change was done by other Linux distributions, and this became the defacto standard for most Linux users.

The situation has recently changed with the acceptance of the Jakub Zelenka’s jsond RFC to replace the current non-free implementation with a free one. The change was committed to the code base on early February (Closing #63520) and expected to be released later this year as part of PHP7.


Filed under: Free software licenses, PHP

Full text

13 March, 2015 09:43 AM

12 March, 2015

David Kaplan

CUPCake: sim.py -> sim.nim

So the (Python3) simulator is slllooowwwww (Kernel running at ~400KHz) and I decided to see whether there was some easy way to rectify the situation. Ultimately I'm simulating a very simple 8-bit RISC-based machine - albeit SPI-transaction-heavy for the display - and 400KHz on my 3GHz Haswell i5 is simply abysmal!

Unrelated to this issue, a few weeks ago I chanced across some discussions extolling and debating the virtues of some 'modern' languages. Having given Go[lang] a 'go' in the past - and disliking the experience immensly - I wondered if there was anything else out there that I could learn as I do enjoy learning new languages from time-to-time. And that's when I came across Nim.

What caught my eye was that is was being sold as a 'Python-like' language in respect to syntax and ease-of-use which generated Native code. Furthermore, its killer feature in my opinion is its ability to evaluate user functions at compile time and optimize accordingly.

To cut a long story short, I decided to re-implement the simulator in Nim, both as a way to learn the language and to see whether it would improve performance.

As a disclaimer: I don't yet know much Nim and my code is rubbish (e.g. I couldn't work out how to get a function-lookup hashtable working so I just went for the good ol' case-statement route for now). I basically just wrote it like i write Python and it mostly worked out okay.

At some point last night, the simulator's Nim-rewrite reached feature-parity (sans command line options) with the Python implementation (as of now depricated).

Kernel test executing on Nim simulator

I'm pretty happy with how this exercise worked out. The results are fantastic! The same kernel code is running on the nim-based (and hence native code) simulator (sim.nim, simdisplay.nim) about a factor of 10X better than the Python one! 3.5-4MHz is more like it! It's still around 10X-20X worse than the hardware should be but good enough for what I'm simulating at the moment. I can potentially eek out some more performance from it by writing code like a normal person and perhaps using an openGL-accelerated surface for the display; but that's an exercise for another time!

Nim is a great language and is a good demonstration of why Python isn't always 'good enough'. Highly recommended.

12 March, 2015 02:01 PM

28 February, 2015

Shlomi Fish

Tech Tip: How to Configure Qt 5 Behaviour When Running on KDE4

Recently, I noticed that when running the VLC-2.2.0 prerelease, which is based on Qt 5 for its GUI, on my Mageia Linux 5 system on top of KDE 4, then in the playlist a single-click immediately played a file instead of selecting it, while reserving a double click for activation. After a long amount of research and thought, I figured out a way to configure Qt 5 on top of KDE.

To do so:

  1. Install lxqt-config and the “lxqt-qtplugin”.

  2. Add the line “export QT_QPA_PLATFORMTHEME=lxqt” somewhere before the desktop startup in your “.Xclients” or “.xinitrc” file (or in your “.bashrc”).

  3. Restart the X/KDE environment.

  4. Run “lxqt-config” to configure the appropriate behaviour.

This way one can use the Qt5 customisations of lxqt in KDE 4. Enjoy!

Licence

You can reuse this entry under the Creative Commons Attribution 3.0 Unported licence, or at your option any later version. See the instructions of how to comply with it.

28 February, 2015 12:12 PM

30 January, 2015

Dan Fruehauf

Privilege Escalation – be slack and pay for it

My predecessor(s) had left a bunch of people at my work place (not even developers) with sudo access to chown and chmod – for the purpose of data management. For a while I had tried to explain that having sudo access to just those two commands is effectively having full root access on the machines.

I had to demonstrate it. So I did:

cat <<EOF >> make-me-root.c
#include <unistd.h>
int main() {
    setuid(0);
    execv("/bin/bash", NULL);
    return 0;
}
EOF

gcc -o make-me-root make-me-root.c
sudo chown root make-me-root
sudo chmod u+s make-me-root

./make-me-root

Alright, demonstrated. Now it’s time for the raising eyebrows to follow.

And now also comes the part where I know it’s almost impossible to revoke privileges from people after they got used to a broken workflow.


30 January, 2015 12:43 AM

26 January, 2015

Rabin Yasharzadeh

Speed up a MySQL restore from a dump file

This is a small snippet I found to speed up importing MySQL dumps, it’s is almost as fast as coping the DB files directly.

Pre INSERT

Put the commands at the top of the dump file, e.g pre.sql,

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

 Post INSERT

Put these statements at the end of the dump file, e.g post.sql,

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;

Example

cat <(cat pre.sql) <(bzcat mydb_backup.sql.bz2) <(cat post.sql) | mysql

 

26 January, 2015 02:55 PM

17 January, 2015

David Kaplan

CUPCake: Display simulation and Kernel character generation

I have made quite a bit of progress this weekend.

Firstly I'm nearing finalizing the ISA (Instruction Set Architecture) which I've started documenting. Currently most instructions are supported by the hardware itself bar the register-offset addressing.

As the defined ISA has overtaken hardware support, I decided that it's probably best implementing it as per the spec in the simulator; mainly to see if it's sufficient to do actual Turing-complete processing. To this end I've updated the simulator with support for the whole ISA. I've also made some major changes to the assembler to both in regards to suppls -lh te orting the new instructions and expand the lexical support. The assembler now can handle variables (in both .bss and .data), handles labels better, understands %define and can assemble the new offset addressing syntax.

One of the major new features in the simulator is (hacked together) support for my SPI-driven display module. I'm intending on using the ST7735R-based 1.8" LCD module from Adafruit driven off the first hardware SPI driver (SPI0). The simulated display is implemented using Pygame (SDL) and supports a 256x256 display matrix.

I have also made a start on the actual Kernel code itself. This currently consists of a basic SPI driver, the display driver for the ST7735R (sans proper init code as the simulator doesn't currently need it) and simple text routines.

For the character set I'm using the C64 character ROM with a basic routine to provide ASCII support. Here's the Kernel executing a routine on the simulator which dumps the charset:

Kernel test executing on simulator

The simulator is actually pretty slow. I'm getting ~400Khz on my Haswell i5. The hardware should run at around 100Mhz so a factor of ~250 better. Still a full screen refresh over SPI is pretty expensive...

17 January, 2015 09:47 PM

Shlomi Israeli

אלן טיורינג, הדברים שאנו חייבים לו והדברים שאנו חייבים לזכור ממנו

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

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

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

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

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

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

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

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

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

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

17 January, 2015 05:32 PM

05 January, 2015

Amir Aharoni

Continuous Translation and Rewarding Volunteers

In November I gave a talk about how we do localization in Wikimedia at a localization meetup in Tel-Aviv, kindly organized by Eyal Mrejen from Wix.

I presented translatewiki.net and UniversalLanguageSelector. I quickly and quite casually said that when you submit a translation at translatewiki, the translation will be deployed to the live Wikipedia sites in your language within a day or two, after one of translatewiki.net staff members will synchronize the translations database with the MediaWiki source code repository and a scheduled job will copy the new translation to the live site.

Yesterday I attended another of those localization meetups, in which Wix developers themselves presented what they call “Continuous Translation”, similarly to “Continuous Integration“, a popular software deployment methodology. Without going into deep details, “Continuous Translation” as described by Wix is pretty much the same thing as what we have been doing in the Wikimedia world: Translators’ work is separated from coding; all languages are stored in the same way; the translations are validated, merged and deployed as quickly and as automatically as possible. That’s how we’ve been doing it since 2009 or so, without bothering to give this methodology a name.

So in my talk I mentioned it quickly and casually, and the Wix developers did most of their talk about it.

I guess that Wix are doing it because it’s good for their business. Wikimedia is also doing it because it’s good for our business, although our business is not about money, but about making end users and volunteer translators happy. Wikimedia’s main goal is to make useful knowledge accessible to all of humanity, and knowledge is more accessible if our website’s user interface is fully translated; and since we have to rely on volunteers for translation, we have to make them happy by making their work as comfortable and rewarding as possible. Quick deployments is one of those things that provide this rewarding feeling.

Another presentation in yesterday’s meetup was by Orit Yehezkel, who showed how localization is done in Waze, a popular traffic-aware GPS navigator app. It is a commercial product that relies on advertisement for revenue, but for the actual functionality of mapping, reporting traffic and localization, it relies on a loyal community of volunteers. One thing that I especially loved in this presentation is Orit’s explanation of why it is better to get the translations from the volunteer community rather than from a commercial translation service: “Our users understand our product better than anybody else”.

I’ve been always saying the same thing about Wikimedia: Wikimedia projects editors are better than anybody else in understanding the internal lingo, the functionality, the processes and hence – the context of all the details of the interface and the right way to translate them.


Filed under: Free Software, localization, software, Wikipedia Tagged: Waze, Wix

05 January, 2015 03:30 PM

25 December, 2014

Shachar Shemesh

נקסוס 4 לא עובד על פלאפון?

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

The post נקסוס 4 לא עובד על פלאפון? appeared first on לינוקס ותוכנה חופשית.

25 December, 2014 06:55 PM

17 December, 2014

Rabin Yasharzadeh

Dynamic DNS with CloudFlare

This is a simple hack I found for my self to have a “Dynamic DNS” for my home IP.

I’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 API to manage your account. One of the options this API provides is the capability to update you DNS entries in the Zone.

Get your token

For all the action with the API you’ll 3 thinks, your privet token (called tkn in the API),  email and the action you like to perform.

You can find your token under your Account page

DNS Record ID

Next you’ll need to find the action you like to perform, in my case is to edit the zone file. which is under the “DNS Record Management” -> 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 “rec_load_all” action.

e.g

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'

The output will be in a JSON format, and the part you are looking for will look similar to this,

...
{
    "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
    }
...

Edit/Update the DNS record

Now that you have the ID for the record you like to change, it’s a matter of a simple curl command,

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'

This command will update the IP to 1.2.3.4 for test.example.com entery.

Automate the update process

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.

#!/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} -> ${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

 

17 December, 2014 11:25 PM

20 November, 2014

Lior Kaplan

קוד פתוח בממשלת ישראל

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

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

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

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

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

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


תויק תחת:Free Software in Israel, gov.il

20 November, 2014 06:31 AM

18 November, 2014

sml

OpenSUSE 13.2: טיפים וטריקים

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

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

הטקסט המלא

18 November, 2014 07:27 PM

15 November, 2014

sml

שדרוג אופן-סוזה לגרסה 13.2

שנה עברה מאז שוחררה גרסה 13.1 של אופן-סוזה. במשך השנה הזו עודכנה הגרסה ללא הרף ושרתה אותי בנאמנות על מספר לא מבוטל של מחשבים. ובמשך כל אותו זמן גם המשכתי לעקוב (ולדווח מפעם לפעם על באגים) אחרי פתוח הגרסה הבאה; המעקב נערך על מחשב הנסיונות שהריץ את גרסת "factory" של אופן-סוזה – שזו הפצה מתגלגלת על כל סממניה; תוכנות חדישות, “מהקצה המדמם", הנשברות מפעם לפעם ודורשות עזרה ראשונה.

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

הטקסט המלא

15 November, 2014 11:31 PM

29 October, 2014

Shachar Shemesh

עידן ה–SSL

לאחרונה נודע לי על חברה (דווקא ישראלית) שמנפיקה אישורי הצפנה (signed certificates) בחינם עבור שימוש לא מסחרי. מדובר באישורים הזולים ביותר (רק שם המתחם חתום, לא זהות המפעיל), אבל זה מספיק בשביל לקבל התחברויות ללא אזהרות מעצבנות. לאור עידן post Snowden, אני חושב שזה ראוי. לאור זאת, אני גאה להכריז שהבלוג שלי עכשיו זמין גם […]

The post עידן ה–SSL appeared first on לינוקס ותוכנה חופשית.

29 October, 2014 04:25 AM

23 October, 2014

Yaniv Gershoni

אשכול קישורים בנושא תלת מימד והדפסות

אשכול הקישורים הגדול

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

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

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

הטקסט המלא

23 October, 2014 12:30 AM

15 October, 2014

Shlomi Israeli

קונספטים של קוד אלגנטי [חלק 3]

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

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

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

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

נתבונן בפונקציית אקרמן, שאומרת:
Ack(m,n) = \begin{cases} n+1, & \mbox{if } m=0 \\ Ack(m, n-1), & \mbox{if } m=0 \mbox{ and } n>0 \\ Ack(m-1, Ack(m, n-1)), & \mbox{o/w} \end{cases}

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

function ack1 (m,n) {
  if (m===0){
    return n + 1;
  } else if (m >0 && n === 0) {
    return ack1(m-1, 1);
  } else {
    return ack1(m-1, ack(m, n-1));
  }
}

לכל הדעות, פונקציה מאוד פשוטה, שעונה בדיוק על ההגדרה. אבל אם תנסו להריץ אותה על משהו מעבר ל Ack1(4,1) יגמר לכם המקום במחסנית ברוב התכניות. אז האם זה באמת לא אפשרי למימוש אחר? כאן מגיע לעזרתנו סגנון התכנות הזה, שבשילוב עם האופטימיזציה הזו, מסוגל לאפשר לנו לחשב כל ערך (בהינתן מספיק זמן, כי זו פונקציה ממש ממש מסובכת לחישוב).

הרעיון המרכזי אומר, נספק פונקציה נוספת לרשימת הפרמטרים, כל פעם שנרצה להחזיר ערך מיידי, במקום להחזיר אותו, נקרא לפונקציה עם אותו ערך והיא תעשה איתו כבר את מה שצריך (ממש כמו callback סטנדרטי ב-Javascript). כאשר נרצה לבצע קריאה רקורסיבית נבצע אותה בסוף הפונקציה, ונדאג לתת או ליצור callback מתאים עבור אותה קריאה. בגלל השימוש של אותה פונקציה, נקרא לה ret מלשון return.

function ack$ (m, n, ret) {
  if (m===0) {
    ret(n + 1);
  } else if (m >0 && n === 0) {
    ack$(m-1, 1, ret);
  } else {
    // wtf
  }
}

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

var resultOfM_N_1 = ack1(m, n-1);
return ack1(m-1, resultOfM_N_1);

הבעיה היא שיש פה שתי קריאות רקורסיביות, ולא ברור איך לגרום לכך שתהיה רק קריאה אחת שתמיד תהיה בסוף החישוב של הפונקציה. כנראה ש-Javascript גרמה לי לחשוב בצורת callback ולכן זה הפך להיות מיידי עבורי כיום. קודם כל נחשב את הפונקציה הראשונה (לצורך העניין נדמיין שזה מבוצע על מחשב אחר, ואנחנו נקבל בחזרה את התשובה דרך ajax או משהו בסגנון, ולכן צריך לספק לו פונקציה):

ack$(m, n-1, function(resultOfM_N_1) {
  // do something with resultOfM_N_1 
});

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

function ack$ (m, n, ret) {
  if (m===0) {
    ret(n + 1);
  } else if (m >0 && n === 0) {
    ack$(m-1, 1, ret);
  } else {
    ack$(m, n-1, function(resultOfM_N_1) {
      ack$(m-1, resultOfM_N_1, ret); 
    });
  }
}

כדי להריץ בפעם הראשונה את הפונקציה נבצע:

ack$(4, 1, function(result) { 
  console.log('result is ' + result);
});

הרצה של הפונקציה הזו היא אפשרית כעת, ובדיקה אצלי (עם האק קטן שמדמה את האופטימיזציה) הניבה:

time nodejs test.js
result is 65533

real	15m23.306s
user	15m8.406s
sys	0m22.508s

לקחו רק 15 דקות לחשב את הערך, אבל בסופו של דבר הוא חושב, דבר שלא היה אפשרי ללא כמות גדולה מאוד של זכרון בשיטה נאיבית יותר כמו לולאה+מחסנית או רקורסיה. העניין העיקרי שצריך להדגיש כאן הוא שמבחינת זכרון, אנחנו מדברים על סדר גודל של O(1). הסוד הוא שאנחנו מסדרים את המידע בצורה כזו, שבכל שלב אנחנו לא צריכים יותר לזכור שום דבר מקריאות אחרות, ולכן לעולם לא נצטרך למלא את המחסנית יותר ממספר קבוע של שדות.

בגלל שזה כן נושא די מסובך, ננסה לדמיין את הפונקציה ack$ כקופסה שחורה, או אפילו יותר קל, כפונקציה ששולחת בקשה לאיזשהו שרת מרוחק ומקבלת ממנו תשובה. כמו בבקשת ajax א-סינכרונית, הפונקציה תסתיים מיד וברגע שהדפדפן יקבל תשובה בחזרה, הוא יפעיל את פונקציית ה-callback שסיפקנו עם התשובה כפרמטר. ועכשיו אנחנו יכולים לעשות עם הערך הזה מה שבא לנו. במקרה שלנו, אנחנו צריכים לבצע שוב בקשה דומה (עוד קריאה רקורסיבית), רק שהפעם אנחנו נדפיס את הערך המוחזר במקום לבצע עליו חישוב נוסף.

למידע נוסף, ממליץ לקרוא גם את המאמר: By example: Continuation-passing style in JavaScript

15 October, 2014 11:58 AM

21 September, 2014

Ira Abramov

האם להאמין לאפל?

בשבועות האחרונים היו לאפל שוב שתי פאשלות אדירות בנוגע לפרטיות. האחת שהיתה יותר מפורסמת אבל פחות מעניינת היא שמאות מליוני לקוחות של iThings גילו פתאום אלבום של U2 במאגר המוזיקה שלהם ולא יכלו להסיר אותו (אלא בעזרת אתר מיוחד שלבסוף נפתח לענין). השניה והיותר מפחידה היתה כשאפל התחילה לסגור ללא רחמים חשבונות אחסון ענן (ולהבנתי גם סנכרון אנשי קשר וגישה לחנות היישומונים?) שהעלו את תמונות העירום הגנובות של קייט אפטון, ג'ניפר לורנס ושאר הסלבריטאיות – שמראש נגנבו מחשבונות iCloud פרוצים בעצמן. שיטות פעולה דרקוניות מילא, אבל זה אומר שכל קובץ שאתם מכניסים לתא שלכם נסרק ונבדק, לא רק שמו וגודלו אלא תוכנו המדויק.

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

> > > לאפל אין דרך לפתוח את ההצפנה של המידע ב־iMessage ו־FaceTime בזמן השידור ברשת בין מכשירים. בניגוד ליישומי העברת הודעות של חברות אחרות אפל איננה סורקת את התקשורת שלכם, ולא נוכל לספק שירותי האזנה לרשויות הבטחון גם אם נקבל צו שכזה. (מתוך הצהרת הפרטיות החדשה)

ולמה אנחנו מאמינים להם?

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

יש עוד איזו סיבה, אני לא מצליח לחשוב עליה כרגע…
ג'ון.

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

תגים: , , , , , , , , , , , , , ,

21 September, 2014 04:18 AM

04 September, 2014

Arie Skliarouk

O GTalk team, where were thou? (part II)

Four full years passed since my last post on GTalk. Unfortunately I can't say much good about Google Instant Messenger efforts. It looks they would like everybody to switch from XMPP-based GTalk to proprietary protocol of Hangouts.

We saw stop of XMPP federation, wholesale upgrade of GTalk clients to Hangouts, last GTalk for Windows have been released15 months ago. Next logical step is to stop supporting XMPP altogether. What a sad day that would be..

Of the handful biggest IM providers, none supports open protocol (besides Google/XMPP yet). With 19 billions valuations the market is huge, and one would expect the fierce competition to leave no rock unturned in attracting more users. Unfortunately commercial interests prevail here.

There never was better time for an established company to embrace open-protocol platform. May be there already is? Please post in comments.

PS. Whoever is still on XMPP/Jabber/GTalk platform, uses pidgin on ubuntu 14.04 amd64 and misses "message delivery confirmation" plugin - here is a bit of solace for you: pidgin-xmpp-receipts_0.6-1_amd64.deb

04 September, 2014 10:59 AM

28 August, 2014

Ira Abramov

קריפטוכסף

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

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

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

אז מה הם ביטקוין וקריפטוקוינז בכלל?

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

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

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

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

אם כך, ברשת יש קובץ שתופח ותופח (נכון להיום הבלוקצ'יין של ביטקוין הוא כ־25 גיגה והוא גדל כל הזמן) ומכיל את כל פקודות העברות הכספים (וסוגי מידע שונים, על זה בהזדמנות אחרת), הקובץ חתום ע"י המשתמשים עצמם בצורה שאפשר לוודא שהמידע שם אמין, ותהליך החתימה הלא-פשוט הזה מזכה אותך בתשלום (בביטקוינז כמובן). בקיצור יש לנו משאב מוגבל, שאי אפשר לשכפל אותו, אי אפשר להכנס איתו למינוס, מצד שני גם אי אפשר לבטל בו עיסקאות (אין גוף מרכז העברות תשלום שיכול לשלוח יד לארנק מקבל התשלום ולהחזיר משם את הכסף כמו תאגיד אשראי או בנק). מצד שני כל ארנק שמקושר לשמך כבר איננו אנונימי – מי שיסתכל על הבלוקצ'יין רואה את כל הפעולות שביצעת – כמה כסף נכנס ויצא, ממי ואל מי. שקיפות מוחלטת, ואם חיברת את מזהה הארנק לשימך, אז למעשה גם שום פרטיות (לדוגמא, הנה הארנק של התרומות לתנועה לזכויות דיגיטליות). הפעולה היחידה שמצריכה התערבות שלך היא שחרור הודעת העברת תשלום, ומרגע ששיתפת את הפקודה הזו ברשת המבוזרת, אין חזרה. אם עבדו עליך או ששלחת לכתובת שאף אחד לא מחזיק במפתח הסודי שלה – הלך הכסף.

בעיות טכניות עם הרשת הזו – אין גלגול עסקאות לאחור, ניהול ארנק מקומי משמעותו להוריד 25GB של חומר לפני שתוכל להשתתף בעולם המסחר הזה, וארנק בפיקדון אצל צד ג' (למשל אתרים כמו BlockChain או בורסות כגון קראקן) משמעו לסמוך על צד ג' כלשהוא שיחזיק אצלו את המפתח הפרטי שלך בצורה מאובטחת, למשל מוצפן בצורה שרק הדפדפן שלך יפתח אותו בצד הלקוח ולעולם לא יהיה שמור בצד השרת). אחרי כן יש את השאלה של זכירת סיסמאות (לרוב אם שכחת את הסיסמא, הלך הארנק ואיתו הכסף). ואז לבסוף שאלת המחשב הפרוץ – אם אתם משתמשים באתר כמו בלוקצ'יין ממחשב נגוע בוירוסים ורוגלות, צ'כחו מהכסף.

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

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

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

תוצרים מעניינים

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

תגים: , , , , , , , , , , , , , , , , , ,

28 August, 2014 07:36 AM

24 August, 2014

Doron Rainer

סדרת מדריכים: לינוקס זה לא מפחיד

שלום לכולם,

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

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

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


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

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

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

כרגע ישנם 2 פרקים.

אשמח לתגובות :)

24 August, 2014 06:08 AM

23 August, 2014

Doron Rainer

אז למה אני משתמש בלינוקס ולא בווינדוס?

אחד מהשאלות הרבות שאנשים שואלים משתמשי לינוקס: למה אתם משתמשים בלינוקס? מה רע לכם בווינדוס?

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

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

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

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

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

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

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

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

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

למה תפריטים חבויים? למה לא פשוט להציג כפתור לכל התפריטים האלה?

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

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

23 August, 2014 05:19 PM

16 August, 2014

Yehuda Bar-Nir

מדריך למתחילים בסקראץ׳

[פוסט זה הוא תרגום של מדריך המשתמש הרשמי של Scratch. תוכלו להוריד את המדריך באנגלית מדף העזרה באתר. הזכויות למקור שמורות ל Lifelong Kindergarten Group, MIT Media Lab. מופץ ברשיון CC-BY-SA 2.0]

Scartch Cat

סקראץ׳ (Scratch) היא שפת תיכנות שמאפשרת ליצור סיפורים אינטראקטיביים, אנימציות, משחקים, מוזיקה ואומנות.

מסך לדוגמה מסקראץ׳

המדריך הזה יאפשר לכם ליצור פרויקט בסקראץ׳.

ליצירת פרויקט חדש, גשו לאתר: http://scratch.mit.edu. אם האתר נפתח באנגלית, ניתן לשנות את שפת הממשק מהתפריט בתחתית הדף. לאחר מכן, לחצו על הכפתור צור.
צור

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

1 – התחילו לזוז

לבנת זוז

גררו לבנת זוז לאזור התסריטים.

לחצו על הלבנה

לחצו על הלבנה כדי לגרום לחתול לזוז.

2 – הוסיפו צלילים

לבנת נגן בתוף

גררו לבנת נגן בתוף וחברו אותה ללבנת הזוז.

לחצו והקשיבו

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

החלפת צלילים

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

3 – התחילו ריקוד

הוספת לבנת זוז חדשה

הוסיפו לבנת זוז חדשה. לחצו בתוך הלבנה והוסיפו סימן מינוס.

לחצו להפעלה

לחצו על כל אחת מהלבנים כדי להריץ את כל הערמה.

לבנת נגן בתוף נוספת

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

4 – שוב ושוב

לבנת חזור

גררו לבנת חזור והצמידו אותה לראש הערמה. הפה של לבנת החזור צריך לעטוף את שאר הלבנים.

כדי לגרור את הערמה, יש לתפוס אותה מהלבנה העליונה.

שינוי מספר החזרות

תוכלו לשנות את מספר החזרות שיבוצעו.

לחצו כדי להריץ.
אפשר ללחוץ על כל אחת מהלבנים להרצת הערמה כולה.

5 – אמרו משהו

לבנת אמור

לחצו על קטגוריית המראה וגגרו החוצה לבנת אמור.

שינוי טקסט

לחצו בתוך לבנת האמור והקלידו כדי לשנות את המילים. לחצו כדי לנסות.

חברו לראש הערמה

אחר-כך, חברו את לבנת האמור להתחלה.

6 – דגל ירוק

כאשר לוחצים על הדגל הירוק

גררו לבנת כאשר לוחצים על הדגל הירוק וחברו אותה להתחלה.

הפעלת הדגל הירוק

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

7 – שנו צבע

עכשיו, נסו משהו שונה…

לבנת שנה אפקט

גררו לבנת שנה אפקט.

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

8 – לחיצה על מקשים

לבנת כאשר נלחץ מקש

חברו לבנת כאשר נלחץ מקש

עכשיו, לחצו על מקש הרווח במקלדת שלכם.

בחירת מקש

תוכלו לבחור מקש שונה מהתפריט

9 – הוסיפו רקע

תוכלו להוסיף רקע לבמה.

בחירת רקע

לחצו כפתור רקע כדי לבחור רקע חדש.

בחרו רקע מהספריה (למשל "spotlight-stage").

ספרית הרקעים

לחצו אישור.

הרקע החדש מופיע כעת על הבמה.

הרקע החדש

10 – הוסיפו דמות

כל אוביקט (משתתף) בסקראץ׳ נקרא דמות.
להוספת דמות חדשה, לחצו על אחד הכפתורים האלה:

כפתורי הוספת דמות

כפתורי הוספת דמות:

דמות מהספריה בחרו דמות מהספריה

צייר דמות ציירו דמות משלכם

דמות מקובץ העלו דמות/תמונה מקובץ

דמות ממצלמת רשת צלמו תמונה (ממצלמת רשת)

כדי להוסיף את הדמות הזאת:
קייסי רוקדת
לחצו על דמות מהספריה ואז לחצו על קטגורית אנשים ובחרו את הדמות "cassy dance" (קייסי רוקדת).

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

11 – חקרו!

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

הוסיפו צליל:
צלילים

לחצו על לשונית הצלילים. תוכלו לבחור צליל בחר צליל, להקליט צליל משלכם הקלטה, או ליבא מקובץ צליל מקובץ. (בפורמט AIF, MP3 או WAV)

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

שנו תלבושות:
תלבושות

לכל דמות יכולות להיות מספר תלבושות.
לשינוי התלבושת הנוכחית, לחצו על לשונית התלבושת.
אחר-כך לחצו על תלבושת שונה לדמות.

צרו אנימציה:
אנימציה

תוכלו ליצור אנימציה ע"י החלפת תלבושות.
לחצו על לשונית התסריטים.
צרו תסריט שמחליף בין התלבושות.

12 – טיפים!

שם לפרויקט
תנו שם לפרויקט שלכם.

לרעיונות נוספים, לחצו על טיפים:
טיפים

חלון טיפים

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

הוא גם מסביר מה כל אחת מהלבנים של סקראץ׳ עושה.

שמור ושתף

כדי לשמור את הפרויקט ברשת, הקפידו להתחבר לאתר. התחבר

(אם תרצו לשמור את הפרויקט במחשב שלכם, לחצו על תפריט קובץ ובחרו באפשרות: ״הורד למחשב שלך״.)

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

דף פרויקט
דף פרויקט

לחצו מסך מלא לקבלת מסך מלא.

לחצו שיתוף כדי שאחרים יוכלו לצפות ולשחק בפרויקט שלכם. כאשר אתם משתפים, אחרים יכולים לבקר ולשחק בפרויקט שלכם.

הוסיפו הערות לפרויקט.

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

כדי ללמוד עוד, לחצו עזרה או גלשו אל http://scratch.mit.edu/help (אנגלית).

למי שרוצה להעמיק עוד יותר, מומלץ לקרוא את הספר בעברית: עקרונות ומושגים במדעי המחשב דרך Scratch, מאת מיכל ארמוני ומוטי בן-ארי. ניתן להוריד את הספר בחינם. שימו לב: הספר נכתב לגרסה 1.4 של סקראץ׳. ניתן להוריד מאותו קישור דף הסבר על השינויים בגרסה 2.

16 August, 2014 03:02 PM

27 July, 2014

Amir Aharoni

ארכיון

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

קראתם נכון, exe.

בנק לאומי, אנחנו ב־2014. יש היום יותר אנשים שמשתמשים במערכות הפעלה שלא יכולות לפתוח קובצי exe מאנשים שמתקשים לפתוח קובצי zip. מהירות הרשת כבר מזמן ביטלה כל צורך להשתמש בכיווץ קבצים, בוודאי כשמדובר בקובץ בודד.

אנא אפשרו לי להוריד את המכתב הזה בתור קובץ טקסט, PDF, ליברה אופיס או לפחות וורד.


נ״ב: בשדות שם המשתמש והססמה אתם עדיין מגדירים dir="rtl", למרות שהם תמיד כתובים משמאל לימין. זה אמור להיות תיקון של שורה אחת. יהיה נחמד אם תתקנו את זה.


27 July, 2014 08:49 AM

16 May, 2014

Tomer Cohen

עמותת המקור במשבר — עזרתכם נדרשת!

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

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

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

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

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

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

 

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

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

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

הטקסט המלא

16 May, 2014 10:34 AM

14 May, 2014

Amit Tal

התקנת סביבת פיתוח לאינטרנט עם אובונטו 14.04

למדריך התקנת פיתוח לאינטרנט עם אובונטו 14.04 לחצו כאן

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

הטקסט המלא

14 May, 2014 01:34 PM

27 April, 2014

Dan Fruehauf

Apache, Squid, Tomcat

This is going to be a quick “grocery list” to get a configuration of Apache -> Squid -> Tomcat going, allowing for a cache of multiple webapps at the same time.

The Common Case – Apache & Tomcat

Commonly people would have a configuration of Apache -> Tomcat serving web applications. However sometimes you would like to add that extra bit of simple caching for that webapp. Sometime it can really speed up things!!

Assuming you have Tomcat all configured and serving a webapp on http://localhost:8080/webapp and a vhost in apache which would look like:

<VirtualHost *:80>
  ServerName www.webapp.com

  LogLevel info
  ErrorLog /var/log/apache2/www.webapp.com-error.log
  CustomLog /var/log/apache2/www.webapp.com-access.log combined

  ProxyPreserveHost On

  ProxyPass           /webapp http://localhost:8080/webapp
  ProxyPassReverse    /webapp http://localhost:8080/webapp

  RewriteEngine On
  RewriteOptions inherit
  RewriteLog /var/log/apache2/www.webapp.com-rewrite.log
  RewriteLogLevel 0

</VirtualHost>

Simple! Just forward all /webapp requests to http://localhost:8080/webapp

Squid In The Middle

A simple squid configuration for us would look like:

# some boilerplate configuration for squid
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl Safe_ports port 80
acl Safe_ports port 443	
acl Safe_ports port 8080-8100 # webapps
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access allow localhost
http_access allow localnet
http_access deny all

icp_access allow localnet
icp_access deny all
http_port 3128

hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
hosts_file /etc/hosts
coredump_dir /var/spool/squid3

# adjust your cache size!
cache_dir ufs /var/cache/squid 20480 16 256
cache_mem 5120 MB

#################################
# interesting part start here!! #
#################################
# adjust this to your liking
maximum_object_size 200 KB

# required to handle same URL with different parameters differently
# so for instance these two following URLs are treated as distict URLs, hance they will
# be cached separately
# http://localhost:8080/webapp/a?param=1
# http://localhost:8080/webapp/a?param=2
strip_query_terms off

# just for some better logging
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

# refresh_pattern is subject to change, but if you decide to cache a webapp, you must make sure it actually gets cached!
# many webapps do not like to get cached, so you can play with all sorts of parameters such as override-expire, ignore-reload
# and ignore-no-cache. the following directive will SURELY cache any page on the following webapp for 1 hours (60 minutes)
# adjust the regexp(s) below to suit your own needs!!
refresh_pattern http://localhost:8080/webapp/.* 60 100% 60 override-expire ignore-reload ignore-no-cache

Now, we need to plug apache to use the above squid configuration. Luckily it’s pretty simple, the only line you need is:

# basically every request going to http://localhost:8080/webapp, pass via squid
ProxyRemote http://localhost:8080/webapp http://localhost:3128

And the whole vhost again:

<VirtualHost *:80>
  ServerName www.webapp.com

  LogLevel info
  ErrorLog /var/log/apache2/www.webapp.com-error.log
  CustomLog /var/log/apache2/www.webapp.com-access.log combined

  ProxyPreserveHost On
  ProxyRemote http://localhost:8080/webapp http://localhost:3128

  ProxyPass           /webapp http://localhost:8080/webapp
  ProxyPassReverse    /webapp http://localhost:8080/webapp

  RewriteEngine On
  RewriteOptions inherit
  RewriteLog /var/log/apache2/www.webapp.com-rewrite.log
  RewriteLogLevel 0

</VirtualHost>

That’s it, now look at /var/log/squid/access.log and look for TCP_MEM_HIT and TCP_HIT. If you’re still getting TCP_MISS and the like, you’ll have to adjust your refresh_pattern in the squid configuration.

Multiple Webapps?

Not a problem if you have multiple webapps, if you want them to be cached, just add the magic line passing them through squid and the relevant squid refresh_pattern.

Don’t want a webapp to be cached? Just bypass the squid!


27 April, 2014 03:41 AM

22 April, 2014

Tomer Cohen

המראה החדש של פיירפוקס

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

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

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

שנים לאחר מכן, עם צמיחתה של רשת האינטרנט והשיפורים הרבים בכוח המחשוב השתנתה גם התנהגותם של משתמשי הרשת, ובמקום לגשת לדף בודד הם התחילו לפתוח מספר דפים במקביל, והשלב האבולוציוני הבא היה התווספותן של הלשוניות (או כרטיסיות, או טאבים, כפי שבוודאי הבנתם אין הסכמה ברורה על המושגים והמונחים). הלשוניות הופיעו בהתחלה בדפדפני נישה דוגמת נטקפטור, ובהמשך הגיעו לדפדפנים נפוצים יותר דוגמת אופרה ומוזילה. דפדפן אינטרנט אקספלורר באותה תקופה היה הנפוץ ביותר עם גרסאות 5.5 ו־6, והיה נראה שמפתחיו מסרבים להאמין שהאופנה החדשה תתפוס, עד שלבסוף הופיעו גם בו לשוניות, בהתחלה כסרגל כלים נלווה ולראשונה כחלק מהדפדפן כשיצא אינטרנט אקספלורר 7, אם כי עברו עוד מספר שנים עד שאפשר היה להשוות את היכולות של תכונה זו לדפדפנים אחרים שהקדימו לאמץ את ממשקי הלשוניות.

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

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

Google Chrome 1 UI taken from Google Chrome comic book

תרשים הממשק של גוגל כרום כפי שהוצג לראשונה בחוברת הקומיקס של גוגל.

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

למשל שורת הכתובת, שבעבר הופיעו בה כתובות קודמות שהמשתמש ביקר בהן כעת הפכו לחכמות יותר; גוגל למשל נוהגים לשלב בהן בכרום תוצאות חיפוש, בעוד בפיירפוקס ניתן דגש להיסטורית הגלישה של המשתמש ולסימניות. דפי הפתיחה הפכו להיות מותאמים יותר למשתמש ומציגים את האתרים המועדפים על המשתמש, וכדומה. באופן דומה לשינויי הממשק ביישומים אחרים, דוגמת סרגלי הכלים של Microsoft Office בגרסאותיו האחרונות, שינוי אופן השימוש בסביבות עבודה מובילות בלינוקס דוגמת Gnome ו־KDE, כיום מקובל לתת דגש רב יותר על הפעולות שנמצאות בשימוש תדיר, ולהצניע כפתורים ופעולות שהמשתמש אינו נוהג להשתמש בהן.

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

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

לחצו כדי לצפות במצגת.

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

המראה החדש של פיירפוקס במחשב האישי

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

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

Firefox 29 menu panel screenshot

לוח התפריט המאוחד בפיירפוקס 29

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

Firefox 29 customization screenshot

התאמה אישית של פקדי הדפדפן

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

פיירפוקס עם מראה מותאם אישית

פיירפוקס עם מראה מותאם אישית

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

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

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

הטקסט המלא

22 April, 2014 04:07 AM

17 April, 2014

Yaniv Gershoni

עתיקות...


מצאתי (אחרי שכל העולם כבר פרסם את זה...) את המקלדת הוירטואלית עם קיצורי הדרך של בלנדר.
(למי שלא ראה, זה כאן: http://waldobronchart.be/blenderkeyboard)

הסתובבתי קצת בין קיצורי הדרך וראיתי פתאום שאם לוחצים על Ctrl+Alt+מקש הרווח נכנסים למצב של...
"Create Orientation"

לחצתי וקיבלתי תפריט קטנצי'ק בצד שמאל למטה שנראה כך:


מיותר לציין שזה לא עשה משהו מיוחד...
אז חיפשתי בגוגל מה זה השד הזה ולמדתי משהו חדש שלמעשה קיים עוד מהגרסאות הקדומות של בלנדר (לפחות 2.49):

פרטים נוספים »

הטקסט המלא

17 April, 2014 03:21 PM

13 April, 2014

Meir Gil

חבר חדש Darktable, או איך לעשות Post Production בכמה שניות

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

13 April, 2014 08:50 AM

07 April, 2014

astupidog

pySioGame - עכשיו גם בעברית

pysiogame זו חבילת משחקים לימודיים בקוד פתוח שתואמת לכל מערכות ההפעלה. המשחקים ברמות שונות ומיועדים לילדים מגיל 3 עד 10.

הטקסט המלא

07 April, 2014 06:39 AM

27 March, 2014

Jonathan Klinger

תביעה ייצוגית על הפרת זכויות יוצרים? אגוז קשה. על Waze.

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

[קובץ התביעה (זהירות, מסמך DOC)]

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

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

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

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

כיום, אני לא חושב שיש בדל ראיה שמראה את זה, ולכן היסוד הזה גם כנראה ידחה. בתי משפט לא נותנים לתובעים כל כך מהר לראות קוד של אחרים בלי ראיה, והכי קרוב לכך היה במקרה שבו באמת שתי תוכנות נראו דומה מספיק (רעא 1068/12 דנ-אל נ' סנפיר). לכן, אני מאמין שזה יהיה אגוז קשה לפצח.[פורסם גם באנגלית]

27 March, 2014 01:19 PM

13 March, 2014

Barak Itkin

Activity, Preparing to LGM 2014

*Shaking off the dust*

It's been quite a while since I last posted here. Some will smile at the sight of this post, especially those who know why I was absent (a state which should change until October this year).

Not too far ago, I was invited to the Libre Graphics Meeting of 2014; one of the largest (if not the largest) annual gatherings of users and developers of Open-Source tools and programs for graphics. After having to turn down the invitation once or twice before due to problematic dates, this year I managed to arrange a "vacation" in the relevant dates and I'll actually be going!

Yesterday I finished all of the arrangements (including setting up ubuntu dual-boot on my laptop, which turned out to be way easier than I thought), and I can start thinking about LGM itself. It's going to be the first time I attend a real convention like this, and the fact that this first time is abroad and far from home does add it's share to my excitement :)

The program sounds very interesting and with a potential to cover many topics which I never had the chance to learn (such as color management and font design). Also meeting people whom I talked to by IRC in the last 4 years but never met in practice should be one of the greatest parts in LGM fromy my point of view.

So, before I depart, it's time for some thanks. The first of them is to the GIMP family - the people who always care, help and greet you with a smile after you were missing for some time. The second thank is to you - the (usually anonymous) supporters of GIMP; donations you make to GIMP, help also to reimbruse the traveling expenses to developer gatherings like LGM.

So, I'll see you there,
~ Barak

13 March, 2014 05:42 PM

17 February, 2014

Arie Skliarouk

Multiple mysql engines on the same server

Someone asked me for a howto on setting up multiple mysql engines on the same linux server. There are many articles on the topic, but none provides an ready-to-use set of files which one can simply grab and go.

Thus I created multiple_mysql.tar.gz file that includes all files to run four mysql engines. The configuration assumes per-database directories /opt/db-330[4567] with bin_log, mysql  and relay_log directories. The mysql directory must have mysql database with associated tables (should be copied from an existing database).

Note that the files were created on Ubuntu Lucid 10.04 and will likely not work on other distro. Also, the password in debian-330?.cnf files will be different for each DB and must be updated before use.
Use the following command to set the password:
GRANT ALL ON mysql.* to "debian-sys-maint"@"localhost" IDENTIFIED BY "dxaskDkdkSkdSDLd";

The bashrc file contains useful CLI shortcuts to common mysql commands. You are encouraged to add these to your own .bashrc file.

17 February, 2014 12:43 PM

15 February, 2014

Guy Sheffer

Automatic Nightly Backups for Your Android Device to Your Computer

Android lifevest

Android backup will keep you safe

Hey all,

Friends keep coming up to me and complaining that they had to wipe all their phone because of some attempt to do something.
However, if you give me a brand-new phone and throw mine out of a high-building window, I won’t stop you, because I have a copy of my phone at home, from that same morning, and I don’t even have to think about it.

Want to feel free again? Not scared that this small thing you carry in your pocket with all your life gets ruined? Well, here is how you do it:

Things you will need

  1. A computer running Linux you can ssh to with Rsync installed, or windows running cygwin with rsync and ssh installed.
  2. Your device needs to be rooted – I am afraid thats a requirement for Titanium backup and all programs that back up app data
  3. Titanium backup – You can use the free version for backing up, but for a single-click restore you will need to pay (I bought it and recommended you do even if its the only thing you ever buy on the play store)
  4. rsync backup for Android – This will back up all your photos and data that isn’t part of your apps, if you don’t root but this is all you want to back up, this post might help you too!
  5. Llama – lets you set location profiles

What to do

  1. On titanium backup, open the “schedules” tab and set up a “Backup all user apps + system data” schedule and tick all the days you want your apps to backup on. Pick a time when you are likely be asleep and not using the phone, for this post lets assume its 6am.
    Titanium Backup, create the backup all apps and data sechedule

    Titanium Backup, create the backup all apps and data schedule

    Titanium Backup, Set the schedule

    Titanium Backup, Set the schedule

  2. On rsync backup for android,
    1. Tap the meny key and select “get binaries
    2. Tap the menu key and select “Generate keys“, this will create for you two files, one in /sdcard/dss_key and another in /sdcard/dss_key.pub (don’t hand your friends the dss_key, its a private key).

      Rsync for android's menu

      Rsync for android’s menu

    3. Tap the menu key and select “Add Profile” and call it “Backup All”, local file or directory should point to /sdcard (or you top-level of all your memory cards).
    4. Set usename to the username on the computer you are doing the ssh to.
    5. Server (IP or hostname) should point to the IP of your PC.
    6. Dropbear SSH private key should point to /sdcard/dss_key
    7. Remote file or directory should point to a folder on your PC (make sure you mkdir -p its path, and that you have writing permissions!).
    8. In Additional rsync options write: -a --exclude external_sd/.android_secure --progress
      Update – on my new Galaxy S4 I had to include:
      -a --exclude external_sd/.android_secure --exclude emulated/0 --exclude UsbDriveA --exclude UsbDriveB --exclude UsbDriveC --exclude UsbDriveD --exclude UsbDriveE --exclude UsbDriveF --progress
    9. You can check “Close log window after job if done” so you know in the morning it ran, check “delete remote files that are no longer in source directory. Leave “rsync in reverse” and “send notification using remove notifier” unchekced. Save the new profile.
    Rsync 4 android profile page 1

    Rsync 4 android profile page 1

    Rsync 4 android profile page 2

    Rsync 4 android profile page 2

  3.  On your computer,
    1. You should have ssh and rsync installed, on ubuntu/debian do apt-get install apt-get install rsync openssh-server
    2.  Paste the line from the file /sdcard/dss_key.pub on your phone to ~/.ssh/authorized_keys file on your PC ( Note: it begins with “ssh-dss” and ends with “android@bender”, this is a single line).
    3. At this point I suggest you go to rsync 4 android and tap on the “Backup all” profile you made, make sure that indeed files are getting backed up to your folder, as seen in the picture below. The first sync takes a while, afterwards only changes would be synced. If it does not work, go over the steps above, or comment here and we can try and troubleshoot.

    Rsync for android running

    Rsync for android running

  4. On Llama, (on first use accept the boring stuff) in the “Events” tab delete all the profiles, you don’t need them (if you do want to use Llama for other things feel free to keep them).
    1. Add. New event, name it ‘backup my phone” or something like that.
    2. Add in your new event a condition between 7:00 – 7:30 (or an hour later from when you set titanium to back up)
    3. Add a condition “WiFi Network Connected” and point it to your home wifi, that way it would only work if you are at home, if you have a problem with this condition you can try and set your own way of detecting you are at home
    4. Add a condition Battery Level and set it to “Battery raises above…” and 20%, this makes sure your phone won’t run out of battery at night if unplugged.
    5. Add action “Locale plugin”and select “rsync backup for Android” then pick “Backup All” you created before.

      Llama events setup tab

      Llama events setup tab

    Thats it! Your phone should back up all its apps, and all the information on the sd cards nightly.

    I would love to hear your thoughts and comments :-)

    Links for more information


Full text

15 February, 2014 04:18 PM

10 February, 2014

astupidog

ניתוח מאמר של ענב גנד גלילי - הרשת העמוקה - סקירת ספרות

מאמר זה הינו תגובה למאמר של ענב גנד גלילי - "הרשת העמוקה – סקירת ספרות" שהתפרסם בתאריך 19 לינואר, 2014 בבלוג "אסטרטגיות ואינטרנט" (צילום מסך של המאמר שלה שנלקח בתאריך 10 לפברואר 2014 בשעה 09:24).

הטקסט המלא

10 February, 2014 12:32 PM