Author Archive

Nvidia Optimus on Ubuntu 12.04

Nvidia Optimus is a neat solution to the problem of power consumption vs. 3D performance in notebook computers – the computer comes with two graphics chips, an “integrated graphics package” – the Intel GMA embedded graphics and a “discrete graphics package” – the Nvidia chip. The setup works by running your normal windowing UI on the integrated graphics, only powering on the discrete graphics when you want to play a 3D game or something like that.

Recently I had the fortune to work on a Lenovo T420 laptop1 that has this setup, and it works very well on MS-Windows with the Nvidia Optimus driver – you get battry life around 10 hours with the 9 cell battery.

Unfortunately I spend most of my day in Linux and because Nvidia does not support Optimus on Linux, you have the poor choice of either running everything on the Nvidia chip – decreasing battery life to around 4 hours if you’re careful, or disabling the Nvidia chip completely.

The solution comes from the Bumblebee project – a software suite to handle the switching between the Nvidia discrete graphics and the embedded Intel chip.

The setup is pretty simple to understand (though I suspect under the hood there are many problems to be solved): A service runs and waits for users to ask for 3D accelerated graphics. When a user starts a program using the special command optirun, the service loads the Nvidia driver, starts an X server using the discrete graphics (with the display disconnected from the actual screen) and runs the specified program on that “background” X server. Then it copies the visuals from the program that is rendered using the discrete graphics to a window on the main X server. When the program terminates, the service closes the secondary X server, removes the driver and powers down the graphics card – putting us back into the ~10 hours battery life.

The Bumblebee software had some problems in the past, but the current version – 3.0 – looks very good. There are a few seconds of delay when you launch the application (setting up the driver and X takes some time), but performance is about what you’d expect when running directly on the hardware. All this without any configuration – that is if you are running on the stable Ubuntu version.

As I can’t leave well enough alone, and whenever someone says “alpha”, I say – “I wants”, I’m running the current Ubuntu 12.04 alpha (which is not so bad – due to be released in a couple of months, it works very well). And of course Bumblebee doesn’t work properly here.

So this is what I had to do to get it running:

(more…)

  1. with an amazing 1600×900 screen, what they call “HD+”. Truly a work of art []

LDAP authentication on Fedora 16 (and why it sucks)

In my company we (still) use an Active Directory domain controller to manage central authentication1, which is not set up very well – no SSL and the Kreberos setup is not done properly. This makes gives much trouble to modern Linuxes (e.g. not Ubuntu. yes – I’m looking at you Shuttleworth.)  such as Fedora, as Fedora have done away with NSS/PAM based LDAP authentication and instead relies on SSS – which I have yet managed to get working or even find a tutorial on how to set it up properly.

So if you still want to authentication your Fedora installation against the company’s Active Directory – and can’t/won’t rely on Winbind’s notably flaky behaviour, you can always install NSS/PAM ldap authentication manually. Unfortunately its not as easy as it sounds, and as I learned the hard way – one must pay careful attention to SELinux. So here’s the recipe:

(more…)

  1. there are a lot of MS-Windows workstation, so it kinds of makes sense – but we are planning to phase it out in favour of OpenLDAP, so don’t worry about it []

Scanning Hand Written Texts Into High Quality Digital Files

The purpose of this exercise is to convert a hand written note – such as your signature – to high quality digital files that can be used to embed “hand write” into documents – such as when someone asks you to fax them a “signed” copy of the PDF they emailed you. You’d be surprised how often that happens around here.

Required Ingridients:

  • A computer with The GIMP installed
  • Your handy smart phone with a 5MP or better camera
  • A good pen and paper.

So anyway, here’s the process from top to bottom, with pictures:

  1. Sit down at a proper table, and using a good black heavy-line pen1 on a white clean high-density paper, write what you need to write – slowly and deliberately but without pauses. Try not to smear the ink so you get clean continuous lines, otherwise the quality suffers a lot.
    (more…)
  1. in this shot I used a 0.7 permanent marker – which is just overdoing it – probably any 0.7 pen will work []

מתכון: מרק חורף צהוב עם אפונה

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

מרכיבים:

  • 400 גרם אפונה יבשה צהובה. אפשר להחליף בעדשים חומות או עדשים כתומות (אם כי הן קטנות יותר ונוטות להפוך לעיסה במרק). לא הייתי ממליץ לשים אפונה יבשה ירוקה או עדשים ירוקות כי המרק לא יקבל את הצבע הצהוב הרצוי שלו.
  • בצל גדול
  • תפוח אדמה בינוני או גדול. ניסיתי להחליף לקולורבי – תחליך התפ”א הסטנדרטי שלי וזה עובד, אבל לא מדהים.
  • שני גזרים בינוניים שטופים. אני בד”כ לא מקלף אותם למרות שאני יודע שיש כאלה שאוהבים את זה, ואני אומר – כל הויטמינים בקליפה!
  • 2-3 פטריות – להסמיך את המרק. אפשר גם להחליף בקישוא אבל זה נותן למרק צבע יותר ירוק.

הכנה:

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

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

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

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

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

לבשל עוד 10 דקות על אש קטנה ולקרוא למרק “מוכן”.

בתיאבון.

Enhanced by Zemanta

Setting up Subversion svnserve daemon on CentOS

When you want to host a Subversion repository on your CentOS (or RHEL) server, its quite annoying that the only options available to serve your repository are SSH (using the svn+ssh:// schema in the Subversion URLs – it is basically set up out of the box, not tweaking necessary) and Apache’s mod_dav_svn (using the http:// or https:// schema in the Subversion URLs – this is somewhat complex to setup but good instructions are easy to find on the web).

The main advantage of either of these methods is security: both have easy transport security (SSH by default, Apache if you set it to server over SSL) and are easy to setup authentication for (SSH authenticate against the system’s accounts using PAM and Apache authenticate against basically anything with a simple setup).

The main disadvantage of these methods are that they are slow (SSH is apparently somewhat faster then HTTP) and when supporting multiple large projects of many developers I started running into all kinds of weird connection errors when you try to manipulate many files on many projects at the same time.

Subversion itself offers another alternative using their own network service called svnserve – this is a standard unix daemon that listens on a specific port1 and uses a native protocol to communicate with Subversion clients (using the svn:// schema in Subversion URLs). It offers very good performance, but no transport security (encryption) by default. Another major problem with using svnserve as a network service is that while CentOS ships the binary itself (it is required as part of the way that the svn+ssh:// protocol is implemented) it doesn’t ship any support files to run it as a standalone service nor to help with its configuration. Also by default svnserve can only authenticate users using its own Apache-style password database file – which makes it unsuitable to integrate in large organizations.

(more…)

  1. port 3690 by default []

כן, אני מצטט את XKCD – תתבעו אותי

הקומיקס הזה של XKCD מתאר בדיוק את הרגשת חוסר האונים שיש לי לפחות פעמיים כל שבוע:
All long help threads should have a sticky globally-editable post at the top saying 'DEAR PEOPLE FROM THE FUTURE: Here's what we've figured out so far ...'

[מוצג כאן ללא אישור המחבר – אני מקווה שלא אכפת לו]

מאמר אקראי על תשישות החלטות

באחד הפודקסטים שאני שומע – Stack Exchange Podcast עם ג’ואל ספולסקי1 וג’ף אטווד – ספולסקי הזכיר כבר כמה פעמים מחקר שנעשה באוניברסיטת בן גוריון על “גורמים חיצוניים בהחלטות שיפוטיות” שבו החוקר מדד את אחוז ההצלחה בבקשות חנינה בהשוואה לכמה זמן עבר מאז ארוחת הבוקר של השופט ששומע את בקשת החנינה.

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

(more…)

  1. “ג’ואל” זה “אינגלות” של “יואל”, אז זה משעשע אותי לפעמים להגיד “יואל ספולסקי” – אני לא בטוח מה לספולסקי יהיה להגיד על זה אז לא אכתוב כך, אבל אני בטוח שהוא משועשע מזה שחיפוש “Joel” בגוגל מביא את האתר שלו במקום הראשון בעוד ש-Billy Joel אפילו לא בעמוד הראשון []

כמעט מתכון: מרק חורף בלי מאמץ

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

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

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

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

Installing Nvidia drivers on Fedora 16 – the wrong way

This is how to install the official Nvidia drivers on Fedora 16. Its the “wrong way” because in Fedora you should install the Nvidia drivers using RPMs provided by rpmfusion.org, or “better” yet – use the open source nouveau driver that is provided with Fedora 16 and at this point does enough rudimentary 3D acceleration to run GNOME 3.

So why do that? because you can try the latest beta drivers from Nvidia’s web site (the stable drivers are usually already supported by rpmfusion) and sometimes the rpmfusion complex kernel module setup doesn’t work well – especially if you install custom kernels.

If you still want to do this the “right way”, head over to this article on “If !1 0” to get the simple instructions.

Warning: this procedure requires you to know the password for the “root” account and login using the text console.

(more…)

Script Day: find the oldest file in a directory structure

This piece of script came in handy when I wrote a utility that “recycles” space on a logging partition: before log rotation archives the current log file, we move some old log files (depending on some archive freshness policy) to a remote storage that archives older files.

The problem is that the “old archive storage” also has limited disk space and I got fed up managing the archive by hand. The solution I came up is to scan the hierarchy of  log files in the storage (logs are stored hierarchically according to origin and type) and delete old files until I have enough room to move some newer files in. That way the “old archive storage” is always kept full and keeps as much back-log as possible and does this automatically.

The piece of code that determines which files we want to delete works like this:

  1. Use find to list all the files in the directory structure
  2. Pipe it to perl and collect all the file names in a list
  3. Use perl’s sort operator to compare the modification times of each file in the list and show them in the order (i.e. oldest first)
  4. Use head to get just the first file

So it looks like this:

find /mnt/httpd_back/ -type f | perl -nle 'next unless -f; push @files, $_; END { foreach $file (sort { @a=stat($a); @b=stat($b); $a[9] <=> $b[9] } @files) { print $file; }}' | head -n1

Note: normally we use head to get some initial output and terminate the process early before it does more costly work – when head has enough data it terminates the pipe sending SIGPIPE to the upstream process and that usually terminates the process that generates the data. In this case – and in all other cases involving sort – the upstream process buffers all the data in its own memory before outputting anything, so it can sort everything, and using head here is just a filter to get what I want and does not actually save me from doing all the work. I could have easily done the same thing inside the perl script itself by replacing the block of  print $file; with print $file; last; – this has the same effect as using head, because head will send SIGPIPE to perl after getting the first print and will terminate it. Deciding which way you want to go is probably more about readability of the code and I prefer my original version because its easier to read to non-perl specialists.

I can then just remove that file, see if I have enough room to move in the newer log file and if no – repeat the process.

This would work well, I believe, but it may be inefficient if I find a bunch of small files and I want to copy in a large file. So what I did next is to take advantage of the fact that all the log files I have are named using the following simple format:

<service>-<type>_log-<year><month><day>.gz

and that allows me to easily find all the log files that record the same day and eliminate them at the same time. Subsequent moving of additional files will likely succeed because I cleared out all the log files of an entire day. If not, I can always go and clear up another day’s worth of logs.

Enhanced by Zemanta