Заметил, что не могу переносить одиночество.
Мне очень комфортно, когда рядом кто-то есть. Даже если я работаю и нахожусь в состоянии !не трогайте меня! мне необходимо, чтобы кто-то был к комнате или офисе на фоне.
Стоит мне остаться одному, как сразу же хочется  заполнить пустоту фоном.
Что это за пустота такая?

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

Не думать о чем? Забыться от чего?

Сейчас вот проделав почти все вышеперечисленное и в очередной раз осознав, что все прошло по тому же сценарию (а причина тому уезд жены к родителям, остался я один дома на один вечер), как все обычно происходит, я решил выключить музыку и отойти от компьютера.

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

Но все же мне хочется набраться смелости и побыть наедине с собой .

 

Мне кажется, что что-то во мне изменилось и раньше я не боялся так сильно (хотя боялся наверное всегда). И эти изменения возможно уводят меня все дальше и дальше от чего-то важного.

В данный момент разрабатываю проект на Kohana. В этом проекте не малую роль играют задания выполняемые через cron. Еще не имея опыта работы с cron и Kohana я думал, что скрипты можно вызывать напрямую, а в контроллере делать проверку Kohana::$is_cli для определения вызова cli. Но как выяснилось существует модуль с версии 3.0, который эволюционировал и в 3.3 стал частью поставки Kohana по умолчанию.
Проблема в том, что Kohana 3.3 внесла некоторые изменения в свой autoload, которые несомненно более удобны. Теперь не обязательно писать классы с заглавной только первой буквой и не обязательно именовать файлы и папки в нижнем регистре. Теперь можно писать так Kohana_CLI, Class_InvalidTask и еще так InvalidTask.php.

Для прикрутки module Minion сначала я хотел было воспользоваться версией для 3.2, которая была загружена Zeelot3k в теги модуля на git. Но там оказалась поделка из более ранней 3.1. В ней используется bash скрипт для вызова index.php с параметрами, когда как в 3.3 minion просто обертка для модуля. Выложенное решение для 3.2 по моему не рабочее, по крайне мере я так и не смог запустить свой task.

После я копировал модуль с 3.3 версии.
Для запуска модуля необходимо переименовать все файлы в директории minion в нижний регистр, включая папки. так же исправить имена файлов и классов по правилам именования Kohana 3.2, т.е. Kohana_CLI на Kohana_Cli и InvalidTask в Invalidtask.
Далее подключить модуль как обычно в Kohana::modules() и исправить index.php в конце на следующий код

И все, должно работать. Создаем в папке /classes/task файл welcome.php с кодом

Далее вызываем.

Темы с вопросами о minion с официального форума:
1
2
3

Так же в решении вопроса мне помог блог участника сообщества biakaveron.
У него можно почитать про модуль подробнее.

GIT REPO: https://github.com/seyfer/minion

UPD: 2014-11-28

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

И подключил его в require, а мой портированный с 3.3 удалил. Проект на 3.2. и отлично все работает.

Просто заметка, для сохранения кода и ссылок.

Пользовался в движке не на фреймворке вот этим:

Взято отсюда: http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error

Вставил код и автоматически хочу нажать ctrl+f – это форматирование кода в нетбианс. Далее был бы ctrl+s …

Для более продвинутого отлова ошибок можно заценить на примере Kohana в этой теме на kohanaframework.org.
Создавалась мной, хотя ответ был дан в другой теме намного ранее. Не все было понятно.

В двух словах всевозможные ошибки перенаправляются на обработку в свой класс

Ну а далее на контроллер.

Сначала перечисляю сущности.
sуstems – некие системы.
preferences – некоторые настройки, сокращенно pref

pref имеет разные типы, например настройки кеша (cache) и тамаута (timeout). Таким образом pref можно записывать в одну таблицу с полями id, value, type или в две разные таблицы – prefcache и preftimeout с той же структурой. Идем дальше.

Поля таблицы system – id, name. Осуществляется связь многие ко многим через таблицу prefs_systems с полями: id_system, id_pref, type (можно вынести сюда в случае отдельных таблиц prefcache и preftimeout.

И вот зачем две таблицы pref, я хочу на каждую делать свой ORM, т.е. есть базовый ORM_Pref extends ORM и от него наследуются ORM_Prefcache и ORM_Preftimeot. Каждый работает со своей таблицей, а общие настройки в базовом классе.

В этом случае в каждой ORM прописываются связи $_has_many. В случае ORM pref все очевидно, по одной записи связей $_has_many к ORM_System. В случае с описанием ORM_System получается такая конструкция (додумался пока писал).

Вопросы:

  1. Нормально ли я придумал структуру?
  2. Могу ли я базовый класс ORM_Pref объявить абстрактным (т.к. у него нет привязанной таблицы и его не надо создавать) ?
  3. Можно ли как-то улучшить мою структуру? Если все выше правильно, то при добавления нового типа настроек я должен буду прописать связь в ORM_System, это не удобно.

UPD. 02.04.2014

Спустя полтора года мой пост выше кажется мне уже простым вопросом новичка. Решил добавить сюда еще решение по ORM

Получение свойства ORM сразу с UNCOMPRESS.

Проблема: Можно ли как-то через ORM извлекать данные, которые были записаны через COMPRESS () в mysql в BLOB?

В кохановском ОРМ такого нет. Приходится писать функции в ORM типа

Задачу решает, но было бы приятнее просто указать в каких-то правилах как извлекать столбец, как фильтры после извлечения, только эти во время.

Решение нашел коллега. В нужной ORM модели надо переопределить

В данном случае поля request и result сжаты, извлекаются под псевдонимами с распаковкой и будут доступны $model->requestUncompress, например.

Для тех, кто работает с проектом на удаленном сервере, наверняка важна комфортность этой работы, особенно если используется IDE. В моем случае IDE NetBeans. У этой иде есть особенность, она сканирует проект при открытии, а при открытии большого удаленного проекта это сканирование может происходить и 30 минут. Во время сканирования иде превращается в тормозящий тектовый редактор, невозможно перейти к ф-ии по ctrl и вообще ничего, кроме написания кода. Да и то файлик может сохраняться долго.

Для монтирования удаленной системы раньше я использовал sshfs. Описывал в этом посте.
Преимущества:
+ защищенное соединение, запрашивает пароль
+ возможность автомонтирования
+ не плохая скорость доступа..
Недостатки:
– все же не достаточная скорость доступа
– соединение часто отваливается (по таймауту, неактивности или отвалу инета).

В итоге мне приходилось часто открывать проект заново и ждать пока он пересканируется >_<.

Позже я услышал о NFS – Network File System. По сути это как подключение сетевого диска. Для развертывания необходима установка серверного пакета на сервере:

и клиентского на своей машине:

*portmap может быть заменен на rpcbind

Далее прописать папку и ip которому открыт доступ в

Строчка настройки выглядит примерно так:

или можно указать диапазон или * для всех.

Доступные опции:
ro: Только на чтение, стоит по умолчанию
rw: Доступна запись
no_root_squash: ограничивать ли рута. если не установлена эта опция, то доступ к файлам идет от пользователя nobody. если опция установлена и на клиентской машине у вас пользователь с уровнем доступа root, то он будет как бы root на серверной папке.
no_subtree_check: проверять или нет поддиректории. если открыта только одна папка и нет подпапок, то включение этой опции ускорит запросы
sync: по умолчанию asynk. включение synk более безопасно, если вдруг соединение оборвется или сервер перезагрузится, то данные в редактируемом файле не потеряются. asynk быстрее.

После настройки надо перезапустить сервер:

Хотя можно применять настройки после изменений так:

Для подключения папки на клиентской машине произвести описанную выше установку, далее просто:

Таким образом я замонтировал открытую папку /home с сервера с ip в свою домашнюю папку /mnt/srv.

Можно настроить монтирование в fstab

Тогда подключить можно

NFS
Преимущества:
+ перманентное соединение. разрывы гораздо реже (не было уже 2 дня)
+ скорость доступа. по моему проект подключенный так отсканировался быстрее, так же файлы сохраняются без задержек
Недостатки:
– безопасность. (доступ указывается для ИП, пароль не запрашивается)

memcached

Понадобилась настройка memcached (memcache) на 2 сервера. Задача оказалась не такой тривиальной. С доступом на localhost, где демон слушает по умолчанию, проблем не было. Однако на удаленный сервер достучаться не получалось. Сервера оба debian.
Возможно этот пост актуален только для меня и проблем может не возникать.
Домашняя страница проекта на code.google.

Для начала установка. Тут все просто:

Взято с мануала по memcached на php.net. Хотя при установке туда не заглядывал.
После установки можно проверить слушается ли теперь порт 11211.

Так же можно проверить настройки конфига.

После изменений конфига делаем:

Примеры выше взяты с Хабра.

В коде php используется очень просто. В данном случае у меня создается класс CACHE с singlton, приведен кусок.

И тут то и выяснилось, что на второй сервер обращения не доходят. Элементарная подмена в конфиге адреса прослушивания ничего не дала (-l *.*.*.*).
Диагностику помогут провести следующие ф-ии:

1. Показать есть ли процесс memcached

Тут мы видим, что процесс есть и запущен на нужном адресе. Памяти выделено 1000мб, пользователь nobody. 127.0.0.1 тут оказался лишним, memcached не поддерживает несколько ip.
2. Показать слушаемые порты

Точно слушает.
3. Включить вывод ошибок в php. :) Ошибок не было.
4. Догадка о закрытом порте. Если не установлено, то ставим nmap. Проверяем localhost или ip.

Можно еще так проверить. Если нет соединения, то закрыт.

Выдаст список открытых портов. В моем списке 11211 не оказалось. “Вот в чем собака зарыта”. :)
5. Смотрим iptables.

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

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

Далее порт 11211 надо открыть, но только для одного IP адреса.
Тут мне пригодились следующие ф-ии:
1. Показать нумерованный список правил и удалить правило по номеру

2. закрыть все входящие, для которых нет правил на открытие

Еще примеры:
открыть все исходящие порты
iptables -P OUTPUT ACCEPT
открыть порт 80 для всех входящих соединений
iptables -A INPUT –dport 80 -j ACCEPT
открыть 22 и 5432 порты только для конкретного IP
iptables -A INPUT -m multiport –dports 22,5432 -s IP_ADDRESS -j ACCEPT

Так же не забудьте открыть другие нужные порты для нужных ИП.

Более подробная настройка iptables в этом посте, с примерами скриптов.

Еще можно подкрутить сессии в php.ini на использование с memcached.

Для мониторинга была установлена утилита phpmemcachedadmin. В ней можно создать стек ваших серверов с memcached и смотреть статистику в приятном интерфейсе.

Цитируя сайт, откуда я хотел взять решение:

На днях мне нужно было написать небольшую JavaScript функцию (на jQuery), которая переключала бы группу чекбоксов. Т.е. все отмеченные чекбоксы должны были стать неотмеченными и наоборот.

Действительно это наверное распространенная задача переключать checkbox и она как нельзя лучше решается с помощью jQuery.


Предложенный на том сайте метод у меня почему-то не работал.

Может быть дело в том, что прошло уже 4 года и что-то изменилось в jQuery или в браузерах. Баг был в том, что когда был клик на чекбоксе, то это событие шло впереди события jQuery click и checkbox уже считался отмеченным. Соответсвенно по логике ф-ии сначала выбираются все чекбосы и все не отмеченные. Потом все делаются не отмеченными, а бывшие не отмеченные – отмеченными. Но по клику чекбокс уже считался отмеченным и не попадал в не отмеченные и не отмечался после.

Вот мое работающее решение:

В данном случае сначала выбираются все чекбоксы на странице. На них вешается ф-я выполняющаяся по click. По клику на чекбокс (не на div, это важно и это и приводило к багу в примере выше) мы поднимаемся на верхний уровень в div (var top = $(this).parent()). Далее ищем все чекбоксы в текущем div и делаем их не отмеченными, а тот checkbox на который мы нажали – отмеченным.

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

Должно работать. :)

majordomo.ru

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

Все началось в некоторую пятницу вечером. Меня не было за компьютером, я не читал письма. У меня взломали один из ящиков сайта и начали слать через него большую кучу спама. majordomo.ru присылали мне предупреждения и в тот же день отключили сервер, со всеми сайтами конечно же. Т.е. вообще никакого доступа.
О проблеме я узнал вечером того же дня, написал в техподдержку и мог сразу и решить проблему, но мне не дали доступ и передали якобы в law@majordomo.ru отдел.
Позже выяснилось, что этот их юридический отдел изволил отдыхать на выходных и отвечать на мои письма не намерены. Техподдержка же в чате ссылается на этот отдел и доступ давать отказывается.
Доступ я получил только около 15 часов дня с ответом, где мне сообщили, что через 5 минут включают сервер (т.е. я должен был сидеть караулить) и тремя выдержками из договора о том, какие санкции могут быть против меня (хотя я ни в чем не виноват) и что разорвут договор.

Нормально вообще? Я потерял доступ к серверу на почти 3 суток, мои сайты не работали все это время и получаю ответ такой, что я как бы виноват.

Теперь я решил почитать о них отзывы, т.к. меня все устраивало, а тут стало интересно, как у людей.
Не был удивлен – огромное количество отрицательных отзывов по всему интернету:
http://hostreviews.ru/provider.php?ident=majordomo
http://www.cy-pr.com/hosting/hoster/majordomo/
http://www.hostobzor.ru/opinion/op.php?pid=77
http://hosting101.ru/majordomo.ru
http://majordomo.hosting-obzor.ru/otzyvi
http://siterost.ru/hosting/majordomo/

Положительных практически не видел, кроме конечно же страницы отзывов на самом majordomo.ru . :)
http://www.majordomo.ru/service/responses

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

На самом деле я еще не прочитал ее целиком, сейчас чуть дальше середины.
Пишу потому, что возможно ожидал большего от т.н. “экзистенциализма”, т.к. сам считаю себя близким его приверженцем.
Может быть я не переживаю с героем книги в полной мере, т.к. не совсем понимаю его. Мой подростковый экзистенциализм давно прошел, а тот, который наступит с приближением старости еще далеко. Сейчас возможно самый лучший период в моей жизни и если у меня и бывает тошнота, то связана она не с моим мироощущением.

Что меня отталкивает в книге, так это бесполезность многих ее эпизодов. Зачем Сартр так подробно описывает Бувиль, его жителей, всяких там мадам и мистеров, историю Бувиля. Хоть и глазами героя это совершенно лишнее, это не говорит об ощущениях героя, этому совсем не место в дневнике, если уж книга написана в стиле дневника. Такое ощущение, что это или просто заполнить пробелы между важными частями об ощущениях, либо сам Сартр был фанатом Бувиля. Описательные части истории города и жителей совсем не показательны и ничего не передают о главном герое. Да и 1900-1930 года уж очень старомодно.
По этим причинам уже два раза думал бросать читать и это на середине.

Рецензия написана потому, что книгу я все же дочитаю. Но мнение мое уже не изменится.

UPD–

Люди конечно не меняются и маются все тем же – заполнением себя и своего времени, самообманом и каким-то выдуманным смыслом. Что в те времена – были одни способы, что сейчас – другие. Хотя мне кажется был бы у них телевизор и интернет, главный герой не дошел бы до того, до чего дошел. Он был бы чем-то занят, одурманен самообманом как все.

Так вот стоит ли эта самая Тошнота того, чтобы менять ее на “счастье” ? Я сам приверженец любой горькой правды, взамен сладкой лжи. И понимаю всю суть вещей, поэтому все же изменил свою оценку, дальше рассуждения героя о сути вещей совпадают с моими представлениями. Но то, что я понимаю суть мира, суть существования – не вызывает у меня тошноту, не мешает мне получать удовольствие от жизни. (Любовь – химическая реакция и только, но ведь очень приятна и я наслаждаюсь всем этим)

skype: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

А я просто хотел sudo apt-get install skype. Что же делать?

Сначала проверим, возможно не установилась нужная библиотека. Хотя apt тянул все нужные библиотеки и libXss.so в том числе.
Проверяем
sudo apt-get install libXss.so
или
apt-file search libXss.so
или
dpkg -S  libXss.so

Скорее всего вам выдаст что-то вроде

Конечно же установщик потянул с собой нужные ia32-libs и libxss1 библиотеки. Но скайп все равно не работает. Дело в том, что скайп написан в 32 битной архитектуре, а у нас 64 битная система, значит нам нужны библиотеки под 32 бит – i386.

Решение:

UPD. 10.08.13
Еще одна ошибка

error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

Фиксится таким образом:

Добавить туда это

И запускаем конфиг.

Для ubuntu 13.04