to post messages and comments.

← All posts tagged программизм

Попыталась выяснить, чем использование Руби в Японии отличается от использования Руби в Штатах.
engineering.appfolio.com
Бросила это занятие на середине, ибо вся статья – поток одинаковых блоков, в которых автор сначала задаёт вопрос «Так как же Руби используют в Японии?», а потом начинает рассказывать об особенностях использования Руби на западе. Между блоками идут куцие склейки в виде перечисления названий конференций руби девелоперов, перечисления имён центровых разработчиков Руби (и времени, в котором они живут друг от друга) и рассказами о том, что японское правительство спонсирует Руби. Где-то там мелькнуло что-то про IoT и память, но буквально в двух предложениях.
Ну нельзя же так =_=

Оказалось, что даже при использовании WSF файлов модульность получается условной. На деле во время выполнения весь код как бы сливается в один большой скрипт, и для простых функций Private и Public теряют смысл. То же самое касается переменных и констант на верхнем уровне. Похоже, единственный способ заизолировать код – пихать всё в классы. Тоесть один файл – один класс. Плюс там же в файле «модуля» объявлять переменную и тут же присваивать ей объект этого класса. Объекты все создадутся при старте скрипта нормально, но, разумеется, придётся указывать переменную при вызове функций. Пичалька.

Если у нас сокеты, скажем, в каком-нибудь Net::HTTP, и случается ошибка, то вот вот это:
$stderr.puts "Ошибка: #{ e.message }"может кончиться этим:
incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)Поэтому нужно делать так:
$stderr.puts "Ошибка: #{ e.message.force_encoding("windows-1251").encode("UTF-8") }"Собственно, это результат мышления в стиле «двух кодировок» и «какой-такой UTF-16 я в линупсах привык к UTF-8 и доки не читаю».
pics.lindachan.net

И вообще, раз уж зашла речь, предлагать пользователю сходить на сайт и зарегистрировать приложение (тоесть самому ввести название, описание, callback-url) чтобы получить ключи (как это делает тот же Discogs тэггер в foobar2000) – это такой лихой костыль или типичный нормальный воркфлоу в мире OAuth?

Поубивала бы авторов OAuth. Вот я зарегистрировала на том же Тумблере свою программу. Мне дали Consumer Key и Consumer Secret. При чём первый выводится в интерфейсе, а второй стыдливо прячется за ссылкой «Show Key». Название намекает, что это значение – штука секретная и не для посторонних глаз. А потом я пишу программку на Руби, которая должна выполняться на машине пользователя. Есть гем, который инкапсулирует API. В настройках кроме всего прочего нужно указать оба значения. Тоесть как ни шифруй этот самый секрет, для находчивого пользователя никаких секретов нет. В чём тогда смысл всех этих плясок с ключами? Как быть в итоге?

То, что у функций в Руби есть опциональные параметры с дефолтным значением, это, конечно, хорошо. А то, что нельзя пропустить один опциональный параметр и указать значения следующих вызовом вида «byaka(12, , 34)», это, конечно, очень плохо =_=

Пилю модуль со строковыми функциями в стиле VB6. В качестве упражнения и безболезненного погружения. Сначала хотела стандартный класс переопределить, но потом решила не делать этого. Собственно, узнала кое-что новое про сами VB функции. Например, в Replace() есть параметр Start, который по идее только сообщает с какого символа начинать поиск и замену, а на деле (и это задокументировано!) срезает всё, что было до этого символа. Я прямо в шоке, всегда думала, что активно использую этот параметр, ан нет, видать, ни разу не использовала.

То ли я невнимательно читала спецификацию syslog, то ли авторы класса Syslog в Руби, но ихние функции debug(), error() и прочие не соответствуют тому, что я вижу в своём syslog сервере. Тоесть отправляю error(), а оно появляется как Warning, falal() – как Error и так далее. Разве что только info() нормально выходит.

Короче, воюю я тут с дубасом™. пишу скриптики на машине с Windows, а на удалённой линукс-машине запускаю и смотрю, что происходит. Проблема в том, что я могу залогиниться по SSH на удалённую машину, но скрипты работать не будут – библиотека будет жаловаться, что дубас не доступен, исков не найдено. Каких-то переменных не хватает, короче. И что делать? Бегать от машины к машине? Я нашла выход. Запускаем терминал на удалённой машине, запускаем tmux и проверяем на каком-нибудь qdbus, работает ли всё. Отключаемся от tmux и закрываем терминал. Идём на рабочую машину, логинимся по SSH, подключаемся к сессии tmux и радуемся рабочему дубасу.

И снова. Некая либа с неким функционалом. Сначала одной функцией внутрь загоняется буфер с данными. Потом данные преобразуются, и второй функцией данные получаем назад. Функция принимает параметр, указывающий размер передаваемого буфера. А какой размер буфера? Стандартный метод с передачей буфера нулевой длины и получения требуемого размера не работает. Смотрим документацию и находим пример использования этих функций. Пример оформлен в виде функции, в которую размер выходного буфера передаётся через параметр. При этом нигде не написано, что размер данных останется прежним. Тоесть самими разработчиками либы предлагается УГАДАТЬ требуемый размер буфера. И ведь это не единичный случай =_=