Category: it

Category was added automatically. Read all entries about "it".

long file paths in bare Windows

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

Довольно быстро выясняется что ни одна имеющихся из коробки программ это сделать не позволяет. Значит, надо программировать. Среда программирования в Windows из коробки - это powershell. Засовываем UNC path в System.IO-чего-нибудь и.. получаем сообщение о недопустимых символах. Идём в гугль, читаем: http://blogs.msdn.com/b/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx . Коротко: UNC пути в .NET запрещены. Потому что безопасность.

Надо импортировать нативный win32 API. В гугле есть рецепты. После какого-то количества копипасты всё работает. Кладём результат в long.ps1 и... он не запускается. Потому что безопасность.

В тоске перечитываем что пишет powershell.exe /? и находим что можно оказывается скрипт заbase64кодировать и указать прямо в командной строке. Тогда безопасности угрозы нет и всё выполняется. Окей. Пропускаем его через base64 -, и ничего не работает. Конечно, это же "юникод", то есть надо писать в ucs-2. Пишем, и опять ничего не работает. Начинаем сравнивать вывод [System.Text.Encoding]::Unicode.GetBytes(..) и recode utf-8..ucs-2 и обнаруживаем что порядок байтов разный - в ucs-2 первый старший, а в байтах от MS - второй. Потому что уникод, новый чудный мир, долой возню с байтами. В итоге правильная команда для фильтрации: "recode utf-8..ucs-2/21-Permutation|base64 - ".

Соединяем всё вместе, запускаем:


Результат:

Illiterate programming #2

Ещё интересного из экосистемы microsoft.

Есть такой пакет для .net, stylecop, для проверки форматирования C# исходников. Кроме условно полезных проверок, типа просьб явно поставить скобки в сложных выражениях, и безполезных, например правила "после закрывающей скобки должен быть перенос", есть и откровенно идиотские. Например, саммари для каждой проперти должна начинаться со слов "Gets or sets ...". Очевидно, что ценность этой воды в точности никакая, и при большом числе пропертей от повторения везде одного и того же безполезного текста начинает рябить в глазах. В особенно клинических случаях требуемая фраза становится достаточно длинной, например "Gets or sets a value indicating whether" или "Initializes a new instance of the {class name} class".

Хуже всего, однако, не это, а то что лень писать эту херню породила класс продуктов "генератор документрующих комментов". Причём их авторы не ограничились на затыкании рта stylecop-у. Они начали... генерить и вовсе всю документацию. Они провели достаточно большую работу по научению своего продукта английскому языку. Теперь метод CreateItem() автоматически сгенерит текст "Creates the item", и так далее.

Это, конечно выглядит очень круто - смотрите, бот пишет документацию. Беда в том что ценность такой "документации" нулевая, ведь она просто повторяет имя метода (свойства, класса и так далее). В то время как от документации нужно чтобы она рассказывала о том что нельзя понять из имени. Это не говоря о том что это часто глючит и генерит ерунду.

К сожалению, многие windows-девелоперы этого не понимают и с радостью набивают исходники автогенерённым мусором, который потом приходится исправлять.

Литература:
http://stylecop.soyuz5.com/SA1642.html
https://www.youtube.com/watch?v=xeZqoCGcHSU (извините за видео, текстовых примеров авторы не приводят. zeitgeist такой вот)

Microsoft values your privacy

Говорят, фейсбук запрещает называться не своим именем. Это плохо. Надо делать как микрософт - запрещать называться своим именем.

Ну то есть он пишет "This display name is already in use. Please choose another display name", но мы-то знаем, что это просто отмазка, чтобы NSA не сильно наезжал.

PaProxy, kickoff

Это звучит смешно, но Микрософт через skype начал продвигать pulseaudio. Вот и не верь после этого в конспирологию.

Как бы то ни было, надо как-то с этим жить. Я предлагаю написать puslseaudio API поверх альсы.

Я создал: https://github.com/max630/PaProxy . Оно линкуется, но делает промерно ничего, только ругается в stderr и выдаёт ошибки.

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

Органчик

Пока все обсуждают войнушку в украинских регионах, в самом Киеве тихо и незаметно прошло интересное событие: из парламента выгнали коммунистическую партию. Предлог, по нынешним временам, благовидный: "сепаратистские заявы". Тем не менее, чесалось у революционеров давно - КПУ в списке на люстрации с самого начала шло в программе той же "Свободы" через запятую с ПР. Это при том что в событиях 2004 года, например, они однозначно поддержали оранжевых - и это тем сильно помогло. Но $SUBJ.

А вообще интересно, да, смотришь на человека - он вроде умный, иногда даже программист. А потом раз - и понимаешь что у него голодомор головного мозга и Україна ще не вмерла.

Литература:
http://korrespondent.net/ukraine/politics/3358864-deputaty-vyhnaly-yz-rady-fraktsyui-kommunystov

Perl: wtf

Мне очень стыдно, но моим первичным языком для хаканья является перл. Да, тот самый, который похож на base64. Как-то так получается, что именно с его помощью у меня лучше всего у меня получается get things done. Он уже мало развивается, следовательно стабилен. Он неплохо вылизан за все эти прошедшие годы. Он быстро работает, в моём понимании - быстро грузится, не занимает много памяти. Мой rss аррегатор работал на виртуалке с 32мб памяти, и там был ещё веб-сервер, ssh, cron и что-то ещё. И в целом он не подводит меня, я чувствую что могу на него положиться, и быть уверен что программа будет вести себя именно так, как я оожидаю, а не случится какой-нибудь ерунды.

Но вчера буквально за 1 вечер я узнал 2 новых вещи про него:
Collapse )

о линуксенадесктопе

Пока меня не было, кто-то опять что-то сказал $SUBJ

Перефразируя Маяковского, людей, которые начинают говорить о том что линукс не готов для десктопа, надо бить правильным ударом в нос, ещё не получив и перечисления причин, по которым он для него не готов. Это будет чертовски точное описание ситуации.

детское программирование

Ознакомился с достижениями науки для обучения детей программированию. Естественно, ограничился тем что доступно для Линукса.

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

Показал наиболеее работающий вариант ребёнку, он на день заинтересовался черепашкой, потом забил. И нормально, по-моему, я не уверен что это вообще нужно. Как-нибудь потом покажу что-нибудь ещё.

Основные проблемы, кстати, были с относительными углами. После некоторого количества мучений сделел бумажку, прикладываемую к экрану, вроде с ней пошло полегче.

Collapse )

PS: кстати какой гений придумал переводить поворот как "вправо"? вправо стрейфятся, а поворачивают НАправо.

PPS: там и на английском не всё в порядке. Зачем-то в heap push и pop делают...

C++ vs boehm GC

Тут [info]kouzdra обсирает shared_ptr, мол тормозные они. Довольно интересно. Не то чтобы они мне по работе были слишком тормозными чтобы их не использовать, но меня что-то задело. И пока я был в задетости, внезапно сообразил, что никакой c++ специфики мусоросборщик требовать не должен. Потому что объекту, которого будут коллектить, в идеале совсем никаких действий по своей смерти делать не надо - это во-первых, лишние тормоза, а главное - не несёт практической пользы. То есть деструктор для таких классов вызывать не надо. А я всё думал, как это сделать.

Таким образом, приляпал я к плюсовому коду kouzdra тот самый тупой libgc. Код есть тут: http://www2.max630.info/bench/main.cpp

Он, оказывается, работает быстрее, чем ручные delete. Раза в полтора.

Collapse )