• Почему вы никогда не должны использовать MongoDB

    • Translation
    Дисклеймер от автора (автор — девушка): Я не разрабатываю движки баз данных. Я создаю веб-приложения. Я участвую в 4-6 разных проектах каждый год, то есть создаю много веб-приложений. Я вижу много приложений с различными требованиями и различными потребностями хранения данных. Я разворачивала большинство хранилищ, о которых вы слышали, и несколько, о которых даже не подозреваете.

    Несколько раз я делала неправильный выбор СУБД. Эта история об одном таком выборе — почему мы сделали такой выбор, как бы узнали что выбор был неверен и как мы с этим боролись.Это все произошло на проекте с открытым исходным кодом, называемым Diaspora.
    Читать дальше →
  • Топ10 ошибок, совершаемых при разработке на AngularJS

    • Translation
    На настоящий момент AngularJS — один из самых популярных javascript фреймворков. Его использование упрощает процесс разработки, делая AngularJS великолепным инструментом для создания небольших веб-приложений, но возможности фреймворка не ограничиваются этим и позволяют разрабатывать большие, наполненные разнообразным функционалом приложения. Комбинация легкости в разработке и большое количество возможностей привели к широкому распространению, а вместе с распространением появились типичные, часто встречающиеся ошибки. В этом топике описаны наиболее распространенные ошибки, встречающиеся при разработке на AngularJS больших проектов.
    Читать дальше →
  • Автоматизация и/или результат?

    Введение

    В 90-е годы было очень популярно слово «компьютеризация». Порой, на приобретение компьютеров затрагивались колоссальные средства — даже без понимания его роли в повышении эффективности труда. Низкая грамотность большинства бизнесменов в области автоматизации, часто встречавшаяся в те годы, сейчас может вызвать у нас улыбку на лице, однако же рекомендую перед этим хорошо посмотреть вокруг и выяснить: что же знают ваши знакомые, имеющие свой бизнес, либо находящиеся на позициях топ-менеджеров, на эту тему? Что поменялось?

    По своему ощущению, могу совершенно однозначно заявить, что грамотность большинства бизнесменов в вопросах автоматизации хоть и сдвинулась с места, но еще далека от той точки, когда люди будут хорошо понимать, за что же именно они платят. Более того: те, кто продают автоматизированные системы управления, редко и сами представляют, за что же они получают деньги. Низкая результативность внедрений вида невооруженным глазом: системы BI, которые призваны дать инструментарий конечному пользователю, но на деле требуют содержания штата мощнейших программистов и аналитиков, дорогостоящие ERP, где за красивым «фасадом» вместо обещанных ноу-хау обнаруживается банальная арифметика, и системы контроля исполнения, которые дают некорректные задания исполнителям. Стоимость же ошибки в наше время поражает воображение: неправильно выполняемые задачи способны «съесть» не то, что миллионы, а миллиарды рублей!
    Читать дальше →
  • Эмуляция LINQ for SQL на Delphi

    Постановка задачи.
    Имеется большой Клиент-Сервер проект. Клиент программно строит динамические SQL запросы для выполнения на SQL сервере. Запросов много, логика построения размазана по всему клиентскому коду. Проект развивается во времени, необходимо модифицировать структуру базы данных. Как заставить компилятор показать все места, где в коде используются уже не существующие поля? Как заставить компилятор проверить, что целочисленному полю не присваивается строковый параметр? При этом паскалевский код должен быть приближен к SQL синтаксису.
    Читать дальше →
  • Улучшаем LINQ для работы с IReadOnly-коллекциями

      Как известно, при использовании интерфейса IEnumerable<> там, где подразумевается коллекция, могут случаться проблемы (см. например Проблемы использования IEnumerable и LINQ против LSP). К счастью, в .NET v4.5 в 2012-м году (немного поздновато, но лучше поздно, чем никогда), появились интерфейсы IReadOnlyCollection<>, IReadOnlyList<>, IReadOnlyDictionary<> (далее буду их обобщённо называть IReadOnly-интерфейсы). В отличие от IEnumerable<>, IReadOnly-интерфейсы дают возможность достаточно и без лишних требований обозначать функциональность коллекции, что и позволяет их рекомендовать для использования вместо IEnumerable<> везде, где подразумевается чтение коллекции. Но тут встречается одно затруднение. Одним из важных компонентов, потребляющим и создающим коллекции, является LINQ и, особенно, его часть «LINQ к объектам». К сожалению, IReadOnly-интерфейсы появились через 5 лет после LINQ, и в нём не используются. Все входные и выходные коллекции LINQ-операций имеют базовый тип IEnumerable<>, исходя из ограниченных возможностей которого, многие операции подразумевают лишние затраты: полный последовательный перебор или даже создание промежуточных копий входных коллекций. Более того, возвращая из операций тот же IEnumerable<>, LINQ требует при дальнейшем использовании результата опять использовать полный перебор и создание промежуточных копий. В связи с этим, у меня давно зрела мысль «подружить» LINQ с IReadOnly-интерфейсами.
      Читать дальше →
    • [видео] Как избежать незапланированного отката: разбор 7 реальных переговорных ситуаций

        Раз уже тема переговоров с заказчиками и коллегами оказалась интересна хабровчанам (48,000 просмотров видео за неделю), мы решили продолжить эту тему.

        Предыдущие материалы:


        На этот раз мы попросили Дмитрия Коткина, руководителя Санкт-Петербургской школы переговорщиков ШиП разобрать ситуации более подробно. Правда, и ситуации не такие простые. Более конкретные, про проектную работу в ИТ, с непростыми заказчиками и коллегами.

        Надеемся, что это окажется вам полезным. Видео-разборы 7 реальных ситуация — под катом:
        • “На свободу — с готовой отчетностью!”
        • “4 часа, чтобы сделать клиенту чушь”
        • “Миссия невыполнима (с данным оборудованием)”
        • “Начинайте работы, через 14 часов открытие магазина”
        • “Наш бюджет в 3 раза меньше”
        • “Незапланированный откат”
        • “Если у вас в руках молоток, то все вокруг кажется гвоздем”


        Читать дальше →
      • Разные версии JIT в .NET

          Каждый C#-разработчик знает, что C#-компилятор переводит исходный код программы в промежуточный язык под названием Intermediate Language (IL). А за превращение IL в последовательность машинных команд чаще всего отвечает Just-In-Time-компилятор (JIT). Да, на сегодняшний день есть NGen, Mono AOT, .NET Native, но JIT-компиляция всё ещё лидирует в мире .NET-приложений. А вот работает этот самый JIT, знают далеко не все. Если брать в расчёт только реализацию .NET от Microsoft, то стоит различать JIT-x86 и JIT-x64. А ещё за дверями стоит RyuJIT который уже совсем скоро займёт почётное место основного JIT-компилятора. А если вы любите старые версии .NET, то полезно знать, что в разных версиях CLR логика работы JIT отличалась. Исходники у нас теперь открыты, вы можете их посмотреть и осознать, насколько же это большая и сложная тема. Сегодня мы не будем пытаться охватить её, а лишь кратко посмотрим на несколько интересных особенностей отдельных версий JIT-компиляторов. Итак, сегодня в номере:
          • Почему короткий метод может не быть заинлайнен и как этого избежать
          • JIT-баги: опасные и беспощадные
          • Кто и как разматывает циклы
          • Чем отличается размотка маленьких и больших циклов

          Читать дальше →
          • +42
          • 19k
          • 4
        • DuoCode: транслируем C# в JavaScript

            Есть такой язык программирования, который называется C#. И есть очень много разработчиков, которым он очень нравится. А ещё есть такой язык программирования, который называется JavaScript. Как-то так сложилось, что он нравится далеко не всем C#-разработчикам. А теперь представьте ситуацию: есть заядлый C#-разработчик. Он очень любит C#, все-все проекты на нём пишет. Но судьба распорядилась так, что ему понадобилось написать клиентское веб-приложение. Знаете, такое, чтобы пользователю не нужно было себе ничего скачивать и устанавливать, чтобы он мог просто открыть любой браузер в любой операционной системе на любом устройстве — а приложение уже там. И вот тут у нашего лирического героя возникла проблема: вроде бы JavaScript идеально подходит для этой задачи, но вот писать на нём отчего-то не очень хочется. К счастью, в современном мире существует много языков, которые транслируются в JavaScript (всякие TypeScript, CoffeScript и тысячи других). Но наш разработчик оказался очень упрямым: он упорно не хочет изменять своему любимому C# с «вражескими» технологиями.

            К счастью для него, счастливое будущее уже практически наступило. Есть такой проект, который называется DuoCode. Он умеет транслировать C#-код в JavaScript. Пока он в состоянии beta, но у него уже весьма неплохо получается: поддерживаются нововведения C# 6.0, Generic-типы, Reflection, структуры и LINQ, а отлаживать итоговый JavaScript можно на исходном C#. Давайте посмотрим внимательнее, что же представляет из себя продукт.

            Читать дальше →
          • В поисках потерянной эффективности

              Все имена сохранены, все совпадения имеют под собой злой умысел.

              Бонд оторвал взгляд от монитора, откинулся на спинку кресла и потянулся. Позвонки громко хрустнули, и кресло жалобно заскрипело в ответ. Агент 007 поморщился, и в который раз подумал, что ему пора на покой. Всем в этой конторе уже давно пора на покой. Даже креслу.

              В комнату вошёл М.

              — Пойдём в переговорку, Джеймс. И отчёт свой не забудь, — в голосе М звучали нотки обречённости.

              — Может, ну его к чёрту? — спросил Бонд. — Я же достал этот чёртов чемоданчик с ядерной кнопкой. Мир спасён!

              М скорчил кислую мину.

              — Ты отстрелил палец китайскому психопату в тот момент, когда он запускал ракеты в сторону Лондона! Ещё бы полсекунды, и… — М не договорил, и в сердцах махнул рукой. — Пошли уже.
              Читать дальше →
            • Замечательное выступление настоящего программиста

                Не нашёл на хабре — спешу поделиться. Восхитительное выступление Александра Соловьёва ingspree на конференции JavaScript Frameworks Day 2013. На видео ниже просто набор отрывков из него, желающим посмотреть полностью — сюда.

              • Как распознавать манипуляции и быстро обезвреживать их

                  Как-то так происходит, что вопросы переговоров, вызывают большой интерес хабрапублики. Наши самые заплюсованные посты так или иначе касались переговоров:


                  Не так давно общаясь с директором одной крупной ИТ-компании мы как раз обсуждали эту тему. И он высказал мысль, что отрасль IT — это отрасль, где люди больше всего общаются друг с другом. Несмотря на, казалось бы, большое количество времени, которое мы проводим наедине с компьютером, много времени мы проводим и в общении: с коллегами по команде, коллегами из других городов и стран, заказчиками и т.д. Пообщаться за один день с ребятами из Новосибирска, Москвы, Питера, Санта Клары, Шанхая и Бангалора — в порядке вещей. Причем и письменно, и устно, и на совещаниях и в чатах — как хочешь. Сплошные переговоры. Это, вероятно, и объясняет столько плюсов в постах по этой теме.

                  Сегодня мы решили продолжить эту тему и опубликовать главу из новой книги Дмитрия Коткина «Переговорная книга быстрых рецептов».

                  Как распознавать манипуляции и быстро обезвреживать их

                  Читать дальше →
                  • +16
                  • 63.5k
                  • 9
                • Еще один взгляд на Entity Framework: производительность и подводные камни

                  Ни для кого не секрет, что адаптация Entity Framework проходит очень медленно. Огромное количество компаний продолжают использовать Linq2Sql и не планируют менять его на что-то новое в обозримом будущем, несмотря на то, что EF – официально рекомендуемая Microsoft технология доступа к БД, а Linq2Sql уже почти не поддерживается.

                  Тех, кто всё еще сомневается, можно ли использовать EF (и особенно – code first) на реальных проектах, приглашаю под кат.
                  Читать дальше →
                • Сайт с нуля на полном стеке БЭМ-технологий. Методология Яндекса

                  • Tutorial
                  На прошлой неделе BBC рассказала, что для новой версии главной страницы использовала методологию БЭМ, созданную в Яндексе. По такому случаю мы решили поднять материалы мастер-класса «Разрабатываем сайт с нуля на полном стеке БЭМ-технологий» и рассказать вам, как начать использовать полный стек БЭМ-технологий в своих проектах.

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



                  В статье мы расскажем, в чём преимущество вёрстки независимыми блоками и что такое уровни переопределения, познакомимся с готовыми библиотеками блоков и инструментами для автоматизации сборки. Покажем, как разные инструменты — например, autoprefixer, css-препроцессор Stylus или модульная система YModules — упрощают жизнь разработчика и создают по-настоящему удобную платформу, если встроить их в процесс разработки по БЭМ.

                  На живом примере мы объясним, в чём польза декларативного подхода, когда одни и те же идеи можно использовать как для CSS, так и для JavaScript. Отдельно остановимся на декларативных шаблонах BEMHTML и BEMTREE, которые позволяют преобразовывать данные в БЭМ-дерево, описанное в формате BEMJSON и, затем в HTML. Рассмотрим в деталях, как написать серверную часть приложения по БЭМ-методологии.
                  Читать дальше →
                • Полная энергетическая автономия или как выжить с солнечными батареями в глубинке (часть 1. теоретическая)



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

                    image
                    Как все начиналось
                  • Статические анализаторы JavaScript и ошибки, от которых они помогут отучиться (Часть 1)

                    • Translation
                    Далеко не каждая строка моего кода получается идеальной с первого же раза. Ну, в некоторых случаях… Иногда… Ладно – практически никогда. Правда заключается в том, что я трачу значительно больше времени на исправление своих собственных глупых ошибок, чем мне хотелось бы. Именно поэтому я использую статические анализаторы практически в каждом написанном мной файле JavaScript.

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

                    В больших проектах и при работе в больших командах вам не помешает небольшая помощь в поиске таких «простых» багов, которые на самом деле оказываются не такими простыми, как кажутся.
                    Читать дальше →
                  • Госнаркоконтроль преследует Ализара

                      Сравнительно недавно — 14 октября 2011 года — alizar перевёл и выложил на Хабрахабре статью Гленна Гринуолда «Стив Джобс и политика в отношении оборота наркотиков», автор которой завершил свой труд следующим умозаключением:

                      — Учитывая все эти факты, опыт Стива Джобса и многих других выдающихся людей, а также учитывая опыт миллионов американцев по употреблению лёгких наркотиков (среди них — нынешний и прошлые президенты США), совершенно непонятным выглядит то жестокое наказание — тюремное заключение, которое предусмотрено в законодательстве многих стран за оборот лёгких наркотиков и психоделиков. Миллионы людей бросают в тюрьмы за приём этих практически безвредных препаратов, в то время как оставшиеся на свободе, как Стив Джобс, принимают их тайком. Политику властей в этом смысле можно назвать варварством.

                      (Конец цитаты.)

                      Я не уверен, возможна ли лучшая иллюстрация осуждаемой Гринуолдом суровости, нежели та, которая последовала в реальности. Не штатовская, а вполне российская Федеральная служба по контролю за оборотом наркотиков связалась с администрацией Хабрахабра и запросила все данные на Ализара, обвиняя его в пропаганде распространения наркотиков — об этом вчера поведал в Твиттере Денис Крючков (@deniskin, создатель Хабрахабра), а Владислав Михеев пересказал в «Вебпланете».

                      Читать дальше →
                    • Антипаттерны проектирования: Poltergeists

                      • Translation
                      «Я точно не знаю, что делает этот класс, но я уверен, что это важно!»

                      У паттернов проектирования — типовых решений, есть антиподы — типовые ошибки в проектировании. О паттернах проектирования написано достаточно книг, о антипаттернах — единицы. Вашему вниманию представлен вольный перевод статьи с сайта SourceMaking, описывающий один из таких антипаттернов (всего на сайте в разделе Software Development Antipatterns их представлено 14).

                      Наименование: Poltergeists (полтергейсты)
                      Другие наименования: Gypsy (цыган), Proliferation of Classes (рост количества классов), Big DoIt Controller Class
                      Масштаб: приложение
                      Рефакторинг: Ghostbusting (охота за привидениями)
                      Причина появления: непонимание концепций ООП, лень продумать архитектуру классов
                      Читать дальше →
                    • 300 потрясающих бесплатных сервисов

                      • Translation


                      Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



                      A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

                      • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
                      • Bootswatch: Бесплатные темы для Bootstrap.
                      • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
                      • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
                      • Strikingly.com Domain: Конструктор веб-сайтов.
                      • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
                      • Withoomph: Мгновенное создание логотипов (англ.).
                      • Hipster Logo Generator: Генератор хипстерских логотипов.
                      • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
                      • Invoice to me: Бесплатный генератор счета.
                      • Free Invoice Generator: Альтернативный бесплатный генератор счета.
                      • Slimvoice: Невероятно простой счет.

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