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 - ".

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


Результат:

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 )

case insensitive

Узнал жесть. Оказывается, PHP не просто case insensitive по отношению к названию функций и прочая. Он делает это С УЧЁТОМ ТЕКУЩЕГО COLLATE!!!

pohape

А кто-нибудь может объяснить мне чем php так кардинально плох? По мне так намного лучше перла и не сказать чтобы катастрофически хуже питона.

А если учесть конюктуру - то иного средства сделать что-то для веба и не потом не искать днём с огнём хостера, который согласится поднять у себя всё необходимое для твоего поделия и не переплачивать за vps я сейчас не наблюдаю.