Search
Write a publication
Pull to refresh
26
0
olegi @olegi

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

Send message

Перехват видео в браузере или TCP сниффер под Windows на коленке (часть вторая)

Reading time8 min
Views14K
Это обещанное дополнение к моему предыдущему посту, в котором рассказывается про альтернативную технику установки ловушек на функции. Одним из недостатков реализации ловушек в предыдущем посте было постоянное переписывание кода в начале перехваченной функции. В качестве альтернативы было упомянуто решение, которое не требовало бы постоянной перезаписи. Принципиальная схема его работы предоставлена здесь:

image
Исходники, детали и пояснения под катом…
Читать дальше →

О сортировке контента на основе оценок пользователей: Часть 3

Reading time3 min
Views14K
В прошлой статье я вывел формулу, которая прогнозирует рейтинг на основе оценок статьи и средней оценки по сайту. Думал в этой статье, я покажу качество ее прогноза, улучшу прогноз за счет дисперсии. Однако, появилась еще одна проблема.
image
Читать дальше →

«Сложно о простом». Функции-конструкторы — как объекты,(prototype). Объекты,(__proto__). constructor, ={}, как функция-конструктор new Object()

Reading time9 min
Views83K
В прошлый раз мы попытались разобраться со следующими вещами:

  • 1. Не смотря на расхожее мнение «всё в JS является объектами» — это не так, мы выяснили, что из 6 доступных программисту типов данных аж 5 является примитивами и лишь один представляет тип объектов.
  • 2. Про объекты мы узнали, что это такая структура данных, которая содержит в себе пары «ключ-значение». Значением может быть любой из типов данных (и это будет свойство объекта) или функция (и это будет метод объекта).
  • 3. А вот примитивы – это не объекты. Хотя с ними и можно работать как с объектом (и это вызывает заблуждение что примитив – это объект), но…
  • 4. Переменные можно объявить как по простому (литерально) (var a = ‘str’), так и через функцию-конструктор (обёртка)(var a = new String(‘str’)). Во втором случае мы получим уже не примитив, а объект созданный конструктором String(). (что за магический оператор new и что такое функция-конструктор мы узнаем дальше).
  • 5. Узнали, что именно за счёт создания обёртки над примитивом (new String(‘str’)) c ним можно работать как с объектом. Именно эту обёртку создаёт интерпретатор вокруг примитива, когда мы пытаемся работать с ним как с объектом, но после выполнения операции она разрушается (поэтому примитив никогда не сможет запомнить свойство, которое мы ему присвоим a.test = ‘test’- свойство test исчезнет с обёрткой).
  • 6. Узнали, что у объектов есть метод toString() который возвращает строковое представление объекта (для типа number valueOf() – вернёт числовое значение).
  • 7. Поняли, что при выполнении операций конкатенации или математических операциях примитивы могут переопределить свой тип в нужный. Для этого они используют функции-обёртки своих типов, но без оператора new (str = String(str)).(в чём разница и как это работает, поговорим дальше)
  • 8. И наконец, узнали, что typeof берёт значения из жёстко зафиксированной таблицы (вот откуда ещё одно заблуждение, основанное на typeof null //object).

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

Как обойтись без капчи?

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

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

Новые 5 способов ускорить запросы API Facebook

Reading time4 min
Views19K
Прошлой осенью я публиковал на Хабре пост Пять способов ускорить запросы API Facebook на практике, который оказался неплохим сборником рецептов. За это время Facebook API сильно изменился, став еще лучше. Теперь я редко встречаю задачи, с которыми я бы не смог справиться за один HTTP запрос к API. А все благодаря новым возможностям, о которых я и расскажу сейчас.

image

Вот какие способы были в прошлый раз:
  1. Запрашиваем только необходимые поля
    me?fields=id,name,birthday
  2. Запрашиваем данные нескольких объектов в одном запросе
    ?ids=4,501012028
  3. Используем фильтрацию и пагинацию
    me/friends?limit=10&offset=10
  4. Используем запросы FQL
    fql?q=SELECT uid, name, birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  5. Отправляем Batch Request с несколькими запросами
    batch=[{«method»:«GET», «relative_url»:«me»},{«method»:«GET», «relative_url»:«me/friends?limit=50»}]

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

Выводим деньги с PayPal на карту: Инструкция для чайников

Reading time3 min
Views498K
Потребовалось мне вывести деньги с PayPal в России, только вот через посредников работать не хотелось.
Пришлось получить карту Payoneer для вывода PayPal на эту карту. Сколько не искал, так и не нашел полноценной, пошаговой инструкции.
Поэтому пишу сам.



ВНИМАНИЕ! Все ниженаписанное является де-юре нарушением законодательства РФ и Украины, и вообще выдумкой автора и плодом работы в фотошопе. Применяя описанное на практике, вы действуете на свой страх и риск, и ни автор, на администрация сайта не несет ответственности за ваши действия.
Читать дальше →

Расставляем точки на Li: Нужна ли тренировка литиевых аккумуляторов?

Reading time7 min
Views762K
Прошло уже достаточно времени с тех времен, когда Ni-Cd и Ni-Mh аккумуляторы безраздельно властвовали в мобильных устройствах, но с самого начала эпохи Li-ion и Li-pol все не утихают споры по поводу того, надо ли «тренировать» эти аккумуляторы сразу после покупки.
Доходит до смешного, в теме обсуждения ZP100 на china-iphone всем новичкам рекомендовали в приказном тоне пройти 10 циклов зарядки-разряда, а только потом приходить с вопросами о аккумуляторах.



Давайте попробуем разобраться, имеет ли такая рекомендация право на жизнь, или это рефлексы спинного мозга (за отсутствием головного, наверное) некоторых индивидуумов, у которых они остались со времен никелевых батарей.
Читать дальше →

О сортировке контента на основе оценок пользователей: Часть 2

Reading time5 min
Views10K
Прошлая статья привлекла большой интерес. И даже, на некоторое время, стала лучшей за 24 часа. У меня появилось несколько идей и на часть вопросов в комментариях нужно ответить более развернуто.
image

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

JSON-RPC 2.0 и PHP

Reading time8 min
Views62K
Если вы разработчик, и у вас есть проект на PHP, и ему наконец-то понадобилось реализовать собственное API — эта статья определенно для вас ;).

JSON-RPC v1.0 появился в 2005 году, спустя 5 лет появилась и вторая версия. В век javascript'а и мобильных приложений многие разработчики до сих пор используют свои собственные велосипеды вместо готового простого стандарта.
Попробуем разобраться в вопросе

Недооценённый флагман

Reading time13 min
Views47K
Так уж получилось, что вокруг меня просто куча Samsung-девайсов. Galaxy S (9000) у младшей сестры, S+ (9001) у девушки, S II (9100) у меня, R (9103) — у друга, есть Galaxy Tab’ы в различных версиях… В общем, достаточный набор, чтобы отчётливо представлять, что из себя представляет продукция данной компании.
И я хорошо помню, сколько слухов вокруг себя собирал готовящийся выход Galaxy S III чуть ли не с конца 2011 года. Ходили фэйк-концепты по интернетам, кто-то утверждал, что телефон будет чуть ли не титановый, некоторые говорили, что разрешение камеры удвоят, третьи были за retina-class экран с FullHD разрешением. Ходили по интернету и картинки, и видео различных версий прототипов данного девайса, в общем — слухов хватало, все ждали разного, но совершенно точно стоило ждать ответ на основной флагман конкурента — “размер” и основной набор характеристик, можно сказать, задаёт тот, кто выпускает первый флагман в текущем поколении. Все остальные пытаются догнать и перегнать, как по характеристикам, так и в области ПО.
И вот, на дворе — конец Апреля, совсем скоро выход S III, на третье мая назначен специальный ивент, да не где-нибудь, а в Лондоне. Незадолго до мероприятия в сеть попадают изображения Galaxy S III. Начинается недоумение, возня, ведь как же…



В некоторых ещё теплится надежда, что это — очередной фэйк или просто тролль-акция Samsung’a, кто-то сразу девайс записал в “провалы года”, во мне, лично, ещё теплилась надежда. Нет, ну не может же флагман Samsung, дважды подтверждавшей, что девайсы топового уровня она делать умеет, быть плохим?
Читать дальше →

Как правильно сортировать контент на основе оценок пользователей

Reading time5 min
Views93K


В оригинале название звучит как «How Not To Sort By Average Rating». Я подумал, что дословный перевод «Как не сортировать по усреднённому рейтингу» будет малопонятен и хуже отражает содержание статьи.

Постановка проблемы


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

Неправильное решение №1

Рейтинг= (Число положительных оценок) - (Число отрицательных оценок)

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

Почему важно делать эскизы, прежде чем переходить к прототипу

Reading time5 min
Views56K
Вольный перевод статьи о том, почему важно делать эскизы-зарисовки, прежде чем приступать к проектированию интерфейсов. Мне, как менеджеру проектов и, частично, проектировщику интерфейсов — статья показалась очень полезной. Крайне рекомендуется к прочтению всем участникам проектных команд.



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

Редизайн iOS 6 App Store в стиле Chomp может значительно повлиять на разработчиков мобильных приложений

Reading time2 min
Views17K
Похоже, что по крайней мере некоторые из приобретенных в начале 2012 года Apple инновационных компаний, а именно Chomp, мобильный поиск приложений и рекомендательный сервис, внесли свою лепту в новый магазин приложений iOS 6 App Store. Скриншоты из бета-версии мобильной операционной системы Apple, были размещены 9to5Mac.com и теперь разлетелись по всему Интернету. Наиболее характерным нововведением в стиле Chomp стали «карточки», пролистываемые swipe-ом, вместо традиционного списка с мелкими значками и текстом.

В первоначальном приложении Chomp для iOS, поиск приложений разделен на несколько секций, таких как бесплатные приложения, тренды программ, новые программы, программы со скидкой и т.д., в дополнение к более традиционным категориям верхнего уровня (игры, музыка, социальные сети и т.д. .) Тем не менее, в обновленной версии магазина приложений App Store iOS 6, кажется, что собственная система организации приложений от Apple осталась в значительной степени нетронутой. Это означает, что Apple, продолжает предлагать программы раздельно соответствующим разделам, таким как Рекомендуемые списки, Top Charts (бесплатные, платные, кассовые) и т. д. Еще одно изменение кнопка Genius теперь появляется в нижней части приложения App Store, вместо кнопки категории. Это, безусловно, увеличивает значимость поисковой (SEO) и магазинной (ASO – App Store Optimization) оптимизации.

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

О сортировке контента на основе оценок пользователей

Reading time4 min
Views17K
Написать этот пост меня привлекла эта статья. Многие ее помнят по вот этой картинке.
image
Статья затрагивает правильную тему, однако с точки зрения математики и здравого смысла она в корне не верна.
Читать дальше →

JavaScript: оператор delete создает утечку!?

Reading time4 min
Views18K
Здравствуй хабрнарод, хочу вам поведать об истории коварной утечки, и о великом недопонимании.
На самом деле все очень просто, вот такая, казалось бы, обычная строчка кода, в определенных условиях может вызвать утечку:
delete testedObject[ i ].obj;

Но, повторюсь только в определенных условиях. Еще одно но, пока точно неизвестно это браузерный баг или особенность JS.
Гугл, ничего не сказал мне по этому поводу, Копания в спецификации ECMAScript, тоже ничего не дало, ибо ее трудно понимать в трезвом состоянии. Собственно это и стало поводом написания данной статьи.

Подробности

Протоколирование: рекомендации по трассировке

Reading time10 min
Views23K
В данной статье я хочу поделиться своими мыслями/наблюдениями/рекомендациями относительно реализации такой важной задачи при разработке ПО как протоколирование. В Интернете существует множество статей описывающих инструменты для протоколирования, но очень мало информации о том, какие именно события, и какую информацию, нужно записывать в протокол работы программы.
Читать дальше →

SQLite и UNICODE

Reading time10 min
Views61K
Первая часть — вводная.
Вторая часть — быстрый старт.
Третья часть — особенности.

Несмотря на то, что эта тема затрагивалась на Хабре и раньше, некоторые ключевые вещи не прозвучали. В этой статье делается попытка «закрыть тему». Замечания по дополнению/исправлению приветствуются.

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

Сериализация в php: serialize, json, bson

Reading time1 min
Views17K
Выбрал функции сериализации для бд — bson. Быстрее serialize в >1.5 раза, json — в 3. Да и результат меньше всех остальных.
Найти его можно в расширении для MongoDB.
Результаты далее.
Читать дальше →

Импортирование данных класификатора ОКАТО в базу MySql

Reading time4 min
Views7.1K
Возникла у меня необходимость добавить к моему приложению справочники с регионами России и городами. Первая идея которая меня посетила это поискать готовые файлы XML с регионами и городами в интернете, и в случае успеха импортировать данные в мои таблицы. Оптимизма поубавилось когда я начал искать. Конечно никто для меня специально не готовил эти данные, но это и не удивительно. Имея уже однажды опыт импортирования данных из КЛАДР в SqlServer, в структуру отличную от КЛАДР, я решил что придется снова повторить подвиг и организовывать импорт из КЛАДР в мою структуру. Я прекрасно помнил и тот факт что в КЛАДР данные хранятся в таблицах DBF, а импортировать данные
Читать дальше →

Руководство новичка по эксплуатации компоновщика

Reading time32 min
Views218K
David Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).

Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).

Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status

Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity