Pull to refresh
125
0
Вадим @BVadim

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

Send message

Проблемы с дисплеем в MacBook Air 2013

Reading time3 min
Views151K
Так вышло, что радость от приобретения нового MacBook Air 13" 2013 в топовой комплектации была сильно омрачена, мягко говоря, странной работой дисплея. Чтобы сразу было понятно, о какого рода проблеме идёт речь, вот видео (смотреть в 1080p).



В этом обзоре MacBook Air 11" 2013 года глюк виден с 1:54 до 2:24 и с 2:42 по 2:54. Есть 1080p версия. Про тормоза экрана в обзоре ни слова. Не знаю, как надо смотреть на экран, чтобы не видеть этого.



Я начал обсуждение этой проблемы в комментариях к обзору MacBook Air 2013, но потом понял, что она заслуживает отдельного поста.

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

Проблема бросилась в глаза сразу же. У меня было достаточно разных ноутбуков, от дешёвых до дорогих, чтобы сделать вывод, что такая работа дисплея, особенно в одном из самых дорогих ноутбуков, не может считаться нормальной. На следующий день я позвонил в Apple…
Читать дальше →
Total votes 100: ↑74 and ↓26+48
Comments212

Вышло обновление JavaScript шаблонизатора ECT

Reading time3 min
Views5.8K
Ровно три месяца назад я представил хабрасообществу JavaScript шаблонизатор ECT. Вчера для него вышло обновление, о котором я хочу рассказать в этой статье.

Вы знакомы с ECT?


ECT это JavaScript шаблонизатор со встроенным CoffeeScript синтаксисом (отсюда и название: Embedded CoffeeScript Templates). ECT изначально разрабатывался с упором на максимальную производительность и при этом он предоставляет разработчику богатый набор функций.

Что нового?

Читать дальше →
Total votes 14: ↑10 and ↓4+6
Comments7

Обработка асинхронных ошибок с сохранением контекста запроса в connect/express

Reading time4 min
Views7.8K
Те, кому приходилось разрабатывать более-менее большие web-проекты на node.js, наверняка сталкивались с проблемой обработки ошибок, произошедших внутри асинхронных вызовов. Эта проблема обычно всплывает далеко не сразу, а когда у вас уже есть много написанного кода, который делает нечто большее, чем выводит «Hello, World!».

Суть проблемы

Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments11

ECT — новый JavaScript шаблонизатор со вкусом кофе

Reading time2 min
Views12K
ECT — это логическое развитие существующих подходов к шаблонизации под соусом высокой производительности. В начале года я публиковал свою разработку — шаблонизатор JUST. ECT начинался как его развитие, но через некоторое время различие в них стало слишком большим, поэтому появился новый продукт.

Синтаксис


Во время работы с JUST, который использует EJS-совместимый синтаксис, пришло понимание, что это не очень удобно. Хотелось упрощения, хотя бы, для условных операторов и циклов. Я начал развивать код в этом направлении, но вовремя остановился. Я сам очень плохо отношусь к подобным велосипедам в плане синтаксиса. Когда добавляешь подобный синтаксический сахар в свою разработку, это кажется очень крутым и удобным нововведением. Но разработчик, который видит его впервые, скорее выберет знакомое ему и понятное решение, чем будет разбираться в новом синтаксисе.

Логичным решением в данной ситуации стало использование CoffeeScript в качестве встраиваемого языка.
Читать дальше →
Total votes 25: ↑20 and ↓5+15
Comments96

Нормальное профилирование node.js приложений

Reading time3 min
Views11K

Предисловие


Одним из камней преткновения при разработке на node.js является более сложная, по сравнению с другими современными языками, отладка. Из-за асинхронной структуры кода в большом приложении найти утечку памяти или место интенсивного использования процессора становится затруднительно без специализированных утилит. В разное время для node.js уже создавались инструменты профилирования, но большинство из них либо просто не достаточно удобные, либо перестали поддерживаться разработчиками.

Поиски


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

Первым делом я решил посмотреть не оправился ли node-inspector, который после перехода на node.js 0.6.x перестал поддерживать профилирование CPU и Heap. Оказалось, что в новой версии node-inspector неработающий профайлинг окончательно исключён и теперь это просто debugger. Немного покопавшись в коде старой версии, мне всё же удалось завести профилирование CPU и Heap на node 0.8.x, однако это решение не было идеальным. Чтобы вывести его из состояния «поделки» необходимо было бы заменить устаревший интерфейс WebKit-консоли на современный, переписав приличное количество кода и исправить некоторые проблемы производительности. В целом, решение на основе консоли WebKit мне кажется очень не гибким, поэтому я бросил эту затею и продолжил поиски.

Вот оно


Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments11

Использование аннотаций в PHP 5.4 для АОП и не только

Reading time6 min
Views12K
При разработке крупных проектов довольно часто возникает ситуация, когда сквозной функционал, слабо относящийся к бизнес-логике, сильно раздувается, заполняя код однотипными конструкциями. Это может быть логирование операций, работа с кешем или проверка прав доступа. Тут нам на помощь приходит АОП.

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

Технологии реализации AOP в PHP


Волшебные методы

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

Плюсы:
  • Легко начать использовать;
  • Реализация не требует дополнительных модулей (нативный PHP).

Минусы:
  • Не удобно использовать при большом количестве сквозного функционала;
  • Т.к. имена методов в определении и в вызовах различаются, создаются трудности при использовании автодополнения кода в IDE.

Предварительный разбор кода

Этот способ подразумевает наличие посредника, позволяющего использовать «синтаксический сахар». Необходимый функционал описывается вспомогательным синтаксисом (xml/json конфигурация, дополнительные php-классы или аннотации в коде), который разбирается посредником. На основе разбора генерируется результирующий код, который содержит вставки сквозного функционала в необходимые места.

Плюсы:
  • Работает быстро, т.к. на выходе это обычный PHP-код, просто сгенерированный за Вас автоматически.

Минусы:
  • Сложно внедрить в большой проект;
  • Требуется разбор кода после каждого изменения, для внесения корректировок в результирующий код.

Замена кода приложения во время выполнения

Только чёрная магия, только хардкор
Total votes 22: ↑16 and ↓6+10
Comments17

JUST — JavaScript шаблонизатор

Reading time7 min
Views21K
Во время разработки своего экспериментального WEB-проекта на Node.JS, о котором я рассказал в двух предыдущих статьях, я столкнулся с проблемой выбора шаблонизатора. Несмотря на то, что готовых решений существует довольно много, мне не удалось найти то, которое бы удовлетворяло меня на 100%. Так родился JUST.

Конкуренты


Jade
github.com/visionmedia/jade

Этот шаблонизатор достаточно популярен среди Node.JS разработчиков. Он обладает хорошим функционалом и скоростью работы, но содержит и спорные моменты:
  1. Отказ от использования тегов в том месте, для которого они, собственно, и были придуманы. С таким подходом я, мягко говоря, не согласен. Конечно, это очень субъективно, но вид разметки страницы без привычных тегов, взрывает мозг. Верстальщик, далёкий от новомодных технологий шаблонизации, не скажет спасибо, если ему придётся вносить изменения в такой код. Также потребуется дополнительная работа при перенесении вёрстки в шаблоны, что замедлит ход разработки.
  2. Перегруженность функционалом. Любой разработчик старается сделать свой продукт максимально универсальным, но иногда нужно уметь вовремя остановиться. На мой взгляд, Jade уже перешёл эту грань.
Читать дальше →
Total votes 37: ↑32 and ↓5+27
Comments124

Разработка WEB-проекта на Node.JS: Часть 2

Reading time12 min
Views56K
В прошлой статье я начал рассказывать о своём опыте разработки экспериментального WEB-проекта «Что делать?» на Node.JS. Первая часть была обзорной, в ней я постарался раскрыть плюсы и минусы технологии, а также предупредить о проблемах, с которыми, возможно, придётся столкнуться в ходе разработки. В этой статье я подробнее остановлюсь на технических деталях.

Несколько слов о «хабраэффекте»


Читать дальше →
Total votes 67: ↑63 and ↓4+59
Comments103

Разработка WEB-проекта на Node.JS: Часть 1

Reading time12 min
Views80K
Прошла неделя с момента пиара на хабре моего проекта «Что делать?». Я напомню, что этот проект начинался, как эксперимент по разработке среднестатистического WEB-проекта целиком на JavaScript (Node.JS). Сейчас я хочу поделиться с сообществом результатами этого эксперимента, полученным полезным опытом, а также подробной картой с отмеченными на ней граблями.

Эпизод 1: начало пути


Читать дальше →
Total votes 72: ↑65 and ↓7+58
Comments120

Что делать?

Reading time3 min
Views2.8K
«Что делать?» это не просто очередной цитатник. Кроме развлекательной составляющей, свойственной подобным сайтам, он несёт в себе и высокую цель — помощь людям в решении их проблем.

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

К каждому из вопросов посетители могут оставить свои ответы. В отличие от самих вопросов, которые можно задавать анонимно, ответы могут оставлять только авторизованные пользователи. Сама авторизация выполнена через OAuth популярных социальных сетей и не должна вызывать затруднений.

«Что делать?» старается сохранить чистоту и полезность ответов. Это значит, что ответы в стиле «убей себя об стену» и другие, не несущие полезной нагрузки или оскорбляющие автора вопроса, безжалостно удаляются, а авторы таких ответов блокируются.

А что под капотом?

Читать дальше →
Total votes 61: ↑37 and ↓24+13
Comments30

Групон: робот пылесос II — атака клонов

Reading time1 min
Views1K
Кажется история с разводом от групона повторяется. Не думал, что такая крупная компания будет несколько раз подряд, одним и тем же способом обманывать своих покупателей. Много писать не буду, просто приведу факты.
Читать дальше →
Total votes 71: ↑64 and ↓7+57
Comments75

Избавление от нового Winlock`ера

Reading time1 min
Views10K
Вчера мне довелось выковыривать новый Winlock`ер с компьютера коллеги-дизайнера.
Увидев знакомый развод с просьбой отослать смс на номер 3116, я отправился на сайт DrWeb за кодом разблокировки. Но увы — локер оказался новый. Быстро на форумах толком ничего найти не удалось. Решил что будет проще выковырять его вручную.

Локер оказался довольно примитивный.
В безопасном режиме локер также загружался. Следовательно, автозагрузка как место его запуска отпала.
Локер закрывал собой весь экран и перекрывал открываемые, горячими клавишами, окна.
Однако зажав Ctrl+Shift+Esc удалось вызвать мерцание диспетчера задач поверх локера на очень короткие промежутки времени. Видимо из за неторопливости работы в безопасном режиме. При обычной загрузке так не вышло.
В задачах нагло висел один единственный процесс nvcvc32.
Грузился он тоже довольно небрежно — открывалось окно командной строки и очень быстро закрывалось, заменяясь на окно локера. Ловкость рук помогла ткнуть в крестик этого окна до его загрузки. Так я получил чистый рабочий стол. Explorer не загрузился.
Ну а дальше всё по примитивному сценарию. Из папки windows удалил этот nvcvc32.exe.
Оставалось найти загрузчик.
Поиск по реестру места где запускается explorer.exe Вывел на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Winlogon\Shell.
В этот параметр к explorer.exe был приписан запуск некого rundll.bat, который также лежал в папке windows.

После удаления его и перезагрузки о локере больше ничего не напоминало.

Сегодня он уже появился сайте DrWeb под именем Trojan.Winlock.2925.

На инфицированной машине был установлен Windows XP (родной, это ноутбук).
Total votes 75: ↑41 and ↓34+7
Comments45

Очередное горячее предложение от GoDaddy.com

Reading time1 min
Views791
Новые доменные имена в зонах .COM, .US, .MOBI, .BIZ, .NET, .ORG, .CA, .CO.UK, .IN можно зарегистрировать за 1.67$ (1.49 + 0.18).
Акция действует до 16 февраля или пока не раскупят 10000 доменов.
По акции с одного аккаунта можно зарегистрировать только 1 домен.

Оплата через PayPal в рамках акции не действует. Можно оплатить только картой. Российскую альфабанковскую визу приняло без проблем.

Промо код: WINTER149

Будьте внимательны: при оформлении заказа в корзину автоматически добавляется вторая услуга (не запомнил название), бесплатная только несколько месяцев.

UPD: EugeneGavrin уточнил название навязываемой услуги, которую нужно не забыть удалить:
WebSite Tonight Economy — 5 Page Web Site — Monthly (recurring)
Total votes 73: ↑60 and ↓13+47
Comments77

Входите! Вход без логина и пароля

Reading time8 min
Views20K

Кто виноват?


Одна из часто встающих задач при разработке web-проектов — пустить пользователя на сайт без ввода логина и пароля, при этом авторизовав его.

Вот некоторые примеры таких ситуаций:
  • Ссылка на активацию аккаунта только что зарегистрированным пользователем.
  • Ссылка на восстановление пароля.
  • Приглашение (возвращение) на сайт пользователя, который давно не заходил.

В каждом из этих случаев нам нужно создать для пользователя некий ключ и добавить его в URL, отправленный в письме.
Читать дальше →
Total votes 98: ↑82 and ↓16+66
Comments78

Дублирование платежа в Альфа-Банке

Reading time1 min
Views654
25.11.2010 я расплачивался карточкой за продукты в одном из супермаркетов.
Сегодня в «Альфа-Клик» заметил, что одинаковая сумма снялась 2 раза. При этом все данные этих платежей одинаковые.
Сразу позвонил в службу поддержки банка. Там ответили, что были случаи двойного снятия денег 02.12.2010 у тех, кто расплачивался карточкой в торговых точках. И, что эти деньги вернут в понедельник, т.е. 06.12.2010.
Насколько я понял, ошибка коснулась не тех у кого вчера был платёж по карте (Hold денег), а только тех у кого вчера деньги были сняты после Hold.
Проверьте свои счета.

UPD: В комментариях пишут, что проблема не только у «Альфа-Банка». Похоже, что под удар попали клиенты торговых точек обслуживаемых «Сбербанком».

UPD: Деньги вернули 09.12.2010.
Total votes 40: ↑32 and ↓8+24
Comments38

Оверсан лежит?

Reading time1 min
Views985
В районе 16 часов по Московскому времени были обнаружены, лежащими сервера хостящиеся на площадках оверсана. Сайт оверсана тоже не открывается, как и другие, известные мне, проекты хостящиеся там.
Уважаемое Хабрасообщество, есть какая-нибудь информация? Связаться с ними пока не получается.

UPD. сервера начали отвечать в 17:40 по Московскому времени
Total votes 134: ↑74 and ↓60+14
Comments119

Справедливость восторжествовала

Reading time1 min
Views541
В продолжение к моему топику Помогите победить беспредел.

После первого, довольно спорного, слушания в Суде, мой ноутбук был отправлен Ответчиком на независимую экспертизу, для выявления причины неисправности. Экспертиза выявила производственный дефект: «Тугой ход петель», в следствие которого возникла указанная неисправность. На основании результатов этой экспертизы мне были возвращены деньги за ноутбук. Решение Суда не выносилось. Дело завершилось мировым соглашением.

Спасибо Хабрасообществу за поддержку!
Total votes 48: ↑46 and ↓2+44
Comments12

Ещё один способ победить Internet Explorer

Reading time2 min
Views7.8K
Рано или поздно все web-разработчики сталкиваются с ситуацией, когда Internet Explorer становится проблемой, тормозящей разработку проекта. Сайт свёрстан валидно, по стандартам. Нормально отображается в Mozilla, Opera, Safari и других нормальных браузерах. Но. Открываем его в IE. И видим. Как то, что мы подгоняли по пикселям, строго придерживаясь стандартов, размазано по странице. Ладно ещё в IE7 можно более-менее просто подогнать вёрстку (конечно зависит от дизайна), но от IE6 иногда волосы встают дыбом. К счастью, существуют способы, которые позволяют повлиять на ситуацию. Кто-то использует хаки, кто-то — conditional comments. Где-то можно пойти на компромис и упростить задумку дизайнеров, поддерживая пользователей недобраузеров.
Читать дальше →
Total votes 106: ↑73 and ↓33+40
Comments104

Интересная особенность вычисления логических выражений в plpgsql

Reading time1 min
Views1.6K
Возникла задача построения полнотекстового индекса. В индексируемой таблице было создано поле fts типа ts_vector. При вставке и обновлении триггер, при необходимости, должен обновлять поле fts. Чтобы полнотекстовый индекс не обновлялся при обновлении полей не связанных с ним было установлено условие:

IF (TG_OP = 'UPDATE') AND (NEW."name" = OLD."name")
    THEN RETURN NEW;
END IF;

Т.е. если имя не обновилось мы ничего не трогаем и просто завершаем выполнение триггера. Но при обновлении данный триггер сваливался с ошибкой «record „old“ is not assigned yet». Однако ошибки не возникает при такой конструкции:

IF (TG_OP = 'UPDATE') THEN 
    	IF (NEW."name" = OLD."name") THEN
	       	RETURN NEW;
        END IF;
END IF;

Следовательно, при вычисленнии логического выражения, вычисляется каждая его составляющая. И даже если TG_OP != 'UPDATE' (а это значит выполняется INSERT ) проверяется второе условие где OLD не определён. Отсюда и возникает ошибка.
Total votes 11: ↑8 and ↓3+5
Comments2

Неприятный глюк Mozilla Firefox 3 c position:fixed

Reading time1 min
Views1.5K
При реализации механизма Drag&Drop для сайта столкнулся со странным глюком. Иногда не отрабатывались события мыши при drop'e. При этом, глюк был не постоянный, что затрудняло его отладку.
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments43
1

Information

Rating
Does not participate
Registered
Activity