Bom, shankar!
Dec. 28th, 2011
12:49 pm - Как проходят суды по фальсификации выборов
Оригинал взят у
razbudili в Как проходят суды по фальсификации выборов
( Read more... )
Итого
Власть, одумайся! Чем дольше будет продолжаться это узаконенное беззаконие, тем больше вероятность революции!
Друзья! Разошлите это как можно шире по Сети. Пусть люди сами сделают выводы...
UPD: Вторая часть здесь.
Отправить этот пост в социальные сети и закладки
можно через плюсик сверху над постом.
Oct. 31st, 2011
08:45 pm - Установка
Помню один мой друг хотел попробовать Ruby on Rails, любитель всяких фрейворков. Но у него возникли проблемы с установкой, помниться долго парились. Но решение нашли. Проблема оказалась в том что имя пользователя в винде было на кириллице.
Для тех кому интересно я решил написать небольшую инструкцию по всей установке, чтобы не париться как нам.
Итак, начнем.
1.Сначала нужен сам язык берем его здесь и устанавливаем, скажем в папку C:\Ruby\
2.Пропишем в PATHе(Компьютер-Свойства-Дополнительно-П
3.Теперь нам нужно установить sqlite и rails. Для этого идем по ссылке и скачиваем sqlite-shell-win32-x86-3070603.zip и sqlite-dll-win32-x86-3070603.zip
4.Извлекаем их содержимое и копируем их в ту же папку bin
5.Пробуем команды
>gem install sqlite3-ruby
>gem install rails
Если не выдало ошибки типа
ERROR: While executing gem… (Errno::ENOENT)
No such file or directory — «C:\Documents and Settings\...»
То идем к финишу.
6.Если же все-таки эта ошибка появилась, а меня она появилась то идем в нашу любимую bin-папку и открываем в блокноте файл gem.dat
изменяем его в таком виде:
@ECHO OFF
SET _HOMEDRIVE=%HOMEDRIVE%
SET _HOMEPATH=%HOMEPATH%
SET HOMEDRIVE=С:
SET HOMEPATH=/Ruby
IF NOT "%~f0" == "~f0" GOTO :WinNT
@«ruby.exe» «С:/Ruby/bin/gem» %1 %2 %3 %4 %5 %6 %7 %8 %9
GOTO :EOF
:WinNT
@«ruby.exe» "%~dpn0" %*
SET HOMEDRIVE=%_HOMEDRIVE%
SET HOMEPATH=%_HOMEPATH%
где С:/Ruby/ это путь к нашему Ruby
7.Опять пробуем
>gem install sqlite3-ruby
>gem install rails
Должно сработать. Желаю удачи
Original source: habrahabr.ru.
©http://habrahabr.ru/sandbox/37490/
08:45 pm - JQuery Masonry —
Masonry (разработчик David DeSandro) это JQuery-плагин позволяющий быстро и просто организовать динамический layout блоков разного размера практически без потери места, а если подобрать соответствующие размеры блокам — то без пустых мест вовсе.
Под динамическим layout`ом имеется ввиду, что блоки будут располагаться в контейнере в зависимости от его размеров, максимально рационально заполняя его пространство, тем самым экономя место на странице.
Как это работает (необходимый минимум)
Для начала нам потребуется подключить JQuery и сам плагин:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/li
<script type="text/javascript" src="jquery.masonry.min.js"></script>
Теперь создадим простую структуру блоков с которой будет работать плагин:
<div id="container">
<div class="item">...</div>
<div class="item">...</div>
<div class="item">...</div>
...
</div>
И пропишем float для блоков, без этого плагин не работает
.item {
float: left;
}
Запускаем магию, вставив в любое место страницы следующий код:
<script type="text/javascript">
$(document).ready(function(){
$('#container').masonry({
// указываем элемент-контейнер в котором расположены блоки для динамической верстки
itemSelector: '.item',
// указываем класс элемента являющегося блоком в нашей сетке
singleMode: false,
// true - если у вас все блоки одинаковой ширины
isResizable: true,
// перестраивает блоки при изменении размеров окна
isAnimated: true,
// анимируем перестроение блоков
animationOptions: {
queue: false,
duration: 500
}
// опции анимации - очередь и продолжительность анимации
});
});
</script>
Готово! Теперь попробуйте изменить размер окна и вы увидите всё своими глазами.
Анимация
Если вы хотите использовать css transition вместо анимации JQuery то рекомендую использовать ещё один JQuery плагин Modernizr-transitions, с которым css transition будет работать и в браузерах не поддерживающих css3 (например Internet Explorer версии 8 и старее).
Подключаем modernizr-transitions:
<script type="text/javascript" src="modernizr-transitions.js"></script>
В опциях Masonry меняем isAnimated и удаляем animationOptions: {...}:
isAnimated: !Modernizr.csstransitions
И прописываем css transition для блоков, например:
.item {
-webkit-transition-duration: 0.5s;
-moz-transition-duration: 0.5s;
-o-transition-duration: 0.5s;
transition-duration: 0.5s;
}
Теперь даже если браузер пользователя не поддерживает css transitions анимация все равно будет работать.
Демо можно посмотреть тут, или скачать.
Полный перечень настроек плагина и документацию можно найти официальном сайте.
Original source: habrahabr.ru.
©http://habrahabr.ru/sandbox/37498/
Oct. 25th, 2011
09:59 am - Всплывающие
Опишу простейший способ добавления «всплывающих подсказок» на веб-страницах.
Этот способ я использую для создания простой контекстной справки в веб-интерфейсах.
Итак, изначальный замысел таков: на веб-странице размещается элемент (меню, гиперссылка, «кнопка» или сочетание клавиш), активируя который мы входим в режим показа контекстной справки для элемента, по которому будет выполнен следующий щелчок левой кнопкой мыши (ЛКМ). При щелчке по подсказке либо нажатии клавиши ESC подсказка исчезает.
Как вы понимаете, задача наиэлементарнейшая. Нам необходимо лишь активировать обработку события onclick при входе в режим отображения подсказок. Идентификатор элемент, по которому мы щелкнули, поступает в функцию обработки щелчка, которая выводит всплывающий блок с подсказкой для заданного элемента.
Для включения режима контекстной помощи добавим в тело веб-страницы ссылку на функцию startHelp, например, так:
<a href='#' onclick="startHelp(event);" id='helper'>Контекстная помощь</a>
Сама функция startHelp:function startHelp(evt){
evt.stopPropagation();
evt.preventDefault();
document.body.style.cursor = "help";
document.body.onclick = Help;
document.body.onmouseover = stoponclick;
}
Здесь мы запрещаем дальнейшую обработку щелчка ЛКМ, изменяем внешний вид курсора, устанавливаем обработчик щелчка и дополнительный обработчик события наведения указателя на объект (функция stoponclick). Обработку события onmouseover я использовал для того, чтобы изменять обработчик события onclick элемента, над которым находится указатель мыши (при этом старый обработчик запоминается и восстанавливается впоследствии).
Сама функция Help отображает подсказку и возвращает все обработчики «на круги своя»:function Help(evt){
evt.stopPropagation();
evt.preventDefault();
if(!helptip(evt)) return;
document.body.onclick = '';
document.body.style.cursor = "default";
document.body.onmouseover = '';
}
Функция helptip (ее я приведу ниже) как раз и служит для отображения подсказки для элемента, по которому вы щелкнули ЛКМ. Обработчики событий onclick и onmouseover для тела веб-страницы сбрасываются. Если вам это не нужно, можно в функции startHelp сохранить эти обработчики можно сохранить в глобальные переменные (как это делается в фукнции stoponclick).
Функция stoponclick использует две глобальные переменные для хранения функций-обработчиков событий onclick и onmouseout блока, над которым находится курсор мыши (понятно, что слой с этим блоком должен быть самым верхним, т.е. в сложных случаях надо будет позаботиться о z-index), а также назначает новые обработчики (на onclick — вывод посказки, на onmouseout — восстановление предыдущих обработчиков):var oldclc, oldmout; // глобальные переменные
function stoponclick(evt){
var obj = evt.target;
if(obj == document.body) return;
oldclc = obj.onclick;
oldmout = obj.onmouseout;
obj.onclick = Help;
obj.onmouseout = releaseonclick;
obj.style.cursor = "help";
}
И сразу же приведу функцию releaseonclick, восстанавливающую обработчики:function releaseonclick(evt){
var obj = evt.target;
obj.onmouseout = oldmout;
obj.onclick = oldclc;
obj.style.cursor = "default";
}
Функция helptip генерирует блок с подсказкой. Для упрощения позиционирования этого блока я использую глобальную переменную tipobj для его хранения. Эта функция получает значение текста подсказки из функции helpgen и, если текст существует, создает блок, добавляет для него обработчик onclick (который уничтожает блок), вставляет текст подсказки в блок, а также добавляет дополнительный текст (который говорит пользователю, как уничтожить блок с подсказкой), позиционирует блок около места щелчка ЛКМ. Далее происходит восстановление стандартных обработчиков для блока, по которому мы щелкнули ЛКМ и возвращается длина текста подсказки. Функция:function helptip(evt){
var ss = helpgen(evt), helper;
if(ss.length > 0){
tipobj = document.createElement("DIV");
tipobj.id = 'helptip';
tipobj.setAttribute("name", "helptip");
tipobj.onclick = rmtip;
tipobj.innerHTML = ss;
helper = document.createElement("DIV");
helper.className = 'redtxt';
helper.innerHTML = "Чтобы закрыть это окно, щелкните по нему левой кнопкой мыши или нажмите клавишу ESCAPE";
helper.onclick = function(evt){evt.stopPropagation();
document.body.removeChild(evt.target.par
tipobj.appendChild(helper);
document.body.appendChild(tipobj);
positiontip(evt);
}
releaseonclick(evt);
return (ss.length);
}
Функцию rmtip, удаляющую блок подсказки при щелчке на нем ЛКМ, можно вынести в отдельную:function rmtip(evt){
document.body.removeChild(evt.target);
}
А можно вставить ее вместо rmtip в функции helptip.
Генерация текста подсказки в зависимости от элемента, по которому мы щелкнули, производится этой функцией:function helpgen(evt){
var obj = evt.target;
var objid, objname, ss="", nm;
onkey(27);
objid = obj.id; objname = obj.name;
if(objid == "" && objname == null){
objid = obj.parentNode.id;
objname = obj.parentNode.name;
}
if(objid == "" && objname == null) return (ss);
if(objid == "" && objname != null) nm = objname;
else nm = objid;
ss = HelpText[nm];
if(ss == null) ss = HelpText[obj.parentNode.id];
return (ss);
}
Здесь сразу же выполняется onkey(27) для удаления предыдущих подсказок (если они еще не были удалены) — эту функцию я приведу ниже. Далее мы узнаēм идентификатор и имя объекта, по которому был выполнен щелчок. Если ни того, ни другого нет, проверяется идентификатор и имя родителя этого объекта. Если и там пусто, возвращается пустая строка. Иначе мы получаем строку подсказки из массива HelpText. Последняя проверка — если подсказки для этого элемента нет, пытаемся вызывать подсказку для идентификатора родительского элемента.
Позиционирование подсказки выполняется элементарно:function positiontip(e){
var wd = tipobj.offsetWidth, ht = tipobj.offsetHeight;
var curX = e.clientX + 25;
var curY = e.clientY - ht/2;
var btmedge = document.body.clientHeight - curY - 15;
var rightedge = document.body.clientWidth - curX - 15;
if(rightedge < wd) curX -= wd+50;
if(btmedge < ht) curY -= ht-btmedge+15;
if(curY < 15) curY = 15;
tipobj.style.left = curX+"px";
tipobj.style.top = curY+"px";
}
Мы просто узнаем координаты щелчка, немного смещаемся относительно их (чтобы вместить блок с подсказкой), а затем проверяем, не вылезает ли наш блок за края экрана. Если вылезает — подправляем соответствующим образом координаты. Далее вносим соответствующие изменения в стиль блока с подсказкой.
Чтобы уничтожать блок с подсказкой еще и по нажатию ESC, добавим эту функцию:function onkey(code){
if(code != 27) return;
var helps = document.getElementsByName('helptip');
var l = helps.length-1;
for(var i=l; i>-1; i--) document.body.removeChild(helps[i]);
}
В тег body нашего html-документа надо будет добваитьonkeydown="onkey(event.keyCode);
чтобы эта функция работала (либо можно вызвать обработчик позже).
Поля массива с подсказками будут иметь вид «идентификатор: «Текст подсказки»», например,const HelpText = {
Sout: "Отобразить данные по внешней температуре.",
Sin: "Отобразить данные по внутренней температуре."
…
}
Ну и конечно же надо будет добавить стили в общий CSS-файл (или создать отдельный стилевой файл):#helptip{
position: fixed; background-color: #BFE; -moz-border-radius: 5px;
color: black; max-width: 400px; max-height: 500px; padding: 5px;
}
.redtxt {color: red; margin-top: 20px;}
Выглядеть подсказка будет примерно так:
Original source: habrahabr.ru.
©http://habrahabr.ru/sandbox/37112/
Oct. 19th, 2011
12:02 pm - Дзержинский суд Петербурга "разрешил" МТС требовать деньги за услуги, которые абонент не з
Оригинал взят у
mts0 в Дзержинский суд Петербурга "разрешил" МТС требовать деньги за услуги, которые абонент не заказывал

7 октября 2011 года судья Дзержинского районного суда Панкова вынесла решение в пользу МТС. Ниже само решение суда.
Красной нитью прослеживается, что судья ссылается только на правила МТС. Закон “О связи”, в котором законодатель четко разграничил 2 системы оплаты проигнорирован, Правила оказания услуг подвижной связи, принятые Правительством РФ также уходят на второй план по сравнению с договором МТС. Закон о защите прав потребителей, который ставит в первую очередь обязанность продавца ознакомить, ясно и наглядно предоставить информацию потребителю также проигнорирован.
Решение суда практически точностью копирует отзыв ответчика, т.е. МТС на мой иск, судья особо "не заморачивалась". Запятые и предложения - "один-в-один".
Абсолютно проигнорировано решение ФАС, с которым жульническая компания МТС согласилась. В ФАС ответили мне так "У нас в России просто не развита система гражданских исков..."
( Читать далее... )
Прошу перепост у всех. Предупредите всех своих друзей, кто пользуется МТС!!!!!
( Решение суда )
Oct. 17th, 2011
04:59 pm - Внедрение
Поделюсь опытом внедрения iMessage в семье из трех человек, а так же объединю часть опыта из разных источников. Для меня эта функция стала одной из ключевых в iOS 5, все остальные, я так и не смог пока внедрить в свою жизнь.
Дано:
Три устройства на iOS 5 — iPhone 3GS, iPad, iPad 2.
Один Apple ID.
Задача:
Внедрить удобное и легкое удаленное общение в семье по средствам iMessage, без дополнительных затрат на СМС, на одном Apple ID.
iMessage — это новая служба обмена сообщениями для всех пользователей iOS 5. Можно отправлять неограниченное количество текстовых, фото, видео сообщений, а так же ссылками на местоположение и контактами.
iMessage может определять получателя по трем идентификаторам: номер телефона, e-mail, Apple ID.
С первым и последним все более или менее понятно, если есть телефонный номер, то для идентификации iOS 5 отправляется простое СМС, которое содержит все данные об устройстве и оригинальное сообщение, в ответ с входящего устройства можно уже писать текстовые, видео, фото сообщения через iMessage. В случае с разными Apple ID на устройствах идентификация не требуется, можно сразу отправлять iMessage.
В обоих случаях кнопка отправить становиться синей, что означает работу через протокол iMessage. Если же кнопка зеленая работает протокол SMS/MMS.
В случае с идентификацией по e-mail, да еще и с одного Apple ID, все несколько сложней, стандартных настроек «из коробки» не хватает. Приступаем:1. Добавляем e-mail адреса к Apple ID.
Идем на appleid.apple.com, входим под своим Apple ID, выбираем пункт меню: «Логин, Apple ID и адрес эл. почты», далее «Добавить адрес электронной почты», добавляем два дополнительных адреса, можно больше, в итоге для каждого устройства будет свой уникальный e-mail, сохраняем изменения и выходим. Так же можно добавлять e-mail непосредственно с устройства, но мне показалось, что при таком раскладе проверка занимает больше времени.2. Обновляем адресную книгу на устройствах.
Постарайтесь сделать так, что бы добавленный e-mail был занесен в адресную книгу отдельно от остальных контактов, т.е. был бы «голый» без дополнительных номеров и данных, это позволит серверу Apple более быстро и точно определять нали-чие на борту устройства iOS 5, хотя это важно только на первых порах. Например: жена iPad, сын iPad 2, муж iPhone 3GS. Важно удалить используемый e-mail из других контактов.3. Настройка получателя iMassage.
Для изменения получателя iMessage заходим в «Настройки» -> «Сообщения» -> включаем «iMessage» -> «Получать на» -> «Добавить другой e-mail» -> вводим один из адресов электронной почты привязанный к Apple ID -> сохраняем -> после проверки удаляем «старый» e-mail из списка.Есть отличительная особенность iMessage, например от ICQ, сообщение может приходить на несколько устройств одновременно, при условии что в пункте «Получать на» указан один и тот же e-mail/Apple ID в разных устройствах.4. Время ожидания проверки.
Для того, что бы начали приходить imassage на идентификатор e-mail, Apple должна произвести его проверку, хотя со стороны пользователя это выглядит моментально, то на серверах это может занимать от 5 до 20 минут, с почтой Яндекса это заняло почти 12 часов, я так понимаю это связанно с временной нагрузкой. Поэтому после проведения первых трех операций, подождите 5-10 минут, если сообщения не начали доставляться, выждите еще более длительную время.5. Отправка сообщений и идентификация.
Производите отправку идентификационных (первых) сообщений с айпэдов/айподов, т. к. у них нет телефонных номеров и сервера Apple быстрее соображают, что нужно отправить iMassege и заранее произвести проверку e-mail/iOS, проведите короткую двух стороннею переписку для закрепления результата.
В случае с телефоном это будет СМС, хотя существует настройка «Отправлять как SMS» отключив которую можно избавиться от этого функционала. Есть тонкость, даже при отключенной функции «Отправлять как SMS», кнопка все равно будет зеленой и сообщение отправиться на почтовый ящик.
Все можно пользоваться.
На данный момент задача внедрения в семью iMessage реализована успешно, все получают именные сообщения и не держат в памяти, что нужно запустить отдельное приложение вроде Скайпа или ICQ, которые кстати кушают батарейку.
Original source: habrahabr.ru.
©http://habrahabr.ru/sandbox/36804/
Oct. 16th, 2011
04:59 pm - Современная
http://cuamckuykot.ru/double-standa
СОВРЕМЕННАЯ ВЕРСИЯ
Муравей усердно работает в испепеляющей жаре и под дождём на протяжении всего лета, строит свой дом и запасается на зиму.
Кузнечик думает, что Муравей дурак и смеется, танцует и играет всё лето напролёт
Пришла зима, дрожащий кузнечик созывает пресс-конференцию и требует объяснения почему муравью позволенно быть в тепле и хорошо накормленным, в то время как он холодный и голодный.
CBS, NBC, PBS, CNN, ABC прибегают чтобы сфотографировать дрожащего кузнечика рядом с видео муравья в своем уютном доме за столом заполненым едой.
Америка потрясена таким резким контрастом.
Как это может быть, чтобы в стране с таким богатством, этому бедному кузнечику позволено страдать?
Kermit the Frog1 появляется на Oprah2 ток-шоу с кузнечиком, и все плачут, когда они поют “Нелегко быть зелёным.”
ACORN3 устраивает демонстрацию перед домом муравья, где телевизионные станции снимают групповое пение: “Мы победим”. Группа Отца Jeremiah Wright4 на коленях молит Бога за кузнечика
Президент Обама осуждает муравья и обвиняет президента Буша, президента Рейгана, Христофора Колумба, и папу Римского за бедствия кузнечика.
...
Государственный Зелёный Царь конфискнет его <муравья> дом отдаёт его кузнечику.
Как мы видим история заканчивается – кузнечик и его халявные друзья доедают последние остатки муравьиных запасов, в то время как в государственый дом в котором он живёт и который, как вы помните, был старым домом муравья, разрушается на глазах, потому что кузнечик не в состоянии поддерживать его.
Муравьей исчезает в снегу, никто его больше никогда не видел.
Кузнечика находят мертвым в инциденте, связанным с наркотиками, и заброшенный дом заселяется бандой пауков, которые терроризируют пришедший в упадок, но когда-то процветающий и мирный район ..
Вся страна разрушается и тянет за собой весь свободный мир
Мораль: Будьте осторожны, когда вы голосуете.
©http://feedproxy.google.com/~r/rsdn/hum
Oct. 10th, 2011
06:14 pm - Понедельничная
Среднестатистический пользователь Android проводит 18 минут в неделю объясняя, почему он не купил iPhone.
В супермаркетах, по большому счету, продается только две вещи — мешки для мусора и мусор для мешков.
Изобретатель матрёшки лежит в гробу в гробу в гробу.
На международных соревнованиях по плаванию электрик Иванов замкнул тройку лидеров.
После операции хирург показывал Джеки Чану смешные и неудавшиеся моменты.
Миллионы людей, мечтающих о бессмертии, не знают, что им делать в среду вечером.
Продам хамелеона синего. Нет, красного. Нет, зеленого. Блин. Круто. Нет, не продам.
По мнению крокодилов, человек на 100% состоит из еды.
Пятиклассник Вахтанг требует затонировать окна в классе, "а то как лохи сидим".
Китайские дети утром делают зарядку, а вечером относят её в "Евросеть".
Находчивый питон проглотил двух разнополых кроликов и больше не нуждается в пище.
В Антарктике найдена нефть. Кровавому режиму пингвинов недолго осталось мучить свой народ.
Дэвид Бекхэм, раздавая автографы, случайно подписал контракт с ярославским "Шинником".
Вся история женской моды — это история борьбы климата, морали и гигиены с желанием женщины ходить голой.
Внуки 120-летней бабушки психанули и решили сами купить квартиру.
Познакомлюсь с тремя-четырьмя девушками для серьёзных отношений.
На экзамене по латыни студент-двоечник нечаянно вызвал дьявола.
Анджелине Джоли и Бреду Питу некого представлять во время секса.
Жена дрессировщика после секса получает сахарок.
Когда я открою свою фирму, я обязательно назову её ООО "ООО". А потом буду смотреть, как секретарши отвечают на телефонные звонки.
Жена водителя маршрутки в постели кричит громко, четко и заранее.
Вчера ночью была ограблена квартира генерального директора магазина "Эльдорадо". Общая сумма украденного имущества составляет 199 тысяч 999 рублей.
Крошка-сын к отцу пришел, а отец — буханка.
В аптечке БЕЛАЗа на амбулаторном лечении может находится до 6 человек.
Гопники HD — пацаны повышенной чёткости.
В Ивановской области безрезультатно завершилась забастовка врачей — выставленные требования так и не удалось прочесть.
Сборная России по допингу подозревается в биатлоне.
Ученые выяснили, чего хочет женщина. Но она уже передумала!
Петербургские проститутки работают за книги.
"Откуда берутся дети?" — именно с таким вопросом подошел Бред Питт к Анжелине Джоли.
Чрезмерное употребление алкоголя вызывает проституток.
Слово не воробей. Вообще, ничто не воробей кроме воробья.
Дембель Гриша, вернувшийся домой, еще по надписям в лифте понял, что Маша его не дождалась.
Пафосные лоси не лижут соль без текилы.
Жили у отца три сына. А свои квартиры сдавали.
Когда Сергей Зверев нечаянно ударяется лбом об косяк, у него из глаз сыплются стразы.
Катаясь на американских горках с учительницей русского языка, дети узнали много исключений из правил.
Первоапрельские шутки иногда приводят к новогодним сюрпризам.
Поехав с незнакомыми людьми на шашлыки, Света не сразу поняла, почему она не скидывалась.
Конвейер Автоваза с четверга возобновит свою преступную деятельность.
Самого большого леща поймала Зинаида Петровна, забывшая разбудить Иннокентия Павловича на рыбалку...
В детстве Человека-паука часто наказывали и ставили в правый верхний угол.
В Барселоне арестованы подростки, ранившие таксиста своим отношением к творчеству позднего Пикассо.
Уважаемые жильцы! Приносим вам свои извинения за трещину, образовавшуюся в фундаменте домов № 7 корпус 1, и № 7 корпус 2 (ранее — дом №7). Администрация РЭУ-1.
Если вода не заливается в носик электрочайника — пора мыть посуду в раковине.
©http://feedproxy.google.com/~r/rsdn/hum
04:59 pm - DreamWIFI и VLAN-ы
Введение
На сегодняшний день многие телекомы оценили преимущества линейки беспроводного оборудования компании Ubiquity Networks (в России более известные под маркой DreamWIFI). Это недорогие, компактные и довольно мощные устройства которые используется разными около-телекомовскими конторами для разных задач: от подключения удаленного клиента, до проброса транспорта на удаленные точки.
«Ну и что? Статей с рекламой мы уже начитались», — спросите вы.
Нет. Я хочу упомянуть про один очень существенный недостаток: в стандартном веб-интерфейсе нету вообще упоминания про виланы. А ведь без них никак хотя-бы по двум причинам:
Хочется иметь что-то вроде «управляющего вилана» для всех устройств, чтобы клиент не мог достучаться до устройства.
Проброс транспорта. Очень немаловажный пункт. Есть объекты куда оптоволокно пока невозможно протянуть, а транспорт туда нужен (именно «правильный» транспорт, с отдельными виланами).
Сам производитель обещает полную поддержку виланов в прошивке версии 5.5. На данный момент версия стабильной прошивки 5.4.3.
Задача
Есть удаленный клиент который пользуется 2-мя услугами: интернет и телефония. В роли точки доступа у нас будет Rocket M5, а в роли station-a NanoStation M5. Подключены они через бридж ethernet — wifi — ethernet. Нужно чтобы по воздуху бегал тегированный трафик.
Решение
Оборудование UBNT работает на прошивке собственной разработки под названием AirOS основанной на Linux, BusyBox и куче разных утилит. А если это Linux, то диагноз понятен: виланы настраиваются стандартными средствами, осталось только найти как интегрировать наши настройки с тем что делает веб-интерфейс.
И так, приступим. Настраиваем обе точки как обычно: даем IP адреса, SSID и остальные параметры. Как это делается я объяснять не буду, все довольно просто.
Заходим через ssh на одну из точек и видим что система просто создала бридж br0 который связывает все интерфейсы между собой. Нам надо этот бридж удалить, создать виланы и связать их в отдельные бриджы. Чтобы не затрагивать целостность конфигурации в общем, в AirOS предусмотрен скрипт /etc/persistent/rc.poststart (по умолчанию его нету) который запускается после того как система закончит свои настройки после старта.
Скрипт надо создать и сделать его исполняемым (делается на обеих точках):XM.v5.2.1# touch /etc/persistent/rc.poststart
XM.v5.2.1# chmod +x /etc/persistent/rc.poststart
Сначала настроим удаленный station чтоб потом его не потерять. Добавляем в его rc.poststart следующие строки:# На всякий случай удалим с ath0 IP адрес
ifconfig ath0 0.0.0.0
# Выключаем бридж
ifconfig br0 down
# Удаляем из него все интерфейсы
brctl delif br0 ath0
brctl delif br0 eth0_real
brctl delif br0 eth1_real
# Удаляем сам бридж
brctl delbr br0
# Создаем виланы
vconfig add ath0 100
vconfig add ath0 200
vconfig add ath0 300
# Включаем созданные интерфейсы
ifconfig ath0.100 0.0.0.0 up
ifconfig ath0.200 0.0.0.0 up
ifconfig ath0.300 0.0.0.0 up
# Создаем бридж для вилана 200 (интернет)
brctl addbr br200
brctl addif br200 ath0.200
brctl addif br200 eth0_real
ifconfig br200 up
# Создаем бридж для вилана 300 (VoIP)
brctl addbr br300
brctl addif br300 ath0.300
brctl addif br300 eth1_real
ifconfig br300 up
# Добавляем на управляющий интерфейс IP адрес
ifconfig ath0.100 10.10.10.2 netmask 255.255.255.0 up
# Если в этом вилане есть маршрут по умолчанию, то добавляем его
route del default gw 0.0.0.0
route add default gw 10.10.10.254 ath0.100
Хочу предупредить о грабле на которую сам попал и никак не мог вникнуть в чем проблема: если интерфейс имеет виртуальные интерфейсы, то он не должен быть ни в одном из бриджей, а то ничего работать не будет!
И так обязательно сохраняем наши изменения командой:XM.v5.2.1# cfgmtd -w -p /etc/
И перезагружаемся:XM.v5.2.1# reboot
И так Station мы на время потеряли так как он видит только тегированный трафик, но это не проблема скоро теги пойдут. Далее идет содержимое файла /etc/persistent/rc.poststart с точки доступа 10.10.10.1 (комментарии повторять не буду):ifconfig ath0 0.0.0.0
ifconfig br0 down
brctl delif br0 ath0
brctl delif br0 eth0_real
# У Rocket-a физически один ethernet интерфейс, но в системе есть и второй.
brctl delif br0 eth1_real
brctl delbr br0
# Создаем виланы на беспроводном интерфейсе
vconfig add ath0 100
vconfig add ath0 200
vconfig add ath0 300
# Те же самые виланы создаем на ethernet интерфейсе
vconfig add eth0_real 100
vconfig add eth0_real 200
vconfig add eth0_real 300
# Включаем созданные интерфейсы
ifconfig ath0.100 0.0.0.0 up
ifconfig ath0.200 0.0.0.0 up
ifconfig ath0.300 0.0.0.0 up
ifconfig eth0_real.100 0.0.0.0 up
ifconfig eth0_real.200 0.0.0.0 up
ifconfig eth0_real.300 0.0.0.0 up
# Создаем бридж для вилана 200 (интернет)
brctl addbr br200
brctl addif br200 ath0.200
brctl addif br200 eth0_real.200
ifconfig br200 up
# Создаем бридж для вилана 300 (VoIP)
brctl addbr br300
brctl addif br300 ath0.300
brctl addif br300 eth0_real.300
ifconfig br300 up
# Создаем бридж для управляющего вилана
brctl addbr br100
brctl addif br100 ath0.100
brctl addif br100 eth0_real.100
ifconfig br100 10.10.10.1 netmask 255.255.255.0 up
route del default gw 0.0.0.0
route add default gw 10.10.10.254 br100
Сохраняем и перезагружаем:XM.v5.2.1# cfgmtd -w -p /etc/
XM.v5.2.1# reboot
Полученные результаты можно просматривать командами ifconfig и brctl.
Original source: habrahabr.ru.
©http://habrahabr.ru/sandbox/36532/
04:59 pm - Профессиональная
Почему asus rt-n16?
До этого рабочей лошадкой был dlink dir-615, особых нареканий в работе нет, единственное, из за чего и пришлось искать замену, — начал захлебываться под увеличившейся нагрузкой (в среднем 15 пк одновременно). Естественно при выборе, я искал что-то с более мощной начинкой, способной с запасом обрабатывать такую нагрузку. Выбор мой остановился именно на продукте от компании asus.
Неплохой дизайн, хорошее качество изготовления, мощное железо — именно то, что мне надо. Единственным минусом послужила прошивка — но для меня это не было актуально, все-равно перепрошивать на dd-wrt.
Что же роутер из себя представляет:
процессор Broadcom BCM4718, работающий на частоте 480 МГц, хоть в спецификации производителя и указана частота 533 МГц.
две микросхемы оперативной памяти от Samsung, общим объемом 128 Мб, сама прошивка находится на флешчипе объемом 32 Мб
Сетевой коммутатор Broadcom BCM53115SKFBG
2 usb 2.0 порта
Стандарт IEEE 802.11 b/g/n
Поддержка более 300 000 сессий, комфортная работа при большой p2p-нагрузке.
Это основные параметры, на которые я обращал внимание, более подробные характеристики и обзоры можно найти на просторах рунета.
Прошивка DD-WRT
Сначала готовим площадку (скачиваем эту прошивку), после получаем минимальную прошивку dd-wrt, а вот дальше уже шьемся прошивкой mega.
Далее настраиваем в соответствии с настройками провайдера. Подробные инструкции можно найти на официальном сайте прошивки).
Площадка для наших экспериментов готова.
Optware
Но на этом мы не остановимся. Следующим шагом послужило подключение к роутеру usb-харда (сойдет и флешка, если в планах нет организации ftp-сервера, установки торрент клиента, либо чего-то подобного).
Флешку необходимо отформатировать в ext3.
Подключаем флешку к роутеру, переходим на вкладку «Службы», раздел «USB».Отмечаем нужное и нажимаем «Применить».
Далее подключаемся по телнету к роутеру. IP-адрес роутера: 192.168.1.1 (если не меняли), логин: root (не важно, какой логин на самом деле, но для подключения по телнету необходим этот), пароль: тот самый, которыйбылзадан при первом запуске.
Подключившись вводим следующие команды:
wget www.3iii.dk/linux/optware/optware-instal
sh /tmp/optware-install.sh
export PATH=/opt/bin:/opt/sbin:$PATH
unset LD_LIBRARY_PATH
/opt/bin/ipkg-opt update
Теперь все готово для установки необходимого программного обеспечения. Это может быть торрент клиент, веб-сервер, сервер ретрансляции радио и другое.
Ограничение скорости клиентов
В моей ситуации получилась следующая проблема, когда один пользователь торрентами зажимал всем остальным скорость. В этом случае нам нужен шейпер. Более-менее адекватный шейпер есть только в платной прошивке, однако нам поможет генератор скриптов, который можно скачать здесь. С помощью скрипта нарезаем скорость и все остаются довольны. После того, как скрипт сгенерирован, копируем в поле, вкладки «Техподдержка», раздела «Команды» и сохраняем в файрволл. При настройке нужно указать беспроводной интерфейс wl0, иначе шейпер не будет работать. Шейпер работает на базе встроенного пакета ntb, т.е. дальше можно будет более гибко регулировать ограничения, создавать динамические ограничение и т.п.
Заключение
Вот и все, что я сегодня хотел рассказать. На выходе я получил wi-fi сеть с web сервером, ftp сервером, ретрансляцией радио (и для себя iptv), протоколированием трафика и другим…
Более подробно о роутере можно прочитать в этом обзоре.
Сайт прошивки: dd-wrt.com.
Собственно сам роутер я купил за 3700 руб., что считаю не дорогим приобретением для такой сети.
Original source: habrahabr.ru.
©http://habrahabr.ru/sandbox/36554/
Navigate: (Previous 10 Entries)