Analitycs

среда, 11 января 2012 г.

Проблемы у Lenovo T420s под Ubuntu с подключением 2го монитора

Столкнулся с забавной проблемой  - Lenovo T420s на док-станции под Ubuntu не видит внешнего монитора через HDMI порт.

Кстати, через VGA у дока - тоже оказалось не все гладко, ибо тогда включается либо зеркальное отображение (одинаковая картинка и там и там), либо - на втором мониторе пустой рабочий стол, и окошки туда не перетащить (можно поменять местами по Fn+F7). Ну и заодно - разрешение и там и там одинаковое, что привело к размытому изображению на внешнем мониторе

Найдено простое GUI решение.

Устанавливается ARandR


И через него - спокойно меняются разрешения, и что самое интересное - нормально таскаются окошки.

Не иначе - как какое-то "злобное колдунство" (с). Вопрос с HDMI пока остается открытым.

понедельник, 9 января 2012 г.

Как подключить Яндекс-Спеллер (Yandex-Speller) к PHPBB?

Есть у Яндекс одна хорошая штука, до которой у меня долго не доходили руки...  а именно - проверка орфографии в формочках ввода - Яндекс-Спеллер. Оказалось, что зря откладывал - не так сложно.

Как подключить к форуму PHPBB2 (как модуль на RunCMS)? По идее - в чистом PHPBB2/3 не должно сильно отличаться, разве что файлы  будут другие, скорей всего...

1) Разместить на сайте папку с самим спеллером в /class/xoopsform/yandex_speller/ Затем

2) файл include/viewtopic_quickreply.php
 
$addon_html = '
<script type="text/javascript" src="'.XOOPS_URL.'/class/xoopsform/yandex_speller/spell.js"></script>

// YandexSpeller 

var speller = 

new Speller({ url:"/class/xoopsform/yandex_speller", lang:"ru", options:Speller.IGNORE_URLS });
// Настройка параметров проверки http://api.yandex.ru/speller/doc/dg/reference/speller-js.xml  

<button name="cmdSpell_message" onclick="speller.check([document.getElementById(\'message\')])" type="button">'._CORE_CHECK_ORPHO.'</button>
';

$template->assign_vars(array(
  'U_POST_SQR_TOPIC' => 'javascript:sqr_show_hide();',
  'SQR_IMG' => $images['quickreply'],
  'L_POST_SQR_TOPIC' => $lang['Show_hide_quick_reply_form'],

  'L_EMPTY_MESSAGE' => $lang['Empty_message'],
  'L_QUICK_REPLY' => $lang['Quick_Reply'],
  'L_USERNAME' => $lang['Username'],
  'L_NO_TEXT_SELECTED' => $lang['Qreply_no_text_selected'],
  'L_SUBJECT' => $lang['Subject'],
  'L_MESSAGE_BODY' => $lang['Message_body'],
  'L_PREVIEW' => $lang['Preview'],
  'L_SUBMIT' => $lang['Submit'],
  'S_POST_ACTION' => append_sid("posting.php"),
  'S_HIDDEN_FORM_FIELDS' => $hidden_form_fields,
  'ADDON_HTML' => $addon_html,
  )
);

где _CORE_CHECK_ORPHO - наш новый языковой дефайн, 'ADDON_HTML' => $addon_html, - добавленная строчка в код и шаблон.

3) правим шаблон

Особо расписывать не вижу смысла - все просто как грабли.


Как подключить спеллер к формам - читать тут.
Полное API
Навеяно вот этим хаком

суббота, 7 января 2012 г.

Что за user-agent Apple-PubSub?

В статистике увидел незнакомый User Agent - Apple-PubSub.



Просмотры страницы по браузерам

Apple-PubSub 170 (36%)
Firefox 92 (19%)
Internet Explorer 64 (13%)
Opera 58 (12%)
Chrome 35 (7%)
Safari 28 (5%)
NS8 8 (1%)
Qt 8 (1%)
Mobile 2 (<1%)
Mobile Safari 2 (<1%)

Как оказалось - это стандартная RSS утилита для MacOS, работающая через библиотеку/утилитку PubSub (например, RSS в скринсейвере). Подробности тут.

Кстати, удивлен сравнительно приличным количеством просмотров на Internet Explorer - казалось бы - этим-то что на моем блоге делать? ;-)

пятница, 6 января 2012 г.

Как оптимизировать RunCMS? или Оптимизация CMS для начинающих

Решил перевыложить свою старую статью - она местами уже потеряла актуальность, да и RunCMS практически уже умерла, к сожалению - оставив после себя несколько веток-форков -на одной из которых и работает ScaleModels.ru, но люди спрашивают. Увы - некоторые вещи, приведенные тут уже устарели за несколько лет, некоторые - спорны, но  пусть будет в этом блоге - до кучи. 

RunCMS - достаточно неплохая система, дружественная для новичка в Web, которая позволяет худо-бедно, но решить большинство типовых задач для небольшого сайта одним приемом - «из коробки». Однако сайты имеют свойство либо умирать, либо развиваться, и в случае когда ваш ресурс выходит из категории «homepage про меня и моего хомячка Вову» (c) - начинаются проблемы с производительностью. Ситуация осложняется тем, что большие и серьезные CMS (такие как Drupal или Joomla) давно прошли этот этап «детских болезней» и способы решения подобных проблем для них давно известны и доступны. К сожалению, крупных проектов на RunCMS встречается не много, и информации о ней очень мало. На правах бывшего coreteam разработчика RunCMS я хочу рассказать о способах увеличения ее производительности.

Данная статья не предназначена для полных новичков - подразумевается, что вы в состоянии отличить PHP от Perl, способны разбираться в чужом коде, и примерно представляете архитектуру RunCMS (или XOOPS-like систем). Желательно, чтобы вы знали что такое my.cnf и где его искать ;-)

Есть два варианта хостинга - обычный и VPS/VDS.

Обычный хостинг

В плане оптимизаций - это жопа (если вкратце). Особенно если у вас провайдер, который не хочет ставить дополнительный софт и его настраивать. Начиная этак от 500 уников в день - готовьтесь к прессингу с его стороны - «давайте-ка переедем на выделенный сервер» (с) Один мой прошлый хостер на просьбу установить поддержку mbstring на свой шаред-хостинг спросил - «А зачем он вам нужен?» Но в принципе, мигрировать на свой сервер - это логичный вариант.

Что можно сделать для оптимизации RunCMS непосредственно в ней самой на SHARED хостинге?

MySQL таблицы для сессий

Находим MySQL таблицу sessions и конвертируем ее в тип MEMORY (если стоит PHPBB - то такая судьба должна постигнуть и phpbb_session) Этим мы выиграем небольшое количество скорости - но на КАЖДОЙ страницы сайта. Единственный минус - после перезагрузки сервера всем пользователям прийдется перелогиниваться, но результат того стоит.

Кэш страниц для гостей-анонимусов

Включаем кэширование страниц для гостей на как можно большее время - однако учитывайте, что для этого нужно хотя бы 50-100 мб свободного места на диске?

Включаем кэширование MySQL средствами класса DB

class/database/mysql.php

<?php

    var $file_cache = true;

?>


Это то, что можно было сделать нормальными ШТАТНЫМИ способами RunCMS, а теперь начинаем экспериментировать

Файл-кэш SELECT запросов

Изучаем код сайта и модулей, добавляя для тяжелых запросов кэширование через метод

<?php

$db->query($sql, false, false, ‘имя_файла’,  время_кэширования)

?>


ставя подходящие значения. Учитывайте только то, что кэш отрабатает только в том случае если результат запроса будет прогнан через fetch_row или fetch_array , а вот fetch_object в текущей версии не кэшируется?

Скомпилированное ядро

Включаем экспериментальное компилированное ядро (класс RCCoreApi) файл class/core.php

<?php

var $compiling = true;

?>

Данное «ядро» была введено мной в версии 1.6.1 - оно позволяет сэкономить примерно 6 SQL запросов на каждой странице, но несколько повысит нагрузку на PHP.

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

Вообще если вы любознательны и способны экспериментировать и разбираться с чужим кодом - внимательно изучайте стандартные классы RunCMS 1.6.1 и 1.6.2.

Немного яда и кидания какашек

Несмотря на то, что netshark просто вышвырнул меня из разработки RunCMS и вычеркнул из списка живых team, а впоследствии - передал код в лапы Farsus, который ее успешно и угробил :-) - в коде осталось много экспериментальных неофициальных настроек для увеличения производительности сайта

Например -

Кэш деревьев

Установить в классе xoopstree.php

<?php

define('RC_TREE_CACHE', 1); 

?>

это сильно поможет при работе с большими деревьями категорий - в таких модулях, как news, например

Кэширование блоков

Если внимательно посмотреть на табличку newblocks - вы увидите поле cache_time. При установке его в целое положительное значение N, блок будет закэширован на N минут. Обратите внимание - кэшировать имеет смысл только те блоки, которые выглядят ОДИНАКОВО для всех пользователей - если содержимое блока будет разным, то возможен конфликт.

RCCache и RCCachedPage

Использование классов RCCache и RCCachedPage, написанных совместно с Shurik2k5. В репозитории RunLiveCMS можно найти версии этих классов не только для файлового кэша (как в RunCMS), так и в базу MySQL и Memcache - что предпочтительней, с (или без) serializing данных

Настройка выделенного сервера (VPS/VDS)

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

Ниже только ОБЩИЕ рекомендации, куда стоит смотреть
  • Имеет смысл поставить PHP акселератор - на моем сервере стоит Zend Optimizer + eAccelerator. 
  • Тщательно настроить сервер MySQL - не забывайте про кэш запросов самого сервера и ограничение по времени медленных запросов
  • После настройки Apache - отключите access логи на картинках, оставив для них только error
  • Имеет смысл избавиться от .htaccess файлов, снеся все редиректы и настройки непосредственно в httpd.conf
  • Повесить на front-end (перед Apache) nginx и настройте его на отдачу статических файлов (таких как картинки, CSS, JS) - либо вообще отказаться в пользу Nginx + PHP-FASTCGI.
  • Используйте RAM-диск для критичных файловых кэшей - в моем случае туда сохраняется файловый кэш класса DB, compiled_kernel, блоки и кэши некоторых страниц
  • Обязательно используйте программы top, mtop и apachetop для мониторинга своей системы - ведь лучше вас ее не знает никто

По настройке выделенных серверов написано достаточно много, в частности тут - про Nginx, PHP, Memcache и тут про MySQL и насморки.


В моем случае - самый сильный выигрыш был от введения (по порядку важности)
  • Гостевое кэширование
  • Nginx
  • настройка MySQL
  • RAM диски на кэши кусков страниц, блоков и темплейтов форума /modules/forum(ну или phpBB2)/cache (всего около 200МБ RAM) - у меня форум, статьи и главная страница - основная нагрузка
  • eAccelerator
  • Таблицы сессии в MySQL MEMORY

Все остальное, честно говоря - из разряда "экономить на спичках" - не помешает, но без этого можно обойтись

Возможно, кому-то эти советы покажутся детским садом и «мурзилкой», но кому-то - сэкономят несколько минут «гугления» и чесания в затылке.

Изначально было опубликовано тут.

четверг, 5 января 2012 г.

Как исправить Permissions 0644 for '/Users/xxx/.ssh/id_dsa' are too open.


При миграции на новый комп после переноса SSH ключей через флешку при коннекте к удаленной машине появляется следующая ошибка

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Permissions 0644 for '/Users/xxx/.ssh/id_dsa' are too open.

It is recommended that your private key files are NOT accessible by others.

This private key will be ignored.

bad permissions: ignore key: /Users/xxx/.ssh/id_dsa

Лечится это следующим - нужно выставить права 700

cd ~/.ssh
chmod 700 id_rsa

среда, 4 января 2012 г.

Стартапы: Одевайте штаны по вашему размеру (Нецензурно)


Еще один перевод... далее неполиткорректно и вообще - с матом (из песни слов не выкинешь) ;-) Так что нервных и беременных женщин прошу не читать.

Я работал с большим количеством инженеров из Силиконовой долины - некоторые из которых были ДЕЙСТВИТЕЛЬНО гениальны, а некоторые - эту гениальность просто хорошо подделывали. И одна из тенденций, которые я заметил - что большое количество действительно хороших инженеров замечены в том, что они любят меряться членами - когда дело доходит до практических реализаций.

Вы начинаете проект с одним из подобных парней, и первая проблема, которую вам нужно решить - это то, что MySQL не собирается нормально масштабироваться... А в результате - нужно понять - как именно вы ВООБЩЕ  будете писать свою собственную систему хранения данных.

После того, как этот вопрос "устаканится" - вам понадобится собственный объектно-реляционный маппер - и, заодно, вы можете также сделать и свой собственный веб-язык шаблонов... не - просто потому что это КРУТО, и он хорошо впишется в вашу архитектуру.

Это, господа - мерянье членами, и это для стартапа - самая колоссальная трата времени.

Сейчас в Северной Калифорнии хорошо известен факт - что я величайший программист, который когда-либо жил, но я даже стал жертвой этого явления. На моем последнем стартапе мы были абсолютно уверены, что мы загнали себя себя в угол, используя MySQL - поэтому мы написали наши собственные хранилища данных. Это начиналось как обертка RPC вокруг некоторого волшебного key/value хранилища на Erlang (параллелизм, ебать его), и в конечном итоге - закончилось как различные обертки вокруг RPC BerkeleyDB. В общем, это это хранилище прошло через три крупных переписывания, а конечный продукт был тем, для разработки чего потребовалось всего несколько месяцев - и он упадет при сравнительно умеренной нагрузке.

Но стойте, ведь это была ДЕЙСТВИТЕЛЬНО прикольная архитектура.

Как еще один небольшой пример - опять же на последнем стартапе в один прекрасный день  я потратил несколько часов на написание упреждающей нейронной сети на Java - просто, чтобы попробовать свои силы в реализации алгоритма. Опять же - небольшая трата времени, но на самом деле - наибольшей проблемой было мое отношение к ней, что означало более серьезную проблему: Я хотел посмотреть, насколько я крут (ответ: довольно-таки охуенно крут).

И жертвами подобного становятся не только стартапы в квартирах. Kosmix, хорошо финансируемый научный проект, который обманул сам себя, думая, что он  может быть основным игроком в поиске, написал собственное хранилище данных на C++. Это был в основном клон GFS Google, потому что - "эй, если Google делает это, то мы должны тоже", не так ли?

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

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

К счастью, многие высокоуровневые инженеры не подверженны подобному распылению и мерянью. Или - к сожалению?

В моем текущем стартапе у нас есть бизнес-ориентированное руководство. У нас есть хорошая команда, техники, и мы не позволяем нашему высокомерию высосать из нас лучшее. Среди стартапов есть очень немного случаев, когда ДЕЙСТВИТЕЛЬНО  нужно будет написать что-то свое - вроде новой файловой системы, и мы явно не один из них.

Как предприниматель, вы должны быть горды вашей идеей, но теперь вы оцените - насколько велик член у вашего компилятора?

Весьма вольный перевод вот этой заметки. Спасибо автору.

Как адекватно перевести в данном dick-swinging - я так и не понял. Решил остановиться на варианте "мерянья детородными органами"

пятница, 30 декабря 2011 г.

Samsung GT-C3322 Duos + Mac + Kies + долгая телефонная история в довесок

Долгое общение с техникой Apple развращает - настолько привыкаешь к этой экосистеме, что когда какая-то штуковина туда не вписывается - резко зависаешь.

неБОЛЬШАЯ предыстория

Я никогда не пользовался iPhone в течении долгого времени.

Изначально - как большой любитель Palm, пользовался их КПКшниками и отдельно мобильниками, потом достаточно долго - PocketPC (простыми и с телефонными модулями). Когда я заинтересовался Маками - у меня вовсю работал Asus 750 - достаточно неплохой по тем временам агрегат, который меня вполне устраивал.


Через несколько лет он начал издыхать, но проблема в том, что моем мозгу стоит какая-то черта - телефон более чем за 700$ должен еще как минимум стирать носки, выводить гулять ребенка, раздавать торренты и делать еще много каких полезных вещей. Моя же зеленая пресноводная жаба не понимает, что в случае iPhone за 30к ты получаешь все тоже самое, что и за 10, просто чуть лучше. Причем именно покупки Маков у нее приступов не вызывают, а вот на телефоны она почему-то она начинает меня душить, причем сильно-сильно.

В итоге, после того как мой Asus издох - плюнув и матюгнувшись я пошел и спонтанно взял один из самых дешевых Samsung - GT-E1175T за (как сейчас помню - 1390 рублей). На удивление - телефон умел не только звонить, принимать SMS, хранить контакты и играть радио, но и оказался достаточно крепкой электронной штучкой. Причем он доказал это работоспособностью в условиях эксплуатации в чрезвычайно агрессивной среде - квартире с мелким (и очень непоседливым) ребенком. В итоге - его (телефон) неоднократно роняли, грызли, кидали и есть подозрение - даже играли им в футбол.


 Отдельной скупой мужской слезы удостоился пункт меню ИГРА. Вы просекли фишку? Не "Игры", не "программы" - а именно ИГРА. Вдобавок хочу добавить, что аккумулятор живет что-то около недели до сих пор - спустя уже больше полутора лет от начала работы.

Единственный критичный для меня минус - полное отсутствие синхронизации контактов

В итоге - не телефон, а просто мега-девайс за смешную цену. Причем им было очень хорошо троллить пытавшихся меня подколоть адроидоводов - у многих из них был разрыв шаблона при виде любителя Apple с ТАКИМ телефоном.

Нет, за это время, конечно же было желание обновиться - и я решил попробовать именно  iPhone.

С ним у меня отношения странные, совсем не как у Apple fanboy - я почему-то именно к нему сравнительно равнодушен, в отличие от iPad и Маков.

Но я честно предпринял попытку - мне привезли джейлбрекнутый американский аппарат, который проработал у меня примерно 2 часа - ровно столько нужно чтобы вставить симку, немного поиграться, сделать пару тестовых звонков и обновить прошивку через iTunes... ;-( А фигли - я же привык к iPad. Ну и в итоге, разумеется, я получил характерный кирпич с яблочком на спине.

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

В итоге его, конечно, потом оживили, но я понял, что мы с ним не сошлись характерами и  теперь с ним ходит моя вторая половинка.

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

Телефоны сейчас делятся принципиально на две категории - iPhone и не-iPhone, так что мне было в общем-то пофиг - чего покупать.

Но тут, зайдя в питерский магазин я увидел вполне себе приличный телефончик от Samsung - GT-C3322 Duos, который еще и умел две симки одновременно и стоил порядка 3500р. Я возбудился - и подумал - "была не была" (с), возможно - это то что нужно. Взял не отходя от кассы, и вечером начал с ним разбираться.

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

Теперь, собственно - история

Прихожу домой, начинаю эксперименты - по Bluetooth только работа с файлам, синхрится не хочет. Хорошо, будем по официальному - скачиваю с официального сайта Samsung Kies, немного улыбаюсь - "iTunes - как ты изменилась" (с) и подрубаю телефон.

Поскрипев пару минут шайтан-программа заявила - "ваше устройство не поддерживается". Штирлиц удивился еще раз заглянул в меню телефона - "синхронизировать с Kies". Минутная пауза - еще попытка. Тоже самое - вид сбоку. У меня тихая паника - "не работает, хотя должно".

Хорошо, ищу альтернативы - качаю всяческие MissedSync, FoneSync, SyncMate и иже с ними. Ни один из них этот агрегат не видит. "Моя в панике" (с), в мозгу - "stack overflow"  - ибо написано русским по белому - "Синхрить с Kies", но - не работает.

Немного почитав и подумав - решил проверить на Windows. Раскопал на одном из внешних винтов виртуалку с Виндой, сдул с нее пыль и согнал тараканов, запускаю, ставлю Kies для Windows - телефон увиделся! Ок, ладно, начинаю перепрошить... не получается, вам не хватает 3000 Мб свободного места для обновления прошивки. Лааадно, даю образу жесткого диска побольше, перезапускаю - то же самое. То есть - обновить прошивку из виртуалки НЕЛЬЗЯ.

Ладно, проехали. Давайте займемся синхронизацией - ибо эта задача приоритетней. Правда на этой виртуалке кроме Webmoney и Kies нет больше практически больше ничего, так что всяких Outlook там отродясь не было.

Отлично, в Kies есть синхронизация с Google - логинюсь, но после 3 минут обработки - заявление - у вас дескать СЛИШКОМ МНОГО КОНТАКТОВ. В моем мозгу уже полный разрыв шаблона, но я нахожу альтернативный вариант - в Google Contacts я создаю группу людей с мобильными телефонами (поиск по  "+7 (9" )  и сохраняю ее в CSV файл.

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

Я от души выматерился и ушел спать. На все про все вчера было потрачено более 3 часов.

Итог

  • Не нужно хотеть сильно много от девайса Samsung за 3500 рублей. Лучше им - просто звонить.
  • Долгое  общение с техникой Apple наносит непоправимую психологическую травму -  настраивает на то, что все должно работать так, как заявлено. Или, хотя бы - стремиться это делать

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