פענוח לוגים של ספארק בעזרת XSLT

22 יולי, 2010

ספארק (Spark) היא תוכנת IM שמבוססת על פרוטוקול XMP שנכתב על ידי קהילת JABBER בהשראתו של ג'רמי מילר .
לקוח ביקש להציג לוגים של עובדים שלו אך שכח להגדיר את השרת לרשום את הלוגים שהוא מעביר, בבדיקה התגלה שללא ידעת העובדים, או ההנהלה, תוכנת הספארק שמרה לוגים מקומיים של השיחות תחת תיקיות היוזר (באקס פי DOCUMENTS AND SETTINGS וב7/VISTA תחת USERS)
נתיב מלא לדוגמא C:\Documents and Settings\david\Spark\user\david@server.dom

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

הנה דוגמא לקובץ לוג:

<transcript><messages><message><to>david@server.dom</to><from>zoza@server.dom/Home</from><body>what's up man?</body><date>2010-01-14 16:48:13.70 GMT+02:00</date></message><message><to>zoza@server.dom</to><from>david@server.dom/Spark</from><body>Sometimes i feel like somebody's watching me.</body><date>2010-01-14 16:49:07.837 GMT+02:00</date></message></messages></transcript>

את השורה הנוראית הזאת של XML סידרתי היררכית על ידי XML TOOLS של NOTEPAD++ ועכשיו היא נראית ככה:

<transcript>
    <messages>
        <message>
            <to>david@server.dom</to>
            <from>zoza@server.dom/Home</from>
            <body>what's up man?</body>
            <date>2010-01-14 16:48:13.70 GMT+02:00</date>
        </message>
        <message>
            <to>zoza@server.dom</to>
            <from>david@server.dom/Spark</from>
            <body>Sometimes i feel like somebody's watching me.</body>
            <date>2010-01-14 16:49:07.837 GMT+02:00</date>
        </message>
    </messages>
</transcript>

אמנם לא כזה נורא לקריאה אבל כשזה שיחה של כמה שעות, רצוי לסדר את זה בצורה שגם לעין יהיה נוח.
הנה הXSL שבו השתמשנו בשביל להציג את הלוגים: (Filename: Chatlog.xsl) יש לזכור את השם כי מיד נקרא לו גם מתוך קובץ הלוג

<html xsl:version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    lang="en">
     <head>
          <title>Chatlog</title>
     </head>
     <body>
          <table border="1">
               <tr>
                    <th>Date</th>
                    <th>From</th>
                    <th>To</th>
                    <th>Body</th>
               </tr>
               <xsl:for -each select="transcript/messages/message">
                    <tr>
                         <td><xsl:value -of select="date"></xsl:value></td>
                         <td><xsl:value -of select="substring-before(from, '@')"></xsl:value></td>
                         <td><xsl:value -of select="substring-before(to, '@')"></xsl:value></td>
                         <td><xsl:value -of select="body"></xsl:value></td>
                    </tr>
               </xsl:for>
          </table>
     </body>
</html>

עכשיו בשביל לסדר את קובץ הXML, נדחוף בשורה הראשונה את הקריאה לXSL, כדלקמן:

< ?xml-stylesheet type='text/xsl' href='Chatlog.xsl'?><transcript><messages><message><to>david@server.dom</to><from>zoza@server.dom/Home</from><body>what's up man?</body><date>2010-01-14 16:48:13.70 GMT+02:00</date></message><message><to>zoza@server.dom</to><from>david@server.dom/Spark</from><body>Sometimes i feel like somebody's watching me.</body><date>2010-01-14 16:49:07.837 GMT+02:00</date></message></messages></transcript>

ואם עכשיו נפתח את קובץ הXML בדפדפן האהוב עלינו, בהנחה שהקבצים נמצאים באותה תיקיה (הXSL והלוג) תופיע בפנינו טבלה שתתעד את השיחה בצורה נוחה לקריאה!

מדריך , , , , , , , , ,

ייצוא מידע ממסד נתונים מיי אס קיו אל בפורמט מופרד בפסיקים

29 יוני, 2010

טיפ נחמד למי שמתעסק המון עם מסדי נתונים

select [fields] from [database] INTO OUTFILE '/tmp/db.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

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

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

כיף

מדריך , , , , ,

חכה לי נמרוד שפירא

27 יוני, 2010

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

מקשקש , , , ,

באנגים מינרלים

24 יוני, 2010

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

מצחקק , , , , , ,

יצירת מדריך טלפונים למכשירי Snom3XX במרכזיות Asterisk

11 אפריל, 2010

מערכת הפעלה: לינוקס
הפצה: CENTOS 5.3 – ELASTIX
ממשק ניהול לאסטריסק: FREEPBX
טלפונים בשימוש: SNOM300, SNOM360, אמור לעבוד על כל סנום מסדרת 3XX, יכול להיות שגם על עוד דגמים.
למי שיצא לבנות מרכזיות אסטריסק עם IP-Phones מתוצרת סנום, יודע שהאינטגרציה ביניהם לא מלאה, הפרויז'נינג צולע ולהגדיר באופן אוטומטי מכשירים הופך לפעמים לסיפור מעצבן.
היום התבקשתי להגדיר מדריך טלפונים למכשירי סנום, שימשוך באופן דינאמי את השלוחות המוגדרות במערכת ויציג אותן במכשיר.
מכיוון שהנושא מאוד מורכב וארוך, היום אני אגע אך ורק באיך ליצור את הקובץ XML ומה הצורות הנכונות לקרוא לו מתוך המכשיר, אם אתם מעוניינים לדעת עוד על עבודה של סנומים מול אסטריסק, הרגישו חופשי להשאיר תגובה ואני אשתדל לעזור ולהרחיב.
הדבר הראשון שאתם צריכים לעשות זה לגשת לתיקיה נגישה מהשרת ווב, וליצור שם קובץ PHP. (אם אתם רוצים שהקובץ יהיה דינמי ויתעדכן בכל פעם שמישהו קורא לספריה, אם לא חשוב לכם עידכונים רציפים של המדריך טלפונים אפשר לשים את זה בכל תיקיה ואחר כך להעתיק למקום שנגיש לטלפונים בתצורת XML.)
הסקריפט PHP הבא, יגש למסד הנתונים של האסטריסק (בפרט FREEPBX, אם יש לכם מערכת ניהול עם ממשק משתמש אחרת, בשינוים קלים תוכלו להתאים את זה לעצמכם) וימשוך משם את כל השלוחות, כולל טלפונים, ויהפוך את זה לפורמט XML אשר הסנומים יודעים לקרוא.
הסקריפט (אל תשכחו לעדכן את פרטי מסד הנתונים עם נתוני ההתחברות שלכם):

<?php header('Content-type: text/xml');
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print "<snomipphonedirectory>\n";
print "<title>Phone directory</title>\n";
print "<prompt>Prompt</prompt>\n";


require_once('DB.php'); //PEAR must be installed

$db_user = 'user_for_db';
$db_pass = 'pass_for_db';
$db_host = 'hostname_for_db';
$db_name = 'name_of_db';
$db_engine = 'mysql';

$datasource = $db_engine.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name;

/* datasource in in this style:

dbengine://username:password@host/database */


$db = DB::connect($datasource); // attempt connection

// if connection failed show error
// don't worry about this for now, we get to it in the errors section
if(DB::isError($db)) {
        die($db->getDebugInfo());
}

$sql='Select extension,name from users  where name not like \'%test%\'  order by name';

$results = $db->getAll($sql);
foreach($results as $result){
                print "<directoryentry>\n\t\t\t<name>" . $result[1]. "</name>\n";
                print "\t\t\t<telephone>".$result[0]."</telephone>\n\t\t\t</directoryentry>";
}
print "</snomipphonedirectory>";

?>

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

#! /usr/bin/perl

open DIR,") {
        chomp;
        $_ =~ m/^[0-9]{3}/ && do {
                ($ext,$data) = split(/[ ]+\=\>[ ]+/,$_);
                ($pw,$name,$email,$other) = split(/,/,$data);
                ($first,$last)=split(/[ ]+/,$name);
                $dir{"
$last$first"}=[$first,$last,$ext];
        };
}


print "
Content-type: text/xml\n\n";
print '< ?xml version="
1.0" encoding="UTF-8" ?>
 <snomipphonedirectory>
  <title>Directory</title>
  <prompt>Dial</prompt>
';

for $key (sort keys %dir) {
        ($first,$last,$ext)=@{$dir{$key}};
print "
<directoryentry>
  <name>$first $last</name>
  <telephone>$ext</telephone>
  </directoryentry>
";
}


print '
  </snomipphonedirectory>';

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

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

מדריך , , , , , , , , , , , ,

איפוס סיסמת ROOT אבודה לMYSQL באובונטו

7 אפריל, 2010

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

sudo /etc/init.d/mysql stop

עכשיו נריץ את השרת בהתעלמות מטבלת ההרשאות המובנת

sudo mysqld --skip-grant-tables &

התחברות מקומית למסד הנתונים:

mysql -u root mysql

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

UPDATE user SET Password=PASSWORD('MYPASSWORD') WHERE User='root'; FLUSH PRIVILEGES; exit;

אפשר עכשיו לעשות ריסטרט לסרביס כרגיל (service mysql restart or /etc/init.d/mysql restart)

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

מדריך , , , , ,

מדריך: התקנת וובמין (WEBMIN) על אובונטו

6 אפריל, 2010

למי שלא מכיר, וובמין הוא פרוייקט קוד מקור פתוח עם ממשק וובי לניהול מערכות לינוקס. בעזרת כל דפדפן תוכלו לנהל חשבונות משתמשים, שרת אפאצ'י, ביינד, שיתוף קבצים ומלא מודולים נוספים שאפשר להוסיף בקלות. וובמין בא למלא חלל לאנשים שלא כל כך מסתדרים עם הCLI ורוצים עוד אפשרות ויזואלית להסתכל על המכונה שלהם.
לאחרונה התבקשתי על ידי אחד מהמשתמשים שלי להתקין על VPS שהוא משתמש בו את הממשק, המכונה מריצה אובונטו וההתקנה לקחה בדיוק שתי שניות (give or take a minute :) ) אז החלטתי לצרף את הצעדים הקלים להתקנה.

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

sudo apt-get install perl5 libnet-ssleay-perl

2. נוריד את הגרסא האחרונה של וובמין (נכון לכתיבת המדריך הזה הגרסא האחרונה היא 1.51, רצוי לבדוק אם השתנה משהו אם התרחקתם בתאריך מתאריך כתיבת המאמר, את רשימת ההורדות הכי עדכנית תוכלו למצוא כאן: http://sourceforge.net/projects/webadmin/files)

wget http://sourceforge.net/projects/webadmin/files/webmin/1.510/webmin_1.510_all.deb/download

3. התקנה של החבילה

sudo dpkg -i webmin_1.340_all.deb

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

sudo apt-get install -f

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

/etc/webmin/miniserv.conf

מדריך , , , ,

מדריך: התקנת שרת קאונטר סטרייק סורס על אובונטו

4 אפריל, 2010

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

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

ונתחיל: שלב ראשון, ליצור את התיקיה שממנה השרת ירוץ.

sudo mkdir /srcds

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

 cd /srcds

מסדרים את ההרשאות לתיקיה.

 chmod 755 /srcds

ומורידים את תוכנת עידכון השרת של הלף לייף 2 (כן כן, אתם עדיין במדריך הנכון)

 sudo wget http://storefront.steampowered.com/download/hldsupdatetool.bin

בואו נתן לו הרשאות ריצה

 chmod +x hldsupdatetool.bin

ועכשיו גם נריץ אותו! (מי היה מאמין) אתם תתבקשו לקרוא את הסכם השימוש, וגם לאשר שאתם מסכימים.

 ./hldsupdatetool.bin

קובץ ההתקנה סיים. הוא פתח קובץ בשם steam. אפשר למחוק עכשיו את קובץ ההתקנה!

 sudo rm hldsupdatetool.bin

יש לבצע עידכון של שרת הסטים

 ./steam

עכשיו הגענו לחלק הארי של ההתקנה. (אם אתם בחיבור מרוחק עם ניתוקים, מומלץ להריץ את זה ברקע עם & בסוף. או תחת סקרין

 ./steam -command update -game "Counter-Strike Source" -dir .

 

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

כשתחזרו, תוכלו כבר להריץ את השרת!

הנה פקודה לדוגמא.

 ./srcds_run -game cstrike -autoupdate +map de_dust

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

 

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

מדריך , , , ,

איך להפוך את VIM לIDE של BASH SCRIPTING

1 אפריל, 2010
סגור לתגובות

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

התקנה של התוסף בשלוש שלבים מהירים
מורידים את הקובץ לתיקיה.

cd /usr/src
$ wget -O bash-support.zip http://www.vim.org/scripts/download_script.php?src_id=9890

מתקינים את התוסף!

$ mkdir ~/.vim # במקרה והתיקיה לא קיימת עדיין
$ cd ~/.vim
$ unzip /usr/src/bash-support.zip

מוסיפים את התוסף לקובץ ההגדרות של וים

$ vim ~/.vimrc
filetype plugin on

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

מדריך , , , , ,

הפצה חדשה של לינוקס: אומבטו!

4 ינואר, 2010