Открыть список
Как стать автором
Обновить
0
Карма
0
Рейтинг
Ден @MARDEN

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

Пиратская локализация. Как это было

КопирайтИгры и игровые приставки
Так уж вышло, что мне довелось стоять, можно сказать, у истоков так называемой “пиратской локализации” игр на территории бывшего СССР. Многие ее ругают, многие привыкли и воспринимают это явление как должное. Я попробую рассказать, как все это начиналось и вкратце поделиться своим немалым опытом.

Итак, за окном шел дождь, и календарь отсчитывал 1991 год…
Читать дальше →
Всего голосов 418: ↑411 и ↓7 +404
Просмотры4.4K
Комментарии 210

Вариант PHP кода для вывода строки в множественном числе

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

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

Её код представлен ниже.

Читать дальше →
Всего голосов 9: ↑4 и ↓5 -1
Просмотры300
Комментарии 20

Как открыть компьютерный интернет-магазин

Управление продажами
Приветствую Хабро-сообщество.

Прошу не судить строго за пост, во-первых это проба пера на этом сайте, во-вторых — это всего лишь собственный опыт, который вполне возможно не является идеалом для копирования, но возможно станет для вас базой для того чтобы делать лучше.
Читать дальше →
Всего голосов 132: ↑121 и ↓11 +110
Просмотры9.9K
Комментарии 136

qJerry: пиши меньше, делай больше. Теперь на PHP.

Чулан
Как-то незаметно на Хабре прошло появление в свет интересной, на мой взгляд, библиотеки.

О библиотеке qJerry


qJerry — это библиотека для работы с XML-документами, написанная на языке PHP. Основная миссия qJerry — сделать работу с XML комфортнее, чем позволяют стандартные средства PHP, такие как расширение DOM.
Читать дальше →
Всего голосов 38: ↑34 и ↓4 +30
Просмотры318
Комментарии 19

Создание системы авторизации в высоконагруженном проекте с использованием MemcacheDB

Чулан
Здравствуйте!

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

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

Читать подробности
Всего голосов 17: ↑17 и ↓0 +17
Просмотры738
Комментарии 31

И ещё немного о input file

Чулан
Вопрос о стилизации <input type=«file» /> настолько стар, что наверное только ленивый не пробовал собственную реализацию этого, несомненно, важного в web дизайне элемента.
Однако, в большинстве своём, решения очень не однозначны и зачастую предлагают примерно следующие варианты:
  • Наложить файл инпут поверх картинки и сделать его прозрачным.
  • Использовать flash.
При этом, в первом случае, чтобы всё работало относительно одинаково во всех браузерах, предлагается «спорные области» — те что в одном браузере являются активными для нажатия, а в другом неактивными — закрыть, например, наложив сверху <div></div>. Стоит ещё добавить, что тут же используется значительное количество css со всяческими отрицательными отступами и float`ами.
А во втором случае мы имеем ряд не удобств связанные с активацией flash элементов (например в IE), а лично у меня (и думаю у всех, кто в ФФ использует Add Block Plus дополнение) кнопочка block совсем не красит флешевый инпут файл.

Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры788
Комментарии 22

Аналог LIMIT в MSSQL

Чулан
Так уж сложилось что MSSQL не имеет своего аналога функции LIMIT в MySQL (за исключением TOP). Но достаточно часто возникает необходимость выбрать определенный интервал значений не с первого а например с 1000-го.
Читать дальше →
Всего голосов 15: ↑13 и ↓2 +11
Просмотры15.7K
Комментарии 6

Совершенно случайные числа без повторения

Чулан

Задача


Сегодня столкнулся с задачей сделать 4 случайных числа в заданном диапазоне, без повторения, казалось бы такая тривиальная задача, но!
Обычное rand($min, $max) не давало нужного результата, особенно при малом числе $max ~ 15;
То есть:

$number[0] = rand(1, $max);
$number[1] = rand(1, $max);
$number[2] = rand(1, $max);
$number[3] = rand(1, $max);


Могло в итоге выдать 2, 2, 3, 9 — эти повторения мне нужны не были, спросив совета на хабраканале, freefd дал ссылку на перловый вариант cookbook, но реализация мне не понравилась своей громозкостью и нелапидарностью.

Решение


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

function generateFourRandomNumber ($maxCount){
$numbers = range(1, $maxCount);
shuffle($numbers);
return array($numbers[0], $numbers[1], $numbers[2], $numbers[3]);
}


Итого


Вуаля! Просто лапидарно, и даже странно :)
несколько НО:
  • решение подходит для малых максимальных значений, иначе потом shuffle будет стоить слишком дорого
  • функцию легко переделать по вид generateRandomNumber ($maximum, $count)


UPD


Спасибо duncanf1 за еще более короткий вариант:
function generateRandomNumber ($maximum, $count){
return array_rand(range(0, $maximum), $count);
}
Всего голосов 18: ↑9 и ↓9 0
Просмотры1.4K
Комментарии 23

Рыба коммерческого предложения от P&G

Чулан
В компаниях-дистрибьюторах Проктэр энд Гэмбл есть простой и довольно эффективный алгоритм для написания коммерческих предложений. Он не безупречен, зато ему можно научиться всего за несколько дней. Этот подход часто хорошо подходит и для других документов — от служебных записок до деловых писем.

Алгоритм включает в себя 5 шагов:

1. Описание исходной ситуации.
  • Ориентирует, к чему, собственно, относится предложение.
  • Служит предпосылкой, исходными данными для логического обоснования предложения.
  • Показывает клиенту, что КП написано персонально.
  • Провоцирует «да-реакцию».

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

2. Суть предложения.
  • Приковывает внимание; если клиент согласен с предложением, то он будет читать дальше, чтобы узнать подробности и предлагаемые действия; если клиент не согласен — то он захочет выяснить, с чего вдруг это предлагается и зачем ему это надо.
  • Позволяет клиенту быстрее понять изложенные дальше преимущества и действия.

Предложение здесь описывается без подробностей, объяснений, оправданий, детализации, амортизации и прочего гламура. Никаких «мы предлагаем совестными усилиями в процессе совместного плодотворного сотрудничества посредством интеграции инфраструктуры управления товарными запасами…»; должно быть просто до примитива, например, «Вы даете нам оперативную информацию о продажах — мы формируем оптимальный заказ» или «В прикассовой зоне вместо презервативов надо продавать наши леденцы».

3. Преимущества для клиента.
Задача этого шага очевидна — нужно замотивировать клиента принять это предложение. Вот здесь уже можно выражаться чуть более дипломатично и многословно. В перечислении преимуществ важно не упустить каких-то вещей, которые кажутся самоочевидными. Например, для вашей компании может подразумеваться, что при поставке товар размещается на стеллажах склада силами ваших сотрудников — для клиента это может быть менее очевидно. Обычно стоит выделить 3—5 преимуществ.

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

5. Первый шаг.
Эту часть часто недооценивают. Что должен сделать клиент в первую очередь, чтобы это КП претворилось в жизнь? Согласовать текст договора? Позвонить вам, если согласен в течение недели? К завтрашнему дню, когда вы обещали позвонить, уточнить со своим логистом возможности перебросок с оказией дополнительных партий по городам области? Надо подумать и спланировать это за клиента.

***

Все это должно влезть меньше, чем на одну страницу. Не нужно сюда пытаться влепить прайс на 500 позиций или любимые цитаты из договора — все это можно вольготно разместить в приложениях.
Всего голосов 12: ↑11 и ↓1 +10
Просмотры1.5K
Комментарии 5

Поисковое API для PHP (Flash, Java и других)

IT-компании
Задача: организовать поиск по всему сайту затратив как можно меньше усилий и оформить результаты в своем стиле.

Рассуждение
Есть различные серверные системы для организации полнотекстового поиска индексируя сайт, индексирую базу данных. Но их надо устанавливать на своем сервере, настраивать, а некоторые из них еще и платные.
В какой-то момент решил воспользоваться Google Ajax Search API через JavaScript, но тут вид результатов менять достаточно сложно, да и еще надо делать запросы в другой домен при помощи javascript.

Решение
В итоге набрел на странице Google AJAX Search API в раздел Code Snippets и все стало просто: немного кода на php и полнотекстовый поиск по любому сайту готов.

Пример кода с комментариями
Всего голосов 22: ↑14 и ↓8 +6
Просмотры3.7K
Комментарии 6

Превью и Resize картинок на лету

Чулан
Переделывал сайт заказчику на Netcat и с удивлением обнаружил, что кто-то ещё использует загрузку отдельных картинок для оригиналов и для превьюшек и как следствие отдельные столбцы в таблице БД. Куда ещё не шло создавать превьюшки на стороне сервера после загрузки оригинала.

Идея простая и не новая. C таким подходом я в первые столкнулся в UMI-CMS, а использовал в RubyOnRails. Смысл в том, что превью создаются только когда они нужны и какого угодно размера, а В БД храниться только название оригинала.

Если Вам необходимо вывести превью картинки вы вызываете функцию типа:
  1. @thumbs = Photo.view_thumbs('originals_name_file.jpg', '100', 'auto')
где второй и третий параметр это нужный размер в пикселах (auto значит автоматическая подгонка под массштаб).

Метод view_thumbs проверяет в папке (например "/images/cache") наличие файла originals_name_file_100xauto.jpg. Если находит то возвращает строку «originals_name_file_100xauto.jpg», если не находит, то создаёт файл нужных размеров на лету и возвращает то же самое.

Достоинства подхода очевидны:
  1. Не создаётся мусора в виде большого количества превьюшек на диске. Все превью храняться в одной папке «cache» и могут периодически удаляться для освобождения места.
  2. Неограниченное количество превьюшек разных размеров. Достаточно только задать нужные параметры в методе.
Для cakePHP есть хелпер images.php который можно выдернуть из Bakesale (автоматической подгонки нет). Ниже представлен метод на RubyOnRails реализующий данный подход.
Читать дальше →
Всего голосов 6: ↑4 и ↓2 +2
Просмотры1K
Комментарии 14

Как сделать подключенный к Стриму домашний комп веб-сервером

Лайфхаки для гиков
Pre-Scriptum: насколько я знаю, некоторые из моих статей постились кем-то в Хабр, я же здесь всего второй день. Поэтому извиняюсь, если этот пост покажется вам «бояном». Чтобы меня не обвиняли в плагиате, приведу ссылку на оригинал моей статьи. Вообще же я собираюсь писать в своем хабра-блоге в основном на тему носимых компьютеров. Над одним из подобных устройств я работаю второй год. Собственно, приведенные ниже действия были направлены на создание «внешних мозгов» моему НК (носимому компу), чтобы тот мог передавать какие-то задачи на домашний комп или брать с него данные.

Итак, начнем…
Читать дальше →
Всего голосов 19: ↑15 и ↓4 +11
Просмотры1.2K
Комментарии 9

Обработка фотографий текста с помощью Gimp

Чулан
Здесь я предложу несколько вариантов решения этой задачи. Основная проблема фотографий это неравномерность освещенности страницы, когда в центре яркость больше, а по краям меньше или что-либо подобное. Так же часто необходимо повысить контрастность текста по сравнению со страницей. При обычной коррекции Уровней некоторые части изображения получаются засвечены, а некоторые наоборот слишком тёмные. Все методы более или менее решают эти проблемы.

В качестве материала для обработки я взял эту страничку(Предварительно обрезав всё лишнее):
Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Просмотры8K
Комментарии 4

Обход ограничений прокси-сервера в офисе

Чулан
Итак, я думаю, что всем более чем знакома проблема закрытых сайтов и прочих неприятностей, гнусно подстерегающая простых офисных работников.
Первый аспект — это, собственно, «закрытые» сайты, т.е. те, на которые запрещен доступ. В результате, несчастный планктон офисный работник не может открыть нужный ему адрес.
Второй — тотальный контроль со стороны Большого Брата, соответственно, возможность перехватывать любые передаваемые данные (например, пароль от почты) и следить за тем, чем сотрудник на работе занимается.

UPDATE. Речь, разумеется, идет не только о сайтах, но и о всевозможных IM'ах (много где закрывают аську, джаббер и т.д.). Что касается того, что «на работе работать надо» — безусловно, это факт. Но лично меня раздражает возможность любого человека отследить места моего пребывания в Сети, даже теоретическую.

UPDATE 2. Господа, я не понимаю вашего негативного отношения к данному топику. Если минусуют суровые офисные админы по причине того, что с данными методами обхода защиты сложно бороться, прокомментируйте, пожалуйста.

Что же делать? Без паники, существуют аж целых два работающих решения!
Читать дальше →
Всего голосов 39: ↑28 и ↓11 +17
Просмотры15.9K
Комментарии 33

Проблема: выравнивание размеров окна по контенту

Чулан
Во время работы над проектом наткнулся на проблему, которую «с кондачка» решить не смог.
Выношу на общее обсуждение. Даже если никто не прокомментирует — выложу свои домыслы и решение, если найду.

Задача



По ссылке открывается окно, в котором содержится какой-то контент. Точные размеры контента заранее неизвестны, однако заранее предполагается, что они не будут больше какого-то «разумного» предела. Пусть этот предел будет, например, 1000 на 800.

Требуется, чтобы после открытия окно приняло бы размеры в соответствии с контентом, оставив небольшой, заранее определённый отступ.

Читать дальше →
Всего голосов 5: ↑3 и ↓2 +1
Просмотры270
Комментарии 35

Основы основ: акции

Финансы в IT
На самом-то деле, это все, без исключения, каждое слово от первого до последнего — про акции. Акции, акции, акции — у человека, который прошел «веселые девяностые», МММы и прочие радости нашей с вами «тогдашней» жизни слово это вызывает не вполне положительную реакцию и понятное желание «никому больше никогда и ничего». А на самом-то деле ничего страшного в этом слове нет, и более того, в подавляющем большинстве случаев акции это то, что позволяет компании расти и развиваться. Именно акции и лежат в основе — самом фундаменте мирового фондового рынка.

Для того, чтобы фундамент этот стал понятен и крепок, надо дать немного теории — совсем чуть-чуть, по минимуму — но совсем без нее все же нельзя. Именно этот минимум теории я и постараюсь дать в этой и следующей статье. Итак…


Глоссарий


Сразу введем некоторые пояснения. В мире финансов сложилась ситуация отчасти подобная рынку IT — все развивается слишком быстро, и часто развивается с сильным перекосом в сторону рынков американских, поэтому терминология используется по большей части англоязычная. И тут уже как повезет — у каких-то слов есть разумные русские эквиваленты, а каким-то приходится довольствоваться англицизмами; поэтому вводя понятие я постараюсь дать его определение по-русски, если это возможно, и тут же дать соответствующие английские эквиваленты (потому как если вам захочется продолжать изучение предмета, почти наверняка придется столкнуться с англоязычными источниками).

Акция


Итак, акция (англ: share, но чаще – stock или equity) — владение частью компании. Что это такое физически? В последнее время все чаще — ничего. То есть где-то в каком-то большом компьютере (а иногда — во многих) хранится запись о том, что Mr V. Pupkin является держателем N акций ZAO «Horns and Hooves Plc». Чем больше N, тем, соответственно, большей частью г-н Пупкин владеет. Да, вы поняли меня правильно — наличие акции или акций той или иной компании у вас означает, что вы владете какой-то частью всех офисов, компьютеров, мебели и даже интеллектуальной собственности компании.

Читать дальше →
Всего голосов 124: ↑106 и ↓18 +88
Просмотры29.3K
Комментарии 92

Яндекс.Склонятор

IT-компании
Яндекс выпустил XML-склонятор русских имен. Сервис по адресу export.yandex.ru/inflect.xml?name=Вася%20Пупкин берет имя и выдает его склонения в такой форме:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <inflections>
  3.   <original>&#1042;&#1072;&#1089;&#1103; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;</original>
  4.   <inflection case="1">&#1042;&#1072;&#1089;&#1103; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;</inflection>
  5.   <inflection case="2">&#1042;&#1072;&#1089;&#1080; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;&#1072;</inflection>
  6.   <inflection case="3">&#1042;&#1072;&#1089;&#1077; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;&#1091;</inflection>
  7.   <inflection case="4">&#1042;&#1072;&#1089;&#1102; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;&#1072;</inflection>
  8.   <inflection case="5">&#1042;&#1072;&#1089;&#1077;&#1081; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;&#1099;&#1084;</inflection>
  9.   <inflection case="6">&#1042;&#1072;&#1089;&#1077; &#1055;&#1091;&#1087;&#1082;&#1080;&#1085;&#1077;</inflection>
  10. </inflections>
Пользуйтесь на здоровье :)

Склонятор стал 17-м мини-проектом сборника Яндекс.Нано.

P. S. Обнаружил на Хабре единственную девушку-участницу разработки проекта :)
Всего голосов 119: ↑114.5 и ↓4.5 +110
Просмотры14.7K
Комментарии 64

Качаем с Народ.Диска без капчи и без яндекс.бара

IT-компании
Как известно, чтобы скачать файл с Народ.Диска, необходимо либо ввести капчу, либо установить яндекс.бар. А если не хочется, чтоб яндекс.бар мозолил глаза(либо любимый браузер — опера)? Да, его можно скрыть, но зачем он тогда вообще нужен, если используется только для скачки файлов с Народ.Диска?
А можно обойтись и без него, при этом скачивая файлы без ввода капчи в любом удобном браузере, позволяющем изменять юзер-агент.
Читать дальше →
Всего голосов 128: ↑119.5 и ↓8.5 +111
Просмотры7.9K
Комментарии 103

Перевод туториалов Google Maps API

IT-компании
Левшин Олег (LevshinO) в своем блоге поделился с нами переводами статей с официального сайта гугла, объясняющих принципы работы с Google Maps API.

На данный момент выложены следующие переводы:

Олег планирует перевод всех одиннадцати статей этого цикла.
Всего голосов 79: ↑72 и ↓7 +65
Просмотры1.6K
Комментарии 36

25 лучших деловых книг

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

Я составил список из 25 золотых (ИМХО и только ИМХО) деловых книг.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры2.4K
Комментарии 145

Информация

В рейтинге
5,778-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность