יום ראשון, 27 בספטמבר 2009

VALA : כך תורידו קובץ מהאינטרנט

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

void main () {
var src = File.new_for_uri ("http://download.gnome.org/sources/vala/0.7/vala-0.7.6.tar.bz2");
var dst = File.new_for_path ("vala-0.7.6.tar.bz2");
try {
src.copy (dst, FileCopyFlags.NONE, null, null);
} catch (Error e) {
stderr.printf ("%s\n", e.message);
}
}

על תשכחו לצרף את הסיפרייה - gio-2.0 בזמן תהליך הקימפול...

אתר טוב לאיחסון אתרים בחינם וללא פרסומות למיניהם

אני התחלתי ללמוד קצת עיצוב אתרים ומצעתי אתר ממש טוב לאיחסון אתרים בחינם וללא פרסומות למיניהם.
כתובת האתר - http://coil.us.to/

יום שני, 7 בספטמבר 2009

VALA : אז איך מתחילים לתכנת ב VALA, מה דרוש?

חומר הדרכה:

1. זה האתר הרישמי של VALA:
תמצאו שם הרבה דוגמאות והסברים..

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

3. יש פירוט רחב על כל הסיפריות של VALA בהם אתם יכולים להישתמש בכתובת:
אם אתם מוצאים דברים מסויימים ללא מספיק מובנים תוכלו להסתקל אל הסברים על פונקציות אלו ושימושם ב C++ וזה יבהיר לכם דברים פה ושם..

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

איך מתקינים את הכלים הדרושים?

1. הוסיפו את המאגר הבא:

2. התקינו את החבילה: valac

3. התקינו את סביבת העבודה - val(a)IDE :

4. התקינו glade (כלי שמעוד מקל על העבודה של יצירת ממשקים גרפים, איתו אתם ממש מציירים אותם...):
אני אישית עובד על גירסה 3.6.7 וממליץ לכם, אם לא תמצאו חבילת התקנה בשבילה, תקמפלו את קבצי המקור:
http://glade.gnome.org/sources.html
היו לי בעיות מוזרות עם הגירסעות הקודמות...

בהצלחה...



VALA : זאת פונקצייה לדוגמא שמפצללת מחרוזת לחלקים

הפונקצייה מפצלת בין מחרוזות לפי המרווחים ,במחרוזת, במקומות בהן יש צורך לפצל:
void main () {
string line = "happy doggy";
string[] tokens = line.split (" ");
assert (tokens.length >= 2);
string col1 = tokens[0];
string col2 = tokens[1];
stdout.printf ("col1: %s, col2: %s\n", col1, col2);
}

נתיב לתיקיית הבית שלכם...

כך תקבלו את הנתיב לתיקיית הבית שלכם:
string path = Environment.get_home_dir ();

יום ראשון, 6 בספטמבר 2009

VALA : אז איך מוסיפים אנימציות מקבציי gif לתוכנה שלכם?

הוסיפו קובץ לפרוייקט שלכם ובתוכו הדביקו את הקוד הבא:
using Gtk;

public class Animation : EventBox {
public Animation (Fixed parent) {
var anim = new Gdk.PixbufAnimation.from_file ("animation.gif");
var image = new Gtk.Image.from_animation (anim);
add(image);
parent.add(this);
parent.move(this,200,200);
}
}
בתוכנה שלכם הגדירו אובייקט מסוג Animation כאשר בסוגריים ה Container עליו אתם רוצים לשים את האנימצייה,
לדוגמא:
private Animation ani = new Animation(fixed);

יום שישי, 4 בספטמבר 2009

עיצוב תוכנה: המלצה על אתר שיוצר אנימציות לסימון על המתנה

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

דוגמא:

יום שישי, 21 באוגוסט 2009

VALA: כך תוכלו להוסיף טיימר ומאזין עליו לתוכנית שלכם...

שימו לב שמבנה הממשק הגרפי שמור בקובץ - gui.ui ואנו פשוט שולפים אותו משם... לכן לא תוכלו להריץ את הדוגמא בלי שתצרו אחד משלכם...

using Gtk;

public class MyApp {

private Window window;
private uint timerID;

public MyApp () throws Error {
var builder = new Builder ();
builder.add_from_file ("gui.ui");
builder.connect_signals (this);
this.window = builder.get_object ("win_main") as Window;
this.window.destroy += Gtk.main_quit;
}

public void run () {
this.window.show_all ();
Gtk.main ();
}

//This should activate the timer.
[CCode (instance_pos = -1)]
public void on_btnActivate_clicked (Button source) {
timerID = Timeout.add (1000, on_timer_event);
}

//This should deactivate the timer..
[CCode (instance_pos = -1)]
public void on_btnDeactivate_clicked (Button source) {
Source.remove (timerID);
}

//Timer listener
public bool on_timer_event () {
stdout.printf ("timer event");
return true;
}
}

int main (string[] args) {
Gtk.init (ref args);
try {
var app = new MyApp ();
app.run ();
} catch (Error e) {
stderr.printf ("Could not load UI: %s\n", e.message);
return 1;
}
return 0;
}

VALA : הוספת מאזין ל Widget מסוג Notebook

כך ניראת פונקצייה של מאזין ל Widget מסוג Notebook :

public void on_Tabs_switch_page (Gtk.Notebook nb, void *p, uint pageNumber) {

}

יום שני, 17 באוגוסט 2009

שינוי צבע העמודים ב-Widget מסוג- Notebook

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

אם למשל קראתם לאובייקט מסוג Viewport בשם -VPort אז:


Gdk.Color? color = null;
Gdk.Color.parse("#8595A0", out color);
this.VPort.modify_bg(Gtk.StateType.NORMAL, color);
כעת הצבע עבור עמוד ששייך לאותה הלשונית ישתנה בהתאם... זאת המחשה לאיך ששינתי את צבע העמוד של לשונית מסויימת לגוון כחול:

יום שבת, 15 באוגוסט 2009

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

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




זאת כתובת האתר:

VALA: איך מוסיפים ל- ToolBar איקונים משלכם...

יצירה של חלון אם ToolBar בלי שימוש ב-Glade והוספת איקונים שלכם לתוכו...

using Gtk;

public class SearchWindow : Window {

public SearchWindow () {
this.title = "Just a simple window";
this.position = WindowPosition.CENTER;
set_default_size (400, 300);

var toolbar = new Toolbar ();

var image = new Image.from_file ("down.png");
var open_button = new ToolButton((Image)image,"down");
toolbar.add (open_button);

var vbox = new VBox (false, 0);
vbox.pack_start (toolbar, false, true, 0);
add (vbox);
}
}

בדוגמא האיקון שנוסף ל- ToolBar נקרא בשם - down.png וצריך להימצא ביחד אם קובץ בר הרצה שאתם יוצרים...

יום רביעי, 5 באוגוסט 2009

VALA: ככה שולפים ערך ascii של תו מסויים במחרוזת

int asciiCode=(int)("abcd"[0]);

דיי דומה ל C# הא?

VALA: ככה אתם מוסיפית שורת טקסט לקובץ:

זאת פונקצייה לדוגמא שמוסיפה טקסט לקובץ
public static bool addLineToFile(string file_path, string line) {
var file = File.new_for_path (file_path);
string buffer = line;
if (!file.query_exists (null)){
stderr.printf ("File '%s' doesn't exist.\n", file.get_path ());
return false;
}
try {
FileOutputStream file_stream =
file.append_to(FileCreateFlags.NONE,null);
file_stream.write((void*) buffer, line.len(), null);
}
catch(GLib.Error e) {
print("%s\n", e.message);
}
return true;
}

יום שלישי, 4 באוגוסט 2009

VALA: מחיקת התוכן של TextView

אם יש לכם תיבת טקסט מסוג TextView ואתם רוצים למחוק את התוכן שלה:

text_view.buffer.set_text ("", 0);

יום שני, 3 באוגוסט 2009

VALA: כך תציגו MessageBox...

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

public static void msg_error(string error_message) {
Gtk.MessageDialog message = new
Gtk.MessageDialog(null, DialogFlags.MODAL,
MessageType.ERROR, ButtonsType.OK,
error_message);
message.run();
message.destroy();
}
זהו MessageBox שמציג אפשרות בחירה Yes/No :

public static void msg_error(string error_message) {
Gtk.MessageDialog messagedialog = new Gtk.MessageDialog(null,
Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.MODAL,
Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, error_message);

int response = messagedialog.run();

if (response==Gtk.ResponseType.YES)
print("You have clicked on Yes");
else if (response==Gtk.ResponseType.NO)
print("You have clicked on No");
messagedialog.destroy();
}

VALA: איך מריצים תוכנית מתוך התוכנית שלכם ומציגים את הפלט שלה

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

//Event listener for executed program's output.
public bool read_from_channel(IOChannel source, IOCondition cond) {
string str;
size_t c;
try {
source.read_to_end(out str, out c);
stdout.printf("%s", str);
}
catch (Error e) {
stderr.printf ("Could not load UI: %s\n", e.message);
return false;
}
return true;
}

//Executes some program.
public void execProgram(string command_line, string program_path, string arguments) {
string[] argv = new string[2];
argv[0] = program_path;
if(arguments != "")
argv[1] = arguments;
Pid child_pid;
int input_fd;
int output_fd;
int error_fd;
try {
Process.spawn_async_with_pipes(
command_line,
argv, //argv
null, // environment
SpawnFlags.SEARCH_PATH,
null, // child_setup
out child_pid,
out input_fd,
out output_fd,
out error_fd);
}
catch (Error e) {
stderr.printf ("Could not execute the program: %s\n", e.message);
return;
}
var iochan = new IOChannel.unix_new(output_fd);
iochan.add_watch(IOCondition.IN, read_from_channel);
}

הפונקצייה - read_from_channel מאזינה לפלט חדש מהתוכנית הרצה ומציגה אותו.
הפונקצייה - execProgram מריצה את התוכנית שברצונכם להריץ...

VALA: שינוי צבע של הגופן והרקע של תיבת טקסט...

אם אתם רוצים לשנות את צבע הרקע בתיבת הטקסט שלכם או את צבע הגופן:
private void ChangeColor(){
Gdk.Color? color = null;
Gdk.Color.parse("#ff6666", out color);
myTextView.modify_base(Gtk.StateType.NORMAL, color);
Gdk.Color.parse("#27ef73", out color);
myTextView.modify_text(Gtk.StateType.NORMAL, color);
}

יום ראשון, 2 באוגוסט 2009

VALA: אם רציתם לפתוח דפדפן ברירת מחדל של המערכת בכתובת מסויימת או סתם קובץ...

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

public void on_btnSearch_clicked (Button source) {

Gtk.show_uri(null,"http://google.com",10);

}
מחרוזות לדוגמא שניתן לפתוח בשיטה זאת (נקראות URI):
file:///home/george/Desktop/image.png
http://java-gnome.sourceforge.net/
mailto:george@example.com

יום שבת, 1 באוגוסט 2009

VALA: אם רציתם להוסיף טקסט ל-TextView אז...

אין פונקצייה אחת שישר מוסיפה טקסט לטקסט שכבר קיים ב Widget מסוג TextView, אבל זאת פונקצייה לדוגמא שעושה את העבודה:
public static void GtkTextviewAppend(Widget textview, string text)
{
TextIter ei;
Gtk.TextBuffer tbuffer = ((TextView)textview).get_buffer();
tbuffer.get_end_iter(out ei);
tbuffer.insert(ei, text, -1);
}

TextView :VALA מוצג בלי מסגרת מסביבו


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


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

יום שישי, 31 ביולי 2009

הרבה איקונים איכותיים לעיצוב התוכנה שלכם

מצאתי את האתרים האלו:
http://sixrevisions.com/resources/40-beautiful-free-icon-sets/
http://www.noupe.com/icons/40-new-high-quality-and-free-icon-sets.html

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

VALA: רציתי להציג לפניכם את השלד הבסיסי של תוכנה בשפת VALA

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

using Gtk;

public class MyApp {

private Window window;

public MyApp () throws Error {
var builder = new Builder ();
builder.add_from_file ("gui.ui");
builder.connect_signals (this);
this.window = builder.get_object ("win_main") as Window;
this.window.destroy += Gtk.main_quit;
}

public void run () {
this.window.show_all ();
Gtk.main ();
}
}

int main (string[] args) {
Gtk.init (ref args);
try {
var app = new MyApp ();
app.run ();
} catch (Error e) {
stderr.printf ("Could not load UI: %s\n", e.message);
return 1;
}
return 0;
}

את הקובץ gui.ui, אתם יוצרים על ידי glade, בתוכנה את אתם יכולים לעצב ממשקים גרפיים שונים...
ועל תשכחו לקרוא לחלון win_main...

יום חמישי, 23 ביולי 2009

MONO ומה יש לי לספר עליו...

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

מה רע?
תפקידו של MONO לממש את המכונה הוירטואלית של C# בלינוקס ומאק. הבעיה עם MONO שהיא מיישמת טכנולוגייה ששייכת למיקרוסופט ואנשי הלינוקס מודעגים שמיקרוסופט ימצאו דרכים לתבוע אותנו על שימוש בפטנטים שלהם. אני אתן לכם דוגמאות לתוכנות שכבר כתובות ב C# והרבה ממכם ניסיתם אותן או עובדים איתן:
banshee, F-SPOT, Gnome-DO
העיניין הוא שככל שיגדל מספר התוכנות שכתובות בשפה זאת, מה יהיה עם אובונטו ברגע שמיקרוסופט תדרוש פתאם להסיר את כל התוכנות האלו ממערכת ההפעלה?
לאחרונה, היתה הודעה באינטרנט מצד נציג מיקרוסופט שהם מבטיחים לא לתבוע כל עוד נשתמש בחלק מטכנולוגייה של השפה (אנו בעכרון לא צריכים יותר מאלו) ואני אגיד לכם שאני לא יודע עד כמה זה באמת רשמי ועד כמה יש להם באמת מילה.
רציתי לספר לכם את זה כי אני בטוח שחלקכם לא מודעים בכלל לכל הסיפור הזה.

http://www.workswithu.com/2009/07/07/mono-now-safe/
http://news.cnet.com/8301-13505_3-10280924-16.html
http://ldn.linuxfoundation.org/blog-entry/microsoft-vs-tomtom-abandon-mono-right-now

מהצד הנטרלי שלי:
אני בזמני החופשי לומד C# (זה מה שרוצים היום בשוק העבודה וכסטודנט חשוב לי להתקבל לעבודה כל שהיא בתחום התכנות כמה שיותר מהר). התחלתי לכתוב תוכנה קטנה שבקשו ממני וכתבתי אותה על לינוקס, ב-MONO DEVELOP שהיא סביבת העבודה הרישמית של MONO. לקחתי את התוכנה וניסיתי לקמפל אותה בוינדוס עם סביבת העבודה המפורסמת - ויזואל C# בגירסה 9, גיליתי (וזה היה צפוי) שהתוכנה התקמפלה מצויין. אני מוכרח לציין, ניסיתי לקרוא לכמה פונקציות ב C# שתפקידן לשמור את הגדרות של תוכנית לתוך קובץ והן לא התקמפלו על MONO כי MONO עדיין לא מיישם את כל הפונקציונליות של C# ועדיין ישנם חלקים חסרים. גם לא ניסיתי ליצור ממשקים גרפיים דרך MONO אבל ראיתי שהוא עובד מול ספריות- GTK+ (אפילו בגירסה לוינדוס..) וגם שם יכולות להופיע בעיות אי תאימות רבות.

http://mono-project.com/Main_Page

משהו שרציתי לשתף:
בגלל כל ההתעניינות שלי בנושא עליתי על שני פרוייקטים מעניינים שלא מצריכים טכנולוגייה של מיקרוסופט ועדיין מחזיקות את אותם היתרונות של C# או לפחות חלקן:
1. השפה - JAVA
מחזיקה ביתרון של תאימות להרבה טכנטולוגיות קיימות כגון התחברות למסדי נתונים וגם מספיק לכתוב קוד אחד שירוץ גם על לינוקס וגם על וינדוס וגם על מאק וכדומה שזה חוסך הרבה עבודה.
עם הפרוייקט שמצאתי, ניתן להשתמש בסיפריות של GTK+ עם JAVA וזה נותן לנו כל מה שאנחנו צריכים בשביל לכתוב תוכנה איכותית שמותאמת בצורה אידיאלית לסביבת העבודה של גנום.
http://java-gnome.sourceforge.net/4.0/

2. השפה - VALA
הרעיון הוא ליצור שפה שמאוד דומה בתחביר ל C# ו-JAVA שמומרת בסופו של דבר ל C ואז מקומפלת.
אנו מרוויחים קלות כתיבה של קוד והתוכנה מרוויחה מהירות של שפת C.
השפה מאוד צעירה ולא מושלמת אבל היתרון שלה שהיא באה מתוך הקהילה. אין עבורה הרבה מדריכים, והינה כמה קישורים:
http://live.gnome.org/Vala
http://en.wikibooks.org/wiki/Vala_Programming

וגם אני לא יכול שלא להזכיר את Python:
זאת שפת סקריפט ולכן עובדת יותר לאט אבל קלות הכתיבה והתמיכה ב GTK+ ממנה הופכים אותה לשפה שגם ראויה לציון. בשפה זאת נכתבו לא מאט ישומים כגון נגן המוסיקה - Exaile.

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

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

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