-Поиск по дневнику

Поиск сообщений в eugene20237

 -Подписка по e-mail

 




Высокопроизводительный NIO-сервер на Netty

Суббота, 30 Августа 2014 г. 16:16 + в цитатник
Чтобы не потерять классную статью запощу сюда: http://habrahabr.ru/post/136456/
Про то как использовать netty в сервере майнкрафт более чем 1000 игроков онлайн. Там описаны важные подводные камни, эту инфу больше нигде не найдёшь. Советую почитать всем кто пользуется Netty.

Метки:  

Linux: Установка Oracle JDK8 или JDK7 на Ubuntu 12.04 LTS и Debian

Воскресенье, 24 Августа 2014 г. 11:52 + в цитатник
Вот тут всё написано для Ubuntu: http://askubuntu.com/questions/56104/how-can-i-ins...prietary-java-jdk-6-7-8-or-jre
Вот тут для Debian: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html

Быстрый путь для Ubuntu 12.04 такой:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

Быстрый путь для Debian:
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
apt-get install oracle-java8-installer

Далее в .bashrc хорошо бы добавить такую строчку:
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

Метки:  

Мотивация и дисциплина программиста на удалёнке

Четверг, 24 Апреля 2014 г. 03:08 + в цитатник
Коллеги спрашивают как я работаю на удалёнке Решил накатать заметку на эту тему. В ней я излагаю общие принципы и причины поведения программистов на удалённой работе. Конкретные приёмы, возможно, последуют позже в виде сборников в одном посте.

В этом блоге я уже много раз писал о мотивации. Кого действительно интересует эта тема, смогут найти в моём дневнике множество конкретных трюков. Но всё это просто так не заработает, если нет глобального понимания причин того, что нас воодушевляет, а что нет. Невозможно ответить на вопрос "Что делать?", без ответа на вопрос "Почему?".

Данные мысли относятся не только к удалённой работе, но и к любой. Однако на удалёнке важность факторов самостоятельной мотивации и дисциплины возрастает в разы, т.к. кроме самого работника их больше никто не поддерживает. Нет родителей в курсе дела, нет воспитателей, нет преподавателей, нет рядом начальника, нет старших офицеров - нет ни одного кнута из тех к чему привык человек. И теперь кнут необходимо заменить интересом, вслед за которым придёт правильный настрой.

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

Мотивация

Факторы, влияющие на мотивацию удалённого работника:
(отсортированы по убыванию значимости)

1. Общее настроение.
2. Тип задач.
3. Сон, воздух, питание и жилище.
4. Режим деятельности.
5. Возможное вознаграждение от задачи.

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

Общее настроение

Эту причину почему-то частенько опускают в других статьях по мотивации. Уж не знаю почему об этом так мало говорят, но важность этого пункта необходимо осознать. Ваше настроение - это самое важное! Суть в том, что во время работы необходимо иметь элементарный позитив во всём, что вы делаете. Общий фон должен быть положительный. Вы ни о чём не должны беспокоится, не должны ни на кого злиться или обижаться. Так же вы не должны находиться в апатии. На вашем лице должна красоваться улыбка независимо ни от чего! Трудно? А кому щас легко? Для того чтобы эффективно работать вы должны в корне пересмотреть свою жизнь в том случае, если вам не хватает элементарного позитива в течение дня. На это влияет множество факторов, некоторые из которых я рассмотрю в этой статье. В целом обретение внутренней радости - настолько индивидуальная задача, что решать её вам придётся самим. Вот, гляньте этот ролик, чтобы примерно почувствовать о чём речь.

Тип задач

Я несколько лет искал волшебную таблетку от лени, пока не понял одну простую истину - я занимаюсь не своим делом. Необходимо относиться к своим конкретным задачам с таким же хорошим чувством, как к любимому человеку. Если у вас другое отношение к рабочим задачам, то надо себе признаться в том, что вы, вероятно, боитесь признать - эта работа не для вас. Вывод очевиднейший и очень простой, но почему-то большинство людей панически бояться его сделать. Но это придётся признать! Если вы только пришли на удалёнку, то больше не можете себе позволить браться за те задачи, которые вы делать не хотите. Думаете, что обнищаете тогда и умрёте с голоду в канаве? Но это бред )) Посмотрите статистику сколько людей умирает, например, в автомобильных авариях и сравните его со смертностью от смены работы. Может быть вас это удивит, но смертность от смены работы имеет нулевой показатель. А причина очень проста: как только в вашей жизни освободилось место от лишней ерунды, то оно сразу же заполняется чем-то более актуальным и полезным. Так всегда бывает.

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

Гораздо чаще требуется поменять не работу, а задачи которые вы на ней получаете. Строгий начальник? Ничего не получится? А вот нифига, если вы точно уверены, чего хотите или чего не хотите, вам пойдут на встречу. Если же не пойдут - меняйте работу и не тратьте своё жизненное время впустую.

Как определить какие задачи вам по душе?
Возьмите лист бумаги и напишите там то, что вы уже пытались делать и оно вам понравилось. Неважно хорошо это получалось или нет. Далее напишите то что вам не нравится выполнять и для каждого пункта найдите объяснение - почему? А затем из этих конкретных своих обязанностей, которые вам нравятся, выделите суть процесса. Подумайте, где бы вы ещё могли делать что-то подобное, исключая свой основной вид деятельности. Это поможет вам понять суть своих истинных предпочтений.
Всегда важна суть ваших задач и гораздо менее важен "антураж". Совсем не важны ваши планы на это дело и что вы вообще об этом думаете. Совершенно не имеет значения предполагаемый результат этих задач, их перспективность. Для внутренней мотивации это всё не важно и с этим придётся смириться, если вы будете следовать советам из моей заметки.
Суть задач - это процесс, который вы будете реально выполнять. Например, может оказаться, что какому-то "механику" всё равно что собирать - компьютеры или велосипеды. Он получает одинаковое удовольствие от этих процессов, хотя "антураж" этих областей очень разный. Всегда зрите в корень, какой процесс вам придётся выполнять. Если чувствуете внутреннее напряжение к этому процессу - не стоит браться за такую работу! Так вы сделаете лучше и себе и работодателю. Если чувствуете легкость - отрывайте с руками эту задачу!
Во время выбора правильного пути вас частенько может запутать страх. Не стоит давать ввести себя в заблуждение: если мы не хотим выполнить какую-то задачу из страха (например, перед общением с кем-то) и при этом нет другого внутреннего напряжения, то эту задачу также надо брать! Внутренний страх - это признак силы ваших будущих возможностей, которые притаились за его стеной! Вам нужно только преодолеть собственную глупость (да, страх - это глупость) и тогда высвободиться большая свобода и лавина мотивации.
Многие люди никогда не замечают своих настоящих желаний и живут своими или чужими идиотскими планами на карьеру. Если у вас есть проблемы с мотивацией, то вы скорее всего ошибаетесь относительно своих истинных предпочтений и вам следует в корне пересмотреть свои карьерные планы.

Поймите, лень - это не норма! Это нонсенс, которого внутри нас не должно быть. Энергичность, энтузиазм, интерес - вот нормальные состояния программиста! И мы обязаны к ним вернуться, если потеряли сокровище своей души на нежелательной работе.

Сон, воздух, питание и жилище

Некоторые люди возможно будут удивлены, увидев такие простые факторы аж на 3 месте моего скромного рейтинга. По моим наблюдениям они оказывают недооценённое влияние на мотивацию удалённого работника. Большее влияние чем многое другое. Мы все - люди, а значит, подчиняемся одним и тем же биологическим законам. В киберпанковской литературе часто пытаются скрыть эту часть жизни, выпятив на первый план компьютеры. Думаю, что сейчас уже сформировался эдакий образ хакера, который пьёт целыми днями пиво, а ночью с друганами совершает великие дела. Нео, так вообще спал в наушниках , а ночью кодил или ходил на свидание с Тринити, а затем приходил несчастный и невыспавшийся на скучную работу. Я призываю читателей моей заметки выбросить из головы такой образ "программиста"!

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

  • хорошо спать (во время ложиться и вставать ни в коем случае не по будильнику);
  • качественно питаться (и ни в коем случае не переедать);
  • гулять на свежем воздухе;
  • иметь жилище с нормальной системой вентиляции (никто из моих знакомых в мегаполисе даже не задумывается об этом);
  • иметь идеальное для себя рабочее место дома.

Каждый из этих факторов напрямую и непосредственно влияет на ваше настроение, т.к. вы - биологическое существо. Какими бы мутантами нас не сделала техногенная цивилизация, основы организма сейчас те же самые, что и много лет назад. Чтобы получить хорошую мотивацию на удалённой работе необходимо вести здоровый образ жизни. Если вы не согласны, у вас нет времени, возможности, желания всем этим заниматься, то нет смысла дальше читать эту заметку. Возвращайтесь когда пройдёт достаточно времени

Есть огромное количество информации в интернете как всё это устроить. Вот ещё интересная статья про измерение CO2 попалась недавно. Темы большие, поэтому подробно останавливаться на этом не буду.

Режим деятельности

Сколько часов в день вы работаете? 10? 12? 15? А знаете сколько надо? 4! Ну может быть 6, когда много дел. Для программиста это вполне достижимо, если он правильно оценивает сроки и грамотно проектирует свой проект. Всё остальное время надо проводить в движении и желательно на воздухе, с друзьями или как-то иначе, но не за компьютером. Любопытным дополнительным эффектом является то, что таким образом вы начнёте гораздо больше ценить свое компьютерное время и работать гораздо эффективнее. Конечно, поначалу сидеть у компа придётся больше, но нужно всё время стремиться сокращать это время.

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

Ваш дом - ваша крепость и теперь вы несёте ответственность за всё, что в нём происходит, поскольку это сказывается на вашей рабочей мотивации. Всё должно быть максимально удобно для работы, как с технической, так и с эмоциональной точки зрения. У вас должны быть приемлемые отношения с родными и близкими, с кем вы контактируете в течение дня. Если это не так, нужно немедленно это исправить.

Возможное вознаграждение от задачи

Если за какую-то задачу обещают ОЧЕНЬ много денег и заказчик надёжный, то это вероятно сподвигнет вас на труды. Однако такие условия чрезвычайно редки. Если вознаграждение будет солидным, но всё таки не достаточно огромным чтобы пересилить нежелательную для вас задачу, то вы рискуете с треском провалить такой проект на удалёнке. Не беритесь за это.

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

Дисциплина

Что же вообще такое дисциплина? Вот, гляньте Эллиота, прежде чем читать дальше. Когда вы уже достаточно замотивированы, необходимо всю эту заряженность распределить внутри себя, преобразовать в систему. Если этого не сделать, мотивация закончится! Уйдёт в идиотские занятия. Мотивацией надо распоряжаться очень бережно, поэтому нужна система. И её вам тоже придётся изобретать самим, поскольку всё индивидуально. Хочу отметить, что изобретать надо не какие-то жёсткие правила или техническую методику, а то, как вы будете следовать своим планам. Например, написали мы несколько пунктов для исполнения в блокноте - как их дальше исполнять чтобы не забакланить? Вот это настоящая самостоятельная дисциплина и поддержкой для неё служит мотивация.

Начать можно с изучения тайм-менеджмента. Вообще всё, что хорошо для бизнеса, для стратегии, хорошо и для вас. Удалённый работник по сути начальник и у него есть как минимум один подчинённый - это он сам. Вопрос в том, насколько хорошо он подчиняется? Дисциплина должна быть достаточно строгой и это не загнобит вас, если вы прилежно соблюдаете первый и другие пункты по мотивации.

Помните, важна и дисциплина и внутренний импульс, который складывается из многих описанных мной факторов. Всё это должно действительно складываться в один большой плюс, а затем умножаться на дисциплину, делая человека счастливым и давая мощнейший выхлоп на удалённой работе.
matrix2 (540x221, 70Kb)

Метки:  

Настройка NFS клиента в Windows

Суббота, 05 Апреля 2014 г. 23:46 + в цитатник
У меня получилось экспортировать только отдельные каталоги. Всю файловую систему на сервере экспортировать не получается: в этом случае виндовый клиент отказывается переименовывать папки. Также нормально работать получается только с файлами в маске 0666 и более. Если снять доступ на "запись для других", то винда отказывается редактировать такие файлы, хотя пользователь винды является хозяином файла на линуксовом сервере. Так что придётся везде проставлять 0666.

Содержимое /etc/exports на сервере у меня следующее:
/home/blade 192.168.80.0/24(rw,no_root_squash,no_subtree_check,async,no_wdelay,all_squash,anonuid=1000,anongid=1000,insecure)
/var/www 192.168.80.0/24(rw,no_root_squash,no_subtree_check,async,no_wdelay,all_squash,anonuid=1000,anongid=1000,insecure)

В винде папки монтируются так:
mount -o fileaccess=666,anon,nolock,mtype=soft,timeout=2retry=5 192.168.80.27:/home/blade Y:
mount -o fileaccess=666,anon,nolock,mtype=soft,timeout=2,retry=5 192.168.80.27:/var/www Z:

Когда мы настроили NFS в Linux сервере и подключились к нему в винде, по умолчанию винда создаёт файлы с доступом на выполнение (+x). В результате получается некрасиво... Чтобы это исправить надо:
1. Включить административные службы NFS в компонентах Windows: http://www.home.agilent.com/agilent/editorial.jspx...090&nid=-11143.0.00&id=2106090
2. Изменить значения по умолчанию для клиента NFS: http://technet.microsoft.com/en-us/library/cc754304.aspx
После этих настроек службу NFS в винде необходимо перезапустить!
Таким образом можно избежать данной проблемы.
windows_nfs_settings (700x567, 170Kb)

А чтобы винда не спрашивала каждый раз хочу ли открыть какой-то файл в локалке нужно скопировать и вставить следующую строку в текстовый файл и сохранить как openfilefix.reg:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Associations]
"LowRiskFileTypes"=".bat;.reg;.vbs;.php;.tpl;.txt;.html;.htm;.css;.jpg;.png;.psd;.doc;.xml;.js;.java;.class;.c;.cpp;.make;.phar;.jar;"
Далее кликнуть по файлу двойным щелчком чтобы информация прописалась в реестр. Взято отсюда.

Также можно сделать следующее:
1. Go into internet options, through control panel or IE.
2. Set the "Launching Applications and Unsafe Files" option to enabled.
This will give you a retarded bar in IE that says your security settings are unsecure or something.
To get rid of it:
1. Start>Run>gpedit.msc>Enter
2. Under Administrative Templates>Windows Components>Internet Explorer set the "Turn Off the security settings check feature" to enabled.
If you don't have Internet Explorer under windows components:
1. right click Administrative Templates and click "Add/Remove Templates"
2. Click Add button
3. Navigate to "C:\WINDOWS\system32\GroupPolicy\ADM\"
4. Hold shift and highlight all the files that start with "inet"

Взято отсюда.

Метки:  

LINUX: ускорение SSH

Воскресенье, 23 Марта 2014 г. 18:35 + в цитатник
Вот тут описано как можно ускорить SSH соединение для X11Forwarding:
http://blog.samat.org/2006/05/08/best-ssh-options-for-x11-forwarding

Если коротко, то суть в этом:
ssh -c arcfour,blowfish-cbc -XC root@server.com

Шифрование arcfour работает быстрее всего.

Метки:  

LINUX: Наконец-то появились нормальные шрифты!

Вторник, 11 Февраля 2014 г. 21:34 + в цитатник
Обнаружил, что если в Ubuntu 13.04 отключить сглаживание шрифтов и выбрать по умолчанию, например, Arial, то система совершенно нормально всё отображает! Наконец-то! Может так и раньше можно было сделать, но я только сейчас это нашёл. Нормальные шрифты как в винде.

Также можно сделать подобное в PHPStrom (IDEA), добавив (заменив) следующие строчки в файлах phpstorm64.vmoptions и phpstorm.vmoptions:

-Dswing.aatext=false
-Dawt.useSystemAAFontSettings=gasp

В каталоге /opt/phpstorm/bin или том, где он стоит.
Кроме того, есть другой путь для улучшения отображения шрифтов в Java-based приложениях: http://nixmash.com/php/better-looking-intellij-idea-fonts-in-linux-mint/
Обратите внимание на интересную опцию: -Dsun.java2d.xrender=true

Метки:  

LINUX: Как расшарить CUPS принтер без Samba

Вторник, 14 Января 2014 г. 03:34 + в цитатник
Linux server - Windows client

Общий доступ с помощью IPP
В качестве предпочтительного метода, при подключении клиента Windows к серверу печати Linux, используется IPP. Это стандартный, основанный на HTTP, протокол принтера, который позволяет использовать преимущества переадресации портов, туннелирования и т.д. Конфигурация очень проста и, таким образом, в сравнении с использованием Samba, меньше подвержена ошибкам. ОС Windows имеет встроенную поддержку IPP только начиная с Windows 2000.
На компьютере с Windows, перейдите к панели управления принтера и выберите 'Add a New Printer' ('Добавить новый принтер'). Далее, укажите URL. В качестве URL, тип и местоположение принтера: http://host_ip_address:631/printers/printer_name (где host_ip_address - IP-адрес сервера GNU/Linux, а printer_name - имя подключенного к нему принтрера).
Затем на компьютере с Windows установите родные драйвера принтера. Если на сервере CUPS используются собственные драйвера на принтер, то для клиента Windows можно выбрать generic postscript-принтер (например 'HP Color LaserJet 8500 PS' или 'Xerox DocuTech 135 PS2'). Для проверки правильности настроек - распечатайте пробную страницу.

Источник: https://wiki.archlinux.org/index.php/CUPS_printer_sharing_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

Если же принтер не захотел подключаться в винде без Samba, то стоит взглянуть на это.

Метки:  

Особенности LiqPay API

Вторник, 14 Января 2014 г. 00:39 + в цитатник
На мой взгляд, LiqPay API - это худший API платёжной системы с которым мне когда-либо приходилось работать. Сейчас я просто сделаю для себя пару заметок, чтобы вспомнить их, когда нужно будет снова где-то реализовывать поддержку LiqPay API.
1. Если при проведении платежа LiqPay API возвращает status=failure, но при этом оставляет поле code пустым, то скорее всего карта клиента не поддерживается этой системой или на ней не достаточно денег.
2. Если в result_url или server_url присутствует символ амперсанта "&", то такой XML не будет валидным с точки зрения LiqPay API.
3. result_url вызывается всегда ПЕРЕД server_url и содержит те же самые параметры. При этом server_url будет вызван только если в result_url пришел запрос с полем status=wait_secure.
4. LiqPay работает только с русскими и украинскими картами, ибо использует Приват-Банк.
5. LiqPay работает далеко не со всеми русскими картами стандарта MasterCard. Например, у меня он отказался работать с картой Яндекса без объяснения причин.
Просто чтобы не забыть.

Метки:  

О духовном развитии

Пятница, 23 Августа 2013 г. 07:19 + в цитатник
Всё таки дон Хуан был прав... Нет никакого духовного развития Я поясню. Под духовным развитием наш ум понимает альтернативу физическому. Нас так учили в школе и мы так думаем. Для физического развития мы качаем мускулы, а для духовного качаем дух. А т.к. дух мы себе очень плохо представляем, то нередко его подменяет ум. Получается что духовное развитие - это теоретическое развитие. Такое понимание, иногда открытое, иногда зарытое в глубинах подсознания, очень привлекательно для ленивой природы хумансов: "Живу, значит духовно развиваюсь посредством своих мыслеформ. Накапливаю опыт."

Но его нет. Развития не происходит само по себе. Ведь любое действие, которое необходимо для развития, предполагает участие физического тела. Например, остановка внутреннего диалога посредством контроля дыхания. Или даже простая аффирмация - систематическое вспоминание нужной фразы в определённый момент времени. Это требует некоторой физической работы, без которой невозможно развитие. Умственная работа, кстати, не менее физическая - тратит калории только так... Поэтому единственный путь духовного развития - это физическое развитие.

Предлагается перестать себя обманывать, называя нечто духовным развитием. Его нет. Есть просто развитие, которое предполагает всю необходимую работу.

Метки:  

Многострочные литералы в Java 6

Понедельник, 10 Июня 2013 г. 17:29 + в цитатник
Через анотации:
http://www.adrianwalker.org/2011/12/java-multiline-string.html
Можно забацать анотацию в классе и запихнуть туда многострочный текст. Потом этот текст можно читать через попу.
Теперь я могу устроить революцию и свергнуть Spring!

А вот тут есть ещё один восхитительный хак:
http://blog.efftinge.de/2008/10/multi-line-string-literals-in-java.html
http://stackoverflow.com/questions/878573/java-multiline-string


// From:
// http://blog.efftinge.de/2008/10/multi-line-string-literals-in-java.html
// Takes a comment (/**/) and turns everything inside the comment to a string
// that is returned from S()
public static String S()
{
StackTraceElement element = new RuntimeException().getStackTrace()[1];
String name = element.getClassName().replace('.', '/') + ".java";
StringBuilder sb = new StringBuilder();
String line = null;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream in = classLoader.getResourceAsStream(name);
String s = convertStreamToString(in, element.getLineNumber());
return s.substring(s.indexOf("/*") + 2, s.indexOf("*/"));
}

// From http://www.kodejava.org/examples/266.html
private static String convertStreamToString(InputStream is, int lineNum)
{
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();

String line = null;
int i = 1;
try
{
while ((line = reader.readLine()) != null)
{
if (i++ >= lineNum)
{
sb.append(line + "\n");
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}

return sb.toString();
}

public static void main(String[] args) throws Exception
{
String s = S(/*
Wow, we finally have
multiline strings in
Java! HOOO!
*/);
System.out.println(s);
}

Метки:  

Концептуальные проблемы ООП

Пятница, 10 Мая 2013 г. 00:35 + в цитатник
Проблема в том, что поведение объекта может зависеть от его внутреннего состояния. Да, это проблема! Приведу парочку примеров на Java о том, что я имею в виду.

Вот пример хорошего класса, поведение которого относительно независимо от состояния объекта:


class Simple
{
  private int a = 0;

  public void add(int b)
  {
    a = a + b;
  }

  public int getA()
  {
    return a;
  }
}


Здесь метод "add" работает одинаково независимо от значения свойства "a". А вот пример похожего класса, где метод "add" ведёт себя более изощрённо, ориентируясь на значение "a".


class Difficult
{
  private int a = 0;

  public void add(int b)
  {
    if ((float)(a % 100) / 3 == (int)((a % 100) / 3) )
      a = a + b;
    else
      a = a - b;
  }

  public int getA()
  {
    return a;
  }
}


Я специально придумал некое сложное условие, в зависимости от которого меняется поведение в методе "add". На практике могут быть множество флагов и других свойств объекта, которые влияют на поведение объекта, делая его настолько различным, что уместить это в голове уже становится сложно. Класс ориентируется на некоторые свойства, которые сам же и изменяет. Такие непредсказуемые классы неизбежно ведут к ошибкам.

Вот другой пример на языке AS3:


class D
{
  var param1: boolean;
  var param2: boolean;

  function func1(...)
  {
    .........
      if (param2)
        param1 = abc;
      else
        param1 = xyz;
    .........
  }

  function func2(...)
  {
    .........
    if (param1 && asd)
      param2 = ...;
    ...........
  }
}


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

Вот такое наблюдение. Что с этим делать пока не знаю. Пойду ещё почитаю Фаулера.

Метки:  

Linux: как вычленить только PID процесса через ps

Четверг, 09 Мая 2013 г. 16:46 + в цитатник
Допустим мы ищем процесс содержащий в своём названии строку "org.stl.optimus.MainWorkThread". Тогда вычленить его PID можно так:
ps -aef | grep -v grep | grep 'org.stl.optimus.MainWorkThread' | awk '{print $2}'
Также этот PID можно присвоить какой-нибудь переменной:
MYPID=`ps -aef | grep -v grep | grep 'org.stl.optimus.MainWorkThread' | awk '{print $2}'`

Метки:  

Ещё одна полезность TODO списков и бумаги вообще

Воскресенье, 07 Апреля 2013 г. 04:18 + в цитатник
20071126-todo-list (380x239, 202Kb)
Открыл для себя ещё одну сторону TODO списков. TODO списки на бумаге очень помогают! Когда в процессе работы возникают мелкие задачки типа: "проверить работу вот этой функции", можно записать это в TODO список и больше не хранить задачу в голове. Это реально очищает мозг! Такая практика позволяет мне концентрироваться на текущей задаче полностью и с удовольтствием. При этом не упускать ничего из виду.

Метки:  

Linux: Настройка UPS с помощью nut

Среда, 30 Января 2013 г. 23:20 + в цитатник
Настройка nut в debian описана здесь.
После выполнения этой настройки надо внимательно просмотреть файл upsmon.conf и подправить в нём параметры для автоматического отключения компьютера.

Компьютер начнёт выключаться после получения сигнала LOW_BATTERY от бесперебойника. Если нужно чтобы он отключался пораньше, то критический процент зарядки батареи UPS можно переопределить в файле ups.conf с помощью директивы override.battery.charge.low. Значение задаётся в процентах.

Точно также можно переопределить время в минутах, через которое выключится сам бесперебойник, после того как инициирует выключение компьютера. Это делается директивой override.ups.delay.shutdown.

Вот мой бесперебойник в файле ups.conf:
[ups]
driver = usbhid-ups
port = auto
desc = "BackUPS 525"
override.ups.delay.shutdown = 1
override.battery.charge.low = 75

Эти директивы могут отличаться для разных моделей бесперебойников, посмотреть их можно в статусе UPS:
# upsc ups@127.0.0.1

Кроме того эти значения можно переопределить с помощью команды upsrw:
# upsrw -s battery.charge.low=75 -u root -p ваш_пароль ups@127.0.0.1

Для SVEN Pro бесперебойников нужно использовать драйвер blazer_usb в ups.conf. Подробнее о настройке бесперебойников SVEN Pro можно почитать в этой статье. С моим конфигом тоже всё работает.
Другие опции протокола megatec (SVEN) можно посмотреть здесь.

Метки:  

Linux: как поставить новый firefox в старом Debian Squeeze

Вторник, 29 Января 2013 г. 17:48 + в цитатник
Вот тут написано как это сделать: http://lucasmanual.com/blog/?p=94

Добавляем репозитории в файл /etc/apt/source.list:

# deb http://backports.debian.org/debian-backports squeeze-backports main
# deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Эта строчка исправляет ошибку NO_PUPLIC_KEY:
# apt-get update 2> /tmp/keymissing; for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); do echo -e "\nProcessing key: $key"; gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add -; done

Проверяем ещё раз всё ли добавилось в репозитории:
# apt-get update

Затем:
# apt-get install -t squeeze-backports iceweasel

Готово.

Метки:  

Linux: восстановление данных с dd-образа рэйда

Пятница, 25 Января 2013 г. 22:48 + в цитатник
Итак, есть архивированный образ устройства с программным raid 1: sda_dd.img.gz Требуется получить доступ к файлам и востановить raid массив.

Распаковываем образ:
# gzip -d sda_dd.img.gz
Получаем файл sda_dd.img.

Полезные советы на эту тему монтирования таких образов можно почитать по этой ссылке. Тут очень удобно воспользоваться утилитой kpartx. Она есть в дистрибутиве debian и скорее всего во многих других. Она сканирует образ устройства и ищет там разделы, которые затем превращает в loop-устройства. Очень удобная вещь. Далее привожу лог команд, с помощью которых я монтрировал образ raid массива. Строчки, начинающиеся с символа "#" - это вводимые команды, остальное - вывод этих команд.

# kpartx -a -v sda_dd.img
add map loop0p1 (253:0): 0 31367156 linear /dev/loop0 2048
# fdisk -l
Disk /dev/mapper/loop0p1: 16.1 GB, 16059983872 bytes
255 heads, 63 sectors/track, 1952 cylinders, total 31367156 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/loop0p1 doesn't contain a valid partition table
# mdadm -E /dev/mapper/loop0p1
/dev/mapper/loop0p1:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 765e8e0f:2fea0fb1:2b982958:682bb83d
Name : u8:0
Creation Time : Wed Jan 23 21:05:09 2013
Raid Level : raid1
Raid Devices : 2

Avail Dev Size : 31350772 (14.95 GiB 16.05 GB)
Array Size : 15658880 (14.93 GiB 16.03 GB)
Used Dev Size : 31317760 (14.93 GiB 16.03 GB)
Data Offset : 16384 sectors
Super Offset : 8 sectors
State : clean
Device UUID : e163517f:9c20fa0d:0af0532f:0499ba00

Update Time : Fri Jan 25 20:21:33 2013
Checksum : 92c0e9f7 - correct
Events : 45


Device Role : Active device 0
Array State : AA ('A' == active, '.' == missing)

# mdadm --create --verbose /dev/md0 --assume-clean --level=raid1 --raid-devices=2 --spare-devices=0 /dev/mapper/loop0p1 missing
mdadm: /dev/mapper/loop0p1 appears to be part of a raid array:
level=raid1 devices=2 ctime=Wed Jan 23 21:05:09 2013
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 15675264K
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 dm-0[0]
15675264 blocks super 1.2 [2/1] [U_]

unused devices:
# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jan 25 22:27:42 2013
Raid Level : raid1
Array Size : 15675264 (14.95 GiB 16.05 GB)
Used Dev Size : 15675264 (14.95 GiB 16.05 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent

Update Time : Fri Jan 25 22:27:42 2013
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

Name : r2:0 (local to host r2)
UUID : 9df83c9f:f0267ad5:b00aca3c:c239bf6f
Events : 0

Number Major Minor RaidDevice State
0 253 0 0 active sync /dev/dm-0
1 0 0 1 removed
# mkdir /mnt/md0
# mount /dev/md0 /mnt/md0


В итоге имеем в папке /mnt/md0 примонтированную файловую систему raid массива. Если всё в порядке, можно записывать файл sda_dd.img на диск и снова создавать raid 1 с имеющимися данными.

Метки:  

Linux: бэкап через dd на удалённую машину

Пятница, 25 Января 2013 г. 19:51 + в цитатник
Бэкап всего диска, включая свободное пространство на удаленную машину через ssh можно сделать так:
# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k"
Она также сожмёт данные в формат gzip.

Источник: http://mydebianblog.blogspot.ru/2008/03/dd.html

Метки:  

Linux: как указать пароль для ssh заранее без ключей

Пятница, 25 Января 2013 г. 18:52 + в цитатник
Указать пароль, который потребует ввести командный интерпретатор можно и заранее:
# echo '123456' | ssh root@192.168.1.85 -o password_stdin
Но если командный интерпретатор спросит что-то вроде yes/no, в случае, если мы коннектимся к ssh-хосту впервые, то такая команда не прокатит.
Точно также можно монтировать что-то по sshfs:
# echo '123456' | sshfs root@192.168.1.85:/ /mnt/myhost -o password_stdin

Источник: http://leolik.blogspot.ru/2008/11/sshfs.html

Метки:  

Linux: блочное устройство из файла

Пятница, 25 Января 2013 г. 15:58 + в цитатник
Сделать из файла блочное устройство можно так.

Файл размером 256 Мб, заполненный нулями
# dd if=/dev/zero of=/var/lib/drbd/meta_disk bs=1M count=256

Создать блочное loop устройство
# losetup /dev/loop0 /var/lib/drbd/meta_disk

На нем так же можно создать файловую систему
# mke2fs -j /dev/loop0

Можно и подмонтировать
# mount /dev/loop0 /mnt/loop0

Источник: http://blog.zavolga.net/tech/virtual_block_device.html

Метки:  

Linux: установка Oracle JDK 6-7 в Ubuntu 12.04 и Debian

Четверг, 24 Января 2013 г. 21:05 + в цитатник
Ещё одна ссылка в блокнотик: http://habrahabr.ru/post/143113/
Там описаны разные простые способы установки Oracle JDK 7 в Ubuntu 12.04.
Самым простым способом мне показался такой.

Добавляем новый репозиторий:
# add-apt-repository ppa:upubuntu-com/java

Эта строчка исправляет ошибку NO_PUPLIC_KEY:
# apt-get update 2> /tmp/keymissing; for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); do echo -e "\nProcessing key: $key"; gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add -; done

Проверяем ещё раз всё ли добавилось в репозитории:
# apt-get update

Ставим пакет с JDK 7:
# apt-get install oracle-java7-installer

Установка Sun JDK 7 в Debian

Метки:  

Поиск сообщений в eugene20237
Страницы: 7 6 [5] 4 3 2 1 Календарь