Saturday, November 21, 2009

FreeBSD 8.0 and VMWare Workstation

(For newcomers: есть предыдущие серии.)

Lots of refactoring and cleanup in the code, о которых пишут в news://gmane.comp.emulators.vmware.tools.announce, говорит, с одной стороны, о том что работа кипит, а с другой стороны, как испаряется, вместе с монотонным понижением температуры на улице, мое терпение к open-vm-tools.

Current status

VMware Workstation 6.5.2.
open-vm-tools: 2009.11.17-210370.
% uname -v
FreeBSD 8.0-RC3 #0: Tue Nov 10 07:50:36 UTC 2009 root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC

Не работает:

  • hgfs (ядерный модуль, как всегда, вводит guest в панику при попытке монтирования). Это значит, что shared folders не работают.
  • Drag-and-Drop. Несмотря, на его полу-работающее состояние в прошлых open-vm-tools, ничего путного от текущей версии добиться не получилось.

В конце-концов я решил собрать свой вариант порта open-vm-tools, в котором выкинут неработающий мусор и сборка происходит с минимальными dependencies.

В принципе, можно конечно менерно не обновляться (как в FreeBSD 7.2 у меня до сих пор висят open-vm-tools-154848_2 от марта с.г.), но у vmtoolsd в старых версиях, например, течет память и он постепенно пухнет, опухает, тяжело ворочается и становиться неуклюжим.

Что полезного в порту

  • Мелкие утилиты (vmware-toolbox, vmware-rpctool, etc).
  • демон vmtoolsd с plugin'ом для синхронизации времени host<-guest (в комплект входит rc.subr).
  • vmware-user для copy & paste между host и guest. Кроме того, ему запрещено изменять screen resolution в guest (потому что это меня дико раздражало).

Все остальное выкусано. Для сборки нужен только Gtk 2.16. vmware-user должен запускаться где-то в районе ~/.xinitrc.

Скачать порт можно вот тут. Собирать, как обычно, а) распаковав архив куда глаза глядят и б) набрав:

# cd open-vm-tools-minimum
# make install clean

А по окончанию инсталляции, добавить в /etc/rc.conf:

vmware_vmtoolsd_enable=YES

и запустить демон vmtoolsd:

# /usr/local/etc/rc.d/vmware_vmtoolsd start

Btw, если у вас установлены проприетарные vmware tools или версия open-vm-tools из официальных портов FreeBSD, тогда удалите их сперва перед установкой этого порта и вычистите память от загруженных старых ядерных модулей и демонов.

Xorg 7.4

Т.к. драйверы мыши и видеокарты для VMware давно идут вместе c Xorg и есть в портах FreeBSD (x11-drivers/xf86-input-vmmouse и x11-drivers/xf86-video-vmware), все что тут можно посоветовать это:

  1. не давайте свежим иксам говорить с HAL касательно мыши--добавьте в /etc/X11/xorg.conf в секцию ServerLayout:

    Option   "AutoAddDevices" "false"
    

    и в секцию InputDevice для мыши:

    Driver   "vmmouse"
    

    и в /etc/rc.conf:

    moused_port=/dev/psm0
    moused_type=auto
    moused_enable=YES
    moused_flags="-r high"
    

    (после чего наберите:

    # /etc/rc.d/moused restart
    

    в cons25 у вас должен появится работающий курсор, иначе иксы без HAL не поймут где ваша мышь)

    Если вы этого не сделаете--ожидайте хаотчески скачущего курсора и паршивого настроения.

  2. убедитесь, что в секции Device в /etc/X11/xorg.conf стоит правильный драйвер:

    Driver   "vmware"
    
  3. если screen resolution в вашего лэптопа 1280x800, добавьте в секцию Monitor в /etc/X11/xorg.conf:

    HorizSync    1-10000
    VertRefresh  1-10000
    Modeline     "1280x800"  70.00   1280 1312 1344 1376  800 801 804 850
    
  4. поглядеть на минимальный готовый xorg.conf для Xorg 7.4 под FreeBSD 8 можно вот здесь.

(2009-11-22 Update)

Как оказалось, бегемот vmware-user кое как разрешает работать в Unity Mode (a feature that allows seamless integration of applications with the host desktop), ежели у вас имеется Workstation 6.5+. В порт добавилась 1 опция WITH_UNITY. Значит, набирая:

# make WITH_UNITY=1 install clean

можно (запустив vmware-user в иксах) кликнуть в меню Workstation View->Unity и наблюдать чудеса.

Правда, при таком режиме сборки порта, придется забыть про выковыривания из vmware-user пакости в виде измененияя screen resolution в guest, так что мой совет: соберайте без Unity--работает оно в связке Vista <-> FreeLSD 8 отвратительно медленно. Но выглядит, конечно, солидно. Но все-таки медленно. Но зато солидно.

Network and Sound

Тут новостей нет. Без всяких твиков с .vmx-файлами, FreeBSD в Workstation 6.5+ сразу видит сетевую карту как эмо, то есть я хочу сказать, как em0:

% ifconfig em0
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0c:29:a0:8d:b7
        inet 192.168.8.133 netmask 0xffffff00 broadcast 192.168.8.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active

Ядерный модуль vmxnet нужен только тому, кто любит составлять тикеты о багах, поэтому если это нерелевантно для вас, вы vmxnet лучше не используйте.

Звук, как и раньше, включается посредством:

# kldload snd_es137x

Пожалуй, на сегодня таки все.

Saturday, November 7, 2009

Quotes from Apprenticeship of Patterns

The book contains 35 apprenticeship patterns (see below), mostly suited for young and/or inexperienced programmers. 8 of them appears to be more or less useful for me, or speaking by the card, 8 of 35 patterns that are worth reading.

N.B.

An apprenticeship pattern attempts to offer guidance to someone working with the craft model on the ways in which they can improve the progress of their career.

Expose Your Ignorance

Show the people who are depending on you that the learning process is part of delivering software. Let them see you grow.

[...]

Software craftsmen build their reputations through strong relationships with their clients and colleagues. Conceding to unspoken pressures and telling people what they want to hear is not a good way to build strong relationships. Tell people the truth. Let them know that you're starting to understand what they want and you're in the process of learning how to give it to them. If you reassure them, reassure them with your ability to learn, not by pretending to know something you don't. In this way, your reputation will be built upon your learning ability rather than what you already know.

The Deep End

Jump in at the deep end. Waiting until you're ready can become a recipe for never doing a thing. So when you're offered a high-profile role or a difficult problem, grasp it with both hands. Growth only happens by taking on the scary jobs and doing things that stretch you.

A Different Road

[...] Ade's mentor [...] described how he went off to a Greek island for six months to become a windsurfing instructor after his first IT job. He found that he liked teaching windsurfing, but it wasn't entirely satisfying because he never got to use his brain. Afterward, it was hard for him to get back into the industry because "most HR people in big companies didn't like it."

Be the Worst

Surround yourself with developers who are better than you. Find a stronger team where you are the weakest member and have room to grow.

[...] as the weakest member of the team, you should be working harder than anyone else. This is because the goal is not to stay the weakest, but to start at the bottom and work your way up.

Reflect As You Work

[...] it is quite easy to repeat the same year of experience 10 times without making significant progress in your abilities. In fact, this sometimes can turn into anti-experience: the phenomenon where every additional year or experience merely reinforces the bad habits you have picked up. This is why your goal should be to become skilled rather than experienced.

Record What You Learn

Try to avoid falling into the trap of just writing down your lessons and forgetting them. Your notebook, blog, or wiki should be a nursery, not a graveyard lessons should be born from this record, rather than going there to die.

Create Feedback Loops

[...] the less skilled you are, the worse you are at assessing the skills of yourself and others.

Dig Deeper

One thing you will learn from trying to apply this pattern is that gaining deep knowledge is hard. This is why most people's knowledge of the computer science that supports software development is a mile wide and an inch thick. It is easier and often more profitable to depend on other people's knowledge of the fundamentals than to spend the extra effort to acquire it yourself. You can tell yourself that you can always learn it when you need it; however, when that day comes you'll need to know everything by the end of the week, but it will take a month just to learn all the prerequisites.