Тема этого поста будет посвящены тестированию, как таковому, и UI тестированию компонентов на клиентских приложениях, например приложений использующих Angular.js и иже с ними. Читать дальше ->
Это руководство описывает пошаговую установку и настройку реплики из 3 узлов mongoDB на базе движка WiredTiger. А также несколько полезных мелочей для людей, впервые столкнувшихся с MongoDB. Читать дальше →
Честно говоря, когда мы приступили к работе над перезапуском Яндекс.Карт, я и представить себе не мог, сколько проблем нам в итоге доставит Swift. Если вы начали писать на Swift совсем недавно, то, поверьте, вы пропустили все самое интересное. Каких-то два года назад не было инкрементной компиляции в принципе (даже пробел в любом файле приводил к полной пересборке), сам компилятор постоянно вылетал с Segmentation Fault на вполне безобидных вещах вроде тройной вложенности типов или наследования от Generic, индексация проекта длилась невообразимо долго, автодополнение работало через раз и так далее и тому подобное, всех бед не счесть. Подобные моменты несомненно усложняют жизнь программистам, но постепенно решаются с каждым обновлением Xcode. Однако есть более существенные проблемы, влияющие не только на разработку, но и на качество приложения: запрет компиляции статических библиотек из свифтового кода, а также отсутствие поддержки Swift на уровне iOS.
Изначально не было очевидно, что использование Swift и динамических библиотек приводит к росту времени запуска. Мы не сравнивали время запуска с предыдущей версией и воспринимали долгую загрузку как данность. Да и средств диагностики того, что же на самом деле происходит на этапе загрузки приложения, в общем-то не было. Но в один прекрасный день разработчики Apple добавили возможность профилирования работы системного загрузчика. Оказалось, что загрузка динамических библиотек занимает очень много времени по сравнению с другими этапами. Конечно, с нашим кодом тоже не все было идеально, но, пожалуй, это частные особенности отдельного приложения и не всем будет интересно о них читать. А вот борьба с динамическими библиотеками — общая тема для всех разработчиков, использующих Swift. Именно об этой проблеме и пойдет речь.
Вы выбрали хелпдеск, уговорили гендира на бюджет, служба безопасности разрешила работать в облаке, а юристы, наконец, согласовали договор. Все бюрократичские хлопоты позади, хелпдеск ваш! Что дальше? А дальше самое интересное — внедрение. Настроить все так, чтобы хелпдеск помог компании улучшить обслуживание, а не остался графой в расходах. Мы подготовили небольшую шпаргалку, которая упростит вам жизнь при внедрении хелпдеска. Смотрите наш чек-лист, чтобы ничего не забыть. Читать дальше ->
Сегодня поговорим об управлении ИТ-услугами (ITSM) и специализированных решениях, автоматизирующих эти задачи. Существует множество систем, которые помогают организовывать, выполнять и контролировать ИТ-процессы, но мы остановимся на конкретной ITSM-системе — ServiceNow. Именно это решение мы предлагаем своим клиентам в собственной облачной платформе Техносерв Cloud. В статье мы расскажем, как с помощью ServiceNow быстро и без привлечения целого штата айтишников настроить сервис деск для всей компании.
Те, кто работает с TCP-сокетами, знают что сокет может работать в блокирующем или неблокирующем (nonblocking) режиме. Windows-сокеты, после создания, находятся в блокирующем режиме, но их можно перевести в неблокирующий функцией ioctlsocket().
При работе над одним проектом у меня появилась задача определить, в каком режиме работает сокет, предоставленный мне DLL-функцией. Т.е. кроме самого сокета, у меня никакой информации не было и приходили они в непредсказуемом режиме.
Под *nix blocking-режим без проблем определяется вызовом функции fcntl(), но под WinSock2 ничего подобного не обнаружилось, и на форумах ничего кроме «Windows does not offer any way to query whether a socket is currently set to blocking or non-blocking» никто не ответил.
Вы смотрите на код и не можете понять — почему! Почему он делает нечто неожиданное, и в общем-то, если не близится дедлайн, интересное. Однако от всех этих неожиданностей, в любом случае, надо избавляться.
Прежде чем вы, бросив всё остальное, кинетесь складывать в кучу найденные где-то строчки программ, которые, вроде бы, способны решить вашу задачу, ответьте пожалуйста на три вопроса:
Выполнение каких действий вы ожидаете от своей программы?
Почему вы ожидаете этого от программы?
Делает ли программа то, что вы от неё ожидаете?
Если вы не можете ответить на первых два вопроса — желаю удачи в копипасте, но, если вы знаете — что вы ожидаете от кода и почему — существуют инструменты, которые способны помочь вам понять, делает ли код то, чего от него ждут. Читать дальше ->
В статье я поделюсь своим опытом автоматизации всего процесса разработки приложения Symfony с нуля от настройки инфраструктуры до деплоя в production. От development- и до production-окружения для запуска приложения будет использоваться docker-compose, а все процедуры непрерывной интеграции/внедрения будут запускаться через GitLab CI/CD Pipelines в docker-контейнерах.
Подразумевается, что вы знакомы с docker и docker-compose. Если нет или вы не знаете как его установить, я подготовил инструкцию по подготовке локального окружения разработчика. Фактически, для работы над приложением потребуется только Docker, VirtualBox и, опционально, Yarn.
Проекты внедрения CRM проваливаются — это есть за рубежом, это есть в России. Причин много, но самая главная — стремление заказчика перепрыгнуть все ступени и получить одну кнопку «Рррраз и заработало». При таком подходе единственное, что получается хорошо, — это собрать все грабли на пути к автоматизации бизнеса. А это затраты, нервы, увольнения, простой бизнеса…
Мы подготовили, пожалуй, самую подробную схему и инструкцию по внедрению CRM-системы в компании. Она призвана помочь бизнесу любого размера внедрить корпоративное ПО правильно, в кратчайшие сроки и без потерь. В общем, цивилизованно и профессионально. Мы за правильные лестницы!
Когда полез не с той стороны: соблюдайте технику безопасности при внедрении CRM-систем Читать дальше ->
Реакция на первую статью была очень сильной.
Во-первых, на неё отреагировал ДИТ. Их представитель появился в комментариях, а затем ответ на статью дал руководитель ДИТ.
Во-вторых, на нее отреагировал интернет. Большое количество СМИ рассказали об этой истории своим читателям.
В этой статье будет разбор ответа ДИТ, парочка «ужастиков» со стороны ДИТ, раскрытие деятельности ООО «Альтарикс» и 1000 отзывов от детей и родителей.
И да, у меня хорошие новости! Заявление в ФАС подано! Читать дальше ->
Техника автоматического выбора нужного тайла из тайловой карты.
Сначала эта статья была ответом на вопрос на TIGSource, но мне показалось, что стоит его немного расширить и опубликовать отдельно.
Задача: мы сгенерировали красивый уровень платформера и хотим иметь возможность автоматически располагать тайлы на нём с учётом соседей, чтобы они выглядели правильно.
Тайлы, учитывающие своих соседей
Тайлы в Super Mario не учитывают своих соседей: каменный блок всегда выглядит одинаково, и как отдельный фрагмент, и как часть стены.
Это вполне подходит для многих игр, но при создании более гармоничного дизайна может казаться неестественным. Тайлы, учитывающие своих соседей, решают эту проблему, сопоставляя свой внешний вид с соседними тайлами. Читать дальше ->
Кто помнит Tetris 2 на Спектруме? Там были куча уровней, возможность играть вдвоём и классная музыка.
Недавно мы сделали 8-битный компьютер для несложных игр, но никаких звуковых возможностей в нём не предусмотрели. И вот захотелось добавить туда какую-нибудь 8-битную музыку. Мне вспомнилась именно мелодия из Tetris 2 (много за ним часов проведено), поэтому я стал с ней ковыряться.
Процессор ATmega328P в нашем компьютере большую часть времени занят отрисовкой изображения, поэтому времени на синтезирование нормальной музыки совсем нет. Значит нам понадобится звуковой процессор YM2149F (он же AY-3-8910), такой же как в ZX Spectrum и других компьютерах. Читать дальше ->
Несмотря на то, что мы активно работаем с Python и Go, всё же существенная часть нашего серверного кода написана на PHP. Поэтому мы внимательно следим за всеми нововведениями языка. Прошло меньше года после релиза предыдущей минорной версии, и вот уже последний бета-релиз запланирован на 17 августа. Его ещё не рекомендуется использовать в production, но уже можно скачать docker-образ. Пора разбираться, что изменилось в новой версии языка.
В рамках проходящего в Кёльне с 14 августа второго ReactOS-хакфеста было запланировано несколько выступлений разработчиков проекта с докладами. Первым выступил Колин Финк и рассказал о новом способе теcтирования видеокарт в ReactOS.
Колин собрал сервер для тестовых нужд, в котором воплощена идея использования реальной видеокарты в виртуальной машине. Этот способ упрощает сбор отладочной информации и позволят изолировать проблемы, связанные с работой настоящей видеокарты от других сопутствующих проблем на реальном оборудовании.
Кроме того, данный способ открывает возможности для удаленного тестирования и отладки физических устройств разработчикам из любой точки Мира. Более того, теперь тестирование ReactOS с реальными видеокартами будет проходить регулярно и автоматизировано.
С недавнего времени пользователям Visa QIWI Кошелька доступны новые методы API. Под катом: что это за API, зачем мы его открыли и почему стоит начать им пользоваться уже сейчас.
Одномерная линейная регрессия — один из самых простых регрессионных методов (и вообще один из самых простых методов машинного обучения), который позволяет описывать линейную зависимость наблюдаемой величины от одного из признаков. В общем случае в задачах машинного обучения приходится сталкиваться с большим количеством различных признаков; одномерная линейная регрессия в таком случае выбирает тот из них, который позволяет добиться наилучшей корреляции с целевой функцией.
В предыдущем посте из этой серии мы обсудили точность вычислений средних и ковариаций, а также познакомились с методом Уэлфорда, который во многих случаях позволяет избежать вычислительных погрешностей в этих задачах. Сегодня мы рассмотрим практическое применение метода Уэлфорда в задаче одномерной линейной регрессии.
Initial Coin Offering или ICO — это процесс выпуска каким-либо проектом в виде криптовалюты специальных купонов или токенов, которыми можно будет оплатить в будущем услуги компании. Рынок ICO активно развивается, и для связанных со сферой блокчейна компаний этот инструмент привлечения капитала уже приносит больше денег, чем вложения венчурных инвесторов.
Самое время внимательнее присмотреться к самым интересным проектам, которые привлекают средства с помощью ICO этим летом. Читать дальше ->
Если вы много занимаетесь отладкой приложений под Windows — вы, возможно, слышали о таком замечательном механизме, как Image File Execution Options (IFEO). Одна из предоставляемых им возможностей позволяет отлаживать приложение в условиях, более приближенных к боевым. Записав в нужное место в реестре специальный ключик мы можем вместо программы автоматически запускать её отладчик, позволяя ему делать свои отладочные дела. Однако кто сказал, что этот механизм (фактически — перехвата запуска чего угодно) можно использовать только в подобных целях? Эта статья вовсе не об использовании вещей по назначению.
Под катом рассказ о том, как я попытался выжать побольше из этого механизма в своих добрых целях, и какие подводные камни мне встретились на пути. А у меня тут хорошие, отборные камни.