ארכיון פוסטים בקטגוריה ’קוף-קוד‘

PHP / צבע אקראי

שלישי, 8 בינואר, 2008 מאת ailaG

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

במערכת ניהול תוכן שלי, שהממשק בה די פשוט ולא צבעוני בעליל, אם המשתמש שמר פרטים חדשים הוא מקבל הודעת אישור במסך הבא. לא מקבל את מספר השינויים (למי יש כוח לספור אותם?) אלא רק איזה <p class=’sysMsg'>השינויים נשמרו.</p>
מבחינת שימושיות, אפילו לי לא נוח כשאני שומרת כל פעם שינוי אחר - הריבוע "השינויים נשמרו" נשאר זהה.. זה נראה כאילו סתם עלה אותו מסך, ולא באמת התבצע שינוי במערכת.

אז נעשה שכל פעם הצבע של הריבוע ישתנה.. ממילא זו לא המערכת הכי אסתטית :-)

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

CSS:
.sysMsg { border: 3px solid red; }

PHP:
srand(time());

# for ANY random color:
print '<p class="sysMsg" style="border-color: #' . str_pad(dechex((rand()*rand())%(pow(16,6))),6,'0').';">השינויים נשמרו.</p>';

# for stuff that isn't too white, say, maximum 0xDD (**) for each value of R, G, B
$ceil = 34+34*pow(16,1)+34*pow(16,2);
print '<p class="sysMsg" style="border-color: #' . str_pad(dechex((rand()*rand())%(pow(2,24)-$ceil)),6,'0').';">השינויים נשמרו.</p>';

מה עשינו פה?

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

שנית, לגבי המתמטיקה.

בדוגמה ללא ההגבלה לצבע לא לבן:

  • pow(2,24)‎ נותן 0x‎ 1,000,000 , כלומר אחד מעל לצבע הכי גבוה שיש לנו (זה בעצם pow(2,8) . pow(2,8) . pow(2,8)‎ (*) ). מכיוון ש rand() % $x נותן לנו מספרים מ 0 ועד ‎$x-1 זה נותן לנו באמת מספר רנדומלי בטווח הזה.
  • ‎rand() * rand()‎ - לא קראתי את המדריך, אבל פרקטית כשהשתמשתי באחד המספרים יצאו קטנים מדי. כנראה שהמספר הרנדומלי הרגיל לא גדול מספיק. ככה הגדלנו אותו. מי יודע, אולי צריך להכפיל שוב, אבל אני מעריכה שלא.
  • צריך לוודא שיוצא לנו מספר של 3 או 6 ספרות, אחרת דפדפנים יתקעו על זה.

בדוגמה עם ההגבלה:

  • רצינו שכל ערך יהיה עד ‎0xDD, כלומר רצינו להחסיר ‎0×22 מהגבול העליון של כל ערך. בדצימלי ‎0×22 = 34 .
  • כדי להוריד 22 מהספרה השלישית והרביעית, לדוגמה, נצטרך להכפיל את 22 ב 16 בחזקת 2.(***)

והאמת?

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

$sysMsgColor = '#';
foreach (array('r','g','b') as $c)
$sysMsgColor.= dechex(rand()%226+30);

אבל הפתרון הזה לא מעניין מספיק לטעמי בשביל פוסט.

——————–

(*) למי שלא מכיר,קוד לצבע בHTMLית מורכב משלושה מרכיבים: אדום, ירוק, כחול. לכל אחד מאלו צריך להזין ערך בין 0 ל-255, כלומר בין 0 ל- ‎2^8-1 . זה צריך להיות בהקסאדצימלי, ושלושת הערכים מופיעים זה אחרי זה. למשל צבע שהוא זה 13 אדום, 255 ירוק, 0 כחול ולכן ‎#0DFF00 .

(**) הסימון ‎0xWHATEVER פירושו שהערך (WHATEVER) מוצג בהקסא. ואז למשל A = 9+1 .

(***) מה זאת אומרת פנית לכוכביות? עדיף לחפש חומר על בסיסי ספירה.

מקLדת עVרית לMAC

רביעי, 19 בספטמבר, 2007 מאת ailaG

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

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

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

תגידו שלום ל HebrewCapped.

מסתבר שאפל (או BSD?) הקלו גם על התוכניתנים ועשו שגם התכנות למק יהיה מסודר. וכך הגדרת פריסת המקלדות נעשית בקובץ XML נוח. לוקחים את הקובץ, עורכים ומקבלים את מקלדת החלומות.
לזו כאמור קוראים HebrewCapped**. היא עדיין לא גמורה ואני אשמח להערות ותוספות פה או בפורום בתפוז.

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

לקובץ ולהוראות הכנסו לפורום בתפוז

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

** קראתי לה ככה רק בגלל capitals, עכשיו אני רואה שהשם שלה נראה כמו handicapped. שזה ממש לא קשור. צריך לחשוב על שם אחר..

אתם יודעים שהגעתם לחנונלנד כש

שני, 6 באוגוסט, 2007 מאת ailaG

כשבהרצאה על JavaScript/DOM המרצה מסביר שיש document, ואומר שאפשר להשתמש במה שמתחתיו, כמו..

ואתם עונים: document.all!

וכולם צוחקים.