Как стать автором
Обновить
31
0.2

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

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

Абсолютное горизонтальное и вертикальное центрирование

Время на прочтение5 мин
Количество просмотров313K
Сколько уже было сломано копий о задачу выравнивания элементов на странице. Предлагаю вашему вниманию перевод отличной статьи с решением этой проблемы от Стефана Шоу (Stephen Shaw) для Smashing Magazine — Absolute Horizontal And Vertical Centering In CSS.

Все мы знали о margin: 0 auto; для горизонтального центрирования, но margin: auto; не работало для вертикального. Это можно легко исправить, просто задав высоту и применив следующие стили:

.Absolute-Center {
  margin: auto;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
}

Я не первый, кто предложил это решение, однако такой подход редко применяется при вертикальном выравнивании. В комментариях к статье How to Center Anything With CSS Simon ссылается на пример jsFiddle, где приводится отличное решение для вертикального центрирования. Вот еще несколько источников на эту тему.

Рассмотрим способ поближе.
Читать дальше →
Всего голосов 112: ↑106 и ↓6+100
Комментарии10

Учим английский: фильмы, книги, словари

Время на прочтение10 мин
Количество просмотров518K
Многие из нас занимаются изучением английского языка, потому что в сфере ИТ большинство документации, форумов и просто полезной информации изложено на универсальном языке – английском. И каждый находит для себя свой подход к обучению: кто-то идет к своей цели постепенно, планомерно, кто-то более экспрессно и выборочно. В самом деле, в Интернете вы найдете более 9000 методик, о том, как эффективно и быстро выучить язык самому. В языковой школе вам предложат несколько целевых программ: от «разговорных навыков делового человека» до «целенаправленной сдачи TOEFL». Чего же нового хочу я предложить? Мы поговорим о «фоновом» изучении языка. Цель моего поста – поделиться с вами способами изучения языка, которые я использовал. Постараюсь показать концепцию в целом, который каждый из вас сможет интегрировать в свой способ познания языка.
image
Читать дальше →
Всего голосов 83: ↑70 и ↓13+57
Комментарии63

Настройка маршрутизации по двум провайдерам

Время на прочтение3 мин
Количество просмотров96K
Вчера столкнулся с небольшой проблемой — на машине с Win2k3 установлены 2 сетевых карты, 2 провайдера. Проблема оказалась следующая: подсети пересекаются (точнее — совпадают). Было решено использовать за основной шлюз 1го провайдера, а по внутрисетевым ресурсам гулять — через 2го. И всё бы ничего, но машина должна обслуживать входящие соединения с обоих интерфейсов. Но, благодаря статическим маршрутам, ответы на запросы из подсети 10.0.0.0/8, пришедшей со стороны первого провайдера уходили через канал второго провайдера, что было, мягко говоря, не тем, что нужно. Как решить эту проблему под линухом — я знал (и тоже поведаю в этой заметке). Немного погуглив был найден вариант решения (в msdn'e наткнулись на управления приоритетами соединений). Коллега (WAJIM, привет) подумал — и нашёл 2й вариант. Потом немного (совсем немного) подумал я — и по аналогии появился 2й вариант решения для линуха :)
Итого, под катом вас ожидает 4 варианта решения задачи маршрутизации по 2м провайдерам — 2 под виндовс и 2 под линукс.
понеслась
Всего голосов 42: ↑41 и ↓1+40
Комментарии33

ConceptNet 5 — настоящий ИИ не за горами

Время на прочтение3 мин
Количество просмотров33K
ConceptNet

ConceptNet — семантическая нейро-сеть, содержащая много вещей, которые компьютеры должны знать о мире, особенно при понимании текста написанного людьми.
Сеть построена из узлов, представляющих определенные слои и концепции, в виде слов или коротких фраз естественного языка и знаков отношений между ними. Это могут быть любые вещи, которые компьютерам нужно знать, чтобы искать информацию лучше, отвечать на вопросы и понимать цели людей. Если вы хотите построить свой собственный Watson вместе с ConceptNet, то это должно быть отличной целью для начала!
Подробности об ConceptNet под катом
Всего голосов 55: ↑50 и ↓5+45
Комментарии46

Semantic MediaWiki

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

Semantic MediaWiki — это расширение, ради которого стоит ставить MediaWiki: оно помогает бороться с бардаком и хаосом, который рано или поздно воцаряется в любой вики-системе.

  • Оно позволяет поддерживать согласованность данных на вики.
  • С его помощью можно обращаться с вики как с базой данных.
  • С его помощью можно генерировать красивые графики, диаграммы и графы на основе вики-данных.
  • Оно позволяет пользователям возможность вводить данные с помощью форм, а не вики-разметки, понижая тем самым порог вхождения для пользователей.

SMW позволяет использовать вики как составную часть системы управления знаниями, с его помощью можно создавать коммерческие системы, которые сочетают простоту вики, четкость коллаборативных баз данных, и лучшее из мира Semantic Web. В общем, это вещь, более чем достойная пристального внимания и подробного обзора.
Читать дальше →
Всего голосов 70: ↑67 и ↓3+64
Комментарии26

Использование ncurses в PHP

Время на прочтение9 мин
Количество просмотров20K
Как программист и веб-разработчик, вы наверное время от времени пишете программы на php для администрирования сайта из консоли. Средствами языка можно сделать только выводящую/читающую из консоли программу, но с помощью библиотеки ncurses можно создать консольную утилиту с довольно сложным внешним видом, которая будет одинаково выглядеть в разных видах терминалов.

PHP очень гибок и расширяем, с его помощью можно создавать скрипты, которыми можно заменить аналогичные на других языках (Perl/bash-скрипты и прочее). Функциональность ncurses поразительна и действительно выводит возможности работы с терминальным php-приложением на новый уровень.

Предназначение статьи — дать вам «толчок» в сфере написания консольных утилит на php, которые будут использовать возможность этой библиотеки. Я собираюсь показать только самое важное, относящееся к самой библиотеке, и надеюсь дать вам базу для использования ncurses в вашем приложении.

Для кого предназначена статья

Материал предназначен для опытных php-программистов, заинтересованных в создании консольных php-приложений с пользовательским интерфейсом. (прим. переводчика: материал пригодится разработчику любого уровня, здесь нет ничего сложного).
Читать дальше →
Всего голосов 85: ↑77 и ↓8+69
Комментарии21

Nginx boilerplate: Быстрая и изящная настройка nginx

Время на прочтение1 мин
Количество просмотров38K
Хочу поделиться своими наработками по настройке nginx, которые, возможно, помогут кому-то при старте нового проекта или избавят от необходимости копипастить очередной vhost.

Я отметил две проблемы подавляющего числа конфигов nginx'а, попадавших мне на глаза:
  • «Всё в одном файле»
  • Дублирование настроек

С помощью моего подхода, надеюсь, эти и многие другие проблемы будут устранены.
Читать дальше →
Всего голосов 87: ↑77 и ↓10+67
Комментарии31

Нужны ли в JavaScript классы?

Время на прочтение6 мин
Количество просмотров104K
JavaScript принято считать прототип-ориентированным языком программирования. Но, как ни странно, этим подходом практически никто не пользуется: большинство популярных JS-фреймворков явно или неявно оперируют классами.
В этой статье я хочу рассказать об альтернативном способе программирования на JavaScript, без использования классов и конструкторов — чистым прототипным ООП и особенностях его реализации на ECMA Script 5.
Читать дальше →
Всего голосов 164: ↑140 и ↓24+116
Комментарии60

RESTful API для сервера – делаем правильно (Часть 1)

Время на прочтение13 мин
Количество просмотров333K
В 2007-м Стив Джобс представил iPhone, который произвел революцию в высокотехнологичной индустрии и изменил наш подход к работе и ведению бизнеса. Сейчас 2012-й и все больше и больше сайтов предлагают нативные iOS и Android клиенты для своих сервисов. Между тем не все стартапы обладают финансами для разработки приложений в дополнение к основному продукту. Для увеличения популярности своего продукта эти компании предлагают открытые API, которыми могут воспользоваться сторонние разработчики. Пожалуй Twitter был первым в этой сфере и теперь число компаний, последовавших этой стратегии, растет стремительно. Это действительно отличный способ создать привлекательную экосистему вокруг своего продукта.

Читать дальше →
Всего голосов 73: ↑70 и ↓3+67
Комментарии57

Traits в php 5.4. Разбираем детали реализации

Время на прочтение8 мин
Количество просмотров53K
Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

Простой пример типажа, чтобы не заглядывать в Википедею:
//определение типажа
trait Pprint 
{
    public function whoAmI()
    {
        return get_class($this) . ': ' . (string) $this;
    }
}

class Human 
{
    use Pprint; //подключаем типаж, ключевое слово use

    protected $_name = 'unknown';
    
    public function __construct($name)
    {
        $this->_name = $name;
    }

    public function __toString()
    {
        return (string) $this->_name;
    }   
}

$a = new Human('Nikita');
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita

Как видно, к классу Human было добавлено поведение из типажа Pprint.

Но во всём есть свои детали.
О них далее
Всего голосов 163: ↑155 и ↓8+147
Комментарии102

Советы Google по кодированию на языке Python. Часть первая: советы по программированию

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

Хай, Хабр!
Сегодня я хочу представить, дорогому хабрасообществу свой первый хабраперевод. Программировать на языке Python — подобно песне. Но еще лучше, когда Ваш код читаем и понятен, а значит чуть более поэтичен, чем обычно бывает производстве. У каждого свои правила и свои стереотипы относительно написания и оформления исходного кода, на каком бы языке он ни был написан. Множество копий сломано о щиты на форумах, но, как ни крути, нельзя не считаться с мнением авторитетных товарищей. Так что сейчас будет представлен перевод первой части стайл-гайда для языка Python от Google. Коснется он именно постулатов написания кода (вторая часть тоже скоро появится, а посвящена она будет форматированию исходного кода). Сразу предупреждаю: тут много (если не большая часть) прописных истин, которые все знают уже давно. Но я искренне надеюсь, что Вы сможете найти тут что-то новое или хотя бы вспомнить старое. Приступим под катом. И pdf тут как тут.
Читать дальше →
Всего голосов 122: ↑109 и ↓13+96
Комментарии58

Linux/Cdorked.A: веб-серверы под управлением Lighttpd и nginx под угрозой

Время на прочтение8 мин
Количество просмотров17K
В прошлой части нашего исследования мы обещали опубликовать продолжение анализа инцидента заражений серверов под управлением Linux с участием бэкдора Linux/Cdorked.A. Мы уже писали, что специалистами нашей лаборатории была установлена его главная задача, которая заключается в перенаправлении пользователей веб-сервера на вредоносные веб-сайты. Расследуя более детально этот инцидент мы пришли к следующим выводам:

  • Всего было выявлено более 400 веб-серверов, зараженных Linux/Cdorked.A. Кроме того, 50 из них осуществляют хостинг для веб-сайтов, которые входят в Alexa ТОП 100,000 самых популярных веб-сайтов.
  • Бэкдор осуществлял компрометацию веб-серверов не только под управлением Apache, но и Lighttpd, а также nginx.
  • По данным наших систем телеметрии, эта угроза была активна уже с декабря 2012 г.
  • Бэкдор использует дополнительные механизмы для обеспечения своей скрытности. В частности, нами было установлено, что вредоносный код не будет осуществлять перенаправление пользователей, если IP-адрес клиента находится в диапазоне адресов, указанных в черном списке. Этот черный список является довольно большим и включает в себя адреса, принадлежащие таким странам как Япония, Финляндия, Россия, Украина, Казахстан и Белоруссия. Кроме этого, проверка страны также выполняется по анализу HTTP-заголовка и параметру Accept-Language.
  • Наша облачная технология показывает почти 100,000 пользователей AV-продуктов ESET, которые перенаправлялись на ссылки, сгенерированные скомпрометированными веб-серверами. При этом такое перенаправление на вредоносное содержимое было заблокировано антивирусом.
  • В некоторых случаях мы наблюдали специальные перенаправления для платформ Apple iPad и iPhone.


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

PHP создан, чтобы умирать

Время на прочтение8 мин
Количество просмотров156K
Дисклеймер: у меня за спиной более десяти лет разработки на PHP. Я начал использовать его, когда PHP4 был совсем малышом, а PHP5 — только мечтой компании Zend. С помощью него я сделал многое, я любил его, проклинал и не без стыда наблюдал за тем, как он растёт и развивается. Я всё ещё использую его в некоторых доставшихся по наследству проектах, но предпочитаю больше его не применять. Также хочу отметить, что я не сотрудничаю с создателями фреймворков или инструментов, упомянутых в статье.

TL;DR (англ. too long; didn't read. Так, в частности, говорят, когда лень читать статью целиком — прим. пер.): если ваш проект основан на функциях фоновых процессов (фоновых служб, демонов — прим. пер.), избегайте PHP.

По-моему, в большинстве случаев ненавистники PHP упускают один весьма важный момент: PHP создан, чтобы умирать. Это не значит, что довольно способный (в какой-то степени) язык программирования исчезнет в никуда; это всего лишь означает, что ваш PHP код не может выполняться вечно. В настоящее время, спустя 13 лет после первого официального релиза в 2000 году, эта мысль до сих пор кажется мне вполне обоснованной.
Читать дальше →
Всего голосов 182: ↑140 и ↓42+98
Комментарии260

Boris — небольшой, но надежный REPL для php

Время на прочтение2 мин
Количество просмотров9.9K
REPL есть у python, ruby, clojure. REPL — read-eval-print loop. Если описать на псевдокоде что такое REPL — это будет выглядеть как-то так:
while(true){
    echo eval($input->get());
}

Подобная реализация позволяет разработчику эксперементировать с кодом как ему вздумается без создания файлов. Вы можете совершить ошибку, Boris выдаст сообщение об этом, но продолжит работать ожидая новый код.
Читать дальше →
Всего голосов 39: ↑31 и ↓8+23
Комментарии12

Пилим Adblock

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


Стратегия


Итак, Адблок… Но здесь я буду говорить не столько о блокировке рекламы, сколько об оптимизации и правильном использовании этого интересного своей универсальностью дополнения. Не отношусь к тем, кого раздражает сама реклама — меня раздражает способ ее доставки.
Читать дальше →
Всего голосов 61: ↑50 и ↓11+39
Комментарии64

Yii2. Знакомство

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

Введение

На днях, свершилось событие, которое Я и думаю еще немало людей ждали. Авторы Yii Framework выкатили превью-версию.

Спустя день здесь на хабре появился обучающий материал, прочтение которого вызвали странные впечатления и после выходных потраченных на изучения кода Yii2, я решил написать свою версию. Надеюсь получится не хуже.
Читать дальше →
Всего голосов 127: ↑116 и ↓11+105
Комментарии54

Анонимный сайт

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


Эта страничка анонимна



В наше время для размещения в сети любого материала вам придётся идентифицировать себя каким-либо образом. Особенно это относится к соц.сетям типа Facebook, Google+ и т.п. Но даже размещение анонимного блога в сервисах WordPress.com или Tumblr не является тривиальной задачей. Есть и другие возможности, — например, Tor. Но у него есть большой недостаток — большинство людей не имеют к нему доступа.
Читать дальше →
Всего голосов 64: ↑54 и ↓10+44
Комментарии98

Основной цикл в Javascript

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


Все мы слышали про ajax и node.js. Они прочно обосновались уже не просто в словарном запасе, но и в наборе инструментов веб-разработчика. Ajax — асинхронное подтягивание данных с сервера на страницу, node — фреймворк с асинхронным IO. Но как в таком однопоточном языке, как Javascript, реализуется та самая асинхронность?

Вы, наверное, уже догадались из заголовка, речь пойдет об основном цикле («main loop»).
Читать дальше →
Всего голосов 190: ↑186 и ↓4+182
Комментарии41

Автопрефиксер — окончательное решение проблемы префиксов в CSS

Время на прочтение4 мин
Количество просмотров57K
Автопрефиксер — утилита нового поколения для добавления префиксов к экспериментальным свойствам из CSS 3. Она берёт с Can I Use последние данные о префиксах и популярности браузеров, читает ваш файл стилей, находит свойства и значения, которым действительно нужны префиксы и добавляет их.

Вы просто пишите обычный CSS:
a {
    transition: transform 1s
}


Автопрефиксер сам заменит нужные (и только нужные) свойства и значения (обратите внимание на -webkit-transform):
a {
  -webkit-transition: -webkit-transform 1s;
  -o-transition: -o-transform 1s;
  transition: -ms-transform 1s;
  transition: transform 1s
}


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

Проблема


К сожалению текущие инструменты плохо решают задачу:
  • Писать вереницы свойств руками — очевидно плохое решение. Такой код невозможно читать, легко забыть поправить остальные свойства при редактировании.
  • В Sass и LESS вам нужно самому следить за актуальностью префиксов и копировать примеси из проекта в проект. К тому же примеси могут решить проблему только у свойств, а не у значений (например, calc()).
  • Compass или Bourbon уже лучше, там список примесей хранится централизовано и его легче держать актуальным (но практика показывает, что обычно в примеси добавляют все префиксы не следя за актуальностью). Проблема значений всё так же не решена.
  • Самая главная проблема Sass и LESS, что вам всё равно нужно постоянно думать «из CSS 3 это свойство или нет?» — и в зависимости от этого использовать примесь или нет. Эту проблему немного решил Stylus — у него синтаксис примесей не отличается от обычных свойств, так что префиксы добавляются невидимо. Впрочем, проблема актуальности и значений всё равно остались.
  • Есть ещё скрипты добавления префиксов прямо в браузере, например Prefix Free, но лучше всего обрабатывать стили на этапе разработки и выкладки, а не повторять обработку каждый раз в браузере клиентов.

Понятно, что языки препроцессоров не позволяют решить проблему полностью, нужен был фундаментально новый инструмент.
Читать дальше →
Всего голосов 72: ↑64 и ↓8+56
Комментарии81

Judy-массивы в PHP

Время на прочтение4 мин
Количество просмотров27K
В Badoo используется много сервисов на C и C++, большинство из которых работают с огромными объёмами данных. Как правило, сервисы выступают в роли «быстрого кэша» или «быстрой базы данных», т.е. совершают различные операции с массивами однотипных данных. Для быстрого доступа к данным мы давно и успешно используем Judy-массивы (англ. Judy arrays). Но однажды нам захотелось странного: обрабатывать большие массивы целых чисел на PHP, и мы сразу вспомнили про Judy.

Немного истории

Judy-массивы были изобретены Дугласом Баскинсом (англ. Douglas Baskins) в начале 2000-го года. Проект их разработки финансировался компанией HP, но примерно через два года был закрыт. За это время было выпущено четыре версии, причём разработка последней заняла больше года, и в ней разработчики смогли в два раза ускорить Judy, в два раза уменьшить потребление памяти, хоть и далось это нелёгкой ценой: объём кода вырос в 5 раз, а его сложность  ― на порядок.
Читать дальше →
Всего голосов 103: ↑93 и ↓10+83
Комментарии62

Информация

В рейтинге
2 246-й
Зарегистрирован
Активность