вторник, 21 августа 2012 г.

Life update

Давно не писал. Видимо это потому, что не о чем. Жизнь моя постепенно пересобирается меняется к лучшему. Последние события:
  • поработал тестером игор в одной конторе
  • поработал (вернее заканчиваю работать) начинающим геймдевом в той же конторе
  • update: теперь работаю в EA
  • параллельно с этим поступил и в очередной раз проучился первый курс (лол, скоро так и не изучив толком матан буду наизусть все билеты так отвечать без подготовки) в университете (на этот раз питерский СЗТУ с его бесплатной заочкой)
  • встретил очень милую девочку с которой хочу связать жизнь update 24.12.12: okay, something went wrong
Обо всём по порядку.

Работа

Работать пошел в самую обычную гей-ммм-дев контору. Совершенно случайно попал. Проработал 4 месяца тестеровщиком (вернее это официально я являлся тестером такой срок, на самом деле ближе к концу я только и делал что автоматизировал некую внутреннюю деятельность python и bash-скриптингом). Собрался уже было уходить. То что мне что-то по разработке в такой конторе могло светить я даже и не рассматривал, это уж слишком фантастически.

Однако же. Предложили внезапно стать гейм-девом. В результате немного потрахался вспомнил C++, потрахался научился пользоваться Visual Studio и ШIИDOШS (сколько ж лет я это всё всерьез не трогал, ох). Немного узнал про компьютерную графику, повидал что из себя представляют игры изнутри. Немного изучил особенности современных и относительно современных железяк (телефоны, планшеты). И ничего интересного. Странно. Нет, разрабатывать игры самому с нуля — это конечно интересно, но я то просто занимался допиливанием и портированием (а что ж еще можно доверить начинающему разработчику). В результате еще 7 месяцев я официально считался разработчиком.

Внезапно осознал что это всё конечно интересно и увлекательно, но такой болезненный путь что был мне уготовлен за такое количество денег меня не устраивает. Такие дела. Сейчас ищу что-нибудь более прибыльное ибо денег банально не хватает на жизнь.

Учёба

С самого начала мне с вузами не очень везет: то в армию заберут, то захочется заочного обучения, которого нет в НовГУ по моему направлению. Нашел годный вуз в Питере, полностью устраивающий своими условиями: бесплатная заочка, долги с любого курса можно тянуть хоть до диплома (хотя оно мне не особо бы пригодилось, с самого начала был настроен всё сдавать без фейлов) и прочее. Но вот незадача: этот вуз присоединили к какому-то анальноминирально-сырьевому горному илитному быдловузу, а это тоже самое что и расформирование вуза. Сейчас там полный трэш и неразбериха и новые условия меня совершенно не устраивают. В общем планирую не учиться ближайшее время и никуда не поступать.

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

суббота, 23 апреля 2011 г.

Приобрел нетбук

Прошло около месяца, как я приобрел подержанный Asus EEE PC 1015P у своего друга за 10 килорублей. Расскажу немного о том что я на него установил и как настроил.


Что мне собственно хотелось:
  • энергосбережение
  • нормальную работу железа нетбука
  • шифрование домашней директории
  • удобную пользовательскую среду

Надеялся на нем попользоваться Arch GNU/Linux, но как разработчика меня пока больше устраивает Gentoo. Поставил и то и другое, но Arch оставил как запасную ОС.

Перед сборкой @system и @world стОит позаботиться о настройках компилятора. В make.conf я прописал:
CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j5 -l5"
EMERGE_DEFAULT_OPTS="-v --jobs=5 --load-average=5.0"
Последние строки означают, что компиляция будет производиться не более чем в 5 потоков и не более 5 пакетов одновременно, в зависимости от текущей нагрузки на процессор.

По поводу энергосбережения написано много чего здесь. Всё железо работает изкоробки™ при правильной настройки ядра (см. gentoo-wiki). Для app-laptop/laptop-mode-tools (не забудьте поставить сервис laptop_mode в загрузку) в /etc/laptop-mode/laptop-mode.conf отмечу кое-какие важные настройки:
BATT_HD_POWERMGMT=254
LM_AC_HD_POWERMGMT=254
NOLM_AC_HD_POWERMGMT=254
MINIMUM_BATTERY_CHARGE_PERCENT=3
HIBERNATE_COMMAND="/usr/local/bin/hibernate"
ENABLE_AUTO_HIBERNATION=1
Первые три строчки нужны для того, что бы винт не щелкал зазря (паркуется читающая бошка, по всей видимости для энергосбережения; у меня powertop не показывает никакой разницы, а значит полезного в этом меньше, чем вредного). Бошка должна парковаться только в случае, если ноут оказался, например, в состоянии невесомости (в преддверии удара об стену или пол). Впрочем можно вообще написать CONTROL_HD_POWERMGMT=0 и что-то вроде hdparm -B 254 /dev/sda 2&>> /dev/null в /etc/local.d/local.start. Последние строчки означают, что надо выполнить гибернацию в жесткий диск при сильно разряженном аккумуляторе и при выключенном питании. Скрипты hibernate и standby выглядят примерно одинаково (основное различие в предпоследней строчке, в standby будет echo -n mem > /sys/power/state):
su sbar -c 'DISPLAY=:0 XAUTHORITY=~sbar/.Xauthority alock -bg image:center,file=/home/sbar/pix/locked.png -cursor theme:name=mini -auth passwd' &
#su sbar -c 'echo disconnect >> /home/sbar/.mcabber/mcabber.fifo'
su sbar -c 'DISPLAY=:0 /usr/bin/gajim-remote change_status offline'
mpc stop
/etc/init.d/alsasound restore
chvt 5
echo -n disk > /sys/power/state
hdparm -B 254 /dev/sda >> /dev/null
Музыка вырубается перед гибернацией и восстанавливаются уровни громкости. Не очень хочется открыть лэптоп на какой-нибудь лекции по физике и всем дать послушать кусок буфера радио "Воруй-убивай". Также экран блочится с помощью x11-misc/alock (собран с поддержкой pam), если конечно запущены иксы.

Скрипт /etc/acpi/default.sh для sys-power/acpid выглядит примерно так:
#!/bin/sh
set $*
group=${1%%/*}
action=${1#*/}
device=$2
id=$3
value=$4
log_unhandled() {
logger "ACPI event unhandled: $*"
}
case "$group" in
button)
case "$action" in
power)
#/sbin/init 0
/usr/local/bin/hibernate
;;
lid)
if [[ $(cat /sys/class/power_supply/BAT0/status) == "Discharging" ]]
then
/usr/local/bin/standby
else
su sbar -c 'DISPLAY=:0 XAUTHORITY=~sbar/.Xauthority alock -bg image:center,file=/home/sbar/pix/locked.png -cursor theme:name=mini -auth passwd' &
fi
;;
*) log_unhandled $* ;;
esac
;;
ac_adapter)
case "$value" in
*) log_unhandled $* ;;
esac
;;
*) log_unhandled $* ;;
esac
Теперь кнопка power переведет в режим гибернации, закрытие крышки при включенном питании просто заблочит экран, а при отключенном еще и переведет в спящий режим в память.

В иксы я вхожу самопальным init-скриптом mydm (он запускает startx для определенного пользователя), не люблю я дисплей-менеджеры (ведь я один пользуюсь этим нетбуком).

Шифрование домашней директории настроил с помощью encfs.
В ~/.bash_profile не зашифрованной директории:
cd ..
sudo encfs --public /home/.$USER /home/$USER -- -o nonempty
cd $USER
source .bash_profile
Теперь автоматически при загрузке запустить иксы нет возможности. Поэтому решено было написать следующий костыль в .bash_profile (в уже зашифрованном и примонтированном home):
[[ -f ~/.bashrc ]] && . ~/.bashrc
if [[ $TERM != screen.linux &&
! $(ps uax | egrep 'X.*:0' | grep $USER | grep -v grep) ]]
then
echo -n '>>> X11 is not running. Run X11 (and GTFO from the shell)? [Y/n] '
read ANSWER
if [[ $ANSWER != n ]]; then
/etc/init.d/mydm restart
exit
fi
fi
Теперь после входа в систему и ввода двух паролей надо нажать Enter для запуска иксов и "n" если нужно просто попасть в шелл. Спрашивать оно будет только если иксы не запущены. Не лишним также будет написать в .bash_logout нечто вроде этого:
if [[ $(who | grep $USER | wc -l) -eq 1 ]]
then
cd ..
(sleep 10 &&
(sudo umount $HOME 2&>> /dev/null) && echo 'home is unmounted'
) &
fi
Теперь при выходе из системы последнего пользователя зашифрованный раздел отмаунтится (в случае если за 10 секунд пользователь не залогинится снова).

В качестве оконного менеджера я использую awesome. После небольшой работы напильником виджета состояния батареи, написания некоторых своих виджетов (например индикатор раскладки клавиатуры на основе x11-apps/skb) — вполне можно пользоваться:
function skb_widget()
p = io.popen("skb -1")
text = p:read()
p:close()
return "[ <b>" .. text .. "</b> ]"
end

Свой конфиг ядра пожалуй оставлю здесь.

P.S.: не знаю почему поехало форматирование всего и вся, но трогать не буду. -___-

среда, 5 января 2011 г.

Купил вебку

Вместо того что бы готовиться к экзаменам, как обычно я занимаюсь какой-то фигнёй. Купил себе вебку (ну надо же себе хоть какой-то подарок на НГ сделать) «Creative WebCam Live! Chat IM» (на коробке написано «Supports USB Video Class (UVC) for Plug & Chat (No CD installation)» и «Works with Mac & Linux»; приятно что такие устройства все-таки выпускают). Включил поддержку UVC в ядре, попробовал повещать свою рожу в интернеты.

Не понятно почему нельзя из одного видео-устройства читать данные сразу нескольким процессам, поэтому полез смотреть что можно сделать. Надеюсь какой-нибудь фокус вроде vloopback поможет мне.

UPD 15.01.10: Сегодня посмотрел OpenCV. Отлично определяет местоположение моей рожи в пространстве. Жаль только что на моем ущербном железе нереально с этим работать, 1 fps получается при такой нагрузке на проц. :(

вторник, 16 ноября 2010 г.

Борьба с кодировками IDv3-тегов

Ненавижу когда IDv3-тег имеет кодировку, отличную от UTF-8. Особенно ненавижу когда такая кодировка стоит в аудиопотоке. Музыку я всегда на одном плеере слушаю — mpd. Настроена скроббилка из mpd в libre.fm (да да, я скробблю исключительно для себя, на случай если захочу откопать название интересной уже прослушанной песни или просто посмотреть статистику). Если в тегах закорючки — они заскроббятся именно в виде закорючек, что очень неприятно.

С файлами, которые находятся на локальной файловой системе я борюсь с помощью mid3iconv, но вот как быть с музыкой, которую я слушаю по сети? (Та же музыка из вконтакта кишмя кишит этими неправильными mp3-файлами). Для борьбы с аудиопотоками я начал разработку своего костыля «tagconvd». Это http-сервер, который висит в памяти и ждет, когда к нему подключится клиент по адресу «http://127.0.0.1/http://путь/к/потоку.mp3». Он пропустит этот аудиопоток через себя, сконвертировав теги.

четверг, 21 октября 2010 г.

Nothing changes

Отстрелялся. Служил в центре Санкт-Ленинграда :3 Попал кстати говоря случайно туда. В целом — нормально, но в обычной части не хуже на самом деле.

Вышел из академ-отпуска как раз на 9-й неделе и сразу же перевелся с ПриМата на ПОВТ.

UPD 03.11.10: Сделать пока ничего интересного не успел, надо учиться. От предмета «Программирование на ЯВУ» освободился, сдав пару лаб, которые я писал на Си. Вместо унылых лаб, изъезженных еще в колледже буду делать что-то интересное на весь год (скорее всего драйвер файловой системы для Linux).

И да, создал git-репозиторий для всякой всячины.

вторник, 20 октября 2009 г.

Валю в армию

Продолжу вести блог ≈через год (надеюсь).

воскресенье, 4 октября 2009 г.

Математические программки

Давно я что-то не писал, наверно потому что внезапно стал учиться.

Буду выкладывать здесь всякие программки связанные с математикой (некоторые из них лабы, некоторые просто делал для себя), что б после армии было по чему вспоминать математику. Пишу на разных ЯП в зависимости от настроения или требований преподов.
  1. Метод хорд и метод половинного деления для поиска корней уравнений
  2. Решение СЛУ методом Жордана-Гаусса
  3. Матричный метод и метод Крамера для решения СЛУ
  4. Численное интегрирование (методом трапеций и методом Симпсона) и вся лаба с отчетом (что бы было по чему вспоминать LaTeX)
  5. Вычисление формул для (a + b)^n треугольником Паскаля (с выводом в TeX)
  6. Однопараметрическая оптимизация (поиск экстремумов функций) методами поразрядного приближения и золотого сечения
  7. UPD 03.12.10: Всё сюда теперь кладу.