Pull to refresh
0
0
Денис Минаев @n000b

User

Send message

AllcountJS: Делаем систему для места продажи (POS)

Reading time12 min
Views8.9K
Продолжаем знакомство с AllcountJS — фреймворком для быстрой разработки приложений на платформе NodeJS. В этой статье мы рассмотрим пример реализации кастомного интерфейса с использованием AngualrJS и jade, а также некоторые возможности конфигурирования, о которых мы ещё не упоминали.

POS (Point Of Sale) — в прямом смысле точка (место) продажи, но обычно этот термин обозначает рабочее место кассира вместе с торговым оборудованием. Такие терминалы находятся почти в каждом месте где нам что-нибудь продают. И сейчас мы создадим простое приложение, которое позволит вести список товаров с остатками и создавать записи о продажах.

POS main UI

Как обычно, на результат можно посмотреть в демо-галерее.
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments2

Анализ изменения цен в российских интернет-магазинах

Reading time3 min
Views48K

В последние пару лет меня достаточно сильно интересовал вопрос ценообразования в российских интернет-магазинах. Каждый раз при заявлении интернет-магазина о большой скидке в душу закрадывается сомнение… Действительно ли такая большая скидка? Была ли реальна цена которая сейчас зачеркнута?
Резкие изменения курса доллара в конце 2014г. подлили масла в огонь. Очень захотелось получить ответ на вопрос как зависят цены от курса доллара в реальности.
В итоге, я решил покончить с этими вопросами и собрать историю изменения цен по российским интернет-магазинам. По катом результаты работы + несколько интересных закономерностей.
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments62

Параллельный парсинг большого количества HTML-страниц с помощью Apache Ignite (GridGain) в 200 строк кода

Reading time12 min
Views31K
Периодически у меня появляются задачи обработать большое количество файлов. Обычно это конвертирование из одного формата в другой: XSLT-трансформация, парсинг, конвертация картинок или видео. Для решения этих проблем я приспособил фреймворк GridGain In-Memory Data Fabric. Он дает возможность делать distributed computing, MapReduce, распределенные кэши и очереди, распределенную файловую систему в памяти, перемещение кода к данным, job stealing, ускорители для Hadoop и многие другие модные ныне вещи. И все это легко и под разные операционки. Вы легко можете все это пощупать под виндовс.

Попробую рассказать о своем опыте использования на примере простенькой задачи.
Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments14

Анализ покупательских корзин в ритейле

Reading time7 min
Views19K
Задача № 1 для ритейлера — понять, кто конкретно совершает покупки в магазине, изучить поведение покупателей, выделить типичные модели, и с помощью этих знаний влиять на количество и качество покупок.

Решение возможно, используя такие подходы:
  • анализ данных из программ лояльности и другие формы изучения персон и поведения покупателей;
  • анализ данных о покупках и транзакциях.

Перефразируя второй подход — какие товары покупатель положил в свою корзину?


Читать дальше →
Total votes 16: ↑12 and ↓4+8
Comments4

VPaint: экспериментальный редактор векторной графики

Reading time2 min
Views9.5K
VPaint — экспериментальный редактор векторной графики с поддержкой векторной 2D-анимации. Презентация редактора состоялась сегодня на конференции SIGGRAPH 2015.

В основе редактора лежит технология Vector Animation Complex (VAC), разработанная группой исследователей из Государственного института исследований в информатике и автоматике INRIA (Франция) и университета Британской Колумбии (США). Лучше всего уникальные возможности редактора показаны в демонстрационном видеоролике.


Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments1

Драйвер внешнего оборудования для 1С на примере фискального регистратора Мария-301МТМ

Reading time3 min
Views25K
image
При реализации проектов на 1С зачастую приходится сталкиваться с разного рода устройствами и их сопряжением. Покуда будут существовать устройства на древним RS232 будет необходимость во внешних компонентах такого рода. Как правило с устройством идет документация, которая нередко содержит систему команд и некий драйвер который распространяется «так как есть». Очень часто драйвера «так как они есть» оставляют ожидать лучшего. Я предлагаю немного окунутся в системное программирование и решить для себя сей вопрос раз и навсегда.

Прекрасная статья содержит пример и достаточное описание что к чему, что где менять. Пример компилируется. Для быстрого старта замечательная статья. Подобный пример свободно распространяется фирмой 1С и валяется в куче хлама на диске ИТС. Много раз мелькало в глазах но было заложено на дальнюю полку с ярлыком «обязательно изучить».
Читать дальше →
Total votes 19: ↑11 and ↓8+3
Comments3

Разбор текстов интерфейса на Букинге — как я делал им аудит

Reading time11 min
Views46K
Когда меня развернули на 180 градусов в аэропорту перед полётом в Грецию, я начал звонить в сервисы по билетам и отелю. AWAD, фактически, положил на меня как на клиента – «посмотрите на сайте», «войдите в личный кабинет» и так далее. С другой стороны, Букинг внимательно выслушал, в прямом эфире набрал отель и чётко перенёс моё бронирование, пока я шёл к аэроэкспрессу. Хотя в правилах отеля если что не так – постоялец идёт на хрен. Так я оценил разницу в сервисе.

Но я не про это. Дело в том, что Букинг предложил мне контракт на проверку адекватности перевода их сайта на русский. Сразу покажу, с чего началось:



А вот чем продолжилось:



А теперь расскажу и покажу, что и как с текстами интерфейсов.
Читать дальше →
Total votes 122: ↑118 and ↓4+114
Comments108

Отчёты для NORD POS. Часть 2

Reading time8 min
Views6.7K

Берём jrxml шаблон и устанавливаем в приложение


В первой части я рассказал о том, как подготовить в iReport шаблон отчёта для библиотеки JasperReports. А эта статья посвящена тому, как получившийся шаблон интегрировать непосредственно в приложение NORD POS. И если в первой части программа нужна была только, как источник данных для построения примера отчёта по справочнику товаров, то в данной статье она будет необходима для интеграции отчёта в интерфейс приложения, а также для демонстрации возможностей взаимодействия бизнес логики приложения и элементов шаблона библиотеки JasperReports.



Кроме этого, пришлось разделить статью на две части из-за того, что при подготовки материала я обнаружил ошибку печати отчёта в версии 3.0.1CE. Ошибка возникала из-за неправильного вызова диалога выбора принтера при использовании не стандартного оформления из Swing Look&Feel библиотеки Insubstantial. Ошибка не возникала при использовании темы Metal или оформления в стиле операционной системы. Но, так как в NORD POS по-умолчанию используется нестандартная тема CremeSkin, то для написания этой части необходимо было устранить данный баг и выпустить обновлённую версию NORD POS 3.0.2CE. И именно эту версию мы будем использовать во второй части статьи.
Читать дальше →
Total votes 9: ↑7 and ↓2+5
Comments2

Отчёты для NORD POS. Часть 1

Reading time14 min
Views9.8K

Берём данные, JasperReports и заполняем шаблон в iReport





Эта статья посвящена не столько, как это сделать красиво с точки зрения дизайна, а как с помощью имеющихся средств JasperReports сделать отчёты чёткими для восприятия пользователем и удобными для дальнейшего использования интегратором. Так как JasperReports, это в первую очередь не самостоятельное приложение, а библиотека расширения для программ написанных на Java, то в качестве источника информации для построения отчётов будем использовать базу данных от NORD POS(подробнее об этом моём проекте в отдельной статье). При этом изложенный «под катом» материал, я надеюсь, будет интересен не только пользователям моей POS, но и всем тем, кто хочет больше узнать о мощном инструменте формирования отчётов для своего приложения, а на русском языке материалов посвящённых JasperReports не так и много.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments0

Одностраничный магазин на Phalcon PHP + AngularJS. Работа над ошибками

Reading time9 min
Views39K
image

Введение

Всем привет! Не так давно я написал публикацию «Одностраничный магазин с корзиной на Phalcon + AngularJS + Zurb Foundation», которая имела неоднозначный эффект мягко говоря. А точнее получила много отрицательных комментариев, какие-то были объективные и конструктивные, какие-то нет, и они меня заставили задуматься, почему так произошло, ведь я хотел сделать полезный мануал, который пригодиться мне и другим, начинающим писать на AngularJS.

Исповедь

Да, мануал был полезен для меня, для меня старого, того, кому в 2009 году отказали в работе в местной веб-студии, и он по сей день ни разу ни работал в команде, ни разу не работал на наёмной работе, а полагался только на себя, и главным критерием эффективности реализации проектов был один — главное, что работает. Но это я — старый, после написания той статьи, и множества комментариев, я впервые решил попробовать сделать всё по правилам хорошего тона, хотя бы ради интереса.
Что из этого вышло?
Total votes 51: ↑37 and ↓14+23
Comments55

Видео с доклада Виталия Фридмана «Responsive Web-дизайн: Трюки и уловки»

Reading time1 min
Views34K

Мега интересная лекция от знаменитости в области веб-разработки, основателя и шеф-редактора журнала Smashing Magazine. Мероприятие произошло благодаря Mail.ru. Ключевые темы: UI/UX, проектирование, отзывчивый дизайн, производительность, трюки с SVG. Все это на примере реальных кейсов от The Guardian, BBC и конечно же Smashing Magazine.

От себя хочется добавить, что Smashing Magazine я читаю ежедневно и многое беру от туда для моих подборок. А тут все эти «трендовые постулаты» Perfomance Budget, Mobile First, Atomic Design, Critical Path и др. из первых уст! Еще Фридмана просто интересно слушать. Очень харизматичный спикер с постоянной дружелюбной улыбкой на лице. Рекомендую всем к просмотру.
Total votes 25: ↑24 and ↓1+23
Comments11

Разработка — «Рабочее место кассира» под LINUX. GPL

Reading time5 min
Views26K

Последние новости


Система работает на 15 кассах. Дописывается. git здесь github.com/redeyser/IceCash. почта моя здесь redeyser@gmail.com Видео
www.youtube.com/watch?v=69AF7n6sxDY

Предыстория


Так сложилось, что работаю программистом/админом в розничной торговой сети. Работаю уже два года, до этого никогда не сталкивался с обслуживанием специализированных программ и техники, но разобрался со временем. Особенностью моей организации является то, что вкладываться в нормальную технику начальство не собирается категорически. То есть, модернизацией и близко не пахнет, а вот носиться на замену чего-то, вновь исдохшего приходится частенько. Кроме того, большинство торговых точек не обладают лицензией на установленную ОС Windows XP. На розничных точках стоит одна или две кассы на базе умирающих от старости компьютеров, таких же старых фискальных аппаратов Штрих-М ФРК, различных сканеров штрихкода (COM, USB,Keyboard) и весов METTLER TOLEDO. Из программного обеспечения изначально было только лицензионная (с ключом) 1С v7.7 «ШТРИХ-М Кассир».

Внедряем Linux где это возможно


Помимо обязанностей — следить за кассами, на моих плечах был и офис и удаленный филиал со всеми 1С ками, железом (тоже не новым), серверами. И чего-то я с трудом всё это успевал обслуживать на первых порах. Честно признаться — я юниксофил, потому поспешил с внедрением linux. Постепенно удалось перевести офисных клиентов на Linux, и сразу стало легче дышать, компы перестали зарастать вирусами, оставалось только следить за железом да подбирать и устанавливать нужные программы. Основная работа клиентов продолжалась в Windows, но это был уже терминал на сервере, с ним проще. По возможности сервера я перевел тоже на Linux, оставив только один с windows server 2003.

Читать дальше →
Total votes 82: ↑75 and ↓7+68
Comments68

Тонкости nodejs. Часть I: пресловутый app.js

Reading time5 min
Views42K
Я работаю с node.js более трех лет и за это время успел хорошо познакомиться с платформой, ее сильными и слабыми сторонами. За это время платформа сильно изменилась, как, собственно, и сам javascript. Идея использовать одну среду и на сервере и на клиенте пришлась многим по душе. Еще бы! Это удобно и просто! Но, к сожалению, на практике все оказалось не так радужно, вместе с плюсами платформа впитала в себя и минусы используемого языка, а разный подход к реализации практически свел на нет плюсы от использования единой среды. Так все попытки реализовать серверный js до ноды не взлетели, взять тот же Rhino. И, скорее всего, node ждала та же участь, если бы не легендарный V8, неблокирующий код и потрясающая производительность. Именно за это его так любят разработчики. В этой серии статей, я постараюсь рассказать о неочевидных на первый взгляд проблемах и тонкостях работы, с которыми вы столкнетесь в разработке на nodejs.

Читать дальше →
Total votes 55: ↑48 and ↓7+41
Comments20

Dingoo A320 vs Gemei A330 — unboxing

Reading time2 min
Views8.5K
И вот наконец-то мне пришли долгожданные Dingoo A320 и Gemei A330, которые бурно обсуждаются в комментариях к предыдущему посту. Как и обещал всем, выкладываю много фотографий (все они кликабельны) и свои первые впечатления.

Коробка посылки слегка помята, а наш доблестный DHL постарался и выбил из меня еще денег «за таможенное оформление», но все же они здесь:



Что же внутри?
Total votes 64: ↑49 and ↓15+34
Comments166

О чем недоговаривают производители SSD [Обновлено!]

Reading time4 min
Views52K
Это перевод статьи с сайта «The SSD Review». По правде сказать, это не совсем перевод — скорее выжимка смысла с добавлением графиков, которые говорят сами за себя. Я намеренно оставил без внимания рекламу накопителей Intel. Ну и еще один момент — автор странно передергивает, сначала показывая преобладание random 4-8k write, а затем приводя на графиках как меру производительности random 4-8k read. Ощущение, что он сам что-то недоговаривает. Будет неплохо, если кто-то из компетентных людей оставит в комментариях свое мнение.

UPD:
Достоверность информации в статье подтверждена опытным путем. Проделал опыты, написал парсер и выложил результаты хабражитель deseven, за что ему огромное спасибо. Табличку с его данными вы можете посмотреть в конце статьи.

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

Итак, в чем же обман?
Читать дальше →
Total votes 202: ↑185 and ↓17+168
Comments291

Google Offers — конкурент Groupon

Reading time1 min
Views1.8K

Google готовится запустить сервис Google Offers, конкурента Groupon. Google Offers — новый продукт, позволяющий соединить продавцов и покупателей посредством ежедневных почтовых рассылок о лучших предложениях.

Google Offers работает по тому же принципу, что и Groupon или LivingSocial. Пользователи получают по электронной почте предложения, затем в течении 24 часов они имеют возможность подать заявку на покупку. Как только соберётся достаточное количество заявок, предложение вступает в силу, и пользователи получают желаемое.
Читать дальше →
Total votes 60: ↑51 and ↓9+42
Comments68

Использование паттерна Proxy для организации кэширования на PHP

Reading time3 min
Views8.3K
Постановка задачи. Имеется действующий отлаженный проект на PHP, содержащий десяток моделей, в каждой из которых по 5 методов выборок данных. Проект растет, всё хорошо, но в определенный момент, под тяжестью нагрузки, назревает необходимость добавить каким-то образом кэширование обращений к моделям.

Возможные решения.

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

  1. Нарушается один из принципов SOLID, «код должен быть открыт для расширения, но закрыт для изменений», т.е. мы берем и ломаем уже отлаженный выпущенный в продакшн код для того, чтобы добавить новую функциональность, а это всегда вызывает шквал ошибок и как следствие недовольство пользователей и заказчика.
  2. В одном и том же коде смешивается логика получения данных и кэширование, что приводит к распуханию классов и беспощадному повторению кода.
  3. Сделав так, мы лишаемся возможности получить живые данные в обход кэша (следующим шагом будет добавление флага $nocache).
  4. Очень высокая трудоёмкость впиливания кэширования таким способом и ещё большая трудоёмкость выпиливания его потом.

Второй способ, «расширяем классы моделей»: добавляем в модели методы-дублеры, которые оборачивают вызовы существующих методов в кэширование, например findById_Cached().
Вроде бы лучше, существующие методы не трогаем, вместо этого добавляем новые. Но остальные минусы на месте:
  1. Смешивание логики.
  2. Размеры классов растут ещё больше, чем в предыдущем способе.
  3. Очень высокая трудоемкость (добавить 50 новых методов, в нашем примере) + заменить везде в приложении вызовы старых методов, на новые, а если в будущем придется кэширование выпиливать, то еще и повторить все действия назад.


Третий способ «кэширующий прокси», очень простое и быстрое решение, поражающее своим изяществом и скоростью внедрения. Как его сделать – смотрим код.
Читать дальше →
Total votes 14: ↑5 and ↓9-4
Comments24

Fail2ban [incremental]: Лучше, быстрее, надежнее

Reading time9 min
Views158K
fail2ban image
Про fail2ban написано уже много, в том числе и на хабре. Эта статья немного о другом — как сделать защиту им еще надежнее и о еще пока неизвестных в широких кругах новых функциях fail2ban. Добавлю сразу — речь пойдет пока про development branch, хотя уже долго проверенный в бою.

Краткое вступление


В большинстве своем fail2ban устанавливается из дистрибутива (как правило это какая-нибудь стабильная старая версия) и настраивается по манам из интернета за несколько минут. Затем годами работает, без вмешательства админа. Нередко даже логи, за которыми вроде как следит fail2ban, не просматриваются.
Так вот, сподвигнуть на написание этого поста меня заставил случай, произошедший с одним сервером моего хорошего знакомого. Классика жанра — пришла абуза, за ней вторая и пошло поехало. Хорошо еще злоумышленник попался ленивый — логи не потер, да и повезло еще крупно, что logrotate был настроен, чтобы хранить логи месяцами.
Как дальше жить
Total votes 72: ↑71 and ↓1+70
Comments60

Information

Rating
Does not participate
Registered
Activity