Search
Write a publication
Pull to refresh
18
0
Иван @sompylasar

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

Send message

Ресайз картинок в браузере. Все очень плохо

Reading time10 min
Views105K
Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

function resize(img, w, h) {
  var canvas = document.createElement('canvas');
  canvas.width = w;
  canvas.height = h;
  canvas.getContext('2d').drawImage(img, 0, 0, w, h);
  return canvas;
}

Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

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

There is no silver bullet, или как мы от водопада до Канбана через скрамовые аджайлы дошли

Reading time5 min
Views13K
В данной статье я бы хотел поделиться опытом использования разных методик управления разработкой (Waterfall, Scrum, Kanban) в компании Acronis и рассказать, чем был обусловлен выбор той или иной методики или практики.

Для начала пара вводных слов. Цикл разработки продукта у нас в Acronis, как правило, длится от полугода до года. В разработке принимает участие команда из 40-45 человек. Сам продукт является системным приложением, а основная разработка идет на C++. Важный момент: продукт должен быть выпущен точно в срок не позднее фиксированного момента времени (да-да, и такое бывает).

Последнее детище нашей компании – ATI, в миру известный как Acronis True Image. Этот продукт довольно давно в разработке – настолько, что мы успели написать о нем на Хабр не одну, не две и даже не три статьи (четвертую найдите сами). Команда разработчиков ATI достаточно внушительная, а потому у нас накопился большой опыт управления подобными проектами.

Итак, когда-то очень давно у нас была классическая «водопадная» модель разработки:
Требования -> Дизайн -> Реализация -> Тестирование и стабилизация -> Поддержка.
Читать дальше →

10 отвратительных практик найма, или Как распугать лучших соискателей

Reading time6 min
Views34K
Переведено в Alconost.

Если бы вы были главой компании и вам понадобилось бы нанять пару человек, как бы вы подошли к этому? Вы, конечно же, начнете с тщательного обдумывания, что же вам нужно от новых сотрудников. И составите дружественное, привлекательное объявление о вакансии.

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

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

Ход ваших мыслей будет где-то таким: «Все это люди. Они потратили свое время, чтобы откликнуться на мое предложение, так что я могу хотя бы попросить своих коллег выделить пару секунд в день, чтобы отметить эти усилия. Для нашей компании нет ничего ценнее друзей и фанов. Мы не хотим наживать врагов.

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

Это очень серьезно, и к каждому, кто ответил на объявление, я буду относиться как к ценному партнеру — ведь именно таков каждый из них!»

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

Человечность будет стержнем вашего процесса приема на работу, ведь вы же человек, к тому же умный и достойный. Но почему обычно все происходит не так? Ниже — десять глупых и саморазрушительных процессов при найме, которые ежедневно отпугивают от работодателей лучших соискателей.
Читать дальше →

Общение скриптов из разных вкладок браузера

Reading time3 min
Views19K
Мне захотелось наладить общение скриптов из разных вкладок браузера. Будущий API SharedWorker позволяет передавать данные между разными iframe и даже вкладками или окнами. В Chrome он работает давно, в Firefox – недавно, а в IE и Safari его не видать. Но существует кроссбраузерная альтернатива, о которой мало кто знает. Давайте разбираться.

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

Konva.js — HTML5 2d canvas framework

Reading time5 min
Views57K
image

Приветствую. Представляю сообществу проект Konva.js.

Konva.js — это фреймворк, который позволяет работать c canvas 2d в объектном стиле с поддержкой событий.

Кратко список особенностей выглядит так:
  1. Объектное API
  2. Вложенные объекты и «всплытие» событий
  3. Поддержка нескольких слоёв (нескольких canvas элементов)
  4. Кэширование объектов
  5. Поддержка анимаций
  6. Настраиваемый drag&drop
  7. Фильтры
  8. Готовые к использованию объекты, включая прямоугольник, круг, изображение, текст, линия, SVG путь, ..
  9. Простое создание собственных фигур
  10. Событийная архитектура, которая позволяет разработчикам подписываться на события изменений аттрибутов, отрисовки, и так далее
  11. Сериализация и десериализация
  12. Продвинутый поиск с помощью селекторов stage.get('#foo') и layer.get('.bar')
  13. Десктоп и мобильные события
  14. Встроенная подержка HDPI устройств
  15. и еще много разного


Далее подробней рассмотрим возможности фреймворка с примерами кода.
Читать дальше →

Дизайнер воюет с идиотскими знаками парковки в США

Reading time2 min
Views26K

Луи Си Кей пытается понять, сейчас время до полуночи или после полуночи. Вроде как до, но в то же время и после...

Когда прошлой зимой Никки Силентен (Nikki Sylianteng) получила штраф за парковку в неположенном месте $95, она поняла, что здесь не просто штраф. Здесь проблема дизайна. Вскоре после этого она открыла сайт toparkornottopark.com.

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

Wi-Fi: неочевидные нюансы (на примере домашней сети)

Reading time14 min
Views1.4M
Сейчас многие покупают точки доступа 802.11n, но хороших скоростей достичь удается не всем. В этом посте поговорим о не очень очевидных мелких нюансах, которые могут ощутимо улучшить (или ухудшить) работу Wi-Fi. Всё описанное ниже применимо как к домашним Wi-Fi-роутерам со стандартными и продвинутыми (DD-WRT & Co.) прошивками, так и к корпоративным железкам и сетям. Поэтому, в качестве примера возьмем «домашнюю» тему, как более родную и близкую к телу. Ибо даже самые администые из админов и инженеристые из инженеров живут в многоквартирных домах (или поселках с достаточной плотностью соседей), и всем хочется быстрого и надежного Wi-Fi.
[!!]: после замечаний касательно публикации первой части привожу текст целиком. Если вы читали первую часть — продолжайте отсюда.
Читать дальше →

webpack: 7 бед — один ответ

Reading time12 min
Views180K
После моего недавнего выступления на MoscowJS #17 с одноимённым докладом у многих возник интерес к этому инструменту. В рамках 11-го выпуска RadioJS, Миша Башкиров bashmish рассказал, что решился попробовать его в своём новом проекте, об успешном опыте и множестве положительных эмоций. Но были озвучены вопросы и возникла дискуссия, в результате которой я решил написать эту статью, чтобы раскрыть основные тезисы с доклада и рассказать о том, что тогда не успел.
Статья ориентирована, как на профессионалов, так и на тех, кто с похожими технологиями ещё не сталкивался.
Итак, начнём.
Читать дальше →

«Never say never» или Работаем с таймзонами правильно

Reading time9 min
Views78K
Эта статья рассказывает о проблемах, которые поджидают программиста, работающего с часовыми поясами. В теории, вроде, всё хорошо, просто и понятно, но жизнь — штука сложная, и на практике, порой, возникают совершенно неожиданные ситуации.

TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!

Итак, все кругом твердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?

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

Микросервисы (Microservices)

Reading time22 min
Views711K
От переводчика: некоторые скорее всего уже читали этот титанический труд от Мартина Фаулера и его коллеги Джеймса Льюиса, но я все же решил сделать перевод этой статьи. Тренд микросервисов набирает обороты в мире enterprise разработки, и эта статья является ценнейшим источником знаний, по сути выжимкой существующего опыта работы с ними.

Термин «Microservice Architecture» получил распространение в последние несколько лет как описание способа дизайна приложений в виде набора независимо развертываемых сервисов. В то время как нет точного описания этого архитектурного стиля, существует некий общий набор характеристик: организация сервисов вокруг бизнес-потребностей, автоматическое развертывание, перенос логики от шины сообщений к приемникам (endpoints) и децентрализованный контроль над языками и данными.
Читать дальше →

Философия программирования 4 — Технология «Шапито»

Reading time8 min
Views30K
Представьте себе конвейер с программистами: сели люди за одним круглым столом, один огромный монитор во всю стену, и у каждого ещё свой обычный.

Первый: тоном капитана звездолёта, — нужна функция connectToDB() в главном файле.
Второй: — открываю — открывает нужный файл, находит функцию.
Первый: — что здесь происходит?
Третий: — запускаю — ставит брейкпойнт, запускает приложение, в момент останова произносит: — dbinstance в порядке — выводит значение на экран --, remotePort равен 8999, — это значение тоже видно на экране.
Первый: — странно, надо бы профилировать этот вызов.
Третий: — ок — диктует четвёртому — новая строка 123 console.time(), 125 console.timeEnd()
Четвёртый: набирает, — готово.
Читать дальше →

MYO: как мы делали бумажный самолётик на радиоуправлении

Reading time3 min
Views36K


Кирилл Белышев, программист команды разработки десктопных и мобильных приложений (@kirill09): У нас в компании работает очень много гиков. Очень много и очень гиков. Естественно, мои коллеги следят за новостями hitech-индустрии и частенько становятся одними из первых обладателей всевозможных интересных гаджетов. Ну или делают их сами. В качестве примеров навскидку можно привести робота Romo, сигнализатор неполадок в проекте и домашний метеоцентр.

Некоторое время назад я тоже наткнулся на один замечательный проект: ребята хотели сделать браслет, с помощью которого можно дистанционно управлять компьютером и радиомоделями. Устройство называлось Myo.



Идея меня захватила, заказ я разместил одним из первых, а затем потянулось длительное ожидание. И вот недавно я получил на почте заветную посылку. Поигравшись с устройством, я рассказал о нём коллегам. Эта тема их очень заинтересовала — мы даже решили снять небольшое видео. О результатах наших опытов с устройством беспроводного управления я и хочу рассказать в этой статье.
Читать дальше →

HTTP/2 (h2-14, spdy4) в Google Chrome 40

Reading time1 min
Views25K
Свершилось!
Открываем: chrome://net-internals/#spdy, и смотрим.

image

Очевидно (?), связано с тем, что на дворе февраль, а как известно, as an RFC, HTTP/2 должен был стать как раз в феврале.

Пока заметил только на некоторых сервисах гугла, таких как mail.google.com и, вот пока клацал по клавишам и главная с остальными сервисами подтянулись.

Думается, теперь развитие пойдет чуть быстрее.
Читать дальше →

Анонс React Native

Reading time3 min
Views76K


Не так давно в Калифронии прошла конференция по React.js (доклады с этой конференции уже размещены на канале facebook разработчиков в youtube). Доклады, как не сложно догадаться, были о различных возможностях React.js и применении их в реальной жизни, но два доклада презентовали исключительно новую технологию, бета-версия которой в данный момент доступна только для разработчиков, посетивших мероприятие. Если вы уже посмотрели доклады, то понимаете, что речь идет о React Native. В данной статье я хочу сделать краткий обзор того, что нас ждёт в будущем с этой технологией и как изменится наше представление о создании мобильных приложений с использованием JavaScript.
Читать дальше →

Интерактивный глобус — SVG versus Canvas

Reading time6 min
Views52K
Доброго времени суток, уважаемый читатель! В прошлый раз мы изучали процесс создания интерактивной карты-хороплета, теперь предлагаю немного усложнить задачу и перейти к трёхмерной модели Земли, именуемой в народе глобусом. Глобус делать будем двух видов: SVG версия и Canvas версия. В обоих случаях будем использовать JavaScript библиотеку d3.js. У каждого варианта свои преимущества. В моём исполнении Голубая планета выглядит следующим образом:

Планета Земля

А как создать свой собственный Мир с материками и океанами можно узнать под катом.
Читать дальше →

58 признаков хорошего интерфейса

Reading time16 min
Views382K
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.

1 Один столбец вместо нескольких


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

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

imarker — коммерческая СОРМ-like веб-аналитика уже у вашего провайдера

Reading time4 min
Views94K
Используете провайдера Акадо, ТТК, Ростелеком, Эр-Телеком, NetByNet или qwerty? Имеете веб-сайт, и видели запросы с IP 92.242.35.54 и User-Agent WebIndex? Возможно, вам будет интересно узнать больше о вашем провайдере и о компании imarker.

О чем речь-то?

Вышеперечисленные провайдеры подключены к сервису «таргетированной рекламы» imarker, которому они зеркалируют исходящий от пользователя трафик. Зеркалируют не только саму ссылку, но и, как минимум, все заголовки до удаленного HTTP-сервера. Как они сами заявляют, у них обрабатывается 38 млн. абонентов ISP.

image

Как только они получают трафик от пользователя, они переходят по ссылке, по которой только что перешел пользователь, и, вероятно, анализируют данные со страницы. Переход происходит буквально моментально (как правило, до 0.5 секунды), информация кешируется примерно на сутки.
Читать дальше →

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Reading time12 min
Views236K
последняя редакция статьи доступна на сайте makeloft.xyz

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

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

image

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

Тренды JavaScript на 2015 год

Reading time19 min
Views112K


Всем привет! Мы как-то задумали сделать легкий вводный курс на тему JavaScript и разработки приложений (он, кстати, скоро будет опубликован): и, пока я собирал материалы к нему, как-то само собой выяснилось, что есть довольно много вещей, которые, так сказать, находятся на переднем крае развития JavaScript. Отсюда родилась идея сделать отдельную обзорную статью в жанре «X трендов на год Y по технологии Z».

Многие из тех, вещей, которые я буду описывать, можно попробовать в той или иной степени уже сегодня (собственно, иначе я бы говорил о космическом будущем, а не о трендах). В этом есть несомненный плюс: если у вас будет свободное время (а на праздниках его обычно много), вам будет чем заняться. Да и, в целом, хорошо начинать новый год с расширения своих горизонтов!
Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity