четверг, 29 декабря 2022 г.

Регулярные выражения в программном коде

Небольшая книга (41 стр.) посвящена вопросам использования в программном коде такой мощной (и временами недооценённой) техники программирования как регулярные выражения. 

Рассмотрены примеры кода на разных языках программирования: C, C++, Python, Go, Rust, Kotlin. Это пригодно как стартовая точка для использования, или для сравнения различных подходов.

Особое внимание уделено особенностям применения регулярных выражений именно к русскоязычным (локализованным) текстам - чему не уделяется вообще никакого внимания в переводной IT литературе.

 

Всё это можно свободно скачать:

Yandex: текст архив кодов

Google: текст архив кодов

Linux: языковая локализация в программном коде

Небольшая книга (33 стр.), детально описывающая вопросы локализации, руссификации в программном коде на разных языках программирования: C, C++, Python, Go, Rust, Kotlin.

 

Особо это кажется актуальным в связи с реформированием IT отрасли в России... и в связи с массовым (но таким трудным) переходом на Linux, и в связи с требованиями импортозамещения... и, пожалуй, в связи с тем, что это надолго 😆

 

Можно свободно скачать:

Yandex: текст архив кодов

Google: текст архив кодов

воскресенье, 15 мая 2022 г.

Проект книги: "Linux: многопроцессорная эффективность. Выбираем Go"

Это, в каком-то смысле, продолжение ранее выложенного "Конспект Go", но ... 8 лет спустя - радикально переделанное и существенно дополненное.

Редакция 3.87, 219 стр. (формата A4 офис-редактора).

Размер файла текста 1920306

Размер файла архива кодов 99062 


Скачать свободно можно:

Yandex: текст и коды

Google: текст и коды

 

среда, 26 января 2022 г.

конспект Go (обновление)

Обновление конспекта по языку Go, опубликованного ранее в 2016-2017 г.г.

Обновление мало значительное - это, главным образом, подчистка замеченных недочётов и переформатирование примеров кода в том code style как его понимает и делает автоформатирование Go.

Редакция 1.44

Можно свободно скачать здесь:

Google:  текст и коды

Yandex: текст и коды

P.S. В текст сознательно не вносились изменения и дополнения, некоторые детали, которые были уместны для GoLang версии 1.2, не соответствуют текущей версии 1.13.8, но даже такие детали не правились, потому что для такой правки нужно просто написать новый текст.

 

понедельник, 13 января 2020 г.

Ревизия публикаций в блоге

Назрела существенная ревизия (главным образом ссылок) публикаций здесь в блоге: мои сообщения, заметки, публикации и ссылки на электронные книги накапливались здесь около 8-ми лет, и в блоге за это время накопилось 77 сообщений. Большинство из них - это краткий анонс очередного текста электронной книги (и архива сопутствующего программного кода).

Многие из этих текстов расширялись и отрабатывались по 3-5 лет, поэтому представляют очередные (улучшенные) версии предшествующих. Ссылки на устаревшие варианты в облачных хранилищах я, со временем, закрывал к доступу, чтобы не плодить разнородные черновые варианты. В таких случаях мне сообщали (довольно часто) о коллизии ... в комментариях, по почте, аварийным сообщением Google - я в этих случаях старался в кратчайшие сроки отослать ссылку на последнюю актуальную версию. Таких случаев было многие и многие десятки раз, и мне хотелось бы надеяться, что все кто хотел получили доступ к материалам и в актуальной их версии.

Сейчас, из-за большой массы сообщений, эту кучу мусора нужно разгрести и упорядочить, чему и предназначена текущая ревизия ... которая будет продолжаться несколько дней - не удивляйтесь если что-то будет временно не так. Основные пункты ревизии будут проделаны такие:

1. Ссылки на предыдущие версии, ссылки в ранних сообщениях (примерно до уровня 2016-2017 г.г.) будут или удалены (кое-где), или оставлены только на Google, а убраны ранние ссылки на Яндекс. (Здесь имеет значение тот идиотизм, что с какого-то там года (2015?) дурачьё на Украине перекрыло доступ к ряду российских ресурсов, Яндекс в их числе. Для меня это ничего не создало проблемы, но контролировать и править содержимое на Яндекс мне теперь нужно через VPN, окольными путями - при большом количестве ссылок это задалбывает).

2. Все ссылки на материалы будут проверены на актуальность, но по принципу сверху вниз: от самых поздних сообщений здесь в блоге к более ранним. А это значит следующее: если кто-то заинтересуется каким-то материалом, то просматривайте сообщения блога сверху вниз: от более поздних к более ранним. Корректность более давних ссылок я не обещаю...

3. Если при доступе к материалам по ссылкам возникнут проблемы - пишите мне сразу на почту (кому какая понравится):
olej.tsil@gmail.com
olej-tsil@yandex.ru
o.tsiliuric@yandex.ru
olej.tsil@mail.ru
olej@rambler.ua
olej.tsil@ukr.net
olej.tsil@yahoo.com

Не все почты ходят одинаково хорошо... 👎
Но я гарантировано вышлю корректные ссылки и любые разъяснения на любой сигнал, который дойдёт до меня.

4. Если какие-то ссылки из блога - битые (устаревшие, изменившиеся, закрытые по доступу, ...) - найдите способ сообщить мне, я тут же вам всё поправлю, но вы сослужите добрую услуги и всем, кто по этим ссылкам пойдёт после вас.



среда, 8 января 2020 г.

"Лутший форум про Linux"

Часть 1-я, предваряющая ...
Подобный шедевральный текст я обнаружил на стене жилого дома, возле входной двери в подъезд, где огромными неровными буквами было выведено: «Даша ты лутшая». Мне это безумно понравилось: здесь и подростковая непосредственность, и стремление самовыразить себя, и тот уровень грамотности, который мы оставили им в наследство, 
будучи увлечённые своими вдохновлёнными рассуждениями о грядущем торжестве свободы и либерализма …

Вот так же, без ложно понятой скромности, я назову: «Лутший форум про Linux» вот такой форум: http://linux-ru.ru, со всеми к тому основаниями. Больше 11 лет форум наполняется заметками и техническими приёмами по администрированию и изготовлению программного кода под Linux … вот только некоторые из примеров того что здесь есть:

- и объёмные темы с примерами для начинающих только осваивать IT профессию: C++ для начинающих , язык C в Linux: вопросы начального уровня , идеи задач на C для начинающих , примеры задач при изучении C++ , Осваиваем Python по-быстрому...

- и реализации совершенно новых нетривиальных алгоритмов: суффиксные деревья и поиск в строке , распознавание лиц , Машинное обучение (нейронные сети) , Модели классификаторов , OpenCV и компьютерное зрение ...

- и короткие узкоспециальные вопросы, известные и понятные даже далеко не всем матёрым профессионалам: фреймбуфер /dev/fb , файловая система FUSE , локализация строк в C-коде , регулярные выражения в C/C++ , Протокол SNMP в POSIX-операционных системах ...

- и рассмотрение кода на новых языках программирования, появившихся на протяжении последних нескольких лет: Инструменты Go , Примеры кода Go , Swift под Linux , код Kotlin & Java , код на Rust ...

- и множество тем относящихся к программному коду собственно ядра Linux: адреса имён ядра (ASLR) , Фьютекс , Модуль ядра Linux. Виртуальный сетевой интерфейс ...

Показательно, что если и не по итогам этих обсуждений, то, по крайней мере, по мотивам этих обсуждения, отправной точкой для деятельности — мной были написаны мной больше 20 книг. Которые, кстати, находятся в свободной публичной доступности тоже и на этом форуме. 


Несколько сот читателей (по логам статистики) пользовались материалами форума за время его жизни.

Часть 2-я, событийная …
Начиная с 14 декабря 2019 года одного из крупнейших российских хостеров-ловкостеров Айхор, на серверах в дата-центре которого располагался форум, лихорадило, лихорадило... "не по-деццки" … и, наконец, к 18-19 декабря он рухнул окончательно. А Интернет ресурсы его клиентов (которых по некоторым инсайдерским данным числом было до 25000) — упали. Как оказалось, «новые пацаны» делят бабки со «старыми пацанами», кто-то обесточил здание дата-центра, кто-то у кого-то украл и вывез сервера… Одним словом, такой вот «цыганский бизнес», и всё это было бы всё сильно анекдотично и смешно … если бы не было так печально.

В итоге форум нужно было либо ликвидировать и забыть, либо срочно принимать решение, спасать бэкапы форума, менять хостера … практически без времени на предварительную к тому подготовку. Это потребовало нежданных затрат порядка нескольких тысяч рублей — и это на хостинг только ближайшего предстоящего года. А ещё предстоят платежи регистратору собственного доменного имени linux-ru.ru (которое таким сделали до нас и без нас)... или регистрация нового доменного имени.

Часть 3-я, резюмирующая …
Не так давно я размещал на нескольких ресурсах текст-объявление «Передам форум в хорошие руки», с предложением безвозмездно передать форум в ведение и администрирование тому, кто обязуется гарантировать ему дальнейшую жизнь. Несколько кандидатов откликнулись, и даже кое-кто из них оказал некоторую помощь в подчистке и упорядочению форума, в чём я им сильно благодарен.

Но … Мотивация этого предложения состояла в том, хоть явно и не хотелось этого педалировалось, а потенциальные кандидаты так этого и не увидели: я весьма пожилой (не будем уточнять) человек, и меня беспокоило что будет с форумом «после меня» - и в его финансировании, и администрировании, и доступности… Но после аврального спасения форума «на грани фола» парадигма радикально меняется:
- меня более совершенно не занимает вопрос что будет с форумом после меня, что Бог даст - то и будет, вплоть до того что он сразу же и рухнет: «после нас хоть потоп»;
- меня теперь интересует то, что будет с форумом при мне…
- и всё это время я буду сам, эксклюзивно, вести и администрировать форум, и нести все финансовые расходы по его благополучию … просто потому, что не вижу другого механизма его существования;
- и форум всё это время будет безупречно и активно работать.

Часть 4-я, краудфандинговая …
Если вы пользуетесь этим форумом как ежедневным справочником (как я)…
Если вы хотите задавать здесь вопросы и оперативно получать на них квалифицированные ответы…
Если вы полагаете себя состоятельным мужчиной, могущим позволить себе, даже в порядке приходи, заплатить сотню-другую рублей на дело кажущееся вам привлекательным…
… если даже вы вовсе и не мужчина, а бизнес дама, что и ещё даже приятнее...

… то вы, возможно, найдёте уместным и возможным отправить и свою копейку на поддержание работоспособности форума, который без поддержки снаружи может, в принципе, и прекратить своё существование. 


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

Перечислить поддержку можно по следующим реквизитам…

Российские рубли :
- Яндекс.Деньги кошелёк 410012732484297
- Яндекс.Деньги MasterCard 5106 2110 7031 8501
- ПриватБанк MasterCard 4731 2191 0991 5102

Украинские гривны :
- Монобанк MasterCard 5375 4141 0398 0412
- ПриватБанк MasterCard 5168 7422 1694 5729

USD $ :
- Монобанк MasterCard 5375 4188 0013 2292
- ПриватБанк MasterCard 4731 2191 0991 5094


WebMoney:
- WMZ кошелёк - Z135059365296
- WMR кошелёк - R424608380367
- WMU кошелёк - U251720519852          

Bitcoin Wallet: 1DoAwtMYDTdorUyuZcTU6xt4TsY9H7MAWx 

Везде получателем фигурирует, если спросят: Цилюрик Олег Иванович.

пятница, 5 апреля 2019 г.

Передам форум в хорошие руки

Передам форум Linux по-русски в хорошие руки - для администрирования, дальнейшего развития и ведения...

В "плюсы" этого форума:
- уникальный в русскоязычном Итернет ресурс по администрированию и программированию под Linux ...
- накопленный материал по результатам активных работ, при ежедневном сопровождении белее чем 10 лет
- собственное выкупленное доменное имя linux-ru.ru, прописанное по серверам DNS
- отличный на сегодня хостинг (после нескольких проб и ошибок на протяжении лет по разным хостерам)...
- ... хостинг проплаченный на год наперёд!
- можете размещать там любые банеры и рекламу (сейчас их нет), ресурс активно посещается и может быть финансово прибыльным, в гораздо большей степени, чем потребуется для его содержания.

В "минусы" форума:
- требование сохранения общей тематики;
- форум требует ежедневного тщательного администрирования;

P.S. Для сравнения: совсем недавно сходный и родственный Интернет-ресурс (специально не называю имя и ссылку) был продан за 500 000 руб. - это реальная ценность подобного информационного ресурса в умелых руках.

Если обнаружатся охотники, пишите, обсудим:
- почтой o.tsiliuric at yandex.ru
- или здесь в комментариях...

P.P.S. Но а если в этот проплаченный годовой хостинг форума не найдётся охотника его продолжать и поддерживать, то я его уберу из публичного доступа, оставлю только в качестве локального справочника для себя, любимого... (хотя, по отзывам и переписке судя, этим форумом на сегодня посещает не одна сотня пользователей).

вторник, 18 декабря 2018 г.

Машинное распознавание лиц

Об этом уже было здесь в блоге очень коротко ... разбросано по разным темам. И в форуме рассматриваются подобные вещи уже года 3-4:
OpenCV и компьютерное зрение
Open CV (продолжение) ...
компьютерное зрение на одноплатных SBC
Это всё представлялось с примерами программного кода... Но это всё(и + тысячи тем в Интернет на эту тему) - это алгоритмика на методе LBPH, предложенном ещё в 1996 году (подробно описанном, например, здесь: Face Recognition: Understanding LBPH Algorithm). Но за это время появились другие подходы, основанные на deep learning, глубоком обучении, использовании обучаемых нейронных сетей ... методы, которые широко пошли в реализацию на уровне 2015 года ... то есть на 20 лет позже "алгоритмических" методов.

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

вторник, 19 июня 2018 г.

Одноплатные компьютеры (SBC) в Linux

Одноплатные компьютеры (SBC, Single Board Computer) - это очень интересная возможность для использования полноценного Linux в таких "игрушках". На сегодня наблюдается просто бум среди производителей подобных SBC: Rapsberry Pi, Orange Pi и др. ... и до высокопроизводительных устройств от таких мировых брендов как Intel - UDOO_X86.

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

Это же - возможность для профессиональных разработчиков электронных систем использовать SBC в своих разработках, с высокой производительностью, низкой стоимостью и, что самое важное, с возможностью использования в своих изделиях любых из тысяч существующих свободных проектов под Linux.

Там много всего крайне интересного ... и любопытного - например, о глубинных причинах несовместимости и различиях линеек изделий Rapsberry Pi и Orange Pi.
Но всего этого настолько много, что это всё нет смысла описывать в кратком блоге. Для этого был заведен специальный раздел форума: Одноплатные компьютеры.
Там описываются и обсуждаются вопросы использования разных SBC.

Параллелизм, конкурентность, многопроцессорность в Linux

Это всего лишь незначительная правка книги книги с тем же названием от 24 сентября 2014 года, здесь же в блоге. Но мне непроизвольно указали друзья-коллеги на то, что посследние редакции этой книги не выставлялись. Исправляю этот недочёт. Это незначительная правка (дополнение) предыдущей редакции от 8 декабря 2016 года, с тех пор до рукописи руки не доходили.

Номер последней редакции: 06
Объём (страниц): 97
Размер файла текста: 186356
Размер архива кодов: 314873
Дата размещения: 19 июня 2018

Скачать эту редакцию текст и архив примеров к нему можно:
Yandex: текст и архив
Google: текст и архив



четверг, 15 февраля 2018 г.

Сравнение языков программирования

Это развитие того текста, который был выложен когда-то, 3.5 года назад: Сравнительное обозрение языков программирования. Тот текст неоднократно обновлялся (обновлялись ссылки) и последнее обновление было 21 октября 2014 года. С тех пор как-то руки не доходили...

Сейчас текст очень сильно дополнен и расширен. Например, в сравнение языков включены дополнительно языки, некоторые из которых вообще уже появились во внятных версиях (стабильных) после даты публикации в 2014 году. Сейчас дополнительно показаны языки: Kotlin, Swift, Tcl, Rust. Вместо прежних 63 страниц теперь их 91.

Но расширение коснулось не только (и не сколько) числа рассмотренных языков программирования - поменялись намерения. Теперь это не только сравнение одной и той же (и не тривиально маленькой) задачи на разных сравниваемых языках. По всем языкам теперь рассматривается: где и как взять, как установить, как начать использовать и воспроизвести описываемые результаты. Таким образом теперь это - приглашение читателей к экспериментированию...    

Кому это интересно - читайте:
Номер последней редакции: 3.42
Объём (страниц): 91
Дата редакции: 15 февраля 2018 года

Свободно скачать эту редакцию текст и архив примеров к нему можно здесь:
Yandex: текст и архив
Google: текст и архив 

Как и всё опубликованное ранее, этот текст и все сопутствующие ему материалы представляется под лицензией, которая явно обозначена и в титуле - это: Creative Commons Attribution ShareAlike.  



вторник, 13 февраля 2018 г.

Язык программирования Rust

Rust — совершенно новый мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla Research, сочетающий парадигмы функционального и процедурного с объектной системой, основанной на типажах, и с управлением памятью через понятие «владения» (систему аффинных типов, позволяющую обходиться без сборки мусора). После нескольких лет активной разработки (с 2006 года) первая стабильная версия вышла только 15 мая 2015 года, после чего новые версии выходят раз в 6 недель. Язык компилируемый и позиционируется как альтернатива С/С++, что уже само по себе интересно, так как даже претендентов на такую конкуренцию не так уж и много.

Я бы, возможно, и не спешил разбираться с новым (модным?) языком, если бы не ... если бы не два обстоятельства, собственно, и выяснившиеся в таком вот хронологическом порядке:

1. Выяснилось (в разговорах с непосредственными участниками процесса ... а далее поиском) что Rust вовсю уже используется несколькими (пусть и немногими) российскими компаниями, пишущими на нём встроенное программное обеспечение для железа, и для железа, более того, которое производится и продаётся изрядными тиражами...

2. Установить и посмотреть Rust оказалось делом простым, 20 минут, а найти, разобраться с основами языка (много общего с C и Go) и написать несколько тестовых программ - ещё на 3-4 часа... И тестирование скорости выполнения приложения на Rust показало, что оно быстрее, чем аналогичные тесты на всех 20-ти языках программирования, с которыми я мог сравнить ... и всего не более 30% уступает по скорости приложению на C, скомпилированному GCC с наивысшим уровнем оптимизации! (и превосходит тот же C код, скомпилированный Clang из LLVM проекта). И это для языка, которому от рождения 1-й стабильной версии меньше чем 3 года!

В связи с этим, начинаю детально разбираться с Rust ... выкладывая черновые результаты этих разборок в темы форума Rust (это относительно инфраструктуры Rust: установка, библиотеки, ...) и код на Rust (это относительно непосредственно написания кода на Rust).

Рекомендую всем, занимающимся областями, покрываемыми Rust, обратить самое пристальное внимание на этот инструментарий!

суббота, 10 февраля 2018 г.

Язык программирования Swift



 Язык Swift первоначально представлен Apple 2 июня 2014 года на конференции WWDC. В 2015 году Apple анонсировала Swift как открытый язык программирования (с открытым исходным кодом). Swift задуман как более легкий для чтения и устойчивый к ошибкам  язык, нежели предшествовавший ему Objective-C и как замена ему. Swift опирается на несколько других проектов с открытым кодом, особенно на результаты проекта LLVM, в частности, компилятор Clang. 
          Swift создан компанией Apple, в первую очередь, для разработчиков iOS и macOS. Вряд ли  на сегодня он интересен как ещё один инструмент для практической реализации программных проектов в других операционных системах (Windows, Linux). В некоторых описаниях языка Swift даже утверждается (-лось), что отработку кода на Swift можно выполнять только на оборудовании от Apple и в интегрированной среде Xcode. Это ограничивает возможность освоения Swift широким кругом программистов. Хотя желание такого освоения существенно - спрос на рынке труда на разработчиков для iPad и iPhone крайне высок, а уровни оплаты выше, чем в других отраслях программной индустрии.  
     10 апреля 2016 года Google объявила о намерениях сделать Swift так называемым «первым языком» для Android. Язык программирования очень быстрый, поэтому Google планирует им воспользоваться. Возможно, это уменьшит количество приложений, которые сначала выходят на iOS, и только позже на Android.
          Но... C марта 2016 года Apple представили реализацию Swift под операционную систему Linux (версия 2.2 языка Swift). Теперь вы можете в деталях изучить Swift не покидая свою любимую операционную систему 👍 (с некоторыми ограничениями, поскольку предоставляются реализации только под DEB-дистрибутивы Linux и не предоставляются под RPM-дистрибутивы).
        То, где взять, как установить, и как начать использовать Swift под Linux - подробно расписано в теме форума Swift под Linux (3 страницы детальных объяснений в форуме). Рассматриваются также основы написания кода на Swift. Всё рассмотрение и ссылки основываются на последней реализации 4.03 от 5 декабря 2017 года. Это существенно важно, поскольку версия 4 языка Swift объявлена в сентябре 2017 года, а синтаксическая совместимость с предыдущими версиями языка, 3 и особенно 2, весьма проблематична - язык свежий и динамично развивается и изменяется. (А очень многие, большинство обсуждений по Интернет относятся к языковой версии Swift ещё 2). Описания там по ссылке объёмные и, самое главное, почти наверняка, ещё будут значительно расширяться и дополняться - именно поэтому здесь в описаниях не затрагиваются конкретики относительно Swift.



четверг, 8 февраля 2018 г.

Все книги в одном месте

Теперь все книги, написанные мною, как изданные (ранее) в бумажном виде, так и выкладывавшиеся здесь (позже) в электронном виде - доступны в последних редакциях для свободного скачивания на общеизвестном литературном ресурсе: Флибуста: книжное братство (предполагаю, что все его прекрасно знают ... как и вот этот их значок).

Там кто-то из неких ... "неизвестных доброжелателей"  💃  начали выкладывать ещё с 2008 года отдельные книги, но в достаточно старых, естественно, редакциях. Чтобы не поддерживать такую непроизвольную дезинформацию, чтобы представить всё в одном месте и в самых последних вариантах - теперь там выкладывается всё написанное, изданное и не изданное бумажными тиражами, (18 книг на сегодня) в самых последних редакциях (а многие рукописи, из числа показываемых здесь в блоге ранее, очень серьёзно дополнялись и менялись на протяжении 4-5 лет с момента их первичного написания, и будут, с большой вероятностью, дополняться далее). 

P. S. Начиная с последних дней января 2018 г., когда начали выкладываться эти книги (за одну прошедшую неделю или чуть больше), они, по статистике этого ресурса судя, скачаны по 200 и более раз каждая (то есть общий тираж скачиваний-прочтений за это время превысил 3500). Так что, во-первых, это кому-то нужно и интересно, а, во-вторых, ... скачивайте, читайте и пользуйтесь по своему усмотрению на здоровье. 

P. P. S. (дописано январь 2020 г.) Там выложено 20 книг. И скачаны они, по их статистике, все от 500 до 1250 раз. Значит это кому-то нужно! С другой стороны, мне сообщают (несколько раз), что ресурс http://flibusta.is блокируется Роскомнадзором по доступу из РФ. Если это актуально, сообщите мне, в комментариях или почтой, URL того ресурса, где предлагается разместить - я сделаю дубликат.

пятница, 12 января 2018 г.

Задачи по программированию на языке C++, часть 2 (обновление)

После заметного времени (8-9 месяцев с последнего обновления), выкладываю обновлённый,  достаточно значительно дополненный и исправленный вариант текста и архива примеров кода к нему по задачнику по языку C++.

Скачать свободно последнюю актуальную редакцию текста и архива кодов можно здесь:
Yandex: текст, архив кодов (PDF ... на всякий случай 😈)
Google: текст, архив кодов
Сейчас это редакция 51 от 12.01.2018, страниц 119 (почти на 10 страниц больше)
Задач с примерами на сегодня представлено 71 (хотя посчитать это достаточно проблематично, поскольку ряд задач имеет по несколько представленных вариантов решений).

P.S. Это последний вариант (на начало 2019г.) и больше работать над этой темой у меня настроения нет. Будем считать - крайний вариант.

понедельник, 1 января 2018 г.

Суффиксные деревья и поиск контекста

Суффиксные деревья для представления длинных строк (например, 4 тома "Война и мир" Л.Н.Толстого) - это достаточно новая алгоритмическая техника, первые публикации относятся к 1975 году. Но только после 2000-х возник востребованный интерес к этой технике, а с 2010-х - учебные курсы в разнообразных технических университетах ... и стали массово мучить студентов курсовыми заданиями на эту тему.

Одна из самых ранних и обстоятельных переводных книг на этот предмет была вот эта (её во множестве выложено в Интернет для свободного скачивания):



Такой всплеск интереса объясняется тем, что а). возник огромный спрос на поиск контекста в поисковых системах в интернет + б). потому что были предложены за прошедшее время алгоритмы построения суффиксных деревьев с алгоритмической сложностью O(n).

Появление суффиксных деревьев и некоторых подобных алгоритмов быстрого поиска - это революция в поиске контекста! Но неприятность состоит в том, что предлагаемые алгоритмы сложности O(n) достаточно мудрёны в своих описаниях. Но, с другой стороны, сами эти алгоритмы - это внутренняя кухня технологии. Один раз реализовав эти алгоритмы (а тем более, "завернув" их внутрь класса C++, например), использовать суффиксные деревья, в самых разных целях, можно без всякого вникания в эту внутренню кухню построения деревьев.   

Обсуждения по теме, готовые реализации 2-х из числа самых популярных - алгоритм Укконена и упрощённый алгоритм Вейнера, а также их применение для поиска контекста в строке (что само по себе тоже не тривиальная задача) см. здесь: суффиксные деревья и поиск в строке. Там же, кроме кода, и примеры применительно к поиску в строке. Хотя приложения суффиксного дерева к символьным переменным гораздо шире, чем просто нахождение совпадений ... об этом см. в книге.

P.S. Меня очень удивляет статистика просмотров разных тем здесь в блоге: вот эта тема относительно суффиксных деревьев и контекстного поиска в строке вызывает минимальный интерес, а это фундаментальные достижения в IT последних 10-15 лет ... Дональд Кнут в своих толстенных книжках высказывал квалифицированную догадку, что такие алгоритмы не существуют в природе и не будут найдены никогда - и вот на же тебе!  
И это при том, рядом, что совершенно проходные замечания здесь в блоге, или старые темы, которые и актуальность уже потеряли от времени - они вызывают максимальный интерес и наибольшее число прочтений.
Неисповедимы пути твои, Господи...


четверг, 21 декабря 2017 г.

Симулятор процессора и его ассемблер

Имеется в виду программная симуляция некоторого гипотетического процессора, которую вы можете построит себе сами. Это напоминает то, что делают полномасштабные симуляторы QEMU или Bochs, но для ... совершенно примитивного процессора со своей собственной ограниченной системой машинных инструкций. Собственно, того прототипа процессора (Y86) что описывается в книге:
Брайант Р., О'Халларон Д., "Компьютерные системы: архитектура и программирование. Взгляд программиста." - БХВ-Петербург, 2005, стр.1090, ISBN: 5-94157-433-9.

(Но если кого заинтересует подобное воссоздание программной модели Y86, то делать это следует не по переводному изданию, которое изобилует ошибками в важных рисунках и схемах, а по оригинальным англоязычным изданиям книги: 2-е издание 2003г. посвящённое 32-бит модели, или 3-е издание 2015г. посвящённое 64-бит модели.)

Всё, что касается создание такой оригинальной модели, см. здесь: симулятор процессора, вплоть до исходных кодов C++ и для 32 и для 64 битовых моделей. Это, конечно, задача учебного уровня, но она:

  • позволяет легко расширить любую функциональность такого процессора (например, добавить стековую машину выполнения вещественных операций);
  • показывает построение ассемблера, соответствующего процессору, используя регулярные выражения C++ (что совсем не так часто можно встретить в примерах);
  • наглядно показывает как строятся симуляторы виртуальных машин, по типу QEMU или Bochs;



среда, 6 декабря 2017 г.

Заметки на тему Python

Я вижу статистику, что достаточно много читаются мои старые заметки по Python, написанные в 2012-2013 годах. Не нужно этого делать!

Ниже выкладываются новые ссылки на существенно переработанный и обстоятельно дополненный единый текст, собирающий всё это вместе.


Номер последней редакции: 1.13 

Объём (страниц): 96 
Размер файла текста: 464109
Размер архива кодов: 353245
Дата создания: 21 ноября 2017


Скачать эту редакцию текст и архив примеров к нему можно:
Yandex: текст и архив 
Google: текст и архив 



воскресенье, 12 ноября 2017 г.

Python: анализ данных

Многие и многие тысячи публикаций по языку Python описывают его использование для WEB-проектов, бэкенд таких проектов. Собственно, и большинство публикуемых работодателями вакансий (а спрос на Python высок) относятся именно к этой категории.

Ещё некоторая значительная часть публикаций и обсуждений, проектов на Python - посвящены написанию системных утилит и инструментов ... чаще это касается операционной системы Linux, да и других UNIX/POSIX систем.

Первая из этих областей меня совершенно "не греет", не интересует от слова "вообще". Вторая - относительно понятна и хорошо описана. Меня же интересуют огромные, на сегодня, возможности инфраструктуры, возникшей вокруг языка Python, применительно к такой области как анализ данных: интерполяция, моделирование, прогнозирование, ... оптимизация функций общего вида (нелинейных) от многих переменных, ортогональные преобразования цифровых последовательностей (таких как быстрое преобразование Фурье, Уолша, или вэёвлет-разложения)...

Такая вот мощь именно Python в областях, в которых традиционно многие годы преуспевали специализированные инструменты, такие как MathCad и MathLab, обеспечивается не столько самим Python, сколько теми пакетами-библиотеками, которыми обросла инфраструктура Python за последние 5-7 лет (всё это достаточно свежие вещи). Но объясняется такое число и разнообразие этих инструментов, несомненно, именно наличием структур данных высокого уровня в языке Python: списки, кортежи, словари, последовательности, отображения и т.д.

P.S. Есть ещё великое множество задач, принадлежащих к этому классу. Их часто в обсуждениях и публикациях относят к области машинного обучения. Но машинное обучение в этом контексте - это, скорее, дань истерической моде, сложившейся в мире к таким вещам как машинное обучение, бигдата и подобным модным вещам.

Я начинаю, в силу определённых обязательств, некоторые работы по использованию Python именно в области анализа данных. И, естественно, анализ данных тут же требует их отображения, что тоже отменно именно в Python. Свои опыты в этом направлении я буду фиксировать в нескольких темах форума - возможно это кому-то пригодится и подскажет очень быстрый путь обработки данных, обладающий чрезвычайно низкой трудоёмкостью для достижения результатов. Вот эти темы:

Python анализ данных
Python: NumPy

Сюда, в текст блога, я не вношу непосредственно эти обсуждения, просто из-за их огромной объёмности.

P.P.S. Обратите внимание! Это идеальные техники для обработки и оформления экспериментальных данных для ваших дипломных или диссертационных работ. 😆

воскресенье, 30 июля 2017 г.

Docker

Docker - это модно!
Docker - это круто!
Это такие ... девизы сегодняшнего дня ... и прочая DevOps галиматья - когда рачительные менеджеры рассчитывают на то, что, вместо программистов с многолетним багажом разработки, создание крутых программных проектов им станут вести слабо образованные системные администраторы...

Но ... внимательно следя за проектами (достаточно родственными) LXC (LinuX Containers) и Docker практически от времени их появления (интересные проекты!), столкнулся с практическим использованием проекта Docker только сейчас... в рамках реального проекта.

Если кого заинтересуют практические детали (тонкости командной строки) экспериментов с Docker, то я свои опыты подробно описываю здесь: Docker, графические приложения в Docker, Docker Compose.

P.S.  Относительно LXC, с которым на сегодня не связан на 100% Docker, но с которого он начался, от которого он стартовал, можете глянуть здесь же: контейнеры LXC, в теме обсуждения, стартовавшем ещё 2 года назад. Представление о LXC не является необходимым для работы с Docker, но многое проясняет в сравнении - возможности LXC во многом могут считаться альтернативой Docker.