Search
Write a publication
Pull to refresh
0
0
Vasiliy @JMS

Пользователь

Send message

Дизассемблируй это: «Лаборатория Касперского» объявляет старт зимнего конкурса CrackMe

Reading time1 min
Views13K
Ломать не строить. Иногда ломать — дело не менее сложное и благородное, чем строить.

В январе «Лаборатория Касперского» открывает свой сезон зимних айтишных видов спорта и запускает конкурс CrackMe. Скачайте три файла и разреверсите их, чтобы вычислить ключ, который генерируется в зависимости от введенного адреса email. Полученный ключ необходимо зарегистрировать на сайте.

image

Задания пронумерованы в порядке повышения сложности, поэтому советуем решать их в той же очередности.
Читать дальше →

Лампы уже не те

Reading time3 min
Views67K
Проект lamptest.ru существует три года. Недавно мне начали поступать сообщения от тех, кто недавно купил лампы Navigator, Gauss, Wolta, что несмотря на тот же артикул и такой же штрихкод, это явно не те лампы, которые я тестировал в 2014 году.

Я протестировал лампы Navigator 2016 года выпуска и сравнил их со старыми лампами.


Оказалось, что для того, чтобы сделать лампы более дешёвыми, производители пошли на существенные упрощения и ухудшения.
Читать дальше →

Введение в Akka.NET

Reading time6 min
Views43K

Что такое Akka?


Масштабируемая, распределенная обработка транзакций в реальном времени


Мы верим, что написание корректных, параллельных, отказоустойчивых и масштабируемых приложений это сложно.

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

На Code.org у детей не сохранилась домашняя работа: кончился 32-битный индекс

Reading time3 min
Views22K

Задание из вступительного курса «Введение в информатику» на платформе Code Studio

Сайт для обучения программированию Code.org попал в неловкую ситуацию. Из-за «технических проблем» на платформе Code Studio утром 20 января с 9:19 до 10:33 PST работы школьников по программированию — весь написанный код и другие действия на сайте — не удалось сохранить.

Технический директор образовательного сайта Джереми Стоун (Jeremy Stone) оперативно опубликовал объяснение произошедшего: «До нынешнего времени мы хранили работы по программированию учеников в таблице с 32-битным индексом, — написал он. — Эта база данных может хранить только 4 млрд строк информации об активности. Мы не осознавали, что приближаемся к этому лимиту, и таблица заполнилась».
Читать дальше →

Async/await это шаг назад для JavaScript'a?

Reading time5 min
Views44K


В конце 2015 года я услышал об этой паре ключевых слов, которые ворвались в мир JavaScript, чтобы спасти нас от promise chain hell, который, в свою очередь, должен был спасти нас от callback hell. Давайте посмотрим несколько примеров, чтобы понять, как мы дошли до async/await.
Читать дальше →

Расширения Entity Framework 6, о которых вы могли и не знать

Reading time10 min
Views26K

Многие программисты делают записи, описывают трудности, красивые и не очень решения, с которыми приходится сталкиваться по долгу службы. Это может быть собственный технический блог, рабочая вики, или даже обычный блокнот — суть одна. Постепенно, из маленьких Evernote-заметок может вырасти целая статья на Хабр. Но время идет, перемена места работы сулит изменения в стеке разработки, да и технологии не стоят на месте (кстати, EF Core уже пару месяцев как в версии 1.1). С другой стороны, Entity Framework 6 был и остается "рабочей лошадкой" для доступа к данным в корпоративных приложениях на стеке .net, не в последнюю очередь благодаря своей стабильности, низкому порогу входа и широкой известности. Поэтому, я надеюсь, статья всё еще окажется кому-то полезной.


Содержание:


  1. Database First без EDMX
  2. Работа с отсоединенными графами
  3. Модификация SQL. Добавление табличных указаний
  4. Кэширование данных за пределами времени жизни DbContext
  5. Retry при ошибках от SQL Server
  6. Подменяем DbContext, изолируемся от реальной БД
  7. Быстрая вставка
Читать дальше →

Куда переехать с Parse Push?

Reading time2 min
Views12K
Сервис Parse, позволявший, в числе прочего, легко запрограммировать отправку пуш-уведомлений, закрывается 28 января; осталось 8 дней. Самое время переехать (это шутка, на самом деле нужно было переехать уже давно).

Мы знаем два хороших сервиса на замену:
Читать дальше →

Чистый javascript. Объекты и структуры данных. Асинхронность. Обработка ошибок

Reading time4 min
Views23K
Читать дальше →

Пишем универсальный UICollectionViewLayout

Reading time4 min
Views7.3K
UICollectionView может иметь практически любое расположение элементов. Элементы могут иметь как фиксированные размеры, так и динамические. В данной публикации внимание будет уделено только тем UICollectionViewLayout, размеры элементов которых фиксированы и задаются определенным алгоритмом (типичный пример — расположение иконок на экране Home вашего iPhone). Так же будет сделана попытка описать подход к формированию единого UICollectionViewLayout.

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

image

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

Карточная игра на JavaScript и Canvas, или персональный Лас-Вегас. Часть 1

Reading time11 min
Views32K
Однажды на досуге я придумал карточную игру и, недолго думая, создал ее электронную версию. А потом добавил еще четыре игры, включая покер Техасский Холдем. А чтобы было еще интереснее, я встроил некое подобие прогресса: выигрываешь в одной игре – открывается новая. Запланировал я разместить свою игру в двух социальных сетях и в магазине Windows Store как html5-js приложение. А также, возможно, создать еще сборки под Android и iOs. Можно играть чрез сервер с другими людьми, а можно – офф-лайн с ИИ.

Для работы я, как всегда, не использовал никакие сторонние движки и библиотеки, даже jQuery мне не понадобилось. Только функции ванильного JavaScript, включая средства работы с холстом (canvas). Холст в игре – основа для вывода всей игровой графики. В WebGL, на этот раз, не было необходимости, поэтому зоопарк поддерживаемых браузеров расширился. Средой программирования, как обычно, стал продвинутый блокнот. Игра получилась объемом 3,8 Мб, из которых 3 Мб — это семь карт спрайтов в формате png. Запускается игра по html-файлу. Сервер на PHP. В случае выбора однопользовательской игры (то есть, с ИИ), запросы к серверу не отправляются и все расчеты ведутся на клиенте. Диздок не писал – он не нужен хипстерам.


Далее – занимательная геометрия и программирование, а во второй части будет рассказ о размещении игры в социальных сетях и в магазине.
Читать дальше →

Простая и ужасающая история о шифровании

Reading time4 min
Views36K
Это будет история об открытом ПО, доверии и ответственности.

Задача и её решение


Как-то раз мне понадобилось добавить в своё приложение на Ruby симметричное шифрование. Алгоритм AES показался мне хорошим выбором и я решил найти библиотеку шифрования с поддержкой этого алгоритма. Поскольку я писал на Ruby, то сделал то же самое, что сделал бы на моём месте практически каждый программист на Ruby — пошел в Google и написал запрос «ruby gem aes». Конечно же, Google первой строкой предложил мне gem, называющийся (вот неожиданность!) — «aes». Он был очень прост в использовании:

require 'aes'

message = "Super secret message"
key = "password"

encrypted = AES.encrypt(message, key)    # RZhMg/RzyTXK4QKOJDhGJg==$BYAvRONIsfKjX+uYiZ8TCsW7C2Ug9fH7cfRG9mbvx9o=
decrypted = AES.decrypt(encrypted, key)  # Super secret message

Если вы при расшифровке использовали неверный пароль, gem выбрасывал ошибку:

decrypted = AES.decrypt(encrypted, "Some other password") #=> aes.rb:76:in `final': bad decrypt (OpenSSL::Cipher::CipherError)

Ну, отлично. Что же могло пойти не так?
Читать дальше →

Мой домашний дата-центр

Reading time5 min
Views62K
Это не очередная статья о том, как какой-то «эконом» решил поставить сервер у себя в квартире и разместить веб-сайт дома, потому, что он ошибочно подумал, что это будет дешевле, чем в дата-центре. Без резервирования питания и каналов, без создания нужной климатической среды для эксплуатации серверного оборудования. С огромными счетами за электричество и недовольным провайдером Интернет, который не подписывался поставлять канал за «100 рублей» для сервера или стойки серверов :)

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



И первый из них и, пожалуй, самый достойный — домашний дата-центр проекта ve2cuy, организованный канадским IT-специалистом Alain Boundreault дома, не столько с целью экономии, сколько с целью воплощения различных custom-built решений, улучшения собственных навыков, ну и просто потому, что ему это было интересно и он это мог. Мое мнение — очень круто, неплохой workshop, не всегда подобные инфраструктуры могут быть настолько продуманы в реальных ЦОДах. И в добавок, это действительно экономические эффективное решение, полноценно удовлетворяющее потребности его создателя. Давайте с ним познакомимся? Alain Boundreault уже стал известным на YouTube и недавно выложил видео-экскурсию по своему домашнему дата-центру, оцените его работу сами:

VCL, избавляемся от мерцания, раз и навсегда

Reading time34 min
Views46K

Delphi и C++Builder разработчики, использующие VCL не по наслышке знают о вездесущей проблеме мерцания контролов. Мерцание происходит при перерисовке, вследствие того, что сначала отрисовывается фон компонента, и только потом сам компонент.


И если в случае с наследниками от TWinControl частичным решением проблемы является установка свойства DoubleBuffered в True, что заставляет контрол отрисовываться в буфере (однако DoubleBuffered работает тоже не идеально, к прим.: контрол перестает быть прозрачным), то в случае с TGraphicControl решение с DoubleBuffered просто невозможно, из-за отсутствия у TGraphicControl окна, установка же DoubleBuffered в True у родителя не помогает, из-за того что отрисовка вложенных TGraphicControl-ов происходит уже после прорисовки родителя в буфере.


Обычно остается только одно — смириться с мерцанием, и максимально упростить отрисовку для минимизации эффекта, или использовать по возможности исключительно TWinControl-ы, что не всегда возможно и удобно.


Однажды намучившись с мерцанием, я не выдержал и решил решить эту проблему, раз и навсегда!


Как мне удалось решить проблему?

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

Ревью кода в распределенной команде

Reading time12 min
Views42K


Здесь описаны мои исследования, как сделать ревизию кода в команде более приятным занятием, которое может дать новый опыт всем участникам. У нас полностью географически распределённая команда, все коммуникации выполняются через интернет, и зачастую асинхронно. Мы используем Trello для описания возможностей продуктов, поодиночке создаём код, отправляем в GitHub пулл-реквесты, а также пользуемся встроенной в GitHub функцией их ревью. Это отличается от просмотра кода лицом к лицу в офисе и даже по видеочату.

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

Как проектируют ненастоящие программисты

Reading time8 min
Views71K
Настоящие программисты — это облака, big data, high load… А у нас — практически DIY. 2 установки — уже тиражирование, 100 штук — производство… Но зато атомные ледоколы, маневровые локомотивы, трактора, шлюзы, мосты, опускающиеся вниз от лишнего асфальта, беспилотники размером в дом, 50 человек персонала на цех длиной больше двух километров… и надежность, надежность, надежность… И пяток гендиректоров в костюмах прямо на поле при демонстрации системы на тракторе…

image
Обычное окончание отладки — убираем антенны с путеправильной машины

Итак… пришла просьба от коллег — написать ТКП (технико-коммерческое предложение) на хитрый GPS-трекер. И комментарии, что большие и настоящие делать отказались.
Читать дальше →

iOS: работа с галереей (Photos framework)

Reading time3 min
Views16K
Привет, Хабр! В данной статье решил написать о том, как работать с галереей с помощью фреймворка Photos. В этой статье рассмотрим базовые возможности фреймворка: создание альбома, сохранение, удаление и загрузку фото. Если будут положительные отзывы, то в следующих частях напишу про работу с live фото, видео, наложение фильтров, кэш и прочие функции.
Читать дальше →

Что-то не то с тестированием в .NET (Java и т.д.)

Reading time4 min
Views13K
Все хотят писать тесты, но мало кто это делает. На мой взгляд причина в существующих рекомендациях и практиках. Большинство усилий при тестировании бизнес-приложений прикладывается к работе с базой данных, это важная часть системы, которая очень тесно связана с основным кодом. Есть два принципиально разных подхода: абстрагировать логику от базы данных или подготавливать реальную базу для каждого теста.
Читать дальше →

Насколько удобным может быть API для рисования в iOS?

Reading time4 min
Views7.9K

Здравствуйте, меня зовут Виктор, я работаю в компании Exyte. Недавно мы выложили в open source нашу внутреннюю разработку — библиотеку для работы с векторной графикой и ее анимации Macaw. Я хочу поделиться впечатлениями от применения ее в реальном проекте и рассказать о ее преимуществах над нативным API.


Как разработчикам, нам часто приходится создавать нестандартные контролы и повторять одни и те же рутинные действия даже для простых эффектов:


  • Отнаследоваться от UIView, чтобы переопределить drawRect
  • Описать "сцену" используя устаревший Core Graphics API

Давайте попробуем создать нестандартный контрол и используем его как пример:


ControlImage


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

Liveedu.tv — стриминговый сервис для программистов и дизайнеров

Reading time3 min
Views16K
LiveEdu.tv — это стриминговый сервис предназначенный, в первую очередь, для программистов, который вскоре станет доступен и для других специалистов, в том числе дизайнеров и инженеров.

LiveEdu.tv представляет собой интерактивную платформу, где вы можете наблюдать за работами профессионалов, уроками и конференциями в сфере программирования, а также дизайна в режиме реального времени.



Вдохновителем идеи стал Майкл Гарбейд в конце 2014 года, а сама идея пришла во время стримов игр на twitch и параллельной разработкой программного обеспечения в VirtualBox Linux.
Читать дальше →

AppCode 2016.3: поддержка Swift 3, новые настройки форматирования, улучшения быстродействия и многое другое

Reading time3 min
Views8.1K
Привет, Хабр!

Совсем недавно вышел AppCode 2016.3, и в этом посте мы расскажем о самых интересных изменениях в нем.


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

Information

Rating
Does not participate
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity