Как стать автором
Обновить
73
0
Дмитрий Синявский @r3code

SRE

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

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

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

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


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

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

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

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

Время на прочтение5 мин
Количество просмотров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), возможно, даже раньше. И я думаю, что они не правы.

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

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

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

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

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

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

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

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

Полный список изменений смотрите под катом.
Читать дальше →
Всего голосов 18: ↑10 и ↓8+2
Комментарии8

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

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

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

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

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

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

А какой стул правильный?
Читать дальше →
Всего голосов 134: ↑125 и ↓9+116
Комментарии309

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

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

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

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

Время на прочтение6 мин
Количество просмотров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
Читать дальше →
Всего голосов 8: ↑4 и ↓40
Комментарии3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Время на прочтение3 мин
Количество просмотров6.8K
Первод стаьи от Malcolm Groves, «Generic Interfaces in Delphi».

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

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

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

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

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

Читать дальше →
Всего голосов 38: ↑35.5 и ↓2.5+33
Комментарии48

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

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

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

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

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

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

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

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