Записи по тегу "домохозяйке на заметку"

| перейти в дневник

Нюансы сериализации Java

Задача: угадать, что будет при десериализации следующего объекта и попытке его распечатать:

1.
public class Bublik implements Serializable { public transient String word = "Jopa"; pubic String toString() { return word.toString(); } }

2.
public class Bublik implements Serializable { public transient String word = "Jopa"; public Bublik() { word = "Jopa"; } pubic String toString() { return word.toString(); } }
| перейти в дневник

Самоинициализация окружения в Perl

В оригинале - мой ответ на вопрос на Stack Overflow. В общем идея в том, что надо запустить себя в потомке после инициализации в нем окружения. Да, тот редкий случай, когда exec используется по назначению :)

use Cwd 'abs_path'; use File::Basename; my $self = abs_path($0); my $bindir = dirname( abs_path($0) ); unless ($ENV{APP_ENV}) { warn "No APP_ENV, will try to get from bin/env.sh"; exec("source $bindir/env.sh && /usr/bin/perl $self") || die "$!"; }
I have env.sh in my bin folder with following content:

export APP_ENV=development

The idea behind this approach is that I don't need to bother if I set my ENV variables before running my Perl code or forget to do it. I need just to run my Perl program and it will take care about preparing environment for itself.
| перейти в дневник

Linux: Прокидываем SSHFS на сервер при помощи приватного .ppk ключа от PuTTY

1. Конвертируем .ppk ключ в формт OpenSSH.

Для этого ставим PuTTY и используем утилиту puttygen
emerge -v net-misc/putty
puttygen site.ru.ppk -O private-openssh -o site.ru.id_rsa

2. Поднимаем sshfs соединение:

sshfs -p 2113 username@site.ru:/ mountpoint -o IdentityFile=/home/snake/temp/site.ru.id_rsa
В данном примере используется не стандартный для SSH 22-ой порт, а 2113, указанный в параметре -p, в IdentityFile надо передавать полный путь до приватного ключа, сгенеренного в п.1.
Если что-то пошло не так, понять где корень зла поможет режим отладки, включаемый добавлением в команду параметров -odebug,sshfs_debug,loglevel=debug
| перейти в дневник

Смотрим использование памяти работающим процессом

Для примера, возьмем и запустим Perl процесс, из которого посмотрим статистику использования памяти вот таки образом:
perl -e 'system("cat /proc/$$/status")'

Дальше разбираемся, что к чему:
VmSize - кучно code, libs, stack, heap
VmRSS - объем занимаемой оперативной памяти на данный момент
VmData - heap
VmStk - stack
VmExe - code
VmLib - libs

Объем физической памяти в некоторых случаях может уменьшаться даже при росте общей памяти, занимаемой процессом, тогда как размер хипа обычно наглядно говорит о том, пухнет ли процесс или нет.


| перейти в дневник

Как получить список файлов, измененных в рамках определенной стори

Для начала административный фактор. Разработчики должны указывать, к какой сторе относится коммит и не делать коммитов к нескольким сторям сразу. Сразу скажу, что рефакторинг лучше тоже отделять от коммитов по сторям и присвоить ему какой-то уникальный номер, например, "^0000". Таким образом мы будем отдеять мух от котлет. Собачка перед номером стори означает, что это сторя из определенного баг-трекера, если у вас несколько трекеров, можете на каждый из них придумать свой уникальный префикс.

[cut="cокращено"]Ну и в довершение сама команда, позволяющая получить все файлы, которые были затронуты в результате работы над сторей:
for i in $(git log --grep='\^7265' | grep commit | grep -v revert | awk '{print $2}'); do git diff-tree --no-commit-id --name-only -r $i >> 7265.txt; done[/cut]
| перейти в дневник

Как посмотреть на все хранимки и триггеры в БД MySQL.

mysqldump --triggers --routines --no-data -t database_name | less

По сути этим кодом мы снимаем дамп базы database_name без данных и определений таблиц. По опыту, смотреть на этот вывод гораздо приятней, нежели любоваться на SHOW TRIGGERS или выборку из схемы.
| перейти в дневник

Google.com без регионального редиректа

Небольшой хинт на тему того, как попасть на google.com из любой страны без редиректа на региональный домен (google.fr, google.ru, etc.). Для этого достаточно ввести в адресную строку браузера http://www.google.com/ncr, где ncr расшифровывается как No Country Redirect.