Pull to refresh
73
0
Дмитрий Синявский @r3code

SRE / Go Developer

Send message

Советы Golang: почему указатели на срезы полезны и как их игнорирование может привести к хитрым ошибкам

Reading time 4 min
Views 12K

Сегодня, пока я работал, возник хороший вопрос:

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

Читать далее
Total votes 10: ↑9 and ↓1 +8
Comments 6

Параллельные интеграционные тесты базы данных Postgresql в приложении GO

Reading time 5 min
Views 6.1K

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

В идеале, каждый тест должен быть независим, так они не затронут друг друга. Другими словами, каждая тестовая функция имеет свое состояние. Это хороший признак для использования параллельных тестов. Для получения своего персонального набора данных для каждой тестовой функции я создал функцию, которая при запуске теста создает временную схему, загружает в нее данные и уничтожает схему после завершения теста. Каждая созданная схема содержит хеш в имени для предотвращения конфликтов имен.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Comments 14

Проводим ревизию ошибок

Reading time 3 min
Views 2.3K

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


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



картинка отсюда

Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 2

Освобождаемся от обработки ошибок, устраняя ошибки

Reading time 4 min
Views 6.7K


Go2 имеет целью уменьшить накладные расходы на обработку ошибок, но знаете ли вы, что лучше, чем улучшенный синтаксис для обработки ошибок?

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

Эта статья черпает вдохновение из главы «Define Errors Out of Existence”» книги « A philosophy of Software Design» Джона Оустерхаута. Я постараюсь применить его совет к Go.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 17

Давайте поговорим о ведении логов

Reading time 5 min
Views 27K
Этот пост вдохновлен темой в форуме Go Forum, начатой Nate Finch. Этот пост сконцентрирован на языке Go, но если пройти мимо этого, я думаю, идеи представленные тут широко применимы.

Почему нет любви?


Пакет log в Go не имеет уровней для логов, вы можете сами вручную добавить приставки DEBUG, INFO, WARN, и ERROR. Также logger тип в Go не имеет возможности включить или выключить эти уровни отдельно для выбранных пакетов. Для сравнения давайте глянем на несколько его замен от сторонних разработчиков.

image

glog от Google имеет уровни:

  • Info
  • Warning
  • Error
  • Fatal (завершает программу)

Посмотрим на другую библиотеку, loggo, разработанную для Juju, в ней доступны уровни:

  • Trace
  • Debug
  • Info
  • Warning
  • Error
  • Critical

Loggo также имеет возможность задать уровень детализации лога для нужных пакетов по отдельности.

Перед вами два примера, явно созданных под влиянием других библиотек для логирования на других языках.

Фактически их происхождение можно проследить до syslog(3), возможно, даже раньше. И я думаю, что они не правы.

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

Я утверждаю, что для успешных пакетов логов требуется гораздо меньше возможностей и, конечно, меньше уровней.
Читать дальше →
Total votes 26: ↑13 and ↓13 0
Comments 59

Облачное хранилище Yunpan 360 будет закрыто в 2017 году

Reading time 1 min
Views 42K
Yunpan 360 — облачное хранилище предоставлявшее пользователям 100Тб места на облачном диске в самом начале своей работы. Постепенно новым пользователям стали давать только 36Тб. На сегодня это 3,6Тб. Это было очень привлекательно иметь такое хранилище.
Но все когда то заканчивается...
Читать дальше →
Total votes 20: ↑19 and ↓1 +18
Comments 95

Обновление VirtualTreeView 5.01

Reading time 1 min
Views 15K
VirtualTreeViewVirtualTreeView — это замечательный бесплатный компонент для вывода деревьев, списков и таблиц.
Компонент позволяет настраивать вывод данных практически как угодно — вы ограничены только задачей и фантазией.

Разработчики MySQL Query Browser for Windows,The Bat!, Smart Inspect и многих других продуктов используют его.
Компонент отличается высокой скоростью работы с узлами и широкими возможностями по настройке оформления, поддерживает Unicode.

Обновление 5.01 вышло 3 дня назад, теперь VirtualTreeView поддерживает:
  • Delphi XE3
  • C++ Builder XE2!

Полный список изменений смотрите под катом.
Читать дальше →
Total votes 18: ↑10 and ↓8 +2
Comments 8

Правильный стул для ежедневной работы за компьютером

Reading time 5 min
Views 858K
Золотой Остап и его стулВопрос о столах поднимался несколько раз (раз, два).

Однако, на чем же мы сидим перед столом?

Стул — не менее важная часть рабочего места любого человека, много времени работающего за компьютером в течение дня.

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

Оказывается наши санитарные правила и нормы (СанПиН 2.2.2/2.4.1340-03) достаточно хорошо описывают удобный эргономичный стул для работы взрослых за компьютером!

А какой стул правильный?
Читать дальше →
Total votes 134: ↑125 and ↓9 +116
Comments 309

Долгожданное обновление компонента Virtual Treeview V5.0.0 RC1

Reading time 1 min
Views 9K
Разные вариант отображения содержимого в Virtual TreeviewМногие Delphi разработчики знают и используют этот замечательный бесплатный компонент для вывода деревьев, списков и таблиц.
Пользователи The Bat! видят его ежедневно, просматривая списки писем.
Компонент отличается высокой скоростью работы с узлами и широкими возможностями по настройке оформления, поддерживает Unicode.

Последняя версия компонента 4.8.7 вышла в октябре 2010 года, и надежды на обновления были слабыми.
Но, все таки, обновление вышло!
Пользователи Delphi XE2 теперь будут рады, теперь можно радовать и пользователей 64-битных систем.
Читать дальше →
Total votes 46: ↑30 and ↓16 +14
Comments 40

Тысячи телевизоров Samsung серии D6x00 содержат дефект — не могут отображать 3D в Full HD

Reading time 6 min
Views 38K

3D S.O.S.: 3D позор Samsung


2D версия
Как видно из названия — это очень большая ошибка в модельном ряду LED-телевизоров Samsung D6xxx.

Мы проверили все возможные источники сигнала: Playstation 3, Samsung BDP D6500, USB SBS MKV, USB MPO-файл, — и каждый раз результат был тот же! Телевизор не хочет показывать FULL HD 3D-изображения!
3D версия
Владельцы Samsung D6xxx могут сами проверить свой телевизор на наличие этого дефекта. Здесь мы разместили для вас несколько фотографий для тестов.

Скачайте 2D и 3D тестовые изображения Full HD (1080) и Half HD (720) px, и посмотрите сами…
Ссылки под катом.
В конце перевода я добавил свою переписку с Samsung по этой проблеме.

Данная проблема выявлена и в России
myhdplayer.ru/samsung-snimaet-logotip-full-hd-3d.html
market.yandex.ru/forums/?modelid=7155057&hid=90639&p_n=5
Читать дальше →
Total votes 8: ↑4 and ↓4 0
Comments 3

Подробнее об атрибутах в Delphi 2010. Пример — проверка данных

Reading time 4 min
Views 6.6K
МышаВ моей предыдущей статье Кратко об атрибутах в Delphi 2010, я показал основы связанные с созданием, применением и опросом атрибутов. Однако, я не привел пример, для чего вы могли бы их использовать.

Вероятно, наиболее распространенным является пример для персистентности, и, действительно, кто-то опубликовал подобный пример на сайте Wings of Wind. Я хотел бы показать другое их применение — для проверки данных (Validation).
Читать дальше →
Total votes 16: ↑10 and ↓6 +4
Comments 43

Постоянно открывающееся окно CPU с остановкой на ntdll.dbgbreakpoint

Reading time 1 min
Views 2.8K
Delphi ntdll.dbgbreakpointС недавнего времени почему-то при запуске приложения стало постоянно открываться окно CPU и первая точка остановки ntdll.dbgbreakpoint. Непредвиденные точки останова повторяются часто и необходимо вручную продолжать выполнение. Это говорит о каких-то неполадках или отсутствии информации для отладки в приложении.

Однако, в приложении ровным счетом ничего не изменилось, настройки Delphi не менялись. Откуда же тогда неизвестная информация? Как вернуться к нормальной работе?
Читать дальше →
Total votes 16: ↑8 and ↓8 0
Comments 14

Поддержка рефакторинга атрибутов в Delphi 2010

Reading time 1 min
Views 1.6K
РефакторингЯ упоминал ранее, что в этом выпуске большая часть работы была отведена для дополнительных функциональных возможностей и их улучшения. В результате, IDE продолжает меня приятно удивлять. Я пробую делать что-то, даже не задумываясь о том, а будет ли это работать вообще, и нахожу что оно не просто работает, а работает даже лучше, чем я мог себе представить.

Один из примеров касается поддержки рефакторинга атрибутов.
Читать дальше →
Total votes 20: ↑11 and ↓9 +2
Comments 17

Преобразование ссылки на интерфейс для реализации класса в Delphi 2010

Reading time 2 min
Views 5.3K
Не все нововведения в Delphi 2010 большие и заметные. Команда потратила массу времени реализуя множество дополнительных функциональных возможностей, исправлений и улучшений. Некоторые из них могут показаться незначительными по отдельности, но они не только в целом окзывают существенное влияние, но и значительно добавляют гармоничности продукту.

Одна из возможностей Delphi 2010, которая, как мне кажется, породит массу споров — это возможность привести интерфейсную ссылку назад к типу класса, реализующего этот интерфейс.
Читать дальше →
Total votes 25: ↑15 and ↓10 +5
Comments 34

Кратко о RTTI и атрибутах в Delphi 2010

Reading time 3 min
Views 14K
RTTI (Runtime Type Information) было тщательно переработано в Delphi 2010.
RTTI является центральным элементом, на котором написано Delphi IDE, он существует со времен первого выпуска, однако я слышал от некоторых людей на протяжении многих лет, что они попытались использовать RTTI и нашли это слишком сложным и замысловатым, особенно по сравнению с Reflection API в Java и .NET. Вот это настоящий позор, поскольку возможность писать код для запроса подробной информации о других объектах, не зная заранее их типа, это действительно мощная возможность.
Читать дальше →
Total votes 48: ↑28 and ↓20 +8
Comments 380

Обобщенные интерфейсы в Delphi

Reading time 3 min
Views 6.8K
Первод стаьи от Malcolm Groves, «Generic Interfaces in Delphi».

imageБольшинство примеров использования дженериков в Delphi используют класс с дженерик-типом. Однако, работая над своим проектом, я решил, что мне нужен интерфейс с дженерик-типом.

В проекте используется встроенный механизм издатель-подписчик. Я захотел чтобы подписчик имел для каждого типа события отдельный метод Receive, а не отдельный метод с огромным case-выражением, выбирающим действие для каждого типа события. Также я не хотел определять интерфейс для каждого типа события. Мне был нужен дженерик интерфейс подписчика, который получает тип события, как параметр.

Однако, я понятия не имел, могу ли я определить дженерик интерфейс, не говоря уже о реализации. Даже если предположить, что я могу сделать это, сможет ли Delphi выбрать правильный метод Receive для вызова? Есть только один способ узнать…
Читать дальше →
Total votes 10: ↑7 and ↓3 +4
Comments 0

Многоуровневое дерево с маркерами, сохраняющее состояние (HTML, CSS, jQuery, Cookies)

Reading time 6 min
Views 19K
Продолжается развитие темы о многоуровневом дереве с маркерами. Многоуровневое дерево с сохранением состояния узлов
Теперь дерево выросло и окрепло, стало взрослее и помнит выбранный узел и состояние кажого узла в отдельности.
Страницу можно перезагружать, а дерево все равно будет помнить все что вы открыли и выбрали!

Читать дальше →
Total votes 38: ↑35.5 and ↓2.5 +33
Comments 48

Многоуровневое дерево с маркерами (HTML, CSS, jQuery). Запоминаем выбранный узел

Reading time 5 min
Views 6.2K
Дерево помнит выбранный узел по urlЭто продолжение темы про дерево. Хочу его довести до ранга «готов к внедрению». Потому повозился с JavaScript и сделал запоминание выбранного узла на основе адреса ссылки.
Если ссылка вложена в поддерево, дерево развернется до её уровня и, если у неё самой есть поддерево — оно тоже будет развернуто.

JavaScript сделал как смог, т.к. давно не использовал. Прошу помощи в доработке и оптимизации.
Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Comments 18

Многоуровневое дерево с маркерами (HTML, CSS). Продолжение с jQuery

Reading time 7 min
Views 41K
Посмотреть в работе многоуровневое дерево с маркерами.В продолжение темы про дерево немного переделал код и подключил jQuery. Теперь дерево живое, узлы разворачиваются, как этого многие ожидают видя подобное дерево.
Теперь оформление дерева делает скрипт — сам расставляет маркеры для элементов с вложенными узлами.
Благодаря использованию скрипта HTML стал проще.

UPD 05.04.2009: обновлены скрипты, есть несколько вариантов скриптов.
UPD 09.04.2009: продолжение
Читать дальше →
Total votes 50: ↑47 and ↓3 +44
Comments 44

Многоуровневое дерево с маркерами (только HTML, CSS, без Javascript)

Reading time 5 min
Views 23K
Многоуровневое дерево с маркерами (только HTML, CSS)До того как заняться верской гитарных аккордов (статьи 1,2,3) я столкнулся с необходимостью сделать человеку на сайте меню-дерево. Рисовать не хотелось вообще, поэтому я взял старый добрый HTML с CSS и начал делать это дерево, начал с простого одноуровневого, а позже сделал многоуровневое с маркерами, которое и представлю.

Позже это дерево дало мне плоды в виде habrahabr.ru/blogs/css/53792
Читать дальше →
Total votes 107: ↑105 and ↓2 +103
Comments 81
1

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Site Reliability Engineer
Senior
SRE
Monitoring
GitLab
Golang
PostgreSQL
Redis