Рубрика «Программирование» - 889

Каждый программист — проектировщик API. Хорошие программы состоят из модулей, а протокол взаимодействия модулей — это тоже API. Хорошие модули используются повторно.

API — это большая сила и большая ответственность. У хорошего API будут благодарные пользователи; поддержка плохого превратится в кошмар.

Публичное API — не воробей, опубликуешь — не уберешь. Есть только одна попытка сделать все правильно, поэтому постарайся.

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

API должно описывать само себя. Изучение кода на таком API не вызывает желания читать комментарии. Вообще, комментарии редко нужны.

Перед разработкой API собери требования с долей здорового скептицизма. Осознай общие задачи и реши их.

Оформляй требования как шаблоны использования API. Сверяйся с ними в процессе проектирования.Читать полностью »

Чем больше я пишу однострочники в шелле, тем больше я прихожу к двум важным идеям:

  1. Это очень мощное средство для «непосредственного программирования», то есть указания компьютеру, что делать.
  2. Большая часть однострочника посвящена grep/awk/cut/tr, которые каким-то образом выковыривают и приводят в человеческий вид вывод предыдущих утилит.

При том, что модель pipe'ов восхитительна, совершенно грязные хаки по отлову нужных полей в выводе во втором пункте («а вот тут мы можем выделить нужное нам по характерной запятой с помощью awk -F, '{print $2}'...) делают процедуру спорной по удовольствию, и уж точно нечитаемой.

Ещё одна серьёзная проблема: при том, что шелл даёт довольно много идиом из функционального программирования, в нём нет идиомы фильтрации списка по результату выполнения внешней программы. То есть „грепнуть“ список мы можем. А вот оставить в списке только те элементы, для которых какая-то программа вернула „успех“ — нет.

При этом есть враждебная и не очень хорошо написанная среда — powershell (винды). В которых взяли хорошую идею (пайпы передают не текст, а объекты), но испортили её двумя вещами:

  1. Неэргономичной консолью виндов (Shift-PgUp где, а? говорят, Ctrl-PdUp в новых версиях)
  2. предложением пойти и выучить .net для того, чтобы нормально с методами работать.
  3. Отсутствием под большинство операционных систем

Хочется иметь объекты в пайпе в тёплом ламповом линуксовом шелле. С hand-candy (мало печатать), eye-candy (приятно смотреть) и общей эргономичностью процесса использования. Ещё хочется иметь возможность сочетать „новый подход“ со старым, то есть обычным текстовым pipe'ом.

Идея

Надо написать набор инструментов, которые позволят в pipe-style оперировать с структурированными данными. Очевидным выбором является XML JSON.
Нам нужно:

  1. Утилиты, которые примут типовые форматы на вход и сконвертируют их в json.
  2. Утилиты, которые позволят в pipe'е манипулировать с json'ом.
  3. Утилиты, которые приведут json в „обычный“ формат.

В этом случае человек не будет видеть json на экране, но будет иметь возможность работать с ним.

Для затравки

(для понимания я буду писать длинные имена утилит, в реальной жизни это будут короткие сокращения, то есть не json-get-object, а что-то типа jgo или jg)

Выводит только файлы, для которых file сумел определить тип:
ls -la | ls2json | json-filter 'filename' --exec 'file {} >/dev/null' | json-print

Выкачивает с некоторого сайта токен для авторизации, выковыривает его из json'а и выставляет в переменные среды окружения, после чего скачивает список и отфильтровав по регэкспу поле „автор“ выкачивает все url'ы:
curl mysite/api.json | env `json-get-to-env X-AUTH-TOKEN`;curl -H X-AUTH-TOKEN $X-AUTH-TOKEN mysite/api/list.json | json-filter --field 'author' --rmatch 'R.{1,2}dald*' | json-get --field 'url' | xargs wget

Парсит вывод find -ls, сортирует по полю size, вырезает из массива элементы с 10 по 20, выводит их в csv.
find . -ls | ls2josn | json-sort --field 'size' | json-slice [10:20] | json2csv

Читать полностью »

Добрый утро, дорогие читатели.

Два года назад меня захватило желание что-то поменять, решил перейти на Дворак для программистов.
Переделал клавиатуру, наклеил модный наклейки с Ebay. И…
БольЧитать полностью »

Недавно я писал пост про то, как был придуман и написан thunderargs. Сегодня я раccкажу о том, как его можно применять.

Напомню, что эта штука предназначена для обработки параметров функции при помощи аннотаций. Например, так:

OPERATION = {'+': lambda x, y: x+y,
             '-': lambda x, y: x-y,
             '*': lambda x, y: x*y,
             '/': lambda x, y: x/y,
             '^': lambda x, y: pow(x,y)}

@Endpoint
def calculate(x:Arg(int), y:Arg(int),
                       op:Arg(str, default='+', expander=OPERATION)):
    return str(op(x,y))

Постараемся по ходу тутора решать вполне определённые проблемы, а не какие-то эфемерные задачки. Ну а теперь — к делу.

Читать полностью »

Наткнулись недавно на винрарную подборку шуток про баги, авторства небезызвестного Юрия Нестеренко (который YuN). Подумали — а почему бы не нарисовать комиксы по ним? Пока осилили где-то половину, но выкладываем, что есть.

Комиксы по сетевому творчеству Юрия Нестеренко (aka YuN) — почему глючат программы
Читать полностью »

POCO — легковесный, мультиплатформенный open-source набор библиотек и классов С++, облегчающих написание мультиплатформенного ПО.
Выпускается под Boost Software License.
Дополнительные сведения о POCO:
pocoproject.org/features.html
ru.wikipedia.org/wiki/POCO
Прекрасно организованная документация по структуре классов доступна в html-онлайн, html-оффлайн.
Документация по основным возможностям с примерами использования — в pdf: pocoproject.org/documentation/index.html

POCO имеет богатейший функционал — очень многое — всё-всё, что нужно для счастливой жизни C++ программиста! Работает инструментарий отлично, имеет продуманный API.

POCO собирается для большого числа ОС, в т.ч. Desktop Windows, Windows CE, Linux.

По своему опыту замечу, что POCO для этих ОС собирается без проблем.
Методику кроссплатформенной сборки из Windows для этих ОС постараюсь вам, уважаемые с++ разработчики, донести в своих трёх статьях «Cross-compile POCO из Windows».
Читать полностью »

Вечером в среду, 28 мая, в Москве состоялось событие, которое, если и не перевернёт управление проектами в России, то точно встряхнёт — встреча участников группы «Управление проектами» сайта Linkedin. Это был не обучающий семинар. Это была не конференция. Формат встречи был уникальный — создатель группы, он же спикер — Дмитрий Джафаров разбирал книгу «Цель. Процесс непрерывного самосовершенствования» Э. Голдрата. Почему формат события был уникальный? Всё просто — разбиралась реальная методология, которая стала популярной на западе, но не только с проецированием на процессы России, но и с разбором реальных кейсов участников.

image
Читать полностью »

Онлайн трансляция второго дня конференции DevCon 2014
Дорогие друзья!
Не пропустите трансляцию второго дня конференции DevCon 2014 (29 мая с 9:00 МСК)!
Основная программа второго дня конференции откроется интереснейшими мини-докладами по 30 минут. Вы сможете узнать много интересного от наших партнеров и приглашенных спикеров.
Читать полностью »

«Алгоритмы: построение и анализ», «Искусственный интеллект: современный подход» и другие книги по свободной ценеНедавно у ребят из books.ru произошло очередное пополнение раздела электронных книг, предлагаемых по свободной цене. Акция продажи новых электронных изданий будет идти до 1 июня (но судя по опыту прошлых акций на некоторые книги свободная цена сохранится и в будущем).

Но в любом случае, я бы не стал писать этот пост, если бы не увидел, что коллекция пополнилась настоящими бриллиантами. «Алгоритмы: построение и анализ (CLRS), 2-е издание» (Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн) (читал эту книгу в печатном виде и могу сказать, что перевод просто отменный). Искусственный интеллект: современный подход (AIMA-2), 2-е издание (Стюарт Рассел, Питер Норвиг).

С момента первого анонса о свободной цене в раздел добавились книги Якоба Нильсена, Фредерика Брукса, Мартина Фулера, Стивена Прата, Александра Степанова, Джоэла Спольски, Майкла Физерса и др. Под катом находятся около 40 новых книг, которые более всего заслуживают внимания (спрятаны под спойлер).
Читать полностью »

Смотрите онлайн трансляцию конференции DevCon 2014

Дорогие друзья!

28 и 29 мая присоединяйтесь к онлайн-трансляции крупнейшей конференции Microsoft в России по разработке и тестированию ПО DevCon 2014!

DevCon 2014 – это уникальная возможность узнать о том, куда движется платформа Microsoft, услышать о первых результатах внедрения и использования новых технологий, а также задать вопросы в прямом эфире экспертами Microsoft и гуру индустрии разработки.

Смотрите онлайн трансляцию конференции DevCon 2014
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js