Pull to refresh
480
0
Send message
Бывает. Вот пример enterprise-quality кода, который соответствует всем правилам, изложенным в статье. Проект уже обсуждался на хабре.

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

Пост: «Евросоюз предостерёг Nokia от превращения в патентного тролля»
Вы: «Довольно запоздалая реакция у Евросоюза, скажу я вам.»
Я: «При чем здесь патентный троллинг? Там даже близко ничего подобного к определению нет.»
Вы: «Не отвечаю на некорректные вопросы».

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

В общем ладно, не у всех людей достаточно интеллектуальной честности, чтоб признать свою неправоту, когда она очевидна. Желаю удачи.
То есть отвечать на вопрос Вы отказываетесь. Что же до Гугла — я вполне ясно выразился еще в своем первом комментарии, но все же поясню еще раз:

Даже откровенные нарушения (по поводу которых всполошились антимонопольные органы) НЕ ЯВЛЯЮТСЯ патентным троллингом — не стоит переопределять понятия так как Вам хочется.

Здесь есть еще и более широкий контекст, который я не подразумевал изначально, но тем не менее, раз уж развернулась «дискуссия», его не стоит оставлять без внимания. Если речь о «свободном» и «патентно чистом» кодеке VP8, то разумеется стоит принимать во внимание то, как компания-производитель данного кодека относится к своим FRAND обещаниям: «честное» роялти может оказаться дешевле.
Не всем нравится самообслуживаться — многие предпочитают, чтоб живой человек им улыбнулся.

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

Это когда раньше, двести лет назад?
Кассовые аппараты используются с 1879 г.

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

А то, что уже сейчас просто невероятное количество профессий не нужны — их вполне можно автоматизировать. Не делается почему? Да потому же, почему и откровенно убыточные предприятия (и банки) получают государственные дотации «лишь бы не обанкротились» — иначе безработица, социальный взрыв, кровь, кишки, вот это все.

Вон, даже кассиры из Волмарта протестуют в очередной раз — денег больше требуют, соцпакет получше. А вы видели работу тех кассиров? Подставляют баркоды под ридер и улыбаются посетителям — фактически тот же велфер, только замаскированный. Это все уже можно автоматизировать (а с RFID и NFC — это можно сделать еще и гораздо более удобным для покупателей), более того, во всех супермаркетах УЖЕ есть кассы самообслуживания. Не говоря уж о том, что этих кассиров можно заменить вообще любым иммигрантом без прав — раньше на кассах хотя бы навыки быстрого счета в уме были нужны.

Вот для вывода трудовых ресурсов из этого скрытого велфера призыв и нужен. Программист, даже самый препоганый быдлокодер — уже гораздо более ценный для внутренней экономики кадр, чем кассир в Волмарте (и тем более, чем тот бомж, который недавно зарелизил свое первое приложение — до того, как он стал, собственно, «программистом»). Мировой тренд таков, что все больше и больше ручного труда будет автоматизироваться и основной рабочей профессией будет программист: образно говоря, слесарей заменят станками с ЧПУ (или 3d принтерами) а слесарям — либо в операторы этих самых станков (читай те же «программисты» пусть и «быдло-»), либо на улицу.

Есть и другая сторона: талантливые люди встречаются примерно с одинаковой частотой, поэтому существует такое понятие как «пул талантов». Поэтому для увеличения количества медалей на Олимпиадах нужно вовлекать и «просеивать» как можно больше молодежи. То же и с программированием: чем больше попробует — тем больше перерастут «быдло-» стадию.
Давайте еще раз. Нокия отказывается предлагать свою интеллектуальную собственность на RAND-Z (и прочих FRAND) условиях — отлично, пока стандарт не утвержден — все можно обойти, а если невозможно обойти, то надо бы задуматься о том, что, может быть, интеллектуальная собственность не такое уж и фуфло.

С другой стороны, Гугл — те самые «хорошие ребята»: впрыгивают в стандарт (повторюсь, «метод и аппарат» можно обойти только ДО того, как он стандартизирован — после стандартизации данное конкретное техническое решение обязательно к исполнению, даже если существуют тысячи альтернатив) наделав FRAND обещаний, а потом выставляют «заградительную» стоимость в 4 миллиарда баксов в год за свои три с половиной патента (причем не стесняются признаться в этом: «it takes only one bullet to kill» или как там), что как минимум на 3 порядка превышает стоимость ВСЕХ ОСТАЛЬНЫХ патентов в пуле. Вот как то нет у меня доверия к VP8 после подобных выкрутасов с H.264 — уж лучше MPEG LA — там хотя бы все честно и все пошлины заранее оговорены и одинаковы для всех.

Вот только при чем здесь «патентный троллинг»? К чему Вы вообще его приплели изначально?
А я позволю себе напомнить, что те самые smart devices имплементируют тысячи патентов на кодеки (в том числе и принадлежащие самой Nokia — с которыми они впоследствии обратились в суд). Даже то, что творит гуглорола не попадает под определение «патентного троллинга» — хотя они вполне заслуженно получили антимонопольные оплеухи и от DoJ и от Еврокомиссии. А уж обычные патентные терки в судах — это вообще обычный бизнес. Пожалуйста, не стоит переопределять «патентный троллинг» как «ребята, которых я не считаю хорошими требуют денег за лицензию от ребят, которых я считаю хорошими» — это глупость по стольким разным причинам, что даже не забавно.
Не совсем понятно, что именно Вы имеете в виду своей ссылкой. Патентный тролль — это ВСЕГДА non-practicing entity. Таким образом до тех пор, пока у Nokia есть (был) бизнес в той же отрасли, в которой выданы патенты — она по определению не могла быть патентным троллем. Сейчас, когда бизнес продается, а патенты остаются — такая возможность появляется.
Вообще, полный порядок загрузки dll под всеми поддерживаемыми версиями Windows описан здесь. Как было сказано, можно иметь в наличии все версии конкретной dll и при помощи манифестов связаться с конкретной версией, если же подобная гибкость не нужна — то есть SetDllDirectory/AddDllDirectory, которые в комбинации с SetDefaultDllDirectories позволяют полностью контроллировать откуда будут загружаться dll. Единственный нюанс: разрешение зависимостей в IAT происходит до выполнения кода, который может установить пути — в этом случае либо манифест, либо delayload для тех dll-ок, которые могут прийти из разных мест.
Ну, прежде всего, в ORM-ах нет реляционной алгебры (по крайней мере на объектном конце — именно поэтому нужен «меппинг»).

Если же говорить конкретно про LINQ, то join-ы в нем семантически больше похожи на таковые в XQuery: декартово произведение сущностей с фильтрацией зависимых (вместо генерации нового множества кортежей со значениями). То что некоторые LINQ провайдеры генерируют на выходе SQL — отнюдь не означает, что LINQ это и есть SQL (просто с другим синтаксисом) — между ними семантическая (а не синтаксическая — как раз синтаксис относительно близок) пропасть.
То есть образно говоря, LINQ настолько же не SQL, насколько, например, C++ — это не машинный код.
Нет, реляционной алгеброй в ORM-ах не пахнет. Все операторы реляционной алгебры отображают кортежи в кортежи. Любая агрегация (в смысле включения одних объектов и коллекций в другие, а не свертка набора значений в одно) — это уже очень существенно нереляционно (собственно говоря, это один из тех самых «impedance mismatch»-ей: O-часть ORM-а работает над графом зависимостей, а R-часть — над множествами кортежей).

Более того, тот факт что одна и та же модель может быть отображена в другую систему хранения (причем, например, отображение в document-based хранилища приводят к гораздо меньшему количеству «импедансов») говорит о том, что модель на O-конце не особо связана со своим R-концом.
Ну дык это и не Ваше творение — оригинальный автор похоже не шутил (вернее, скорее всего он считал, что насмехается над «фанатами» Mongo).

Да мепперы спасают до определенной степени (я по возможности пытаюсь выносить запросы в LINQ, оставляя саму базу практически без хранимых процедур), но они лишь явственно очерчивают проблему с SQL, а не решают ее (ну и приносят импеданс, про который упомянул автор, а вернее пару десятков оных). То есть по сути ORM-ы — тоже NoSQL.

От RDBMS остается фактически только хранение B-деревьев, с чем вполне справляются всякие BDB, да и все остальные БД — как SQL так и NoSQL (включая Mongo) используют B-деревья как основную структуру данных для хранения индексов.

Что же до Mongo — да, глобальный лок — ОЧЕНЬ спорное решение изначально, с другой стороны она таки действительно масштабируется горизонтально (и, как Вы отметили, этот самый лок разбивается на несколько — в каждом mongod свой). Ну и отлично понимая, что я — «нерепрезентативная выборка», но в моем личном опыте неосторожное обращение с констрейнтами убило больше производительности, чем глобальный лок в Mongo.
Браво, просто таки ошеломляющая победа над «чучелом Mongo».

Очень не люблю фанатиков, и ОСОБЕННО ненавижу фанатиков древних как окаменевшее говно мамонта технологий. Нет, я уже недостаточно молод для "… до основанья, а затем..." и вполне признаю право устаревших технологий на продолжение своего существования, но фанатеть от них?

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

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

В SQL мы имеем глобальные процедуры и функции (триггеры и отображения являются специализированными процедурами), из типов данных — пучок примитивных типов данных (нет беззнаковых целых, но есть двоично-десятичные дроби — кто вообще до сих пор считает это хорошей идеей?) плюс таблицы. Все. Это настолько примитивно, что даже некоторые ассемблеры более выразительны.
1. Можно войти в тот же самый стек фрейм (не путать с другим стек фреймом для той же самой функции) даже после выхода из этой функции
2. Точно так же как и __async/__await, собственно yield довольно тривиально пишется если есть __await (но сахар все равно лучше)
3. Возможных реализаций несколько и одна из них — та, что в шарпе — конечный автомат. На build2013 (кажется, хотя может это был и going native) был доклад о реализации __async/__await в VS. Для каждой операции, выполняющейся асинхронно, динамически выделяется отдельный стек фрейм и указатель стека перекидывается между фреймами в прологе/эпилоге функции.
Ога, в рамках нашей новой стратегии под названием «Devices and Services» давайте продадим подразделение, занимающееся нашим самым успешным «device» и закроем подразделение, являющееся самым большим «service». Кроме того, в соответствии с нашей позицией «Три экрана + облако», мы просто сдадим конкурентам один из «экранов» и существенную часть «облака». Очень логично, да.

Что же до монетизации Бинга — ну вот смотрите, есть винфон, на нем уже почти 4 года нет официального клиента для YouTube. Почему? Загадка. Разгадка предусматривает, что с закрытием Бинга, на винфоне не будет еще и поиска, распознавания речи, карт и много чего еще. Прямо скажем, так себе стратегия для завоевания массового рынка.

Давайте еще не забывать, что Бинг является самым крупномасштабным «облачным» проектом МС. Это как незаменимый опыт построения распределенной инфраструктуры, так и сама эта инфраструктура, которая активно используется вне, собственно, поисковика.

Короче, следом за закрытием Бинга и Иксбокса, следует закрыть еще и MS Research — а чо, они все равно НИКОГДА не были и не будут «прибыльными». Исключить из портфолио продуктов все бесплатные (Express) версии — прямых доходов то нет, а на сетевые эффекты насрать. Ну и «оптимизировать» расходы по другим направлениям, которые «не приносят дохода» — вот в частности тех поддержку можно закрыть на фиг — она «убыточна».
Вот как раз если Вы чувствуете личную ответственность, то Вы просто обязаны всеми силами избегать овертаймов (да, естественно, случаются форсмажоры, но они должны именно СЛУЧАТЬСЯ).

Чувство ответственности — это не «работать как можно больше», а пытаться максимизировать выгоду в средне и долгосрочной перспективе. Работая сверхурочно Вы, фактически, саботируете производство. Ну примерно, как если из-за «чувства ответственности» выходить на работу будучи больным. Ага, поприсутствуете (сомневаюсь, что с повышенной температурой будет сделано хоть что-то вменяемое), а потом минимум половина Ваших коллег тоже заболеют.
Ага, работай по 20 часов в сутки (я реально однажды провел неделю в таком режиме, когда был помоложе и мог себе это позволить, не говоря уже о годах проведенных в режиме 12-16 часов работы в сутки — три работы, чо, две из которых — собственный мунлайтинг), выгори, получи проблемы в семье, вялотекущую депрессию и отсутствие мотивации (причем фишка в том, что разумом все понятно — работа «в принципе» нравится, семью нужно кормить опять же, но каждый раз нужно себя ЗАСТАВЛЯТЬ что-нибудь сделать), следом — получи проблемы уже на самой работе, углубись в собственную депрессию, наслаждайся паническими атаками и проблемами со здоровьем.

Фишка в том, что обязательную 40-часовую рабочую неделю «изобрели» не коммунисты (или хотя бы социалисты), которые неусыпно заботятся о правах трудящихся — там то как раз сплошные пятилетки за 3 года и «стахановщина». Ее ввел Генри Форд, который помимо прочего ввел конвейерную сборку — и то и другое для УВЕЛИЧЕНИЯ эффективности труда (причем на основании предварительно проведенного по этому поводу исследования). И да, интеллектуальный труд еще больше подвержен деградации при овертайме по сравнению с трудом сборщиков на фордовском конвейере.

Отдыхайте, товарищи, побольше — меньше проблем придется решать в будущем.
Дополнительно оплачиваются только те часы, которые по взаимному согласованию:
Extra pay for working weekends or nights is a matter of agreement between the employer and the employee (or the employee's representative).

ТК РФ/Украины и прочих говорят примерно то же самое.

То есть, если компания (в лице начальства) не «попросила» поработать дольше, то и плюшек дополнительных не будет. Как Вы уже сказали, если работнику требуется больше времени для выполнения своих рабочих обязанностей — то, возможно, он просто не соответствует своей должности (опять же — может быть как недостаток квалификации, так и завышенные требования, но проблема именно в несоответствии).
Полностью согласен, просто не стал повторять то, что уже сказано в первом комментарии. Хорошая практика — попробовать «покрутиться» на переменной и попытаться захватить ее без смены контекста. Если все равно занято — то выйти из busy-wait-а и не жечь впустую процессор.

Я, кстати, не уверен, что будет делать SwitchToThread если нет других потоков, готовых к исполнению на данном процессоре — как бы не перепланировался текущий поток и мы опять не свалились в тупой спинлок (с раундтрипами в ядро).
Вот «коробочная» реализация для Windows. Здесь вообще никаких проблем — это часть стандартного рантайма Visual Studio. Хотя я бы все таки рекомендовал SRWLock для нормальных систем (тем более, что Windows — для отладки и тестирования), а для XP можно уже и собственный велосипед оставить (ей все равно недолго жить осталось).

А здесь — для QNX.

Information

Rating
Does not participate
Registered
Activity