Как стать автором
Обновить
4
0
Андрей @LARII

Программист

Отправить сообщение

Карманный справочник: сравнение синтаксиса MS SQL Server и PostgreSQL

Время на прочтение17 мин
Количество просмотров79K

Приветствую, уважаемые хаброжители!

Так как занимаюсь переводом кода с MS SQL в Postgre SQL с начала 2019 года, то решил продолжить сравнение этих двух СУБД.

В прошлой публикации мы рассматривали отличия в быстродействии MS SQL и PostgreSQL для 1C.

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

Начнем рассмотрение с сопоставления типов.

Читать далее
Всего голосов 78: ↑78 и ↓0+78
Комментарии78

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

Время на прочтение21 мин
Количество просмотров28K
image

Привет, Хабр! Меня зовут Леонид Титов, я бэкенд разработчик в #CloudMTS. Так уж сложилось, что я не только пишу код, но и иногда собеседую кандидатов. Мне нравится процесс, и, думаю, у меня это получается.

Начал я этим заниматься ещё на предыдущем месте работы, где мы с тимлидом собирали новую команду. С тех пор прошло уже N лет, практика продолжилась, и после очередного собеседования я решил упорядочить свои знания. Кто-то считает, что от собеседований вообще толку нет, а кто-то наоборот (не будем показывать пальцем) проводит их в 3-5 раундов. Я уверен, что собеседования нужны, но важно четко понимать, зачем именно.

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

Еще я поделюсь неожиданными впечатлениями от ситуации, когда оказался «по ту сторону», лайфхаками, фейлами и неплохо зарекомендовавшими себя практиками. Про soft skills тут ничего не будет — это отдельная важная тема. Прежде всего мы затронем вопрос профпригодности, определения ее наличия или отсутствия. Во второй половине статьи приведу собственный список вопросов, переведенный на русский, с комментариями.
Читать дальше →
Всего голосов 60: ↑48 и ↓12+36
Комментарии68

Что плохого в пакете логирования на Go?

Время на прочтение4 мин
Количество просмотров6.5K

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

Читать далее
Всего голосов 20: ↑10 и ↓100
Комментарии47

На пути к функциональной СУБД и NoSQL ERP: хранение остатков и расчет себестоимости

Время на прочтение10 мин
Количество просмотров4.6K
Привет, Хабр!

Продолжаем исследовать применимость принципов функционального программирования при проектировании ERP. В предыдущей статье мы рассказали зачем это нужно, заложили основы архитектуры, и продемонстрировали построение простых сверток на примере оборотной ведомости. По сути, предлагается подход event sourcing, но за счет разделения БД на иммутабельную и мутабельную часть, мы получаем в одной системе комбинацию преимуществ map / reduce-хранилища и in-memory СУБД, что решает как проблему производительности, так и проблему масштабируемости. В этой статье я расскажу (и покажу прототип на TypeScript и рантайме Deno), как в такой системе хранить регистры мгновенных остатков и рассчитывать себестоимость. Для тех, кто не читал 1-ю статью — краткое резюме:

1. Журнал документов. ERP, построенная на базе РСУБД представляет собой огромный мутабельный стейт с конкурентным доступом, поэтому не масштабируется, слабо-аудируема, и ненадежна в эксплуатации (допускает рассогласование данных). В функциональной ERP все данные организованы в виде хронологически-упорядоченного журнала иммутабельных первичных документов, и в ней нет ничего кроме этих документов. Связи разрешаются от новых документов к старым по полному ID (и никогда наоборот), а все остальные данные (остатки, регистры, сопоставления) являются вычисляемыми свертками, то есть кэшируемыми результами работы чистых функций на потоке документов. Отсутствие стейта + аудируемость функций дает нам повышенную надежность (блокчейн на эту схему прекрасно ложится), а бонусом мы получаем упрощение схемы хранения + адаптивный кэш вместо жесткого (организованного на базе таблиц).
Читать дальше →
Всего голосов 14: ↑11 и ↓3+8
Комментарии88

Функциональное программирование для всех

Время на прочтение33 мин
Количество просмотров351K

Доброго времени суток. Это статья — перевод заинтересовавшего меня поста в блоге аспиранта Университета штата Нью-Йорк в Стоуни-Брук. Статья в доступной форме описывает основные концепции функционального программирования, их преимущества и недостатки. Думаю она будет полезна широкому кругу читателей, которые сомневаются, нужно ли им углубляться в мир функционального программирования или нет. Пожелания, предложения и замечания по переводу и терминологии принимаются по личной почте.

Мнение переводчика может иногда не совпадать с мнением автора, но переводить статью было крайне занимательно.

UPD: альтернативный вариант перевода вы можете найти на rsdn (спасибо flamingo за ссылку).
Читать дальше →
Всего голосов 188: ↑181 и ↓7+174
Комментарии151

Геометрия данных 1. Симплексы и графы

Время на прочтение11 мин
Количество просмотров21K
Звездное небо напоминает, — точки являются фундаментальной абстракцией, основой окружающего пространства.



Введение


Это первая статья серии, посвященной описанию свойств базисов пространств на основе элементов (а не векторов). Базис определяет систему координат — описание элементов пространства в виде набора чисел, характеризующих положение элемента относительно базиса.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии23

Regex for lazy developers

Время на прочтение9 мин
Количество просмотров22K

Регулярные выражения для ленивых людей?!

Regex – это модуль вашего языка программирования который позволяет работать со сложными и большими строками просто! Давайте разбираться в них вместе. Приятного прочтения ;)

Читать далее
Всего голосов 24: ↑17 и ↓7+10
Комментарии34

Украинские сервисы групповых скидок: анализ рынка

Время на прочтение6 мин
Количество просмотров1.3K
Нынешний год для Украины ознаменовался началом выхода из кризиса. Офлайн-развлечения начали постепенно поднимать голову и на помощь им пришла новая, однако уже успевшая завоевать популярность во всем мире, модель онлайн-дистрибуции: коллективные покупки. Всего за несколько месяцев запустились 6 достаточно амбициозных стартапов. Мы решили глубже изучить ситуацию, сложившуюся на этом еще только формирующемся рынке.
Читать дальше →
Всего голосов 15: ↑10 и ↓5+5
Комментарии18

Избавляемся от PAGELATCH_EX в SQL Server

Время на прочтение6 мин
Количество просмотров6.6K

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

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии3

Тонкости регулярных выражений. Часть 1: метасимволы внутри и вне символьных классов

Время на прочтение5 мин
Количество просмотров16K

Вместо вступления



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

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

Читать дальше →
Всего голосов 76: ↑66 и ↓10+56
Комментарии69

Использование библиотеки LLVM для генерации кода регулярных выражений

Время на прочтение20 мин
Количество просмотров4.5K

Введение


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


Возникает вопрос — как можно ускорить построение конечных автоматов по регулярным выражениям? У меня как-то раз возникла идея, как это можно сделать — для этого можно применить настоящий компилятор, который может генерировать максимально эффективный машинный код. Эту идею я решил опробовать на практике, используя библиотеку LLVM как компилятор/оптимизатор для регулярных выражений. Что из этого вышло, будет изложено ниже в данной статье.

Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии12

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

Время на прочтение11 мин
Количество просмотров20K
По данным на 2017 год, разные формы рака стали причиной более 17% смертей во всём мире, уступая в этой смертельной статистике только разнообразным сердечно-сосудистым нарушениям. Это значит, что в современном мире каждый шестой человек умирает от рака. При этом с годами доля раковых заболеваний в статистике смертности растёт опережающими все другие причины темпами.



В настоящее время двумя основными представлениями о раке являются две противоположных, по сути, концепции:

  • рак — заболевание возрастное («это не раковые заболевания учащаются, это люди стали доживать до своего рака чаще»);
  • рак — это заболевание генетическое; в форме рака проявляются определённые мутации, неизбежные при репликации ДНК естественным путём — от родителей к детям.

В обоих этих предположениях есть доля правды: действительно, многие тысячи из сотен миллионов известных вариаций человеческого генома (324 миллиона на 2017 год) коррелируют с повышенной вероятностью разных форм рака. И, действительно, для более долго живущего организма вероятность экспрессии канцерогенных мутаций возрастает. Однако считать генетику или возраст как таковые причинами рака будет ошибкой. Корреляция совсем не то же самое, что причинность. Случаи генетически обусловленных раковых заболеваний, когда есть прямая причинно-следственная связь между генетической мутацией и раком, относительно редки и касаются, в первую очередь, детских раковых заболеваний.
Узнать подробности
Всего голосов 65: ↑51 и ↓14+37
Комментарии122

Лямбда-функции на встроенном языке 1С

Время на прочтение8 мин
Количество просмотров5.1K

«Анонимные функции, функции как переменные, методы для структур и соответствий, классы/прототипы, наследование! Где это всё для 1С?!» — спросите вы меня. И я уверенно отвечу: «Здесь». В этой теме ключ ко всему. Решение небольшое, элегантное, исключительно на встроенном языке 1С и как прививка от коронавируса: молодое, обнадеживающее, многообещающее, но еще не протестированное на массах. Поэтому прошу пока воспринимать всё, как альфа-версию, или даже, как концепцию. Кстати, под словом "Функция" здесь и ниже понимаются и процедуры тоже.

Имея опыт программирования на Python и JavaScript, страдаю, когда в 1С функция не может быть объектом первого класса. То есть, функцию нельзя поместить в переменную. Не результат выполнения функции, а саму функцию. Это лишает возможности передавать её, как параметр, в другие функции или программно создавать объекты c методами. Мы не можем ждать милости от 1С, и добавим нужные механизмы сами!

Материал будет разбит на несколько публикаций. Сегодня рассмотрим основу всей затеи — анонимную функцию.

Читать далее
Всего голосов 7: ↑6 и ↓1+5
Комментарии40

Go: Управление обработкой множественных ошибок

Время на прочтение3 мин
Количество просмотров8K

Управление обработкой ошибок в Go всегда вызывает споры — это извечная тема в ежегодном опросе о самых больших проблемах, с которыми сталкиваются разработчики при работе с Go. Однако когда дело доходит до обработки ошибок в многопоточной среде или объединения нескольких ошибок одной и той же горутины, Go предоставляет отличные пакеты, которые упрощают управление обработкой множественных ошибок. Давайте посмотрим, как объединить несколько ошибок, генерируемых одной горутиной.

Читать далее
Всего голосов 10: ↑8 и ↓2+6
Комментарии0

Современный Javascript: всё, что вы пропустили за последние 10 лет

Время на прочтение7 мин
Количество просмотров15K
JavaScript прошел долгий путь с тех пор, как я знал его как букву «D» в DHTML. Для всех, кто, как я, не хотел использовать новейший синтаксис, который может потребовать полифиллов или транспилятора, я написал эту шпаргалку, чтобы вы познакомились со всеми достоинствами, которые широко поддерживаются в современных браузерах.

Содержание

  • Array functions
  • const/let
  • Nullish coalescing ?? and Optional chaining?.. operators
  • Async/Await
  • Стрелочные функции ()=>{}
  • for...of
  • for await...of
  • Classes
  • get/set
  • function default parameters
  • function named parameters
  • function rest… parameter
  • Destructuring
  • Shorthand functions aka Methods
  • Promise.all
  • Template literals
  • Proxy
  • Module import/export
  • Читать ещё

(Исправления по качеству перевода, пожалуйста, присылайте в личку)
Читать дальше →
Всего голосов 44: ↑22 и ↓220
Комментарии9

Unobtrusive JavaScript

Время на прочтение4 мин
Количество просмотров7.2K
Цель статьи — показать, что из себя представляет «ненавязчивый JavaScript», для чего он нужен, и чем он лучше «навязчивого» JavaScript. В рунете я подобных статей не встречал (может они и есть, но мне на глаза не попадались и немного погуглив, я тоже ничего не нашел), а как показывает практика — очень многие не знают, что это такое и как этим пользоваться.

Что же такое Unobtrusive JavaScript
Всего голосов 60: ↑57 и ↓3+54
Комментарии137

Что запрещает принцип Паули?

Время на прочтение7 мин
Количество просмотров28K

Принцип запрета Паули с однозначной многочастичной волновой функцией эквивалентен требованию, чтобы волновая функция была антисимметричной по отношению к обмену частицами. Как это объяснить на пальцах? Легко - ткните пальцем в стол, в монитор, во что-нибудь твердое. Глубоко пронзили материю? Удалось достичь перекрывания атомных электронных облаков пальца и стола? Нет? Не удивительно. Читайте дальше, если хотите узнать, почему так.

Читать далее
Всего голосов 64: ↑63 и ↓1+62
Комментарии18

Clarion — Язык программирования, про который все забыли. А мне пришлось вспомнить

Время на прочтение3 мин
Количество просмотров14K

В своем первом посте я хочу рассказать об одном из самых редких и старых языков программирования - Clarion. Я знаком со всей линейкой этих замечательных языков начиная с 2.1 далее 5.0, 6.0, 6.3, 8 и до 9.1 по текущий момент. Буду постепенно рассказывать общие детали данной технологии, мало кому может оказаться полезным, но крайне мало инфы об этой технологии в Рунете, поэтому хочу чтобы осталась память о данной технологии на просторах Сети.

Мое первое "соприкосновение" произошло примерно 13-14 лет (98-99), когда я, по воле случая, познакомился с программистом на работе у родителей. Это был бородатый дядька по имени Евгений Иванович. Меня сразу же завлекли его беседы про Базы данных, операторы, переменные, функции...

Читать далее
Всего голосов 26: ↑21 и ↓5+16
Комментарии46

А на прошлом месте работы было по-другому

Время на прочтение9 мин
Количество просмотров6.6K

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

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

Читать далее
Всего голосов 17: ↑10 и ↓7+3
Комментарии1

Взлом reCAPTCHA v2

Время на прочтение6 мин
Количество просмотров13K

Назойливая игра, разметка данных для google. Если, занимаетесь сбором доступной информации, с ресурсов не принадлежащим вам, и не сумели реализовать решение для преодоления этой преграды, советы от начинающего разработчика вам помогут. Опишу один из способов, основанный на детекторе объектов, хорошо справляется с типом 4x4, хуже с 3x3. Использую архитектуру YOLO, "золотая середина", точность/производительности, подход одинаков для всех детекторов. В коммерческом продукте, стоит использовать "ансамбль" нейронных сетей, к детектору, добавить классификацию каждой ячейки, повысит общую точность с приемлемой производительностью. Так же эту задачу можно решить, использую обучение с подкреплением A2C/DQN, или любую современную архитектуру, трансформеры, генеративно состязательные сети.

Читать далее
Всего голосов 13: ↑12 и ↓1+11
Комментарии2

Информация

В рейтинге
Не участвует
Откуда
Славянск, Донецкая обл., Украина
Зарегистрирован
Активность