Pull to refresh
-1
0
egorinsk @egorinsk

User

Send message
Если челоевк установил или не отключил Java Plugin и Adobe Reader в браузере (люди? вы тупые? через них уже лет 5 как все вирусы распространяются, а вы все этого не понимаете), я считаю он сам виноват. Протроянивание — хорошая мера воздействия на глуповатых и неадекватных людей. Может поумнее будут.
> А я считаю, например, что лучше подходят Nested Sets.

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

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

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

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

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

Слушайте, а если вам надо будет вывести рейтинг постов с наибольшим числом комментариев, вы тоже Group BY и сортировку (или вложенные запросы? как там принято?) будете делать на таблицах с десятками тысяч постов и миллионами комментариев?
Точно не я. Я не использую PHP 4, даю прекрасные английские названия переменным, не использую подчеркивание в начале имени, не люблю imagick и запуск сторонних процессов, и уж точно не написал бы этот нечитаемый ужас.
Автор, а ответьте-ка, как в вашем хваленом 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 пользователей, а не серьезных проектов. А его разработчики видимо перечитали Макконнела и окончательно потеряли связь с реальностью.
Хорошая ли вещь 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 компоненты. За быструю разработку приходится расплачиваться космической неэффективностью кода. Не представляю, как на такой непродуманной и ненадежной платформе можно вообще что-то писать. Неудивительно, что ентерпрайзный софт ругают все, кто с ним работал.
У меня во всех браузерах отключены ява-плагины (все). Так как я ни разу их не использовал, а вот вирус через них установить — дело одной минуты. Ява кривая и небезопасная донельзя. Также, не использую Adobe Reader, так как он тоже дырявый и есть альтернативы (не требующие встраивания в браузер и не запускающиеся автоматически).

В том-то и проблема. Вы не заставите хотя бы 50% веб-разработчиков как следует читать мануаы. Все равно они будут копипастить код из интернета и писать его левой пяткой. Потому защита от уязвимостей должна делаться изначально на уровне HTTP/браузера/веб-сервера/среды/платформы, а не отдаваться на добрую волю разработчика.

У меня, кстати, есть еще одно предчуствие, мне кажется, если порыться по сети, можно найти кучу уязвимостей с crossdomain.xml, так как многие разработчики толком не понимают, что делает этот файл и тупо следуют советам типа «если ваше флеш-приложение не соединяется с сервером, добавьте файл crossdomain».

Жалко, мне некогда этим заняться.

C одной стороны, про CSRF/XSS можно конечно сказать, мол сами виноваты, разработчики, не читаете стостраничные мануалы, RFC и не используете фреймворки. Но давайте подумаем.

Ведь технологии типа HTML, PHP, Ruby провигаются как простые (в противовес яве с профессиональными фреймворками enterprise уровня). Пишут на них в основном всякие школьники и студенты, но и оптыные разработчики могут пропустить CSRF или XSS. Всюду в блогах примеры кода на jQuery/PHP, которые толком
ничего не проверяют.

Уже который год находят такие баги. Да давайте возьмем наугад любой крупный сайт — наверняка там что-то найдется. Я видео, например, CSRF на вконтакте, хоть его и писали отличники и победители олимпиад. Если уж они допускают такие ляпы, что ждать от обычных программистов? Я знаю только Гугл, у которого нет дыр.

Да что там далеко ходить, возьмите свой старый код, небось и там можно такую дыру найти, не?

Очевидно, что меры по борьбе с уязвимостями должны предприниматься авторами языка/фреймворка. echo должен автоматически ескейпить данные. При обработке POST/GET данных при левом реферере или отсутствии токена интерпретатор PHP по дефолту должен выть и плеваться ошибками. Сырые SQL запросы должно быть неудобно делать. display_errors по умолчанию должен быть равен 0. Да, это надо вводить постепенно, но надо. Иначе число ошибок будет только расти.
VolCh, все развитые государства занимаются, как вас бы это не удивило, регулированием своей экономики. Погуглите слова вроде межбанковские кредиты, ставка рефинансирования, эмиссия, антимонопольное законодательство и подобное, и может быть станет понятнее. В развитых странах экономика работает на кредитных деньгах и без участия государства (и центробанка) тут никак не обходится.

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

Также, в США, и не только, государство устанавливает минимально разрешенный уровень заработной платы. У них это вроде 8 долларов в час.

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

> Зарезаем стимул платить выше среднего? Или провоцируем создание «мёртвых душ»?

В США налоги тем выше, чем выше доход. И что-то никто этот порядок менять не спешит. Терпят.

> O_o Зачем? Неужели в столицах эффективность труда выше?

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

> Всем платим по научно обоснованным нормам минимального потребления независимо от того насколько труд полезен обществу и есть ли труд вообще?

C тех, кому платят больше, берем больше налогов на помощь тем, кому платят меньше.

А IT-шные зарплаты все же завышены, исключительно из-за дисбаланса на рынке труда, и видимо это временное явление.

> И надолго бы резервов хватило? А как насчёт стимулов улучшать качество и количество кода, заниматься самообразованием?

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

> Полезность деятельности каждого оценивается обществом. Общество считает, что возможность ставить «лайки» или «хрень для бухгалтерии» важнее чем роботы или работа в шахте.

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

Все же это ненормально, когда полэкономики огромной страны сосредоточено в одном городе.
> Просто этим людям надо не работать за копейки. И не власть им должна что-то давать, а работодатель. А власть должна лишь следить за исполнением добровольно заключенного договора между работодателем и работниками, принуждать к его исполнению (причём обе стороны), раз уж взяли на себя обязательства.

Вы всерьез думаете, что люди настолько тупые, чтобы работать в опасных условиях за копейки, когда есть альтернатива? Если бы они могли «не работать за копейки», все бы давно уже были миллионерами. А что бывает, когда государство не регулирует рынок, было видно в 30-е годы в США. Ситуация повернулась таким образом, что стоять в очередь за бесплатной похлебкой было выгоднее, чем работать.

> Понимаю, что сказать проще чем сделать, но какой другой путь?

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

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

> Обязать потребителей платить больше реальной стоимости? Опять же за чей счёт?

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

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

И не прибивайте сюда пример с чрезвычайной ситуацией на АЭС. Я например, подозреваю, что какой-нибудь разработчик очередной социальной помойки зарабатывает больше конструктора роботов. Видимо, возможность поставить плюс один к фотке важнее создания робота. И вообще, мы же понимаем, что 99% программистов никакого отношения к этим роботам не имеют, а пишут всякую хрень для менеджмента или бухучета. Вопрос, почему в нашем обществе поддерживается такое неравномерное и несправедливое распределение богатств?

C одной стороны, очень грустно от осознания «no such thing as a free lunch». Видимо мир — это куча людей, карабкающихся наверх по спинам и головам друг друга, раз каждый хочет с тебя взять денег.

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

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

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

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

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

А вот программистам я бы предложил вообще ничего не платить, ибо современная отрасль разработки ПО подвержена крайней степени непрофессионализма. Программы тормозят, непредсказуемо потребляют ресурсы вычислительной системы, постоянно делают ошибки, как такой товар можно продавать? Разработчики используют чужие бибилиотеки, нагромождают лишние абстракции, копируют код из интернета, совсем отучились думать. Постоянно на Хабре видишь вопросы типа  «я не совсем программист, как мне под андроидом сделать такую штуку». В приличных странах автора не только за такой продукт заставили бы вернуть деньги, а еще и доплатить за неудобства.
Круто. Только у меня есть подозрение, что если жать наугад целыми аккордами, то одна из нот или гармоник ноты совпадет с искомой. Хорошо бы кроме наличия определенной ноты, проверять отсутствие соседних нот.

Также, на вашем графике — гармоники исходной ноты (с частотами, кратными основной).

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

Голос он не распознает, по-видимому, от того, у вас что-то неправильно сделано. Так как в голосе (я проверил!) тоже есть первая гармоника, может, правда, не такая четкая, как в звуке инструмента.
Вы на главную зайдите и посмотрите список новостей например:

www.europaplus.ru

Мило)
Интересно, что Гугл действительно может выдавить другие браузеры (фишки вроде плагинов фаерфокса или навороченные настройки Оперы среднему пользовтелю все равно не нужны), как когда-то ИЕ, только в этот раз это скорее облегчит верстку. На мобильных устройствах, и на десктопе — один, да еще и Open Source браузер.

Есть, впрочем, и минусы. Хром жрет память и CPU гораздо активнее других бразуеров. Но средний пользователь не открывает вкладки десятками, и его это не волнует.
Интересно, вот вы тут перевели большое пособие по спаму, и на что вы рассчитываете? На одобрение, может быть?
> Кот целый день сидит на столе возле СФУТ и улыбается.

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

А от списка багов и слов типа xml, refactoring и audit вообще можно впасть в депрессию.
Да ладно, скажите, вы не рады. Я бы лично скайпу за такой PR еще бонусом доплатил.
> Буфер обмена большинство DLP-систем контролировать умеют хорошо;

Так может сотрудник для рабочих целей данные копирует. Вы каждый случай фиксировать и просматривать что ли будете? Или заставите руками расчетные счета переписывать?

Ха, а хитрее? Взять Word, открыть им защищенный документ как простой текст (так что будет выглядеть как белиберда) и сохранить снова? Разбавить например текстом Библии. А потом переслать без шифрования?
Это DLP — как мне кажется — просто средства для развода умниками лохов^W^W технически не очень компетентных людей технически компетентными на деньги c целью создания у тех мнимого ощущения безопасности. Достаточно посмотреть на нарисованные от балды цены к примеру. Или на их ролик, где их продукт храбро отлавливает отправляемые плейнтекстом сотрудниками резюме (какое отношение это имеет к безопасности, правда, не очень понятно).

Мне интересно, как эти DLP отреагируют, если, к примеру, открыть защищенный документ вордом, сделать copy-paste в новый, сохранить с паролем (в новых версиях офиса он надежный), заархивировать раром и снова вставить в ворд, а потом уже переслать/загрузить на rghost/скинуть в скайп с названием «образец договора для клиента.doc»/ etc. Такую вещь можно отследить только ручным анализом логов и ручным слежением через программы записи экрана.

Весь из «поиск по фразам» и «поиск по регулярным выражениям» окажется бесполезен. Он сработает только против совсем глупых попыток что-нибудь упереть.

Или возьмите пример вирусов stuxnet (использовался на иранском атомном заводе) и duqu (использвался по всему ближнему востоку). В обоих случаях заражение начиналось с получения письма с MS Office документом, эксплуатирующего zeroday уязвимость Windows. И я уверен, что ни антивирусы, ни тем более эти DLP от него не спасут.

Кстати, я сейчас подумал, считавшийся традиционно средством обеспечения безопасности firewall тоже им быть не может, так как любой уважающий себя продукт для кражи информации будет прикидываться http/https клиентом, а эти порты всегда открыты (не оставишь же работников без инета :) ).
Если бы герой вашей статьи, вместо бредовых рассуждений на 3 страницы, набрал в консоли man chroot и узрел строки:

> This call does not change the current working directory, so that after the call '.' can be outside the tree rooted at '/'. In particular, the superuser can escape from a «chroot jail» by doing:
> mkdir foo; chroot foo; cd…

он бы сэкономил немало времени и себе, и читателям.

Information

Rating
Does not participate
Date of birth
Registered
Activity