Pull to refresh
2
0
Send message

KTV. Новый JSON

Reading time6 min
Views17K
В своём развитии мне пришлось пробежаться по нескольким этапам в нескольких направлениях: Java → Objective C → Swift, Web → Enterprise → Mobile, XML → JSON. Этим путём я шёл на протяжении более 15 лет, подолгу и внимательно задерживаясь на каждом этапе. Нужно идти дальше. За мобильными приложениями можно придумать что-то (наверное, пока не хочется), языков вообще пруд-пруди, ничего интереснее JSON'а не придумали. А зачем его менять?

Дальше я расскажу почему мне не очень нравится JSON для некоторых применений и как, по моему мнению, его можно доработать, чтобы стало немного удобнее.

Сразу должен отметить, что не рассматриваю KTV, как замену JSON. И ни в коем случае не рассматриваю его для использования в JavaScript'е. Это будет неудобно и неправильно. С другой стороны, ситуация, когда система описания объектов JavaScript'а используется в других языках для работы с типизированными данными — тоже странная, и её хочется поправить.

Если вам интересно, что послужило изначальной причиной создания такого формата — можно почитать про S2 и про причины создания формата KTV
Читать дальше →
Total votes 45: ↑25 and ↓20+5
Comments111

Подходы к проектированию RESTful API

Reading time17 min
Views145K

Автор: Вячеслав Михайлов, Solutions Architect.

В этой статье я поделюсь опытом проектирования RESTful API — на конкретных примерах покажу, как делать хотя бы простые сервисы красиво. Также мы поговорим, что такое API и зачем он нужен, поговорим об основах REST — обсудим, на чем его можно реализовывать; коснемся основных веб-практик, которые зависят и не зависят от этой технологии. Также узнаем, как составлять хорошую документацию, затрачивая на это минимум усилий, и посмотрим, какие существуют способы нумерации версий для RESTful API.

Часть 1. Теория


Итак, как мы все знаем, API — application programming interface (интерфейс программирования приложений), набор правил и механизмов, с помощью которых одно приложение или компонент взаимодействует с другими

Почему хороший API — это важно?

  • Простота использования и поддержки. Хороший API просто использовать и поддерживать.
  • Хорошая конверсия в среде разработчиков. Если всем нравится ваш API, к вам приходят новые клиенты и пользователи.
  • Выше популярность вашего сервиса. Чем больше пользователей API, тем выше популярность вашего сервиса.
  • Лучше изоляция компонентов. Чем лучше структура API, тем лучше изоляция компонентов.
  • Хорошее впечатление о продукте. API — это как бы UI разработчиков; это то, на что разработчики обращают внимание в первую очередь при встрече с продуктом. Если API кривой, вы как технический эксперт не будете рекомендовать компаниям использовать такой продукт, приобретая что-то стороннее.


Теперь посмотрим, какие бывают виды API.

Виды API по способу реализации:
  • Web service APIs
    • XML-RPC and JSON-RPC
    • SOAP
    • REST

  • WebSockets APIs
  • Library-based APIs
    • Java Script

  • Class-based APIs
    • C# API
    • Java



Виды API по категориям применения:

  • OS function and routines
    • Access to file system
    • Access to user interface

  • Object remoting APIs
    • CORBA
    • .Net remoting

  • Hardware APIs
    • Video acceleration (OpenCL…)
    • Hard disk drives
    • PCI bus



Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments37

Все способы вертикального выравнивания в CSS

Reading time6 min
Views804K
image

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

Да, для вертикального выравнивания в CSS есть специальное свойство vertical-align с множеством значений. Однако на практике оно работает совсем не так, как ожидается. Давайте попробуем в этом разобраться.

Читать дальше →
Total votes 42: ↑40 and ↓2+38
Comments20

Новые бесплатные курсы виртуальной академии Microsoft Virtual Academy, февраль 2016

Reading time5 min
Views22K


Начало года! И мы рады поделиться с вами обзором новых бесплатных курсов виртуальной академии Microsoft MVA. Регулярно эксперты Microsoft продолжают выпускать курсы и готовить материалы специально для вас, чтобы предоставлять актуальную информацию разработчикам и ИТ-профессионалам.

Новинка! Управление жизненным циклом приложений (ALM) для начинающих компаний
Вы собирается выпустить свой первый продукт в качестве предпринимателя? В этом курсе можно ознакомиться с основными принципами инженерного управления жизненным циклом приложений, которые необходимы при реализации вашей мечты. Рассматривается система управления версиями, управление выпусками, автоматизированное тестирование и многое другое. Узнайте, что означают такие термины, как Git, SCRUM и TDD, и выясните, почему они могут обеспечить более высокое качество первого выпуска, чем у конкурентов.
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments0

Как указывать диапазоны дат в интерфейсах?

Reading time5 min
Views34K
Однозначного и исчерпывающего ответа на вопрос поверхностный поиск не дал, справочники академического характера чаще всего выдают результаты для изданий (в т.ч. с вариантами использования римских цифр, что не очень подходит для интерфейсов), поэтому хочется понять, как лучше указывать именно диапазоны именно дат и именно в интерфейсах и попробовать сформулировать правило или выявить закономерности. Для этого я вспомнил все, какие мог, кейсы, и упорядочил их в таблице — кейс, числовой пример, формат полный и сокращенный, для дней, недель, месяцев, кварталов, полугодий и лет (внутри поста).

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

Ширина экрана мобильного устройства чаще всего небольшая, поэтому есть необходимость сокращать. При этом, кроме технической ширины, хочется учитывать еще и эстетическое восприятие и не грузить интерфейс лишними сущностями. Аналогичная ситуация с инпутами в вебе. Усугубляется ситуация на мелких устройствах типа часов и разного рода небольших дисплеях.

Например, получаются вот такие странные штуки:


Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments28

Нечеткий поиск в словаре с универсальным автоматом Левенштейна. Часть 1

Reading time9 min
Views101K


Нечеткий поиск строк является весьма дорогостоящей в смысле вычислительных ресурсов задачей, особенно если вам необходима высокая точность получаемых результатов. В статье описан алгоритм нечеткого поиска в словаре, который обеспечивает высокую скорость поиска при сохранении 100% точности и сравнительно низком потреблении памяти. Именно автомат Левенштейна позволил разработчикам Lucene повысить скорость нечеткого поиска на два порядка
Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments7

Читаем контейнер закрытого ключа КриптоПро средствами OpenSSL

Reading time8 min
Views86K
Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.

Стоит упомянуть о существовании утилиты P12FromGostCSP которая позволяет конвертировать ключ в формат P12, доступный для работы с OpenSSL, но утилита имеет следующие существенные недостатки:
  • Читает контейнер не напрямую, а через криптопровайдер, поэтому там, где кроме OpenSSL ничего нет, не работает.
  • Если в свойствах ключа не отмечено, что ключ «экспортируемый», то конвертировать его невозможно.
  • В демо версии не формирует файл с ключом, эта возможность присутствует только в платной версии.

Файл primary.key


Содержит 32 байта ключа в формате Asn1. Это только половина ключа, полный ключ получается при делении этого числа по модулю Q на маску. Поле, хранящее модуль Q в библиотеке OpenSSL имеет название order. Маска лежит в файле masks.key:

primary.key
Читать дальше →
Total votes 58: ↑56 and ↓2+54
Comments44

Бесплатные инструменты для разработчиков баз данных

Reading time6 min
Views33K
После прочтения статьи о полезных и бесплатных плагинах для SSMS — TOP (10) бесплатных плагинов для SSMS, я решил поделиться своим списком бесплатных инструментов, которые могут быть очень полезны разработчикам баз данных, и не только. Инструменты ориентированны на разработку под Microsoft SQL Server. Некоторые инструменты, платные, однако содержат достаточно полнофункциональные бесплатные редакции, которых с головой хватает для небольших проектов.
Читать дальше →
Total votes 17: ↑13 and ↓4+9
Comments6

TOP (10) бесплатных плагинов для SSMS

Reading time3 min
Views51K


До того, как начать работать с SQL Server я толком то и баз данных в лицо не видел… Помню, что мне установили SQL Server Management Studio 2005 и дали задание активно «крутить педали». По прошествии пары недель, как бы так сказать, моя производительность по написанию запросов была явно в районе плинтуса…

Более опытный коллега с недоумением на меня посмотрел и посоветовал поставить пару плагинов для SSMS… после этого работать стало явно веселее.

В данном посте я хочу поделиться моим топ списком бесплатных плагинов для SSMS, которыми чаще всего пользовался.
Подробнее
Total votes 24: ↑20 and ↓4+16
Comments12

Внедрение CRM. От регистрации лида до закрытия сделки. Кейс и пояснения

Reading time7 min
Views35K
За прошедший год мною было написано несколько работ, в которых освещались вопросы выбора CRM и обзоры конкретных систем. Но на практике я столкнулся еще с одним важным вопросом по этой теме, который и хотел бы осветить в данной статье. Это вопрос внедрения CRM-системы. Я специально приведу простой, но практический пример, чтобы вы могли быстро разобраться в вопросе и использовать для себя.

Данная статья будет призвана помочь разобраться в вопросе внедрения CRM и надеюсь будет полезна как специалистам, которые занимаются внедрением CRM, так и тем, кто хочет внедрить ее у себя.

Представим ситуацию: вроде бы и CRM уже выбрали и готов начать работать в ней, но….с чего начать? Как начать? Подобные вопросы встают перед всеми кто работал начала работу с CRM.

Приведу классическое определение понятия Внедрение ПО:

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


Итак, как следует из определения, систему для начала надо настроить под определенные условия конкретной компании. Вопрос обучения в данной статье мы рассматривать не будем, только вопрос настройки системы.
Читать дальше →
Total votes 18: ↑13 and ↓5+8
Comments0

10 атак на веб-приложения в действии

Reading time4 min
Views54K
В настоящее время практически все разработанные и разрабатываемые приложения стремятся стать как можно более доступными для пользователя в сети интернет. В сети размещаются различные приложения для более продуктивной работы и отдыха, такие как Google Docs, калькуляторы, электронные почты, облачные хранилища, карты, погода, новости и т.д… В общем все, что нужно для повседневной жизни. Наши смартфоны практически бесполезны без доступа к интернету, так как почти все мобильные приложения подключаются к облаку, сохраняя там наши фотографии, логины и пароли. Даже большинство домашних устройств постоянно подключено к сети.



Прикладной уровень является самой надежной защитой. Уязвимости, с которыми мы тут встретимся, зачастую полагаются на сложные сценарии ввода данных пользователем, что делает их трудноопределимыми с помощью систем обнаружения вторжений. Этот уровень — самый доступный извне. Для нормального функционирования приложения должен быть доступ через порт 80 (HTTP) или порт 443 (HTTPS).
Читать дальше →
Total votes 25: ↑20 and ↓5+15
Comments1

Защита персональных данных по N 242-ФЗ: как понять и что делать?

Reading time3 min
Views9.2K


Тема информационной безопасности продолжает быть актуальной — недавно в Москве на конференции «Защита персональных данных» обсуждали ФЗ №242 или как его называют «Закон о локализации персональных данных россиян на территории РФ». Суть его такова: с сентября 2015 года организациям-операторам ПДн, необходимо вести сбор и систематизацию персональных данных (далее – ПДн) россиян на территории РФ. А львиная доля поставщиков различных услуг — иностранцы, или хранят свои серверы заграницей, и российские пользователи, приобретая услуги таких поставщиков, передают свои данные за рубеж, где происходит не только их хранение, но и систематизация. Возникает вопрос — как клиентам продолжить пользоваться услугами зарубежных поставщиков, не нарушив стандарты обработки ПДн по российскому законодательству.
Читать дальше →
Total votes 18: ↑10 and ↓8+2
Comments20

Подводные камни Entity Framework и производительность

Reading time15 min
Views67K
При работе с Entity Framework, как и с любым другими ORM, часто возникают вопросы, связанные с его производительностью. Многие разработчики из-за незнания нюансов делают ошибки, приводящие к плохим результатам. Затем, во время анализа проблем и поиска решений, недостаточно разобравшись в вопросе, приходят к выводу, что улучшить ситуацию можно только переходом на другой ORM или отказом от него вообще. Хоть в некоторых ситуациях такое решение может оказаться разумным, зачастую не все так плохо — просто нужно знать нюансы. В этой статье я попытался собрать те подводные камни, с которыми мне чаще всего приходилось сталкиваться на практике.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments21

TemplateEngine.Docx — OpenSource .NET шаблонизатор docx документов

Reading time7 min
Views48K


В разработке корпоративных приложений очень часто приходится решать задачу выгрузки данных в документы — от небольших справок до больших отчетов.

Хочу поделиться нашим opensource-решением для генерации docx документов, которое позволяет заполнять документы по шаблону, оформление которого можно менять в Word без переписывания кода.

Для начала — немного вводных.

Что нам было нужно от шаблонизатора


  • Шаблон создается в Word и сразу видно, на что будет похож результирующий документ, шаблон без лишнего мусора.
  • Результирующий документ после скачивания содержит все необходимые данные, не подтягивая их с внешних источников.
  • Возможность заполнять списки, таблицы, и иногда еще и таблицы с вложенными в них списками.
  • Шаблон можно доверить секретарю клиента, чтобы он мог сменить логотип, реквизиты компании, или как-либо еще подкорректировать оформление. И все это уже после сдачи проекта, не модифицируя наш код.
Читать дальше →
Total votes 31: ↑31 and ↓0+31
Comments21

Возможности Backup Exec 15, о которых вы не догадывались

Reading time8 min
Views17K
По мере роста популярности технологий виртуализации и облачных вычислений развиваются и соответствующие средства резервного копирования. Мы уже знакомили читателей с возможностями Symantec Backup Exec 15 – простого в использовании ПО резервного копирования и восстановления данных для виртуальных, физических и облачных сред, интегрированного с программным обеспечением VMware и Hyper-V, рассказывали о специфике лицензирования нового продукта и миграции.


В июле 2015 года Symantec выпустила пакет обновлений Backup Exec 15 Feature Pack 1 (FP1). Благодаря ему BE 15 обрел новые качества. Кроме того, как показывает практика, далеко не все пользователи Backup Exec 15 знакомы со специфическими особенностями данного продукта. Итак, обо всем по порядку. Начнем с нововведений FP1.
Читать дальше →
Total votes 17: ↑12 and ↓5+7
Comments1

Бот для сапера с изюминкой

Reading time8 min
Views32K
Наверное у многих такое бывает: на работе нечего делать, или нужно подумать перед выполнением очередной задачи, да или попросту нет ничего вкусненького к чаю, тогда рука автоматически тянется к мышке и начинает играть в сапера. И вот в порыве очередного приступа саперомании меня посетила мысль о том, что я уже не думаю, как раньше, где расположены мины, а просто на автомате по выработанному алгоритму тычу по полю, ломая мышку. А раз я действую по алгоритму, без особых творческих усилий, то можно написать бота, который будет играть вместо меня, наверняка внимательнее и быстрее.
Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments20

Что такое красивый код, и как его писать?

Reading time22 min
Views207K

1. Вступление


Сталкиваясь с необходимостью контролировать работу других программистов, начинаешь понимать, что, помимо вещей, которым люди учатся достаточно легко и быстро, находятся проблемы, для устранения которых требуется существенное время.

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

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

Профессии программиста, как и большинству других профессий, приходится учиться каждый день в течение нескольких лет, а, по большому счету, и всю жизнь. Вначале ты осваиваешь набор базовых знаний в объеме N семестровых курсов, потом долго топчешься по различным граблям, перенимаешь опыт старших товарищей, изучаешь хорошие и плохие примеры (плохие почему-то чаще).

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

Да, все это необходимо знать. Но при этом, понимание того, как должен выглядеть достойный код, обычно появляется уже при наличии практического (чаще в той или иной степени негативного) опыта за плечами. И при условии, что жизнь “потыкала” тебя не только в сочные образцы плохого кода, но и в примеры всерьез достойные подражания.

В этом-то и заключается вся сложность: твое представление о “достойном” и “красивом” коде полностью основано на личном многолетнем опыте. Попробуй теперь передать это представление в сжатые сроки человеку с совсем другим опытом или даже вовсе без него.

Но если для нас действительно важно качество кода, который пишут люди, работающие вместе с нами, то попробовать все же стоит!
Читать дальше →
Total votes 97: ↑79 and ↓18+61
Comments146

Как работает реляционная БД

Reading time51 min
Views544K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Total votes 232: ↑229 and ↓3+226
Comments134

Один заказчик, два помещения, четыре провайдера и восемь связей

Reading time5 min
Views22K
Один из заказчиков попросил сделать так, чтобы связь между его офисом и складом была постоянной и безопасной. Как мы это делали и что получилось, а что нет.
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments31

Information

Rating
Does not participate
Location
Тюмень, Тюменская обл. и Ханты-Мансийский АО, Россия
Date of birth
Registered
Activity