shikhalev.org

Рубрикатор

Последние записи

ТехнологииПрограммированиеЖизньОбщество

2023.01.07 • Иван Шихалев

Паникуем иначе

Автоматически сгенерированная картинка

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

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

Сейчас мне бы хотелось поговорить о тем­ной стороне использования новых технологий. Именно в спо­со­бах использования, злоумышленных, или наоборот — малоосмысленных, я предполагаю некоторые потенциальные проблемы. И сра­зу замечу, что я далек от ки­бер­пан­ка и всяческого тур­бо­апо­ка­лип­си­са. Я вообще тех­но­оп­ти­мист.


Читать далее »

ChatGPTTDDИИавтопилотбудущееискусственный интеллектнейросетипоискпреступностьспам

ТехнологииПрограммированиеЖизньМышление

2023.01.04 • Иван Шихалев

Отставить панику...

Автоматически сгенерированная картинка

С вы­хо­дом ChatGPT как-то внезапно обострились апокалиптические настроения в ду­хе: заменит программистов, оставит нас всех без ра­бо­ты, и прочее «мы все умрем». По­след­нее, конечно, верно, но не ново.

Сразу скажу, что самолично я с Chat­GPT не экспериментировал, так что размышлять буду в це­лом от­вле­чен­но-те­о­ре­ти­че­с­ки, опираясь, впрочем, на мно­жест­во «свидетельских показаний» в ин­тер­не­те, касающихся как этой нейросети, так и разных прочих.

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

И да, КДПВ сгенерирована нейросетью по запросу «deep learned girl in fantasy style».


Читать далее »

ChatGPTИИбудущееискусственный интеллектнейросети

ТехнологииПрограммированиеСофт

2021.09.12 • Иван Шихалев

xbash

Скриншот командной строки с xbash

Давно собирался и таки стартанул пет-проект — https://github.com/shikhalev/xbash.

Навеяно gitsh, который я когда-то активно использовал, но у него были проблемы с русской локалью, новыми версиями Git и так далее. При этом, на мой взгляд, gitsh сильно переусложнен, да и использование Ruby, при всей моей любви к этому языку, тут лишнее. Посему я решил сделать что-то подобное, но попроще, на чистом bash, и более универсальное.

Что делает?

Итак, что этот скрипт (набор скриптов) делает?

  1. Позволяет использовать субкоманды того же git, как непосредственные команды. Помимо git, так же можно коротким образом вводить субкоманды cargo1.

  2. Отображает в приглашении командной строки репозиторий, ветку, путь внутри репозитория и значок статуса (звездочка разных цветов на данный момент). Кроме того, вместо имени локального пользователя показывается e-mail пользователя, под которым идет запись в репозиторий2.

  3. Другие системы управления версиями, сборки и управления зависимостями могут быть добавлены просто и единообразно. Для Mer­cu­ri­al и Ruby­gems планирую сделать, как только руки дойдут.

Стадия разработки пока самая ранняя (хотя я уже пользуюсь и отлаживаю «наживую»), поэтому инсталлятора нет, есть инструкция по ус­та­нов­ке в фай­ле README.md.

  1. Если кто не знает, cargo — это система сборки и управления зависимостями языка Rust. 

  2. Для меня отображение именно пользователя репозитория, а не ло­каль­но­го, довольно существенно, поскольку на дан­ный момент я работаю из до­ма и у ме­ня имеются как личные, так и рабочие проекты, которые нужно вести под раз­ны­ми аккаунтами. 


Читать далее »

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

ТехнологииWebПрограммированиеО себе

2021.07.09 • Иван Шихалев

Отчет о рефакторинге

Скриншот с [официального сайта Jekyll](https://jekyllrb.com/)
Скриншот с официального сайта Jekyll

Итак, я таки отрефакторил и обновил данный сайт. Почему нельзя было сразу делать правильно? Ну, в основном потому, что я впервые имел дело с Jekyll, изрядно подзабыл (а что-то и не знал) базовые приемы верстки… И так далее, и тому подобное.

Вторая (в моем случае) причина — это то, что, как это часто бывает, представление о желаемом результате уточнялось и формировалось в процессе достижения результата просто работающего. Соответственно, решение «исторически сложилось», если вы понимаете, о чем я. Любой проект ставит разработчика перед выбором: или бесконечное (и потому бесплодное) делание «как надо», или движение к идеалу через неидеальные, зато рабочие, варианты, которые, впрочем, без регулярного рефакторинга быстро становятся неулучшаемым и иногда не совсем рабочим болотом.

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


Читать далее »

CSSFont AwesomeGitHubGoogle FontsGoogle MapsHTMLJavaScriptJekyllLiquidPNGSASSSCSSSVGaspect-ratiodisplayflexgridkramdownmarkdownshikhalev.orgstickyблогивеб-шрифтыверсткаграблииконкимедиа-селекторыпробелырефакторингсайтыстатическая генерацияшрифты

ТехнологииПрограммированиеRust

2021.03.16 • Иван Шихалев

Небольшой подводный камень в Rust

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

Опасность подстерегает нас, когда мы читаем данные из файла посредством std::​fs::​File.read()1, не используя при этом std::io::BufReader2, а самостоятельно выделяя блок памяти и читая в него.

Подводный камень тут вот в чем, цитирую документацию:

if n is 0, then it can indicate one of two scenarios:

  • This reader has reached its “end of file” and will likely no longer be able to produce bytes. Note that this does not mean that the reader will always no longer be able to produce bytes.
  • The buffer specified was 0 bytes in length.

Подчеркивание мое. Итак, если мы передаем методу read() буфер нулевой длины, то результат будет ровно тот же самый, что и если мы достигли конца файла, т.е. Ok(0).


Читать далее »

грабли

ТехнологииПрограммированиеRubyПубликации«Системный администратор»Web

2020.01.11 • Иван Шихалев

Rack — основа веб-фреймворков в Ruby

Оригинал этой статьи опубликован в журнале «Системный администратор» №5 (150) за май 2015. Прошу обратить внимание на год — какие-то моменты могут расходиться с современными версиями языка и библиотек…

Библиотека Rack — простой объектный интерфейс для написания веб-приложений.

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

Этот интерфейс достаточно низкоуровневый и не ограничивает разработчика каким-либо заранее заданным способом организации приложения и высокоуровневыми абстракциями. Соответственно, он и не предоставляет таких абстракций — это уже дело фреймворков, которые работают поверх него: Rails, Sinatra и других.


Читать далее »

Rack

ТехнологииПрограммированиеБД

2019.03.04 • Иван Шихалев

Всё для людей!

Ковыряюсь тут с PostgreSQL и вот какую замечательную штуку обнаружил…

Собственно, про существование «updatable views» я знал, и давно. Но пока не доводилось использовать. И я думал, что для того, чтобы они заработали, нужно прописывать правила для всех действий. Однако нет — простые представления делаются изменяемыми автоматически, т.е. пишем, например:

create table something_data (
       id      bigint       not null,
       name    varchar(200) not null,
       deleted boolean      not null default false,
       constraint pk_something primary key (id)
);
create unique index uq_something_name on something_data(name)
                                   where (deleted = false);

create view something as
       select id, name from something_data
        where deleted = false;

… и всё, этого достаточно — можно обращаться к представлению something так же, как к таблице — вставлять, изменять, удалять по id.


Читать далее »

PostgreSQLSQL

ТехнологииПрограммированиеRubyПубликации«Системный администратор»

2016.03.09 • Иван Шихалев

Средства самопознания в Ruby

Оригинал этой статьи опубликован в журнале «Системный администратор» №1-2 (146-147) за февраль 2015.

Что программа может знать о самой себе?

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

В данной статье я планирую рассмотреть те средства «самопознания», которые доступны для программ на Ruby.


Читать далее »

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

ТехнологииПрограммированиеRubyПубликации«Системный администратор»

2016.01.27 • Иван Шихалев

Мета­программи­ро­вание в Ruby: разбор примера

Оригинал этой статьи опубликован в журнале «Системный администратор» №12 (145) за декабрь 2014.

Добавление собственных абстракций в объектную модель — это просто. И интересно.

Авторы книги «Programming Ruby: The Pragmatic Programmers’ Guide» называют метапрограммированием расширение и изменение абстракций языка (тогда как собственно программирование пользуется теми, что есть). Конечно, можно поспорить о том, что считать такой абстракцией, а что нет, однако нельзя не заметить, что в современных динамических языках, таких как Ruby или, например, Python, легко делаются некоторые вещи, которые в классических языках находились именно на языковом уровне и жестко определялись компилятором. Тут можно вспомнить, для примера, декораторы, о которых я писал в сентябре прошлого года1. И сейчас мы рассмотрим нечто подобное. В процессе я буду делать обобщающие отступления, переходя от частного примера к общим принципам программирования в Ruby.

  1. Статья [«Декораторы в Ruby»][deco]. «Системный администратор» № 9 (130), сентябрь 2013. Стр. 68–71. 


Читать далее »

метапрограммирование

ТехнологииПрограммированиеRubyПубликации«Системный администратор»

2015.04.04 • Иван Шихалев

Ruby и многозадачность

Оригинал этой статьи опубликован в журнале «Системный администратор» №3 (136) за март 2014.

В статье рассматриваются основные средства работы с потоками (threads) и процессами в языке и стандартной библиотеке Ruby

Немного о терминологии: англоязычный термин «thread» на русский переводится в двух вариантах — как «поток» и как «нить». Второй вариант точнее и не вызывает неоднозначности с потоками данных (streams), однако первый уже прижился в качестве основного. Кроме того, есть еще производные термины и варианты вроде «многонитевость» (или «многонитность»), но они мне не встречались и, честно говоря, режут глаз. Поэтому я буду использовать «поток».

Прежде, чем перейти к описаниям имеющегося инструментария, хотелось бы заметить, что Ruby создавался не как специальный язык параллельного программирования, при этом во время его создания и становления многозадачность уже стала привычной и необходимой. Из этих двух посылок, в об­щем-то, можно вывести текущую картину: никаких специфических концепций мы в нем не увидим, только поддержку привычной для всех языков общего назначения модели с некоторыми нюансами реализации.


Читать далее »

многозадачностьмногопоточностьоптимизация