egorinsk
–3
Мне кажется, нужен другой закон.

Здесь в комментариях пишут, что устанавливать линукс на ноутбук все равно нет смысла, так как в линуксе часто нет полного набора ПО для управления всеми устройствами ноутбука. Согласен, если линукс не дает задейстовать 100% возможностей устройства, то такой линукс никому не нужен. Сами линуксоиды говорят, что якобы проблема в том, что у них нет спецификаций. Я подозреваю, им просто лень писать драйвера, так как за это никто не платит.

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

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

Наверняка есть что-то в законе о потребителях, что производитель обязан предоставлять руководство по эксплуатации. Можно было бы дополнить и расширить этот пункт для цифровых устройств.
egorinsk
+5
Эта статья неграмотна от первого слова до последнего. Вместо того, чтобы гадать на кофейной гуще, и определять назначение HTTP-заголовков через анализатор трафика, надо читать спецификации и руководства. Вместо того, чтобы разобраться в проблеме, автор скопипастил код какого-то индуса, он у него сломался, и теперь автор предлагает всем так же бездумно скопипастить его код аналогичного качества.

> и весь этот код рухнул от того, что в HTTP_X_FORWARDED_FOR пришёл не один адрес, а список адресов через запятую (что строго говоря законно, допустимо, и даже не регламентировано в доке по php

Искать описание HTTP-заголовков в мануале по PHP? Автор, вы про HTTP и про то, как работает сервер, хотя бы в википедии почитайте что ли.

Ваши администраторы, впрочем, не намного лучше разработчиков, если они не могут нгинкс настроить или модуль к нему скомпилировать.

Насчет определения страны — естественно, заголовкам, пришедним снаружи, доверять нельзя, в них может быть что угодно. например, расширение для браузера може подставлять любой X-Http-Forwarded-For. Потому стоит их игнорировать. Однако, если наша цель — банить по IP, то брать IP из этих заголовков вполне можно.

Логично было бы собирать все IP (а не один) из всех заголовков и если хоть один относится к запрещенной стране — банить запрос. Таким образом, люди использующие неанонимные прокси, останутся без видео.

egorinsk
–9
Код местами страшный, и комментарии нечитаемые, но идея правильная. Vanilla.JS — это будущее, jQuery — темное прошлое. Вот, с каким проблемами вы сталкиваетесь, используя чужие фреймворки (jQuery, Backbone, knockout, angular):

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

jQuery тянет за собой огромный код Sizzle для разбора CSS-подобных селекторов (естсетвенно, медленным и неэффективным способом, на явакрипте). Оно вам надо? Если вы пишете селекторы вроде '.someClass > .someOtherClass[prop^=value]', вам стоит задуматься о более эффективных способах.

jQuery нагородил какую-то усложненную систему событий с кучей костылей и, надо же, пространствами имен, он переделывает нативные объекты событий на свои, оно вам надо?

Jquery содержит костыли для поддержки quirks mode. Это режим поддержки написанных до 2000 года страниц времен Netscape. Неужели кто-то до сих пор его использует? Вам пора обновиться, а не тащить свои костыли в самую популярную библиотеку.

2) Некоторые из них вносят изменения в окружение, вносят изменения в DOM, добавляют или переписывают свойства браузерных объектов, порождая несовместимости и труднообнаружимые баги. Например, добавляют фальшивый, ненативный window.JSON или Object.copy.

3) Некоторые просто неюзабельны. Библиотека html2canvas делает window.scroll(0, 0) (то есть, прокручивает экран) и не годится для снятия изображения части окна, не прокручивая его.

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

5) Они содержат непредсказуемое количество костылей и сомнительных решений. Ради бага в каком-то редком браузере, которым никто не пользуется, jQuery запускает лишний код, добавляет костыли и устраивает тесты прямо в браузере при каждой загрузке страницы. Вам не нужен этот код, но он там есть.

Посмотрите код функции offset() в jQuery. getBoundingClientRect() работает гораздо проще и поддерживается нативно во всех браузерах.

6) Библиотеки могут содержать «магию» — неявные и не описанные в документации действия, например, jQuery при анимации перетряхивает DOM, добавляет врапперы и из-за этого появляются побочные, трудноустранимые эффекты (вроде перезагрузки ифреймов или сдвигов верстки)

Некоторые библиотеки (tinymce) содержат в себе кривой, плохо написанный, загрузчик собственных файлов (который грузит штук 30 файлов по 500 байтов по одному за раз). Используя их, вы делаете свой сайт медленным даже на быстром соединении.

7) Легкость использования jQ привлекает новичков, которые не знают толком ни JS, ни DOM, но умеют пользоваться jQuery, и пишут на нем тот еще быдлокод, правда, как только появляется задача сложнее «показать блок по нажатию кнопки», приходится искать не-новичка.

Вы легко можете увидеть у новичка код вроде $('*").click(....). Ведь никто не рассказал им, как эта конструкция работает, а они думали, это что-то вроде CSS.

8) Авторы фремйворков не всегда заботятся о максимальной эффективности или производительности. Фреймворки могут работать с DOM неэффективно, вызывая массовые layuot/reflow, фреймворки для работы с канвасом вроде paper,js не знают, что такое «dirty rectangle» и перерисовывают его целиком. jQuery не использует animationFrame для анимации.

Фреймворк Ext.js, например, имеет огромный объем, тормозит и провоцирует выравнивать элементы с помощью яваскрипта, а не CSS.

Если ваш проект использует популярные библиотеки, то вы можете обнаружить эти проблемы, когда большой объем кода уже написан и менять коней на переправе поздно. Ох, как бы тут пригодился кто-нибудь, уже набивший шишки.

9) Ну и наконец, библиотека может быть просто некачественно написана. Посмотрите код Jquery UI и ужаснитесь, например.

10) Некоторые тянут ненужные, лишние зависимости. Backbone тянет underscrore, главная фича которого — возможность делать циклы вроде for… in гораздо более медленным способом через коллбеки!

11) Они содержат крайне сомнительные решения. Не разбирающиеся в теме новички подключают на страницу какой-нибудь html5shim и думают, что теперь благодаря неведомой магии IE обретет такую же поддержку CSS3, как и Хром (и потому им даже тестировать код в этом браузере не надо). Ага, как же.

Подобные библиотеки годятся, только если вы ненавидите заказчика и его пользователей.

Вывод — если хочешь сделать что-то хорошо, сделай это сам. Глупо думать, что кто-тот писал библиотеку специально для вас. Использовать сторонние библиотеки, конечно, удобно, но только как основу для своего кода, с патчами и изменениями, а не в оригинальном виде.
egorinsk
+1
Я искренне удивляюсь людям, которые устанавливая Ява на компьютер, не удаляют ява-плагин. И также удивляюсь людям. кто ставит Adobe Reader с плагином в браузер. Посмотрите на любой сайт по информационной безопасности, посмотрите на самые популярные экйплойты для заражения браузера: Java, Adobe Reader лидируют уже лет 10. Сколько 0-day дырок к ним гуляет в хакерском андерграунде — неизвестно.

Нет, даже разбирающиеся в IT люди радостно ставят себе эти по сути «бекдоры». Люди, вы адекватны? Вам нравится идея подхватить троян, и какой-то школьник будет читать все ваши файлы, личные данные и переписку, и требовать от вас выкуп по СМС?

Хром, в отличие от других браузеров, имеет изоляцию и песочницу, но и в ней есть лазейка. Сколько раз говорили людям, расширения для Хрома могут воровать ваши куки и пароли от вконтакта. Код этих расширений никто не проверяет. Нет, люди все равно их ставят.

Я советую при установке Java физически удалить из каталога программы файл браузерного NPAPI и ActiveX плагинов, так как программно надежно отключить его вроде бы невозможно. Adobe Reader лучше заменить на альтернативные читалки вроде SumatraPDF с опенсурсом внутри.

Единственным островком безопасности, лучиком света и примером правильной инфраструктуры сегодня является закрытые экосистемы вроде Эппл, или ОС для игровых приставок, где пользователи могут скачать и установить только проверенные программы и спокойно посещать любые страницы, не бояться вирусов или троянов, где практикуется подписывание кода, песочницы, шифрование личных данных и прочие меры.
egorinsk
0
То, что предложил автор — излишнее усложнение. Если на каждую не нравящаюсю нам особенность PHP писать по несколько классов для ее обхода, все будет работать с черепашьей скоростью и в 20-50 мс на запрос мы никогда не уложимся.

Паттерн Builder используется не для того, чтобы заменить массивы с конфигом (да, в динамических ЯП можно использовать массивы там, где в строгих ЯП надо делать классы и структуры ради одноразового использования), а для того, чтобы заменить конструктор или метод с 20 параметрами. Как вариант — построение запроса на выборку чего-нибудь из хранилища, например.

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

Лучшее решение для того, чтобы заменить массив чем-то строго типизированным — использование класса с публичными методами. Как бонус, получаем еще и дефолтные значения. Вот код:

class SomeServiceConfig
{
public function __set($k,$v) { throw new \Exception; }
public function __get($k) { throw new \Exception; }

/** комментарий */
public $maxConnectionNumbers = 100;
public $useSomeProtocol = false;
public $warnOnUsingSomeCommand = true;
}

(__set и __get нужны для обхода неудачной идеи в дизайне PHP, позволяющего создавать свойства динамически при опечатке в имени свойства). Пример кода, инициализирующего такой конфиг:

$cfg = SomeService::getDefaultConfig();
$cfg->useSomeProtocol = true;
$service = SomeService::create($cfg);

egorinsk
+1
Как вы относитесь к вашим конкурентам — сервису Cloudflare с базовым бесплатным тарифом? Вы пишете, что 56 Гб/с — это «последнее средство», а они в своем блоге пишут, что с такими атаками легко справляются за 30 минут: blog.cloudflare.com/65gbps-ddos-no-problem. Можете ли вы это прокомментировать?

egorinsk
–18
По мне, так от закона, вопреки ожиданиям, наблюдается польза. Администрация сайтов сама, без всяких предписаний, судебных мер и затрат времени сотрудников МВД удаляет сомнительные материалы. Не прекрасно ли?

Я бы еще ввел какой-нибудь закон про заполонившую сеть тизерную рекламу с желтыми заголовками вроде ШОК ФОТО ВИДЕО, пусть ее показывают не всем подряд, а только тем, кто на нее подписался + пусть указывают полные реквизиты закачика (чтоб знать на ком гнев вымещать). Невозможно интернетом пользоваться, всюду реклама, трояны, смс-лохотроны и «темы для вконтакте». Недавно на Хабре была статья, даже технически подкованный пользователь Хабрахабр умудрился слить свой пароль, отправить платную СМС и скачать троян. Что уж говорить об обычных пользователях?

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

Более того, не понимаю, откуда на Хабре столько истерии по поводу этого закона. Назовите хоть один хороший сайт, который бы пострадал от закона? Таких нет.

Я видел список, из крупных сайтов там только энциклопедия для скучающих умственно отсталых офисных сотрудников и школьников (на пользу, пусть делом займутся) и рутрекер, который не стесняется зарабатывать на распространении чужих релизов, которые, между прочим, делаются бесплатно. Откройте глаза, они это делают исключительно для собственной выгоды + ввели какие-то неудобные регистрацию и рейтинг, опять же, к лучшему, если их закроют.
egorinsk
+1
У Valve на сайте есть раздел с презентациями, там тоже описываются интересные вещи, например, как в Portal 2 делалась вода и пузырьки в геле, как было сделано освещение в Half Life 2.
egorinsk
+4
Я придумал на основе новости сюжет для фантастического романа: представьте себе страну (или планету), где подобные устройства с удаленным управлением принудительно вмонтируются людям при рождении, и правители имеют возможность в любой момент приостановить сердце человека (для наказания, мотивирования и запугивания) или остановить полностью (за серьезную провинность и в пример другим). Естественно, делается это под благим предлогом, например, ради предотвращения преступлений и массовых беспорядков. Такая невиданная в истории степень контроля не снилась ни земным диктаторам, ни Дарту Вейдеру.

А по сути новости, как я понимаю, хорошая разработка стоит больших денег, а ответственности за ошибки в медицинском ПО нет, так что глупо тратить на это деньги (с точки зрения компании-производителя).
egorinsk
0
Давно уже отключил Яву во всех браузерах, Adobe PDF никогда не устанавливал, флеш только на доверенных сайтах (ибо знаю, что в этих компаниях работают ленивые кривокодеры). Их уже много лет экплойтят по полной программе, и люди, кто их не отключает, вы реально странные, сами напрашиваетесь, чтобы вам троянов наустанавливали.
egorinsk
+1
У группы Idea Fix (песня «Плачь и танцуй») тоже в самом начале есть звуки, похожие на запись программы для спектрума, правда, не уверен, что в них есть какой-то смысл. Никто не хочет проверить?
egorinsk
–1
> Выставляя юзеров на посмешище

А в чем посмешище-то? Пока этот студент сидит, уткнувшись в экран, и делает никому не нужный сервис, другие люди получают всяческие виды удовольствия от жизни. Что ненормального в том, что у человека похмелье или ему нравится Мария и Хуана? Что удивительного в том, что кому-то надоела его работа? И что секретного в номере телефона? Иногда это даже удобнее.

Наоборот, если подумать, то стремление к приватности и закрытости — это не совсем нормально. Это странно, жить в человеческом обществе и прятать что-то от других людей. Если человек что-то прячет, это неспроста. Может, у него какие-то психологические комплексы или задвиги? Шизофрения и раздвоение личности? Может, он прячет свои преступные замыслы? Может, ему нужна врачебная помощь?

Мне кажется, этому студенту и PHP-разработчику надо поменьше времени проводить за компьютером, чтобы не потерять чувство реальности окончательно.
egorinsk
+1
Вместо ручной проверки статуса выполненной команды (и ручного написания if после каждой строчки) стоит использовать либо set -e, либо trap ERR.

Странно, что практически никто не использует эти команды. Мне кажется, это плохо, если произошла ошибка, а скрипт продолжает работать как ни в чем не бывало. так, например, получаются пустые бекапы: скрипт отработал, бекап есть, а данных в нем нет.
egorinsk
+4
А вот в языке D можно задавать функции, которые будут вычисляться в compile-time. Например, рассчитывать хеши строк-индексов для ассоциативного массива в момент компиляции, разве это не чудесно? Насколько далеко этот язык впереди порядком устревшего Си.

И странно, что вы озаботились оптимизацией вычисления crc32 (что делается быстро), но не оптимизацией парсинга XML с переводами. Вам не кажется, что логичнее было бы в момент компиляции превращать тяжелый, трудноразбираемый XML-файл в компактную бинарную хеш-таблицу с временем поиска O(1)? Мне кажется, выгоды и в объеме, и в скорости работы программы было бы больше.

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

Ну или использовать бибилиотеку gettext(), если лень писать свою реализацию.
egorinsk
+3
Найс. Почему-то в моем восприятии это исключительно позитивная новость. Обожаю, когда вот так вот весело и с чувством юмора раздают пинки всяким там защитникам приватности и дотаптывают последние остатки анонимности в интернете. Тонуть, так всем вместе, а умирать, так с музыкой.

p.s Название проекта на гитхабе под названием skypeopensource тоже радует. Не хочешь делиться кодом, капиталист? а придется.

egorinsk
–2
Вот что не люблю на Хабре, так это примитивный, убогий подход к решению задач (ну и ограничение на коментарии раз в неделю).

Разве это решение — установить какой-то левый, тормозящий работу страницы и загрузку яваскрипт? Что за ограниченное мышление? И что делать пользователям без яваскрипта?

Большинство опечаток и ошибок, вроде слов «координально» (это ж надо такое придумать!) или запятых в стиле «завтра, я напишу продолжение, этого поста,...» можно обнаруживать (а также исправлять) полностью автоматически. Автор, советую вам бросить маяться дурью и написать уже робота-спеллфиксера для полностью автоматического обнаружения и исправления ошибок.
egorinsk
–26
Ядро Линукса — тяжелое, монстроидальное, излишне монолитное, во многом устаревшее.

Для разработки важна поддержка мощных компаний. Представьте, что лет через 5 появятся новые стоядерные процессоры с многоконвейерной архитектурой и ядра ОС станут например асинхронными и микроядерными. Эппл и майкрософт перепишут свои ядра, а кто перепишет весь Линукс? Появится новая шина или новое устройство. Кто напишет драйвер под Линукс? (производитель устройства особо не заинтересован).

Для разработки ОС важно участие лучших разработчиков в мире. Лучшие разработчики работают в Гугл, Эппл и фейсбук, как их переманишь, прикормленных, на ниву свободного ПО?

Десктопный Линукс всегда был плох. В сравнении с оптимизированной по производительности и совместимости с приложениями виндой и вылизанным юзабилити маков. Когда-то авторы Gnome пытались разобраться, как сделать комфортной работу в среде при объеме памяти в 256 Мб, в итоге выяснилось, что проще всего подождать, пока на компьютерах станет больше памяти и проблема решится сама собой.

Что касается телефонов, тут лидер исключительно Эппл. Линуксу нужны космические инвестиции, чтобы хотя бы рядом встать.

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

Также, есть множество продуктов, которых нет в виде свободного ПО, например ПО для бухучета, фотошоп, и подобные вещи.

Также, что касается, нас, PHP-разработчиков, на мой взгляд, качество архитектуры и кода свободного ПО (а я люблю заглядывать в исходный код) очень низкое. Или же, наоборот, продукт страдает от оверинженеринга (Zend Framework).
egorinsk
–1
На картинке замечательный офис. У опенспейса есть большое преимущество — (если конечно там не шумно) — вид того, что вокруг тебя сидит много людей и они все работают, мотивирует. И вообще, как-то лучше в большом помещении, чем в маленьком.

egorinsk
–6
Вот блин, я думал, заплатить забыли, ан нет, отбирают, нелюди! Но ничего. Хакерский журнал, уверен, найдет менее контролируемые способы связи.
egorinsk
0
Мне кажется, в начале статьи стоило бы перечислить какие вообще есть способы устранения этих конфликтов, чтобы были понятны варианты решения проблемы.

Что касается эквалайзера, а разве звук инструмента не страдает от такой аггрессивной эквализации, когда кусок спектра вырезается начисто?

Отрезать частоты ниже 90 Гц — не слишком ли смело? Вроде бас легко залезает ниже (например, нижняя нота E)? Не будет ли бас с отрезанной основной гармоникой звучать странно?

А, еще вопрос при использование садчейна — ведь обычно атака басовой ноты совпадает с бочкой, и делая сайд чейн мы глушим атаку большинства нот, и линию баса становится труднее разобрать?

Также, интересная тема (жаль, не освещенная в статье) — запись гитарных партий, которые вообще чуть ли не весь слышимый спектр занимают и глушат все остальное.

Также, хотелось бы почитать про более интересные устройства, вроде Multiband Compressor. Говорят, они могут впихнуть в микс еще больше инструментов и сделать их еще громче.
egorinsk
0
Автор показывает полное незнание темы. Смарти уже лет 5 как устарел — зачем его упоминать? Он всегда был уродливым, тормозным и неудобным (а теперь у нас есть неудобный и уродливый Twig вместо него :) ). XSLT автор скромно прошел стороной (мог бы хоть недостатки описать). Zend_view не упомняул (хотя предложенные классы — упрощенная версия Zend_view). Про наследование шаблонов и макросы в шаблонах не рассказал. Про новые идеи типа HAML не упомянул.

Это статья о шаблонах? Это набор устаревших и неправильных занний. Код автора тоже плох. В его шаблонизаторе даже функции include нет. Также, почему имя шаблона передается в конструктор, а не в render()? Чем это объясняется? непродуманностью?

egorinsk
+3
Рендеринг SVG явно медленнее, чем рендеринг растровой картинки. Плюс неизвестно, может браузер ради каждой иконки будет рендерить SVG-файл целиком. Непонятно, как это скажется на производительсности и потреблении памяти. Непонятно, что делать с IE.

То есть минусов много, плюс — всего один, и то в большинстве случаев ненужный.
egorinsk
+1
Неуклюжий способ, так как в сигналах куча ограничений (многое делать нельзя), и нельзя делать стек обработчиков (так как установка нового отменяет старый). Неудобная система.
egorinsk
0
А как с кроссбраузерностью? сглаживание углов работает ли или пиксельными ступеньками наклнная линия рисуется?
egorinsk
0
Пишите больше, это же интересно, читать про всякие огромные программные комплексы, а не про то, как за 5 минут скачать плагин для jQuery.
egorinsk
+1
Вы неадекватный идиот, если у вас больные люди вызывают агрессию.
egorinsk
0
> и песня группы со странным названием «Мои Ракеты Вверх»

Меня тоже немного это напрягает, если уж рекламировать инди-музыку, то зачем брать песню на английском, которую никто не поймет, взяли бы лучше что-нибудь из репертуара «И Друг мой Грузовик».
egorinsk
+3
Приятно почитать статью, описывающую нормальным языком архитектуру, а не статью в стиле «скопируйте этот код в иде и запустите».
egorinsk
+1
Аналогии неправильные. Когда я слышу «фреймворки не нужны», это значит, что человек либо не умеет ими пользоваться, либо просто взял не тот инструмент для решения задачи и ругается.

Проводя аналогии, например IC и DI — это стандартные розетки и провода для хлеборезки. То есть до них все делали свою хлеборезку со своим собственным дизелем, своим типом двигателя и своим напряжением питания (а кто-то вообще на бензине), а потом догадались сделать розетку на 220В и 50 Гц и пошл-поехало. А теперь вот приходят люди и говорят: мне не нужна розетка на 220В, я свой дизель-генератор лучше соберу. Ну хозяин-барин, конечно.

Другой вопрос, что ява-фреймоврки излишне утяжелены и усложнены, но это уже не мои проблемы. Также, люди любят делать излишнюю расширяемость: например, нарежут все на кучу абстрактных классов и фабрик с наследоваием, вместо того, чтобы написать if/else. У нас в PHP такой проблемы нет: хочешь, пиши фреймворки с XML-конфигами и DI, хочешь пиши через функции и глобальные переменные.
egorinsk
+3
XML дает валидацию через всякие Relax NG (альтернатива: писать и вымучивать код валидации шаблона руками, тратя гораздо больше времени). XML дает возможность легко делать всякие блоки с параметрами и много других вещей.

А Jade (хотя такой синтаксис по моему впервые использовался в HAML) — интересная вещь, но я бы не рискнул его применять, пока сам не потестировал и посмотрел на плюсы/минусы. Как минимум, при его использовании надо полученную от верстальщика HTML-верстку почти целиком переделывать в блоки — это надо либо автоматизировать, либо это лишняя работа. В то время как XML и HTML — братья-близнецы.
egorinsk
+2
Хорошая статья. Потмоу, что я сам не раз ломал голову, как решить проблему возникающую в любом продвинутом аякс-приложении:

> два набора совершенно разных шаблонов на сервере и на клиенте.

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

1) сделать Xml-based язык шаблонов и компилировать его в PHP (или что-нибуль Си-подобное если требуется скорость) и JS для клиента — заведомо FAIL, так как после богатых возможностей PHP с циклами, вызовами хелперов, константами, массивами на нем невозможно будет программировать
2) сделать шаблоны на PHP, а для клиента сделать транслятор PHP subset в JS — это во-первых, сложно, во-вторых, мало перенести конструкии языка, ведь в шаблонизаторе используются модели (класссы на PHP) и хелперы (PHP-функции) — их-то как перенести, а? Дублировать всю логику на клиентсайде что ли?
3) (не выход) перенести всю логику на клиента — не подходит, так как без яваскрипта не будет работать.
4) перейти на сторону тьмы и использовать уродливый тяжелый GWT — опять же, без JS он вроде нормально не работает.

Таким образом, проблем много, а решения я не вижу никакого. Выхода, как говорится, нет. Стоит отказаться от JSON и гонять с сервера шаблонизированные данные видимо.

Потому ваш подход все же не впечатляет. Node.JS вместо компиляции в Си++ на сервере, плюс слабые возможности, плюс нельзя в шаблоне использовать хелперы и серверные классы. Слишком много недостатков.
egorinsk
–9
Самба не поддерживается? В топку тогда этот диск. Ибо я сомневаюсь, что по ихнему web-что-то-там протоколу можно перетащить сетевую папку с тысячами песен в плеер и он их распознает их, прочтет и проиндексирует теги за полминуты (через Samba — можно, его хватает даже для того чтобы тяжеленный flac играть через сеть).
egorinsk
–1
А для сравнения страничку на PHP?

У вас слишком искуственные тесты. Много ума не надо, написать Hello World. Вы сделайте псевдокнтроллер, который читает данные из фейковой модели, проверяет права доступа и отдает в фейковую вьюху. В таких, приближенных к реальности условиях, будет гораздо более объективный тест.

Для Питона, естественно, надо подключить всю махину Джанго.

А так, ваши тесты больше походят на тесты неадекватов из shootout.alioth, которые меряют для PHP скорость построения двоичного дерева и подобную дребедень. Покажите мне хоть один сайт, который строит красно-черные деревья при выводе страницы.
egorinsk
0
Тогда комментарий относится к продвинутым пользователям, пользователям Хабрахабр и тем, кто ставит непродвинутым пользователям эту дрянь.
egorinsk
–4
Если челоевк установил или не отключил Java Plugin и Adobe Reader в браузере (люди? вы тупые? через них уже лет 5 как все вирусы распространяются, а вы все этого не понимаете), я считаю он сам виноват. Протроянивание — хорошая мера воздействия на глуповатых и неадекватных людей. Может поумнее будут.
egorinsk
–4
> А я считаю, например, что лучше подходят Nested Sets.

Не пишите такие вещи, если не разбираетесь. С Nested Sets вставка комментария в начало приводит к пересчету left/right key у всех сотен следующих за ним (а ведь это индексированные поля).

> А теперь вы ответьте-ка, как вы сделаете то же самое без ОРМ, без триггеров(которые на самом деле события).

Очевидно, я возьму правильный (воображаемый) Data Access Layer, в котором это есть, или напишу плагин, если такового нет.

> Селект всех постов разом с подсчетом коментов? Про Group By слышали?:)

Зачем делать Group BY, заставляя сервер пересчитывать тысячи комментариев, когда можно хранить циферку в табличке. И делать селект из ОДНОЙ таблицы без всяких джойнов и груп бай. И вместо шкафа из мощных серверов поставить один. Сдается мне, вы как раз разрабатываете сервисы для локалки на 3 человек. Ну что вы пишете такое.

Слушайте, а если вам надо будет вывести рейтинг постов с наибольшим числом комментариев, вы тоже Group BY и сортировку (или вложенные запросы? как там принято?) будете делать на таблицах с десятками тысяч постов и миллионами комментариев?
egorinsk
0
Точно не я. Я не использую PHP 4, даю прекрасные английские названия переменным, не использую подчеркивание в начале имени, не люблю imagick и запуск сторонних процессов, и уж точно не написал бы этот нечитаемый ужас.
egorinsk
–4
Автор, а ответьте-ка, как в вашем хваленом ORM реализуются следующие банальные вещи?

1) Допустим, мы хотим сделать в нашем приложении комментарии. Очевидно, что у комментария есть автор, но если хранить только id автора, и брать его имя из дополнительной таблицы JOIN'ом, то любая база данных затрещит, потому мы хотим хранить в таблице комментариев дополнительно имя и ник автора, сохраняя их в момент создания комментария. Вопрос: можно ли в указанном ORM с помощью аннотаций добавить псевдо-поля «authorName» и «authorNickname», чтобы они формировались при создании/обновлении комментария на основе поля authorId и таблицы пользователей. Без событий и костылей. Это поля, которые просто кешируют данные из связанной таблицы (authors).

2) мы хотим иерархические комментарии, чтобы список комментариев выбирался из БД легким индексируемым запросом без джойнов. Для этого как нельзя лучше подошли бы Materialized Paths. Можно ли аннотацией без костылей и событий как-то сказать классу, что он хранит иерархические записи с использованием MP?

3) Теперь мы хотим на главной, под анонсом поста, выводить количество комментариев к нему. Очевидно, что если делать для каждого анонса SELECT COUNT(*), база прикажет долго жить. Потому мы хотим добавить аггрегатное псевдо-поле commentCount, которое будет автоматически инкрементиться/декрементиться/обнуляться при создании/удалении/перемещении комментария? С помощью аннотации типа [field virtual method=aggregate function=count relatedEntity=comments]? С помощью какого-нибудь свойства связи posts to comments?

Все задачи, которые я привел, банальны и всречаются на каждом втором сайте. ORM, в котором нет встроенных средств для их решения, никак нельзя назвать современным, актуальным и прочее. Такой ORM провоцирует разработчика на написание неэффективного кода (вместо того чтобы предложить встроенный протестированный инструмент для решения задачи). Он годится разве что для сайтика в локалке на 3 пользователей, а не серьезных проектов. А его разработчики видимо перечитали Макконнела и окончательно потеряли связь с реальностью.
egorinsk
0
Хорошая ли вещь ORM? Задумка хорошая. А вот реализация отвратительная.

Но у нас, например, в PHP, все ORM реализованы из рук вон плохо, неэффективно, тащат в рантайме десятки классов, делают кучу лишних действий и т.д. А как с этим дела в .NET? Подозреваю, что так же.

Вот сделают нормальную компиляцию/генерацию быстрого ORM кода, чтобы из описания предметной области генерировались минималистичные классы моделей — тогда будем использовать. А так выгоднее руками запросы писать, хотя бы тормозить не будет.

Например, почему вы на каждое поле создаете приватное поле, сеттер и геттер? Памяти лишней много? Зачем этот мусор в коде? Почему нельзя хранить все поля в приватном ассоциативном массиве и сделать ОДИН сеттер и ОДИН геттер (типа setValue(field, value))? А если вам надо перебрать к примеру 1000 записей в цикле, вы что, будете (неявно) создавать 1000 объектов, читать данные из БД и вызывать 1000 * 20 сеттеров? Потом вызывать всю эту тьму геттеров и сеттеров, чтобы их обновить? Вот еще одно доказательство, что ORM пишут непродуманно и как попало.

Более того, почему вообще 1 модели должен соотвествовать один класс? Можно сделать 1 класс на всю предметную область (класс с именем типа Storage, который в себе уже все инкапсулирует). А у вас по тяжелому объекту на каждую запись в таблице создается. Так ресурсов никаких не хватит.

Также, комментарии реализованы неудачно. Что за уродливый синтаксис? В нем XML-мусора больше, чем полезной информации. Есть же JavaDoc.

Также, неудачно названо поле onFieldChange. Ну кто, кроме индусов из майкрософт, мог придумать такое тупое название? Какой еще change? В нормальном мире это называется зависимостью между полями, или вычисляемым полем (calculated field).

События, опять же, приделаны как какой-то костыль. В правильном описании модели между полями могут быть взаимосвязи/зависимости, и события не нужны (так как если поля связаны функциональной зависимостью, они обновляются сами, без всяких событий).

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

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

Также, у ORM есть фундаментальный недостаток. Так как ORM создает «видимость» (абстракцию), что persisted объект является обычным объектом, программист работает с ним как с обычным объектом (а не с таблицей SQL), что порождает неэффективные SQL-запросы, которые могут делать адские джойны, выборку не по индексу, которые пытаются неуклюже лечить огромным кешем, держа все активные объекты в оперативной памяти, или держа списки изменившихся свойств (чтобы сохранить их в конце транзакции), что тоже расходно.

Там, где классический разработчик напишет 1-2 простых запроса без джойнов, ORM нагенерирует такое, что даже MS SQL сервер с многотыясчедолларовой лицензией будет скрипеть жестким диском (хотя, если подумать, производителям железа выгодны тяжелые ORM — спрос повышается на SSD).

Подводя итоги, мы видим множество недостатков и просчетов, допущенных при проектировании ORM компоненты. За быструю разработку приходится расплачиваться космической неэффективностью кода. Не представляю, как на такой непродуманной и ненадежной платформе можно вообще что-то писать. Неудивительно, что ентерпрайзный софт ругают все, кто с ним работал.
egorinsk
+6
У меня во всех браузерах отключены ява-плагины (все). Так как я ни разу их не использовал, а вот вирус через них установить — дело одной минуты. Ява кривая и небезопасная донельзя. Также, не использую Adobe Reader, так как он тоже дырявый и есть альтернативы (не требующие встраивания в браузер и не запускающиеся автоматически).