Search
Write a publication
Pull to refresh
26
0
Сергей Борисов @risik

Программист

Send message

Жизнь за пределами Зиона

Reading time13 min
Views63K
С некоторым удивлением обнаружил, что для большинства хабражителей само собой разумеется, что внутри сервера стоят самые обычные Xeon’ы. Все остальные процессоры — это что-то далёкое и почти несуществующее, поэтому статья «Процессоры для корпораций» вызвала весьма живой интерес. Раз уж тема настолько интересная, попробуем заполнить информационный вакуум. Итак,

Кто и зачем их покупает?
Читать дальше →

Повышать или не повышать — вот в чем вопрос

Reading time4 min
Views63K

Я не владелец бизнеса. И не исполнительный директор. Я, как и все программисты, наемный работник. Поэтому решение о повышении зарплаты своим подчиненным принимаю не я. Но я даю рекомендации. И к ним прислушиваются или нет.

Рассуждаю я примерно так.

Сколько же надо платить программисту? Как правило, рыночная «вилка» вознаграждения для конкретной квалификации известна и составляет от X до 1.5*X. Можно рискнуть и платить по нижней планке — X. Однако, возможность получать в 1.5 раза больше за ту же работу скорее всего перевесит все остальные мотивы, которые удерживают бойца в моей команде. Ситуация усугубляется еще и тем, что агрессивные «охотники за головами» делают разрыв в вилке еще больше, чтобы побыстрее перекупить квалифицированные кадры. Надо ли платить по верхней планке, тем более, если она сильно завышена? А, может быть, следует платить еще больше?

Заранее, приношу свои извинения, за занудность и излишнюю детальность нижеследующего изложения в стиле — «как для домохозяек». Я много раз пытался объяснять свое видение подхода к решению этого вопроса людям, которые должны были принимать решение о повышении оклада, но они не всегда меня понимали. Или, может, просто, не хотели?
Читать дальше →

Мошеннические методы монетизации в free-to-play играх

Reading time11 min
Views137K
Примечание переводчика: После публикации статьи с автором связался коммерческий директор из King.com, создателя Candy Crush Saga, и прояснил несколько моментов, после чего автор добавил пару замечаний. Добавленные абзацы отмечены курсивом.

Принудительная монетизация


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

Согласно исследованиям, добавление даже одной промежуточной валюты между потребителем и реальными деньгами, например «игровых самоцветов» (премиальная валюта), делает потребителя гораздо менее подготовленными к оценке стоимости сделки. Лишние промежуточные предметы, я называю их «наслоения», делают для мозга оценку ситуации очень сложной, особенно под напряжением.

Этот дополнительный стресс часто подаётся в форме того, что Роджер Дики из Zynga называет «весёлыми мучениями». Приём заключается в том, чтобы поставить потребителя в очень неудобное или неприятное положение в игре, а потом предложить ему убрать эти «мучения» в обмен на деньги. Эти деньги всегда замаскированы в слоях принудительной монетизации, поскольку потребитель, столкнувшийся с «реальной» покупкой, скорее всего не поведётся на трюк.
Читать дальше →

Почему изучать TDD трудно и что с этим делать. Часть 1

Reading time6 min
Views33K
От переводчика: так сложилось, что в русскоязычном интернете мало информации о TDD и в основном описываются механические действия разработчика. Главному же – идее – уделяется совсем мало внимания. Эта статья является попыткой восполнить этот пробел. Важно отметить, что она не для тех, у кого нет времени на тесты, и тем более не для тех, кто не осознает важность слабосвязанной архитектуры. Статья (оригинал) адресована тем, кто делает или собирается сделать первые шаги в TDD.
Читать дальше →

Чек-лист преодоления CAP-теоремы

Reading time2 min
Views6.9K
Итак, вы ☐ твитнули, ☐ написали в блог, ☐ опубликовали пресс-релиз, ☐ написали в комментариях о том, что знаете способ преодолеть CAP-теорему. Ваша идея не сработает. И вот почему:

☐ вы предполагаете, что сбоев софта\железа\сети никогда не случается
☐ вы на самом деле всего-лишь перенесли проблему на другой логический слой
☐ ваше решение эквивалетно одному уже существующему, которое не преодолевает CAP-теорему
☐ вы на самом деле построили AP-систему (доступность и устойчивость к разделению, но не постоянная согласованность данных)
☐ вы на самом деле построили CP-систему(согласованность данных и устойчивость к разделению, но не постоянная доступность)
☐ вы на самом деле построили нераспределенную систему

А особенно в ваших планах плохо следующее:
Читать дальше →

Интервью с Анной Джентл (Anne Gentle), координатором разработки документации для сообщества OpenStack

Reading time7 min
Views2.4K
Мы представляем шестое из серии интервью с техническими руководителями проекта OpenStack в блоге Mirantis. Наша цель — обучить более широкое сообщество технических специалистов и помочь людям понять, как они могут внести вклад в проект OpenStack и извлечь из него выгоду. Естественно, ниже изложена точка зрения интервьюируемого, а не компании Mirantis.

Ниже мы представляем интервью Анны Джентл (Anne Gentle), координатора по разработке документации сообщества OpenStack.
Читать дальше →

Тестируем CSS в Selenium IDE

Reading time8 min
Views23K
css

Я все больше в своей практике пытаюсь использовать автоматизированное тестирование. Стараюсь при этом не плодить инструменты и библиотеки, обходиться простыми подходами. Не так давно, я задумался о том, как протестировать CSS-файлы. Поиск по Интернету выявил следующие точки зрения на этот вопрос:

  1. Тестирование CSS не имеет смысла, так как это декларативный язык, а его результатом является сверстанное изображение страницы, которое можно оценить лишь визуально.
  2. Протестировать CSS можно с помощью снятия битмапов с сгенерированной страницы и сверка ее с эталонным изображением. Для этого даже есть некоторые инструменты.
  3. Нашлась некоторая библиотека CSS-Unit.

Должен сказать, что все варианты мне не понравились. В конечном итоге мне удалось протестировать CSS используя текстовый редактор, Firefox + Selenium IDE и… и больше ничего.
Читать дальше →

Почему веб-приложения на мобильных платформах работают медленно

Reading time34 min
Views66K
От переводчика
Это перевод статьи Drew Crawford «Why mobile web apps are slow», опубликованной 09 июля 2013. Статья очень интересная, но большая — ошибки возможны — прошу простить и присылать замечания в личку.
Поскольку затронута острая тема, прошу заметить, что переводчик не обязательно разделяет мнение автора статьи!
При переводе текст слегка видоизменялся, поскольку прямой перевод не всегда понятно передает смысл. Для перевода термина «native code» был использован англицизм «нативный код», который понятнее и короче, чем «родной для платформы код». Термин «word processing» переводится как «верстка текста», хотя это немного сужает первоначальный смысл. Термин managed код («управляемый код») не был переведен, так как удачного перевод (на взгляд переводчика) не существует. Под «терминированием» приложения подразумевается его принудительное завершение операционной системой.
Повествование в статье ведется от первого лица: автора статьи.


Читать статью

Большая атака ботов на Wordpress-сайты

Reading time1 min
Views37K
Ориентировочно со 2 августа наблюдается массовая атака на сайты построенные на движках Wordpress (по некоторым данным также атакуются сайты на Joomla, DLE). Злоумышленники с помощью большого ботнета пытаются подобрать пароли к админкам с помощью брутфорса. Некоторые серверы не выдерживают нагрузки. Хостеры принимают различные меры по фильтрации ботов. Обширное обсуждение идет на форуме Searchengines.

Wordpress предлагает свои варианты решения: codex.wordpress.org/Brute_Force_Attacks

В логах на сервере это выглядит как-то так:
93.73.186.55 funshow.ru POST /wp-login.php HTTP/1.0
178.223.136.215 funshow.ru POST /wp-login.php HTTP/1.0
178.68.139.101 funshow.ru POST /wp-login.php HTTP/1.0
99.162.150.102 funshow.ru POST /wp-login.php HTTP/1.0


Как вариант следует убедиться, что админский пароль к сайту устойчив для подбора.

Как узнать, что ваш PHP сайт был взломан

Reading time11 min
Views135K
Сайт моего друга недавно был взломан, на нем была запущена старая версия IP.Board, в которой есть уязвимость локального внедрения кода (local file inclusion). Этот пост не будет посвящен IP.Board или другому php коду, он покажет, как найти потенциально вредоносный php код на ваших серверах. Наконец, покажу пример того, что злоумышленники могут загрузить на взломанный сайт.

Проверьте логи доступа


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

IpreMOVED - - [01/Mar/2013:06:16:48 -0600] "POST /uploads/monthly_10_2012/view.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"
IpreMOVED - - [01/Mar/2013:06:12:58 -0600] "POST /public/style_images/master/profile/blog.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"

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

Два файла выше это загруженные взломщиком скрипты, как они туда попали, большой роли не играет, так как код на любых двух серверах, вероятно, будет различным. Тем не менее, в данном конкретном примере, уязвимость в устаревшей версии IP.Board была использована, и атакующие смогли добавить свои собственные скрипты в директории доступные для записи, такие как пользовательский каталог загрузки и каталог, в котором IP.Board хранит кэшированные изображения темы оформления. Это общий вектор атаки, много людей изменяют права на эти каталоги на 777 или дают им доступ на запись, подробнее об этом чуть позже.

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

Обратите внимание, что в журнале доступа POST запросы, а не GET запросы.
Скорее всего, злоумышленники хотели сделать журнал доступа более неприметным, так как большинство журналов не сохраняют post данные.
Читать дальше →

Фрагментация Android

Reading time4 min
Views42K
Фрагментация – это и достоинство, и недостаток экосистемы Android. В сети достаточно много сравнений уровня API операционных систем Android и iOS. В этом статье мы исследуем степень фрагментации мобильной ОС от Google и проанализируем влияние фрагментации на разработчиков и пользователей.

Недостаток:

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

Достоинство:

Несмотря на все недостатки, фрагментация имеет много преимуществ, как для разработчиков, так и для конечных пользователей. Наличие дешевых смартфонов (редко работающих на последней версии Android) способствует более высокому охвату пользователей, чем iOS, таким образом, разработчики приложений имеют более широкую аудиторию. Возможно, приложение сложнее сделать, но потенциальный выигрыш определенно стоит того. Для потребителей, существенная фрагментация способствует тому, что они выбирают именно тот телефон, какой хотят – маленький или большой, дешевый или дорогой, с любой комбинацией различных особенностей.

ФРАГМЕНТАЦИЯ УСТРОЙСТВ



Читать дальше →

ARM ассемблер (продолжение)

Reading time7 min
Views47K
Доброго времени суток, хабражители. Вдохновившись статьёй ARM аccемблер, решил для интересующихся и таких же начинающих, как я, продолжить эту статью. Исходя из названия становится понятно, что перед тем, как читать эту статью, желательно прочесть вышеуказанную. Итак, «продолжим».

Мой случай будет отличаться от предыдущего следующим:
  • у меня на машине ubuntu 12.04
  • arm toolchain я брал от сюда(выбрать ARM Processors — Download the GNU/Linux Release). На момент написания статьи появились более свежие версии, но я использовал arm-2012.09(arm-none-linux-gnueabi toolchain)
  • устанавливал так:
    $ mkdir ~/toolchains
    $ cd ~/toolchains
    $ tar -jxf ~/arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
  • добавлял для упрощения дальнейших действий наш тулчейн в PATH
    $ PATH=$HOME/toolchains/arm-2012.09/bin:$PATH
  • установка qemu в ubuntu
    $ sudo apt-get install qemu
    $ sudo apt-get install qemu-system

В принципе, никаких критических изменений относительно случая в статье-«родителе» нет.
Читать дальше →

Ваш уровень программирования и не только

Reading time4 min
Views41K
Вам интересен ваш уровень программирования?
Информатика и теория информации
2n (Уровень 0) n2 (Уровень 1) n (Уровень 2) log(n) (Уровень 3) Комменатрии (от автора)
Структуры данных Не знает разницу между массивом и связным списком Может объяснить суть и использовать массивы, связные списки, ассоциативные массивы Может рассказать как реализуются хэш-таблицы, обрабатываются столкновения в них, знает очереди приоритетов и способы их реализации Знает сложные структуры данных, такие как: биноминальную и фиббоначиевую кучу, Б-дерево, AVL дерево, красно-черноё дерево, префиксное дерево, расширяющиеся дерево, список с пропусками.

Прим.переводчика: извиняюсь за костлявость перевода, также я заменил некоторые труднопереводимые выражения.
Тогда просим под кат.
Мне интересно, дальше!

Разработка плагина IntelliJ IDEA. Часть 1

Reading time10 min
Views51K
За последнее время у меня накопилось достаточно материалов по разработке плагинов для IntelliJ IDEA, чем и собираюсь поделиться с хабрасообществом.

Среда разработки и инфраструктура


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

Для разработки плагинов подойдет любая современная версия Intellij IDEA – она уже включает в себя полный набор необходимого инструментария.
Читать дальше →

8 вещей, которых не должен бояться разработчик

Reading time4 min
Views54K
Изменять код
В процессе разработки программного обеспечения нет такого понятия, как «стагнация». Все, что вы разрабатываете сейчас — просто очередная версия компонента, который вероятно будет меняться в будущем. Изменение является самым распространенным явлением в мире разработки программного обеспечения и вам лучше принять это как факт. Рассчитывайте на возможные изменения всего, что вы разрабатываете и поэтому проектируйте ваш код более модульным. Это упрощает изменения и в тоже время увеличивает качество кода. Старайтесь придерживаться концепций DRY и YAGNI. Вы часто будете в ситуации, когда вы смотрите на ваш код и представляете, что вы могли бы сделать это лучше. Так пусть эта мысль не мешает вам спать. Садитесь сразу за дело и рефакторинг! Если не сделаете это сейчас, вы возможно никогда этого не сделаете. Чем дольше ждете, тем сложнее и дороже это будет. И это может вырасти в лишнюю головную боль, с которой не захочется связываться.
«Хороший код — это код, который легко изменять. Код стремится измениться до момента, когда его уже не легко изменять. Весь код становится плохим кодом». Неизвестный автор.
Читать дальше →

STL для новичков. Реализация класса-контейнера

Reading time6 min
Views18K
Привет Хабр, наверное все, кто изучает С++ хотят разобраться как реализованы и как работают классы-контейнеры из стандартной библиотеки. Как по мне, чтобы лучше освоить нечто похожее на контейнеры, то надо попробовать реализовать один из контейнеров самому. В этой статье я хочу показать вам хотя бы примерно как реализуются классы-контейнеры на примере списка. Хочу сразу сказать, что это не будет копирование всего функционала, а будет показана только концепция работы контейнера, а именно реализуем класс списка и класс итератора для работы с ним.

Статья будет интересна только новичкам, которые начинают изучать стандартную библиотеку, профессионалы не найдут здесь для себя ничего новго.
Читать дальше →

AOP in action. AspectJ (CTW) + Spring + LTW

Reading time3 min
Views14K
Решил внедрить АОП логирование на проект и не внедрил. Как и почему, собственно и хочу поделиться.

Я не буду описывать суть и принципы АОП, а опишу только те проблемы, с которыми я столкнулся, и решения которых заняло много времени.
У меня было в распоряжении Spring, WebLogic, google.com и проект, куда я хотел внедрить АОП логирование. Скажу сразу, до этого я никогда не работал с АОП.

Проблема № 1


Spring AOP – использует proxy-based подход.

Если у нас есть класс (СlassA) с методами (methodA, methodB), при этом methodB() вызывает methodA() и аспект (допустим after) который должен выполняться при вызове methodA():

Читать дальше →

Технопарк Mail.Ru изнутри

Reading time3 min
Views32K
Привет, Хабр!
Здесь уже было несколько статей про Технопарк: Технопарк Mail.Ru Начало, пост, вдохновленный технопарковской инфографикой, статьи про преподаваемые дисциплины (первая, вторая)…
Мне выпала честь рассказать о том, каков Технопарк с точки зрения студента.
 
image
Читать дальше →

Хороший пользовательский интерфейс

Reading time7 min
Views120K

Вольный перевод статьи Якуба Линовски — «A Good User Interface».

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

16 практических идей

C++: Когда время жизни объекта определяется временем жизни ссылки на него

Reading time3 min
Views13K
В то время пока выходят статьи о сущности и подводных камнях r-value ссылок (пример со ссылками на полезные источники habrahabr.ru/post/157961) подозреваю, что довольно многие не знают особенности обычных l-value ссылок. Суть этой статьи показать пример, когда время жизни объекта определяется временем жизни l-value ссылки на него, и как это можно использовать. Если заинтересовало, то добро пожаловать. Кстати, зная как можно больше особенностей про l-value ссылки, будет проще понять r-value.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity