воскресенье, 15 сентября 2013 г.

Nodejs. Тотальная установка на Windows 8 с поддержкой npm.

Итак собственно как же это дело провернуть, и вообще возможно ли такое в "недружелюбной" к ноде среде Windows? Возможно! Надо ли? А вот это уже решать Вам.
Итак что же мы будем ставить на машину под управлением операционной системы Windows 8
  1. Node.js
  2. Npm
  3. Redis
  4. MongoDB
Вот такой вполне обычный набор инструментов для NodeJS разработчика. Скажу честно это же поставить на, допустим, ту же Ubuntu вообще не составляет никакого труда. Чего увы не скажешь про Windows. Кто сталкивался с этой проблемой думаю меня поймут. Более того толкового мануальчика в рунете я не нашел, поэтому с успехом настроив себе рабочую среду для NodeJS спешу поделиться инструкциями по установке NodeJS с рабочим NPM (это даже важней чем сама нода) под Windows 8.
Итак приступим. В первую очередь качаем саму ноду устанавливаем, почему именно инсталятор, ну если просто бинарник качать то потом отдельно если я не ошибаюсь вам надо будет качать и npm и прописывать его вместе с нодой в системные пути, а так раз поставил... и все готово.
Собственно нода уже готова для работы. Но нода в "сыром" виде сейчас мало кого устроит. Многие уже сработались с определенным набором модулей. Например, для меня одни из самых основных модулей это:
  1. Expressjs
  2. Mongoose
  3. Mongodb
  4. Async
  5. Request
и многие другие.

Во многих проектах они прописаны в соответствующем файле, но увы если я выполню на этом этапе команду npm install в каталоге с проектом, но с большой долей вероятности многие нативные модули (а если точнее, то модули которые используют для сборки нативный модуль node-gyp) не скомпилируются, собственно все финиш. Нода как бы есть, а по факту ноды-то и нет. Для дальнейших действий обязательно убедитесь в том, что у вас в системе не установлены Visual C++ Redistributable это может повредить дальнейшей работе. Если у вас они установлены: удалите их. Вы возможно нуждались в их установке при настройке PHP+xdebug, увы как поведет себя эта связка после настройки ноды, я не знаю, не проверял.
Теперь надо установить вот эти вещи в том порядке, в котором я их приведу ниже, и очень важно! Не пытайтесь экспериментировать с версиями если вам надо ноду настроить как можно скорее, иначе рискуете увязнуть... и увязнуть надолго.
  1. Visual Studio 2010
  2. Windows SDK 7.1
  3. Visual Studio 2010 SP1
  4. Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1
После всего этого программного пакета стоит еще до-уставновить немаловажную штуковину и это Python 2.7 он также необходим для корректной работы node-gyp.

Все! После проделанной работы переходим в корневой каталог вашего приложения и пробуем запустить npm install, должно все пройти гладко. После чего запускаем свое любимое приложения на node.js под Windows 8 x64 (собственно я думаю и под Win 7 тоже пойдет на ура)

И в догонку совсем забыл упомянуть про MongoDB и Redis. И если с монго проблем у вас быть не должно то вот редис, не совсем прост. Качаем с Git любым вашим любимым способом Redis в желаемое месторасположение. Затем в корне ищем по пути /bin/release/ бинарники, все вы их можете запускать и работать с редис под Win 8, но я рекомендую путь к бинарникам занести в системные пути (дописать в переменную PATH)

P.S.: Честно говоря, после Ubuntu настройка node.js под Windows 8 показалась мне жутким садизмом. Но было жалко выбрасывать на свалку впервые честно приобретенную Win 8, пускай и в комплекте с ноутом... а было бы круто если я бы я мог отдать ненужную систему и получить компенсацию, но это блин утопия :)

пятница, 12 июля 2013 г.

Ubuntu. Как узнать версию системы

Однажды мне было необходимо узнать версию системы для обновления своего любимого сервачка и в этом мне помогли две программки:

lsb_release -a # Инфа об Убунте
uname -a # Все данные о системе
uname -m # Только разрядность x32 или x64

среда, 10 июля 2013 г.

MySQL. Инкремент при UPDATE

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

-- Определяем переменную
select @i := 0;
-- Используем ее в качестве инкремента и присваиваем значение нужному нам полю.
UPDATE `site_statistic` SET `ratePosition` = (select @i := @i + 1) ORDER BY myPoint DESC;

Пожалуй, все.

пятница, 15 февраля 2013 г.

Myseobot. Сервис по проверке технического состояния сайта.

Итак, если у вас есть сайт. И вы хотели бы его проверить или как то улучшить, в техническом плане. В плане того как его видят роботы, как они с ним работают. Насколько правильно составлен контент на вашем сайте. То добро пожаловать на мою собственную разработку myseobot.com это простой инструмент для проверки основных характеристик вашего сайта. Таких как Google PR, цитирование яндекса позиции занимаемые в поисковиках. Из технических проверок есть такие как проверка ссылок, проверка редиректов и точек входа на ваш сайт, корректность доменов и многое другое. Правда стоит оговориться. Сайт находиться в ранней альфе, возможны ошибки.

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

  • Семантический анализ
  • Анализ безопасности

Попутно будут исправляться ошибки и а также. Добавляться технические тесты.

Проект планирую перевести в бету с приходом весны, а конкретно в светлый женский праздник 8-го марта. В бете же проект буду держать довольно долго, вплоть до начала осени.

В общем, кому интересно, кто хочет поддержать. Добро пожаловать на myseobot.com. В скором времени появится RSS лента. А также недельные изменения будут публиковаться прямо на сайте робота, по пятницам. А еще, в скором времени на myseobot будут последние новости по поводу мировых трендов оптимизации и технического усовершенствования сайтов.

вторник, 1 января 2013 г.

Мое мнение. Клавиатура Rapoo 9070.

Клавиатура Rapoo 9070 мне очень понравилась когда я ее увидел. Она имеет расположение кнопок характерное для большинства ноутбуков, а значит не надо будет переключаться на разные раскладки на стационарном компьютере и ноутбуке. Когда клава попала мне в руки мне польстило качество сборки "брендового китая", оно на уровне хорошее, немного "пляшут" кнопки в рядах, но этого практически не видно.


Клавиатура действительно очень компактная, но не смотря на то что она имеет небольшие размеры. Клавиши довольно таки не малые. Клавиши имеют ход небольшой, но ощутимый. При нажатии где-то по середине хода кнопка имеет наибольшее сопротивление, продавив которое, кнопка стремительно проваливается и замыкает контакт. Шума от нажатия не много, в общем охарактеризую эту клавиатуру как тихую. Расположение кнопок относительно удобное, ноутбучное если можно так сказать. Не лишний, надо заметить и цифровой блок кнопок. Клавиатура успешно протестировалась на Win 7 и на Ubuntu 12.04. Работает отлично. Драйвера или спец, софт ставить вовсе не обязательно.
Я даже удивился немного когда увидел в других обзорах упоминание о том что мало софта для этой малышки. Если кто-то может объяснить чем это плохо, прошу в комменте отписать.

В работе показала себя хорошо. В особенности стоит отметить что клавиши курсора удивительно неплохо нащупываются. А вот чудо-клавиша "слеш", рядом с левым шифтом,  меня немного удивила, и именно из-за этой клавиши у меня на новой клавиатуре возникает большее количество опечаток. Это минус, такой противный и нехороший минус в адрес rapoo. Некоторые люди (видимо про-геймеры) пишут, что играть на ней не удобно. Странно, но мне удобно. Играл в шутер и реал-тайм стратегию. Что огорчило больше всего это то, что клавиатура бывает ни с того ни с сего теряет связь. Поиск дал смутный результат. Люди говорят что всему причина Wi-Fi приемник-передатчик по близости, увы у меня это так. И пока проверять не охота как оно будет без него. Не так уж часто она и "слепнет" :). Еще один недостаток, так это то, что нет индикатора CAPS LOCK'а, его действительно очень не хватает :(.
Питается девайс от двух элементов питания формата AAA (это те которые меньше "пальчиковых" батареек, если кто до сих пор не знает), у меня сейчас обычные батарейки, в дальнейшем думаю прикупить аккумуляторы.







P.S.: Давеча залита кофе, промыта, высушена - работает! Второй раз когда пролил на нее кофе и промыл с последующей сушкой, работать перестала, ремонтопригодность очень низкая, есть большой риск что после ремонта пользоваться вы ей не станете, появятся люфты искажения и прочие артефакты.

воскресенье, 25 ноября 2012 г.

Phantomjs. Кратко о webkit консольном браузере.

Отличный браузер, который дает нам дополнительные возможности в программной навигации по вебу. А также позволяет реализовать unit-тестирование javaScript, делать скриншоты страниц и другое. Это браузер позволяет нам работать с DOM так же буд-то мы находимся в самом обычном браузере с GUI. Краткая информация:
У меня лично были некоторые трудности с установкой из исходников. Ах, да совсем забыл Ubuntu :). Значит были сложности, т.к. требуется qt и еще ряд зависимостей, если кто-то хочет попробовать собрать, то подробная инструкция по этому вопросу есть на сайте продукта. Также я поставил изначально из пакетов:
sudo aptitude install phantomjs
Но, как известно, стандартные пакеты славятся отсталостью версий. Как же быть если пакеты в репозиторые старые, а из сырцов поставить не вышло? На официальном сайте есть бинарники. Там вы найдете бинарники для популярных ОС.
Как пользоваться. Очень просто, куда вы распаковали скачанный архив, там находите папку bin а в ней phantomjs, его можно вынести в удобное для вас место. Итак приступим.
Первый самый простой скрипт (hello.js) для нашего phantomjs.
console.log('Hello Phantom!!!');
Для запуска выполним
phantomjs hello.js
Получим сообщение в консоль. Ну, это по-моему очевидно. Далее чуть поинтереснее. Пример получения скриншота посещаемой страницы:

var page = require('webpage').create();
page.open('http://google.com', function () {
    page.render('google.png');
    phantom.exit();
});
 
Тут мы сначала подключаем необходимый нам модуль webpage. А затем открывает необходимую нам страницу, после успешной загрузки которой мы вызовим колбэк функцию. В этой функции мы сохраняем (рендерим) скриншот страницы в файл google.png и закрываем phantomjs.

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

var page = require('webpage').create(),
    system = require('system'),
    t, address;

if (system.args.length === 1) {
    console.log('Usage: loadspeed.js ');
    phantom.exit();
}

t = Date.now();
address = system.args[1];
page.open(address, function (status) {
    if (status !== 'success') {
        console.log('FAIL to load the address');
    } else {
        t = Date.now() - t;
        console.log('Loading time ' + t + ' msec');
    }
    phantom.exit();
});

Запустив этот скрипт и передав в качестве параметра Web-адрес, мы получим ожидаемый результат, т. е. скорость загрузки страницы.

Гораздо больше примеров есть на официальном ресурсе, который указан вначале статьи. Штука удобная действительно. Я написал обертку на PHP для управления этим браузером, но она "дико" сырая, умеет выполнять только одно, вызывать обработчик phantomjs и делать скриншот в файл. Как будет что показать обязательно обновлю статью и укажу ссылочку на Git хаб.

Проброс портов в Windows

Ситуация проста. Имеем следующее. Виртуальную машину. Физическую машину на которой она крутиться. Если коротко то хост машина - Win7, гостевая - ubuntu-server 12.04., роутер. На роутере скорее всего для проброса портов будет пункт типа Virtual Servers. Там выбираем службу (или руками порты прописываем) IP машины на которую нам надо отправлять. Это сугубо индивидуально поэтому не могу ничего конкретно посоветовать. Смотрите документацию по своему роутеру. На тему "проброс портов".
Идем далее. На Убунте поднят апач, т.е. это 80 порт - это наша цель. Но роутер может обратиться только на наш физический IP адрес внутри локальной сети, на железную сетевую карту. Тут нам надо делать еще один проброс порта, того же 80го. Но только уже на нашем компьютере под управлением Win7 с железной карты, пускай у нее IP будет 192.168.1.101 на карту, которую добавит при установке, ваша виртуальная машина (у меня Virtual Box и карта которая соединяет виртуальные миры с физическими имеет адрес 192.168.56.1, ну шлюз, в смысле, соответственно машина с Апачем имеет IP равный 192.168.56.101). Итого, вкратце, надо пробросить 192.168.1.101:80 на 192.168.56.101:80 в операционной системе Windows 7 приступаем.
1. Запускаем консоль с правами администратора.
2. Запускаем netsh
и
netsh>interface
netsh interface>portproxy
netsh interface portproxy>add v4tov4 listenport=80 listenaddress=192.168.1.101 connectaddress=192.168.56.101 connectport=80
Проверяем все ли прошло гладко:
netsh interface portproxy>dump

#===========================
# Конфигурация портов прокси
#===========================
pushd interface portproxy

reset
add v4tov4 listenport=80 connectaddress=192.168.56.101 connectport=80


popd

# Конец конфигурации портов прокси
Да все нормально. Пробуем теперь обратиться локально по 192.168.1.101 и мы получим ответ от апача по адресу 192.168.56.101. Дальше пробуем уже по внешнему IP адресу, и вы должны получить тот же ответ что и от внутреннего адреса 192.168.56.101. Стоит уточнить, данный способ пробросит только TCP.

Если узрите неточности, прошу отметить в комментариях.