Как стать автором
Обновить
5
0
Andrey Chernomyrdin @chernomyrdin

Пользователь

Отправить сообщение

Делаем многопользовательскую игрy на Go и WebSocket'ах

Время на прочтение9 мин
Количество просмотров48K
golang gopher
Продолжаем знакомство с языком программирования Go (golang). В прошлый раз мы посмотрели основные конструкции языка. В этой статье я хочу показать использование горутин и каналов. И, конечно, продемонстрировать все это на реальном приложении, в данноcм случае многопользовательской игре. Рассматривать будем не всю игру, а только ту часть бэкэнда, которая отвечает за сетевое взаимодействие между игроками посредством WebSoket.

Игра пошаговая, для двух игроков. Однако, описанные ниже приемы можно применять для создания других игр, от покера до стратегий.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии9

Jancy — скриптовый язык для системных/сетевых программистов

Время на прочтение14 мин
Количество просмотров18K
jancyЗачем вообще создавать новый язык программирования? Их уже существует невероятное количество — по моему твёрдому убеждению, значительно больше, чем надо. И наверняка далеко не последнюю роль в данном положении вещей играет то, что создание компиляторов — это невероятно увлекательный процесс. С поправкой на арбузы и свиные хрящики — это вообще одна из самых «вкусных» работ, о которых может мечтать увлечённый программист.

Непередаваемо здоровским является цветочно-конфетный период — первый этап изучения теории компиляторов по толстым умным книжкам, и — тут же! — её применения на практике, в своём собственном языке. Даже печальная перспектива того, что создатель языка вполне может оказаться его единственным пользователем, не способна перевесить радость творчества и остановить сферического-в-вакууме компиляторного Кулибина. Разумеется, если удовлетворение собственного интереса является не только важной, но и единственной движущей силой всего процесса — вышеописанная перспектива с неизбежностью будет воплощена в жизнь. Но даже если это и НЕ единственная причина создания нового языка — перспектива стать одиноким пользователем своего творения всё равно имеет шансы реализоваться.
Читать дальше →
Всего голосов 27: ↑22 и ↓5+17
Комментарии24

Как сделать портативный ремонтный сервер

Время на прочтение6 мин
Количество просмотров41K
Портативный ремонтный сервер представляет собой домашний маршрутизатор для загрузки компьютеров по сети с целью ремонта, восстановления, проверки и лечения. Перед загрузочной флешкой данный сервер обладает следующими преимуществами:
  • воткнул в сеть и не надо на каждом системнике искать неразболтанный USB-разъем;
  • не рискуешь сжечь флешку на закороченных контактах;
  • единственный способ загрузиться на компьютерах, где сожжен USB-контроллер (загрузка с CD-ROM в расчет не берется), а также на компьютерах, где BIOS не позволяет грузиться с USB-устройств;
  • желательный способ для перепрошивки микропрограмм.

Из недостатков можно отметить более низкую скорость передачи и некоторую сложность по изменению (дополнению) пунктов загрузки, которая сказывается в особенностях сетевой загрузки. В качестве бонуса можно дооснастить ремонтный сервер собственным выходом в интернет через USB-модем, это потребуется для изоляции зараженного вирусами компьютера от других компьютеров в локальной сети. Таким образом, нам потребуется маршрутизатор:
  1. с возможностью перепрошивки OpenWrt;
  2. с USB-разъемом;
  3. компактными размерами.

Последний пункт позволяет легко перенести ремонтный сервер туда, где нам удобнее с ним работать, а не там, где есть сеть и т.д. Как мы уже говорили, в качестве бонуса потребуется USB-концентратор, USB-флешка и USB-модем с работающей симкой. Выбор модема, как ни странно, задача сложная, так нет стопроцентной уверенности в соответствии с пунктом № 1, поэтому не рекламы ради, посоветую TP-Link TL-MR3020 (только не берите очень похожие модели TP-Link TL-WR700N и TP-Link TL-WR702N) или более дорогую модель TP-Link TL-MR3040 со встроенным аккумулятором. Перед покупкой обратите внимание на версию устройства, поддерживаемые версии можно узнать здесь.
Читать дальше →
Всего голосов 18: ↑17 и ↓1+16
Комментарии10

Практика IPv6 — домашняя сеть

Время на прочтение17 мин
Количество просмотров267K
Abstract: Рассказ про некоторые возможности IPv6 на примере конфигурации сложной домашней IPv6-сети. Включает в себя описания мультикаста, подробности настройки и отладки router advertisement, stateless DHCP и т.д. Описано для linux-системы. Помимо самой конфигурации мы внимательно обсудим некоторые понятия IPv6 в теоретическом плане, а так же некоторые приёмы при работе с IPv6.

Зачем IPv6?


Вполне понятный вопрос: почему я ношусь с IPv6 сейчас, когда от него сейчас нет практически никакой пользы?

Сейчас с IPv6 можно возиться совершенно безопасно, без каких-либо негативных последствий. Можно мирно разбираться в граблях и особенностях, иметь его неработающим месяцами и nobody cares. Я не планирую в свои старшие годы становиться зашоренным коболистом-консерватором, который всю жизнь писал кобол и больше ничего, и все новинки для него «чушь и ерунда». А вот мой досточтимый воображаемый конкурент, когда IPv6 станет продакт-реальностью, будет либо мне не конкурентом, либо мучительно и в состоянии дистресса разбираться с DAD, RA, temporary dynamic addresses и прочими странными вещами, которым посвящено 30+ RFC. А что IPv6 станет основным протоколом ещё при моей жизни — это очевидно, так как альтернатив нет (даже если бы они были, их внедрение — это количество усилий бОльшее, чем завершение внедрения IPv6, то есть любая альтернатива всегда будет отставать). И что адреса таки заканчиваются видно, по тому, как процесс управления ими перешёл во вторую стадию — стадию вторичного рынка. Когда свободные резервы спекуляций и хомячаяния адресов закончится, начнётся этап суровой консолидации — то есть выкидывание всего неважного с адресов, перенос всех «на один адрес» и т.д. Примерно в это время IPv6 начнёт использоваться для реальной работы.

Впрочем, рассказ не про будущее IPv6, а про практику работы с ним. В Санкт-Петербурге есть такой провайдер — Tierа. И я их домашний пользователь. Это один из немногих провайдеров, или, может быть, единственный в городе, кто предоставляет IPv6 домашним пользователям. Пользователю выделяется один IPv6 адрес (для маршрутизатора или компьютера), плюс /64 сетка для всего остального (то есть в четыре миллиарда раз больше адресов, чем всего IPv4 адресов быть может — и всё это в одни руки). Я попробую не просто описать «как настроить IPv6», но разобрать базовые понятия протокола на практических примерах с теоретическими вставками.

Структура сети:

(Оригиналы картинок: github.com/amarao/dia_schemes)
  • 1, 2, 3 — устройства в локальной сети, работают по WiFi
  • 4 — WiFi-роутер, принужденный к работе в роле access point (bridge), то есть коммутатора между WiFi и LAN
  • 5 — eth3 сетевой интерфейс, который раздаёт интернет в локальной сети
  • 6 — мой домашний компьютер (основной) — desunote.ru, который раздачей интернета и занимается, то есть работает маршрутизатором
  • 7 — eth2, интерфейс подключения к сети Tiera

Читать дальше →
Всего голосов 127: ↑124 и ↓3+121
Комментарии126

Резервное копирование виртуальных машин в среде гипервизора QEMU/KVM

Время на прочтение7 мин
Количество просмотров72K
image

Как известно, бэкапы нужно делать, мало того, нужно делать их так, чтобы потом с них можно было развернуться. Особенно это касается виртуальных машин (ВМ). Рассмотрим, как можно сделать бэкап виртуальных дисков машины в среде QCOW/KVM. Основных проблем здесь две: во-первых, нужно получить консистентый (целостный) бэкап, т.е. если у нас есть СУБД или другое ПО, которое активно использует собственный кэш на запись, то перед бэкапом его нужно попросить сбросить кэш и заморозить запись на диск, иначе данные-то в снэпшот попадут, но не те, и при восстановлении СУБД может не понять такой финт. Второй вопрос — производительность ВМ в режиме снэпшота, неплохо было бы, что бы ВМ не слишком тормозила, когда мы снимаем копию, и не зависала бы, когда мы удаляем снэпшот.

Сразу дам ответ на первый вопрос — чтобы получить консистентный бэкап, нужно перед созданием бэкапа выключить ВМ средствами гостевой ОС, тогда бэкап точно получится целостным. Если вас устраивает такая ситуация — статью можно дальше не читать. Если же нет — прошу под кат.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии34

Запуск Windows под Linux KVM

Время на прочтение7 мин
Количество просмотров135K
Задача: запустить некоторое количество виртуальных машин с Windows на типовом Линукс-сервере.

Решение: любой современный Linux-дистрибутив, «родная» технология виртуализации KVM, Windows 2003 и настройки, описанные ниже.

Смотри также: вводную часть статьи по настройке KVM-контейнеров для FreeBSD.
Читать дальше →
Всего голосов 42: ↑28 и ↓14+14
Комментарии79

Несколько мифов о SEO

Время на прочтение8 мин
Количество просмотров7.7K
SEOЧитая сегодня утром Хабр наткнулся на пост «SEO-шники не ведают, что творят» и, увидев в нем нереальное количество заблуждений о SEO, просто не смог сдержаться – зарегистрировался и сел писать этот пост.

Сразу признаюсь – да, я занимаюсь SEO. Причем уже около 4-ех лет (по меркам отрасли это не так уж мало). За это время я успел приложить руки к продвижению порядка полусотни сайтов (хотя сейчас я ушел больше в руководство проектами и комплексное продвижение и развитие сайтов). Поэтому я знаю, о чем говорю. Хотя конечно в чем-то могу и ошибаться, но уверен, что в комментариях меня быстро поправят.

Давайте ближе к делу:
Читать дальше →
Всего голосов 186: ↑109 и ↓77+32
Комментарии240

Опыт заказа в китайских интернет-магазинах

Время на прочтение5 мин
Количество просмотров578K
В данной статье хотелось бы поделиться с читателями своим личным опытом о китайских интернет-магазинах, в которых мне (или моим друзьям) приходилось делать покупки. Речь пойдет именно про электронный сегмент товаров. Сразу перейду к сути, и приведу обзоры этих самых магазинов с заключительной оценкой:
Читать дальше →
Всего голосов 169: ↑155 и ↓14+141
Комментарии106

Яндекс. Директ. Анализируем конкурентное окружение

Время на прочтение4 мин
Количество просмотров16K

Представьте ситуацию. Вы разрабатываете сайты. Хорошие сайты для хороших людей. Ваши рекламные кампании работают давно, вы вышли на хороший уровень ROI, заказы идут с завидной периодичностью. Все казалось бы хорошо, пока в один прекрасный день мы не получаем кучу писем от Директа, о том что мы кем-то вытеснены с насиженных позиций. Мы идем в выдачу и видим на своей любимой позиции незнакомый сайт конкурента. Естественным нашим желанием будет узнать что это за фрукт и на основании этой информации принять стратегическое решение – ввязываться ли в войну бюджетов (если это серьезный и жирный конкурент) или подпереть снизу и помочь слить бюджет (если это мелочевка).

«Но это же невозможно!» – Скажете вы. – «Любая система контекстной рекламы руководствуется принципами закрытого аукциона и не предоставляет своим рекламодателям информацию о конкурентах. Мы ведь не знаем ни ключевых запросов конкурента, ни настроек его РК. Не знаем использует он минус-слова или кавычки. Самое главное – мы не знаем его ставок и CTR»

Спокойствие, только спокойствие! (с)

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

Читать дальше →
Всего голосов 94: ↑89 и ↓5+84
Комментарии34

OAuth: описание протокола простым и понятным языком

Время на прочтение16 мин
Количество просмотров193K
OAuth — популярный протокол, который позволяет социальным сервисам интегрироваться между собой и дает безопасный способ обмена персональной информацией. OAuth может связать между собой 2 сервиса, каждый из которых имеет свою пользовательскую базу — именно их я в данном случае называю «социальными». Когда начинаешь работать с OAuth, первое ощущение — что протокол весьма сложен и избыточен. В этой статье я попытаюсь объяснить основы OAuth человеческим языком.

Пример кросс-авторизации


Вернемся в 2005-й год и представим, что мы пишем социальную сеть. В ней имеется форма импорта контактов из адресной книги GMail. Что нужно для доступа к контактам GMail? Конечно, логин и пароль от ящика. Но если мы попросим ввести их на нашем сайте, пользователь заподозрит неладное. Где гарантия, что мы не сохраняем на сервере введенные пароли? Поэтому нам хочется, чтобы пароль вводился только на сайте GMail, и после этого доступ к контактам через API GMail предоставлялся нашей социальной сети (возможно, на время).
Под катом - повествование с примерами
Всего голосов 134: ↑124 и ↓10+114
Комментарии34

Теперь Google Analytics работает Асинхронно

Время на прочтение3 мин
Количество просмотров5.5K
Новый код выглядит вот так:
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_trackPageview']);

(function() {
 var ga = document.createElement('script');
 ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
   'http://www') + '.google-analytics.com/ga.js';
 ga.setAttribute('async', 'true');
 document.documentElement.firstChild.appendChild(ga);
})();

Это значит, что гугл.аналитикс больше не замедлит загрузку вашего сайта :)
UPD: То есть, он скачивал свой 24кб ga.js во время загрузки страницы, теперь он это может делать после…
Но после первой загрузки, он обычно закэширован и на всех остальных сайтах используется один и тот же :)

Материалы по теме:
Под катом бонус, код для русских поисковиков
Всего голосов 85: ↑73 и ↓12+61
Комментарии83

Объединение jabber и vkontakte.ru

Время на прочтение2 мин
Количество просмотров10K
imageПрочитав недавнюю тему «IM на ВКонтакте», решил внимательно проштудировать эту тему и найти решение для удобного общения вконтакте не заходя на сайт.

Имея pidgin и жаббер акк на xmpp.ru я захотел получить всех друзей из вконтакта в ростер.

То что вышло из этого смотрим под катом
Читать дальше →
Всего голосов 138: ↑102 и ↓36+66
Комментарии108

5 cпособов осуществить агрегацию строк в MS SQL

Время на прочтение3 мин
Количество просмотров15K
Иногда возникает необходимость осуществить агрегацию строк в SQL запросе, то есть, по такому набору данных:
GroupId Item
1 AAA
2 IS
5 OMG
2 WHAT
2 THE
1 This
получить примерно такой:
GroupId ItemList
1 AAA,This
2 IS,WHAT,THE
5 OMG
MySQL, например, для таких целей обладает встроенной функцией GROUP_CONCAT():
SELECT GroupId, GROUP_CONCAT(Item SEPARATOR ",") AS ItemList
FROM Items

В MS SQL Server'e такой функции нету, поэтому приходится извращаться. Перед тем, как приступить, сделаем скрипт для создания тестовой таблицы:
CREATE TABLE Items(GroupId INT, Item NVARCHAR(10))

INSERT INTO Items(GroupId, Item)
SELECT 1 AS GroupId, 'AAA' AS Item
  UNION ALL
SELECT 2, 'IS'
  UNION ALL
SELECT 5, 'OMG'
  UNION ALL
SELECT 2, 'WHAT'
  UNION ALL
SELECT 2, 'THE'
  UNION ALL
SELECT 1, 'This'

Итак, начнем.
Читать дальше →
Всего голосов 15: ↑9 и ↓6+3
Комментарии9

Заполнение пустого пространства плавающими блоками. Разбор 2-ух примеров реализации. От Яндекса и от студии Лебедева.

Время на прочтение1 мин
Количество просмотров735
Недавно столкнулся с проблемой реализации плавающих блоков в одном интернет магазине. Суть в том, что товары выводятся в виде блоков. По задумке количество блоков по горизонтали должно меняться в зависимости от разрешения экрана. Использовать float в тупую не удалось из-за не фиксированой высоты блоков.
Немного погуглив я ничего не нашел. Зато вспомнил, что видел подобное на Яндексе и в магазине студии Лебедева.
Сообственно я выкладываю сюда для ознакомления то, что вы и сами можете найти в указанных источниках. Все, что я сделал это почистил от лишнего кода. Если-бы я нашел подобный пост раньше это сэкономило-бы мне время.

смотрим...
Всего голосов 23: ↑20 и ↓3+17
Комментарии18

Опыт настройки nginx на Debian

Время на прочтение5 мин
Количество просмотров4.8K
Вчерашний вечер я посвятил возне с http-сервером nginx в качестве фронтэнда к apache. Как известно, nginx — легковесный надежный HTTP-сервер, написанный Игорем Сысоевым (сотрудником Rambler). Он отлично подходит для выдачи статических страниц, особенно под нагрузкой. Обычно настраивается связка nginx+apache, в которой nginx обслуживает все входящие на сервер запросы, статические файлы отдает своими силами, а запросы на динамическое содержимое проксирует на apache.

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

Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии13

API Playground

Время на прочтение1 мин
Количество просмотров1.7K
api playground

На прошлой неделе Google официально представил очередную разработку в рамках «20% личного времени» которая вышла за пределы компании. Инженер по разработке Бен Лисбаккен (Ben Lisbakken) создал API Playground, с которым изучение кода для Google Javascript API становится легким, как никогда ранее.

API Playground предоставляет простой и удобный интерфейс написания и тестирования javascript-кода для восьми сервисов Google, использующих API, это: Maps, Search, Feeds, Calendar, Visualization, Language, Blogger, Libraries и Earth. Кроме того новый API Playground скоро станет способом по умолчанию для демонстрации примеров JS-кода. Еще одна хорошая новость заключается в том, что гигант перевел часть исходных кодов под лицензию Apache 2.0 для использования в Playground.

На данный момент на «игровой площадке» (playground) доступно более 170 javascript-шаблонов, начиная от простых списков, слайдшоу основанных на медиа-RSS и заканчивая KML-файлами Google Earth.

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

Google Code Blog via ReadWriteWeb
Всего голосов 71: ↑59 и ↓12+47
Комментарии15

Как мы рисовали эротический баннер

Время на прочтение1 мин
Количество просмотров872
Цивилизации рождаются и умирают, рушатся и строятся вновь города, прогресс неудержимо прёт, как ракета «Пронтон» — с пламенем и рёвом. А человечество до сих пор не придумало ничего круче голой женщины.

Когда-нибудь я напишу об этом очень умную, тонкую и ироничную повесть. А пока…

image

Нужно было сделать для "Из рук в руки" стимулирующий баннер. Кому любопытно — весь тернистый путь под катом.

Читать дальше →
Всего голосов 70: ↑55 и ↓15+40
Комментарии43

Палитры цветов у 33 сайтов

Время на прочтение1 мин
Количество просмотров5.4K
Совсем недавно в этом опросе, я спросил у хабралюдей: «сколько по вашему мнению цветов в палитре Хабра?». Как оказалось, подавляющее большинство ошиблось, что не мудрено, так как, на самом деле, сложно оценить или прикинуть в уме более 35 цветов. К тому же некоторые из них, в основном оттенки серого, похожи, и на самой странице, часто, неотличимы друг от друга.

Процесс анализа палитры показался мне интересным и я провел анализ еще 33 сайтов, которые посещаю периодически и чаще всего. Ниже я хотел бы поделиться с теми, кому это интересно, результатами анализа.
Читать дальше →
Всего голосов 68: ↑60 и ↓8+52
Комментарии61

Prototype & Ajax.Request: важный момент при отлове проблем на сервере

Время на прочтение2 мин
Количество просмотров749
Работая над проектом, наш разработчик столкнулся с одной особенностью Prototype, проявляющейся при обработке ошибок Ajax-запросов:

Взгляните на следующий код (используется Prototype 1.6.0.3):

var ajaxReq = new Ajax.Request('Test.jsp', {
     method: 'get',
     onSuccess: function(transport) {
       alert('OK');               
     },
     onFailure: function(transport) {
     	alert('Failure');
     }
});

Вроде бы банальнее некуда, при успешном запросе получаем «ОК», а если сервер выплюнет 404, 500 или что-то вроде этого, тогда «Failure». Все как положено. Однако, угадайте, как поведет себя этот код, если сервер недоступен (грохнулся, например)?
Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии6

Простые вещи: Сериализация массива в JavaScript для последующей десериализации в PHP.

Время на прочтение1 мин
Количество просмотров2.4K
Наш следующий хабратопик будет посвящен сериализации массивов в JavaScript для последующей десериализации в PHP. Таким образом в нашей системе CMS S.Builder, например, реализовано сохранение настроек интерфейса визуального редактора – пользователь помечает кнопки тулбара, которые нужно показывать в визуальном редакторе, указывает другие настройки, затем жмет Сохранить. Формируется массив настроек, затем он сериализуется и передается AJAX-ом на сервер. На сервере полученная строка пишется в базу. При выводе тулбара PHP-скрипт обращается к базе, вытаскивает строку, десериализует массив и затем выводит нужные кнопки и пр.

Читать дальше →
Всего голосов 30: ↑20 и ↓10+10
Комментарии27
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность