CodeFest 2019. Три таракана

На CodeFest было интересное выступление Максима Дорофеева под названием Три маленьких таракана на пути к большому будущему. Тема выступления связана с его темой его книги Джедайские Техники: эффективность работы, управление расписанием.

Одна из основных мыслей выступления:

Не существует гарантированных способов преуспеть, гарантированные способы есть только обнажаться.

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

А вдруг там что-то срочное?

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

Читать далее CodeFest 2019. Три таракана

CodeFest 2019. Рефакторинг

Мой конспект доклада с CodeFest 2019 Алексея Катаева Рефакторинг: договариваемся, планируем, внедряем! Доклад был одним из самых полезных среди тех которые я слушал.

Постоянный рефакторинг

Продукт никогда не следует переписывать с нуля:

  • это слишком рискованно и затратно;
  • происходит потеря опыта зафиксированного в коде.

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

Нельзя делать рефакторинг тайно. Нужно договорится о том чтобы его делать с руководством или владельцем продукта. Доводы за рефакторинг:

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

Читать далее CodeFest 2019. Рефакторинг

Typora — markdown редактор

Typora - удобный markdown-редактор. Возможности которыми я пользуюсь:

  • Собственно, само редактирование и просмотр markdown. Как исходника так и WYSIWYG. Удобно, быстро, красиво. Стандартные возможности: выделение и форматирование текста, изображения, ссылки, цитаты, блоки кода с подсветкой.
  • Визуальный редактор таблиц. Всегда пользуюсь им для таблиц, вместо разметки вручную.
  • Экспорт в html, docx. Есть недостаток - проблемы с экспортом через консоль. Можно использовать Pandoc, но есть свои недостатки.
  • Формулы в LaTex. Встроенные и отдельными блоками.
  • Проверка орфографии.

До Typora я использовал MarkdownPad, Typora намного более удобен и функционален.

Преобразование типов объектов в Delphi

Хочу рассмотреть один дискуссионный вопрос связанный с преобразованием типов. Сначала краткое введение. В Delphi существует два оператора is и as, связанных с преобразованием типов, и способ преобразования типа с помощью функции с именем типа (класса).

Оператор is используется для проверки типа, если объект соответствует указанному типу или является его наследником, то оператор возвращает True. В случае если в переменной nil то оператор возвращает False.

Оператор as используется для преобразования типа. Если объект соответствует типу или наследнику, то он преобразуется, если нет то выдаётся исключение EInvalidCast. В случае если в переменной nil, то исключение не произойдёт, но, конечно, обратится к полям объекта не получится - будет другое исключение.

Читать далее Преобразование типов объектов в Delphi

Паттерн MVVM в Delphi

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

  • Model
  • ViewModel
  • View

Схема MVVM

Модули с моделями могут ссылаться только на модули своей категории. Модули с ViewModel могут ссылаться на модули своей категории и на Model. А View могут ссылаться как на другие View, так и на ViewModel и Model. Передача данных между слоями, в основном, происходит посредством байндигов.

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

Ссылки на более подробное описание предоставлены ниже.

Оптимизация условий с помощью оператора xor

Вместо

можно записать

Копирование ссылок с кириллицей в браузере

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

https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80

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

Firefox

Открыть новую вкладку, в строке адреса ввести about:config. Ответить Да на предупреждение.

После этого откроется панель настроек со строкой поиска. В строке поиска нужно вести browser.urlbar.decodeURLsOnCopy и изменить значение этого параметра на true двойным кликом.

После этого ссылки в Firefox будут копироваться в обычном виде.

Chrome

В Chrome нужно установить расширение Copy URL. Ссылки придется копировать через кнопку которую добавляет это расширение.

UPD 14.04.2019

Расширение которым я пользуюсь больше недоступно, но поиск выдаёт несколько похожих.

Перебор соседних клеток на двухмерном поле

Рассмотрим задачу похожую на игру Сапёр

Дано прямоугольное поле размером n на m. В поле каждая клетка обозначена либо символом точки ('.') точкой либо звёздочки ('*'). Точка означает пустое поле поле, звёздочка мину. Вывести на экран поле такого же размера где вместо точек указанна цифра - количество мин рядом с этой клеткой.

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

Читать далее Перебор соседних клеток на двухмерном поле

Группировка и подсчёт элементов в списке Python

Рассмотрим задачу

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

Для хранения количества букв будем использовать словарь. Рассмотрим самый простой вариант подсчёта. Пройтись по всем буквам, если текущей буквы ещё нет в словаре, то это первое вхождение - устанавливаем кол-во равным одному, если буква уже есть то увеличиваем кол-во на 1.

Читать далее Группировка и подсчёт элементов в списке Python

PL/SQL Developer. 2. Выполнение запросов и редактирование данных.

Выполнение запросов

После подключения добавляем новое Sql-окно

PL/SQL Developer откртиые нового Sql-окна

Пишем запрос, нажимаем F8 или кнопку на панели инструментов и получаем таблицу - результат запроса.

Читать далее PL/SQL Developer. 2. Выполнение запросов и редактирование данных.