?

Log in

No account? Create an account
Здесь могут водиться... волки
10 November 2020 @ 02:39 am
ДЛЯ:
0. Связи
1. Личных сообщений
2. Флуда
3. Срачей
4. ....
666. PROFIT
История, описание, FAQ этого блога.
Блогополезности
Список личных фриков и забаненных
Написать письмо:hexxladen[inu]inbox.lv
Другая контактная информация есть в профиле
Поиск по блогу:

Другие ресурсы:

Дружественные проекты:
Сайт сообщества свободомыслящих Том Хаоса by Paperdaemon Жизнедеятельность депутата Семенова Сергея Сергеевича Федеральный список экстремистских материалов Семенов Сергей Сергеевич. Секреты депутата. Открыто для доступа из РФ
 
 
Current Mood: дверь запили
Current Music: панк-рок
 
 
Здесь могут водиться... волки
Наконец нашел дико красивые графики, которые наш товарищ рисовал в Turbo Pascal под DOS. Ни я, ни товарищ алгоритма не помним, помним только то, что в качестве входных данных была матрица 3x3. Писалось это в качестве какого-то зачета. Но товарищ, тот еще креатвищик, усовершенствовал формулу и задание, в результате программа рисовала четырехмерные графики. Поскольку четырехмерного монитора у нас не было (хотя была мысль собрать, но что б мы делали со своими трехмерными глазами), четвертое измерение отображалось цветом.
С этими графиками связана забавная история, которая, минимум до 2010 г. будоражила универ. Дело в том, что условное задание "нарисовать в паскале графики", давалось всем. Но по внутриуневеровской сети до сих пор ходит, или ходил, легендарный исходник моего товарища. И его периодически некоторые долбозавры брали, и пытались сдать преподу Б. А препод Б. спрашивал, "объясните, как написали, и что оно делает". И это был провал. Сдающего.

Вообще хочу это соптимизировать и сделать из оригинала заставку, на Юнити, например.



https://youtu.be/qutWWmHYjYc

В оригинале звука не было, и работало оно гораздо медленнее, но может в этом виноват эмулятор DOS, я ускорил видео в 20 раз примерно.

Один из исходников, вроде последняя версия, на PasteBin и пример файла данных к нему
Весь архив с проектом

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/17/psihodelicheskie-grafiki-dos-turbo-pascal/
 
 
Здесь могут водиться... волки
И случайно, самое полное описание WshShortcut.

Преамбула


Почему-то, уж не знаю почему, в .NET Framework (во всяком случае до 4 версии, в 4 вроде появился) не было стандартного способа создать ярлык (файл .LNK) программно. Но способы все-таки есть. Расскажу о них, в порядке уменьшения геморройности.

I. Создать ярлык вручную


Самый геморройный способ, для любителей ассемблера и прочего байтокопательства. Файл ярлыка (*.lnk), это обычный бинарный файл. Почему-то в сети бытует мнение, что формат LNK-файлов закрыт, и чуть ли не засекречен. Однако это не так, спецификация формата вполне себе открыта и лежит на официальном сайте Microsoft. Так что остается осилить 48 страничную спецификацию, и можно приступать. :) Но мы этого делать не будем. Замечу лишь, что в формате файла есть несколько странных моментов. Например, зачем хранить в файле ярлыка серийный номер тома и тип диска (HDD, CD, Floppy) и NetBIOS имя компьютера, я совершенно не понимаю.

II. Обратиться к Windows Script Host через COM-интерфейс


Способ, наиболее часто встречающийся в сети, но почему-то, весьма поверхностно описанный. Windows Script Host - компонент Microsoft Windows, предназначенный для запуска сценариев на скриптовых языках JScript и VBScript, а также и на других дополнительно устанавливаемых языках (например, Perl).

Остановлюсь поподробнее на некоторых моментах. Сначала самое основное.
В References проекта надо добавить соответствующий компонент (щелкнуть по References правой кнопкой мыши, выбрать Add Reference...) В появившемся окне выбираем вкладку COM и находим компонент Windows Script Host Object Model.


Из-за того, что мы используем COM-интерфейс, с нашей программой придется таскать библиотеку для взаимодействия с ним Interop.IWshRuntimeLibrary.dll (ее нам без нашего участия сделает компилятор .NET).
Теперь указываем соответствующую директиву using:

using IWshRuntimeLibrary;

Создаем объект WSH Shell:

WshShell wshShell = new WshShell(); //создаем объект wsh shell
На самом деле у объекта WshShell довольно много интересных возможностей, например выполнять VBS или JS сценарии прямо из кода C#, со всеми возможностями Windows Scripting Host, естественно. Но это так, к слову. Мы же создадим объект для управления ярлыком:

</pre>IWshShortcut Shortcut = (IWshShortcut)wshShell.
CreateShortcut(ShortcutPath);</pre>


где ShortcutPath - строковая переменная, в которую записан путь к файлу создаваемого ярлыка.

В самом простейшем случае, надо задать имя файла для которого создается ярлык:

Shortcut.TargetPath = @"C:\Windows\notepad.exe"; //путь к целевому файлу

Если дополнительные параметры не заданы, то:
- в качестве иконки ярлыка будет установлена иконка по умолчанию (для EXE - его иконка, для остальных - стандартные системные иконки)
- в качестве рабочего каталога - каталог, в котором расположен целевой файл (тут C:\Windows\).
- размер окна - нормальный.

Теперь нужно сохранить ярлык:
Shortcut.Save();

Пример кода целиком на PasteBin

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

Пример кода функции, задающей дополнительные параметры ярлыка на PasteBin

Остальные параметры под катомCollapse )

Горячая клавиша:
Задается параметром string Shortcut.Hotkey
Внимание! Если переменной попытаться установить значение null, произойдет ошибка нехватки памяти (OutOfMemoryException). Любая строка не подпадающая под формат, вызывает ArgumentException "Значение не попадает в ожидаемый диапазон."

Строка должна быть следующего вида: "Ctrl+Alt+N", т.е. содержать названия клавиш-модификаторов, символьную или функциональную клавишу, названия должны быть разделены знаком + без пробелов. Названия регистронезависимы.
Чтобы хоткей сработал, ярлык надо создавать или в меню Пуск, или на Рабочем столе. Почему-то если создать ярлык где-то еще, а потом скопировать в Пуск или на Рабочий стол, хоткей не работает (хотя, если менять горячую клавишу у уже созданного ярлыка, через свойства ярлыка, то все работает). Установленный хоткей становится глобальным для всей системы, т.е. если "Ctrl+Alt+N" обрабатывается в какой-то программе, то после создания ярлыка, сочетание клавиш будет перехвачено Windows, и запустится то, на что указывает ярлык.
Список возможных клавиш:
Модификаторы: CTRL+ ALT+ SHIFT+ (и еще какой-то EXT+ встречается в [1])
Алфавитно-цифровые, функциональные и прочие:
F1-F12, 0-9, A-Z
ESC, ENTER, TAB, SPACE, PRINT SCREEN
(указывается как SNAPSHOT), BACKSPACE [1] (причем обычным способом через проводник установить их нельзя, и нет, Ctrl+Alt+Del так не перехватить, хотя создать такой хоткей можно).
Полный список клавиш можно посмотреть в WINUSER.H или в [2], имена берутся без VK_, и не получится в качестве третьей клавиши использовать имена модификаторов и мышиных кнопок, ярлык создастся без ошибок, а вот работать не будет.

Забавный баг


Через свойства ярлыка нельзя задать горячую клавишу БЕЗ модификаторов. Windows заботливо будет нам подставлять CTRL+ALT+, а вот с помощью WshShortcut - можно, т.е. если значение Hotkey установить, например в "F1" и создать ярлык на Рабочем столе, то по нажатию F1 будет вызываться, например, Блокнот. На практике это использовать, конечно, никак нельзя, разве что над кем-нибудь подшутить.

Демо и класс-обертка над IWshShortcut на GitHub


III. Создание ярлыка через Windows API.


Вообще, этот способ по геморройности надо было бы ставить на второе место, чего одна статья [3], описывающая все API, стоит. Но авторы статьи, крутые акулы программирования, для нас постарались и таки сделали классы для работы с ярлыками, причем сделали великолепно! С помощью их класса ShellLink можно не только создавать новые ярлыки, но и читать/редактировать существующие.
ShellLink вместе с демо можно скачать с mega.nz или с моего репозитория на GitHub, не знаю, будут ли проблемы с лицензией, но на vbaccelerator.com вроде Creative Commons.
С официального сайта почему-то сей полезный горшочек пропал, хотя статья осталась. Видать авторы забили на проект и что-то протухло.
Повторюсь, класс написан хорошо, ничего не падает и с ошибками не вылетает. Единственное, что криво, это установка хоткея. Ну да и черт с ним, мне особо не нужно было, так что ковыряться и исправлять не стал.
Написано сие дело аж в 2003 г., но прекрасно работает до сих пор, на Windows 7 в т.ч.

Для подключения к своему проекту из оригинального архива понадобятся два класса (файлы ShellLink.cs и FileIcon.cs), далее подключаем соответствующий namespace (using vbAccelerator.Components.Shell;) и можно использовать. Пример кода:

ShellLink shortcut = new ShellLink();
shortcut.ShortCutFile = @"C:\Temp\shortcut\test.lnk";
shortcut.Target = @"C:\Windows\notepad.exe";
shortcut.WorkingDirectory = @"C:\";
shortcut.IconPath = @"C:\Windows\System32\shell32.dll";
shortcut.IconIndex=111;
shortcut.Description = "Тестовый ярлык";
shortcut.Arguments = "file.txt";
shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmMaximized;
shortcut.Save();


Источники


1. WshShortcut.Hotkey Копия
2. Virtual-Key Codes Копия
3. Creating and Modifying Shortcuts (ShellLink, WebArchive) Копия
4. Создание ярлыков с помощью Windows Script Host
5. Спецификация формата файлов LNK Копия

Исходный код


1. ShellLink от vbaccelerator. Скачать с Mega.NZ. На GitHub
2. Демо и класс-обертка над IWshShortcut на GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/15/c-programmnoe-sozdanie-yarlyka-shortcut-windows/
Tags: , ,
 
 
 
Здесь могут водиться... волки
Это заметка от моего собственного склероза, потому что мелочи иногда забываю.
Для общей информации, что такое этот самый сетевой неймспейс. Это такая хитрая фиговина в ядре Linux, которая позволяет на одной машине с одной сетевой картой соединяться с сетью, будто у вас вагон и маленькая тележка этих сетевых карт (соответственно, куча локальных IP), можно, например, на одном неймспейсе поднять VPN до одного провайдера, на втором - до второго, на третьем - коннектиться к основному, и т.д.

Network namespace - это логически отделенный от других стек сетевых протоколов в Linux. Такая себе контейнерная виртуализация для сетевых интервейсов, когда chroot LXC и нужна виртуализация только сетевых интерфейсов. Эмулируется полностью сетевой стек: сетевые интерфейсы, таблица маршрутизации, файрволл и т.д. Так, как это работает на уровне ядра и для определенных процессов, то вполне можно получить рабочую конфигурации, когда на одной машине есть несколько сетевых интерфейсов с одинаковыми IP-адресами и ничто не конфликтует.
Хочу по этим штуковинам написать большой материал, как мы их у себя сконфигурировали и развели с одного сервера целый пул доступа к разным VPN-провайдерам, но руки не доходят. Поэтому да, заметка от склероза.

Каждому из нэймспейсов можно подсунуть свою конфигурацию сети, свои конфигурационные файлы (resolv.conf, hosts)

Для этого достаточно положить соответствующие файлы в директорию /etc/netns/имя_namespace, например, для гипотетического namespace с именем riseupvpnns это будет каталог /etc/netns/riseupvpnns, туда можно положить, например, resolv.conf, прописать необходимые DNS, и эта конфигурация будет влиять только на данный namespace, в независимости, что там в основной системе прописано.

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/15/setevye-namespace-y-linux-otdelnye-konfiguratsii-dlya-kazhdogo-namespace/
 
 
 
Здесь могут водиться... волки
Оказывается, вплоть до версии .NET 4 в перечислении Environment.SpecialFolder нет пути к папке, куда установлена Windows (обычно C:\Windows). Эту досадную оплошность можно обойти двумя способами:
1. Посмотреть в переменную окружения SystemRoot или windir:
string windir=Environment.GetEnvironmentVariable("SystemRoot");
string windir=Environment.GetEnvironmentVariable("windir");


2. ВНЕЗАПНО, бывают хитрые самосборные или специальные дистрибутивы, где данных переменных окружения нет. Тогда:
- надо взять путь к директории system, (обычно это C:\Windows\System32), который есть в Environment.SpecialFolder во всех версиях .NET: Environment.SpecialFolder.System
- получить директорию выше уровнем:
string windir = System.IO.Directory.GetParent(
        Environment.GetFolderPath(Environment.SpecialFolder.System));


Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/13/c-poluchenie-puti-k-papke-os-windows/
Tags: ,
 
 
Здесь могут водиться... волки

Другие фото будут, когда сдадим объект. Извентиляемся за качество, снимали на тапок.

Слава Украине!
 
 
Здесь могут водиться... волки
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. Часть I — инициализация (и введение)
     -Преамбула
     -Общая структура БД
     -Заголовок базы данных
     -Дополнительные перечисления и мелкая корректировка с придирками.
     -Поля, свойства и конструктор класса
     -Функции для чтения БД
     -Функции для чтения заголовка
     -Закрытие базы данных
     -Открытие базы данных, чтение и проверка заголовка, чтение индексов.

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть II. Поиск.
     -Трехбайтовые числа
     -Байтовый substr
     -Поиск ID или смещения в "Диапазонах IP"
     -Функция поиска в "Диапазонах" (SearchDB)

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть III. Универсальный формат упаковки данных и получение данных из справочников.
     -Приведение типов
     -Анализ (распаковка) записи
     -Обработка полей записи
     -Дополнительные функции

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. - Часть IV. Получение данных.
     -Чтение информации из справочников
     -Поиск в справочнике по ID
     -Очистка ответа
     -Функция, формирующая финальный ответ.

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Приложение
     -Дополнительно
     -Источники
     -Код на GitHub
     -Создатели

Скачать все в PDF
SxGeoSharp на GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/03/sxgeosharp-interfejs-na-c-dlya-bazy-dannyh-sypexgeo-soderzhanie/
 
 
Здесь могут водиться... волки
Дополнительно.


Код для отладки (тест работы со справочниками, распаковки "универсального формата" и загрузка справочников в DataSet)

Источники


Спецификация формата SxGeo Копия

Код на GitHub


https://github.com/tolik-punkoff/sxgeosharp

Создатели


БД Cypex Geo (с) 2012-2018 БИННОВАТОР
SxGeoSharp:
Идея: Leha Silent (Tolik-punkoff/Chaossoft/ОИМ)
Реализация: Werwolf aka PunkArr[] aka IogSohoth (Tolik-punkoff/Wildsoft/ОИМ)
Спонсор: OpPosition (ОИМ)

Слава Украине!

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/02/sxgeosharp-interfejs-na-c-dlya-bazy-dannyh-sypexgeo-prilozhenie/
 
 
Здесь могут водиться... волки
Получение кода страны по ID (для БД SxGeoCountry)


Закончим с SxGeoCountry, в которой нет справочников и информации кроме ID страны.
В оригинальном исходнике есть массив с кодами стран, а позиция в массиве, как раз ID страны из базы. Соответственно, надо просто сходить в нужный элемент массива за ISO-кодом страны.
Сделаем соответствующую функцию private string IdToIso(uint ID)

Чтение информации из справочников


Тут все просто, мы должны либо взять определенное количество байт из массива (на это дело есть bSubstr), либо прочиатать данные с диска. На это у нас есть поток SxStream и все позиции - start - откуда начинать читать, seek - сдвиг в файле, и max - максимальная длина записи в байтах.Читать далее...Collapse )

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/02/sxgeosharp-interfejs-na-c-dlya-bazy-dannyh-sypexgeo-chast-iv-poluchenie-dannyh/