Рубрики
Программирование Разное

Вайбкодинг: плагин для Obsidian

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

Например, я давно хотел попробовать сделать расширение для браузера. Но то недоставало желания сесть и разобраться в тонкостях создания и особенностях JavaScript’та, то не было достаточно времени. Статьи и полезные материалы по теме регулярно добавлялись в закладки и прочие списки, а руки так и не доходили.

А потом возникла необходимость, я сел и подумал, а почему бы не завайбкодить? Все так делают, чем я хуже? И спустя час я уже пользовался расширением. Не вникая в детали, так и не разобравшись в итоге с JavaScript, я вместе с Gemini сделал реально работающую и полезную вещь. Очевидно, что там костыли на костылях и все в таком духе. Но лично мне ехать, а не шашечки.

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

Тут важно отметить, что это не бездумный процесс типа — написал промпт, копи/пасте и случилось чудо. Конечно же, я вполне представляю себе как работают и подключаются расширения в браузере, что такое json и как работает всплывающее окно с настройками и почему оно в html, да и код JS, в конце-концов, я тоже вполне могу прочитать и даже заметить явные косяки или попробовать его отладить через средства самого браузера. То есть ИИ выступает не в роли волшебного черного ящика с прекрасной кнопкой «Сделай мне хорошо», а в роли удобного и быстрого инструмента. Хотя может и сделать хорошо. Даже если человек не очень опытный, но умеет задавать вопросы и читать ответы, то вполне сможет по инструкциям от ИИ сделать очень многое.

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

Сейчас у нас намечается очередной перелом. О котором, кстати, мечтали разные люди во все времена. Мол не хочу изучать этот язык для компьютера. Пусть лучше он научиться понимать мой, человеческий язык и просто будет выполнять мои команды. Именно так появились языки программирования высокого уровня. Ну ок, кажется время настало. Можно сказать, что текущий ИИ предлагает условно сверхвысокоуровневый язык программирования. Когда ты просто можешь описать, что ты от него хочешь и получить готовый код. Насколько Python далек от машинных кодов и близок к человеческому языку, настолько использование ИИ позволяет программировать описывая задачу обычным человеческим языком. При этом на любом, не обязательно даже английским, под который заточено большинство обычных языков программирования.

Это очередной этап развития программирования. И это очень круто, на мой взгляд. С какой стороны не посмотри. Каждый раз, когда появлялась возможность упростить себе жизни, сделать более доступными какие-то сложные вещи, люди радовались. Когда-то Delphi показал, что интерфейс программы можно делать легко и быстро, буквально накидывая на форму компоненты. WYSIWYG-редакторы избавили от необходимости вникать в детали оформления. Конструкторы сайтов позволили их создавать самому обычному человеку. Все эти инструменты снижали уровень входа. Давали возможность что-то создавать людям, которые могли творить не обращая внимания не некоторые технические преграды. Сейчас у нас появился еще один инструмент. Который помогает, но не заменяет, как не заменили все упомянутые выше инструменты.

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

Всегда хотел вести подсчет количества набираемого текста. Вот люблю я циферки и разные подсчеты. Есть, конечно, готовые плагины. Но вот такой вот я, хочу все сделать сам. Да и просто интересно, а как оно там работает? Поэтому взял и сделал, вместе с Gemini, разумеется. Хотя там ничего сложного-то и не было, кроме кода в TypeScript, с которым я ранее никогда не работал. Но по факту это считай тот же JS, так что…

В общем пара-тройка промптов, компиляция:

И плагин готов, подключен и работает:

Эту статью, как и все прочие уже давно, пишу тоже в Обсидиане. В процессе еще и скриншоты делаю:

Но это в процессе, под конец вышло больше тысячи слов. Не очень и много. Хотя изначально планировал написать пару абзацев. А потом меня куда-то понесло.

Вечно я занимаюсь непонятно чем, вместо того, чтобы спать. Ох уж этот увлекательный вайбкодинг. Но, повторюсь, для меня это не просто промпты и копи/паст, а по факту обучение через практику. Я и код предложенный полистал, и на структуру плагина посмотрел, еще и с npm поразвлекался. Сплошная польза.

Рубрики
IT - разное Литература Обучение Программирование Разное

Тайный язык кода, Паскаль и Столяров: мой путь в программировании

Начинающие свой путь в сфере IT могут быть шокированы открывающимися перед ними горизонтами возможностей и объемами информации. Множество направлений, бесконечное число книг и онлайн-курсов. С чего начать? На что обратить внимание и к чему обратиться в первую очередь, а что изучать далее? Вопросов много и вот эта непонятность может стать причиной ступора. Или завести в ложном направлении, что в итоге может послужить причиной того, что человек просто бросит, так толком и не начав изучение. Решив, что это слишком сложно и лучше заняться чем-то другим. Кстати, если человек все же бросит, вероятно, это действительно не его. Программирование, как яркий представитель мира IT, на мой взгляд, с одной стороны доступно каждому, а с другой требует если и не особого склада ума, то как минимум особого отношения к тому, что изучаешь и делаешь. И вот без этого реально тут будет сложно. Но такое отношение можно выработать, оно не дается с рождения.

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

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

TL;DR: Список книг из статьи
  • Петцольд Ч. «Код. Тайный язык информатики» — как всё устроено на уровне битов и логических схем;
  • Деревенец О. «Песни о Паскале» — хорошая «грунтовка» для понимания основ программирования. Но очень на любителя, Паскаль, все дела;
  • Столяров А. «Программирование. Введение в профессию» — глубокий системный учебник по программированию в целом;
  • Брукшир Г. «Компьютерные науки. Базовый курс» — академический, но доступный, обзор компьютерных наук.
Рубрики
Обучение Преподавание

Загадка неодинаковых одинаковых текстов в PHP на Степике

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

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

Возникает закономерный вопрос: «В чем же проблема?» Действительно, кажется, будто текст, который должен быть выведен и тот, который вывело решение учащегося одинаковы.

Тот, кто читал мою статью Строки в программировании — невнимательность и кодировки, или просто в теме, может сказать, что все очевидно — где-то попал кириллический символ в строку с латиницей. Визуально нам кажется, что строки одинаковы, но для компьютера кириллические и латинские символы являются разными. Даже если выглядят идентично.

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

В этот момент может начаться паника. Как же так, в чем же проблема и что делать?

Спокойствие, главное спокойствие. Тексты действительно отличаются. Просто из-за особенностей работы буфера обмена браузера некоторые символы в процессе копирования теряются (не спрашивайте меня как это работает, я не в курсе). В нашем случае это невидимый символ неразрывного пробела. Чтобы убедиться, что он там действительно есть, копируем из логов ошибки задачи наши строки под «Your code output:», например, в Word. Там включаем отображение всех символов и видим следующую картину:

Видите мааааленький кружочек, который я выделил желтым на скриншоте? Вот это и есть наш неразрывный пробел, который каким-то образом попал в строку и ломает проверку нашего отправленного решения. Так как для компьютера тексты РАЗНЫЕ. В правильном ответе обычные пробелы. А в отправленном нами затесался ненужный символ — неразрывного пробела.

Достаточно его убрать, заменив обычным пробелом и решение пройдет проверку и будет засчитано.

Обычно такая ошибка проявляется при решении задач с использованием языка программирования PHP. Почему так — я не знаю. Но, имейте ввиду.

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

Рубрики
Обучение Преподавание

Строки в программировании — невнимательность и кодировки

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

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

Поэтому здесь будет лишь краткое вступление.

Вступление

Кто-то знает, а кто-то нет, что я работаю преподавателем уже около 20 лет. Но в институте я преподаю право. Что слабо соотносится с тем, о чем пойдет речь ниже. Однако с 2019 года я создаю и поддерживаю различные курсы на Степике, в том числе, с осени 2020 года и курсы по программированию. За прошедшие годы накопилось много интересного опыта, собралось много наблюдений, было исправлено множество часто однообразных ошибок учащихся. На что-то можно было указать прямо в теории курсов, на что-то я писал развернутые комментарии под тем или иным шагом. Но многое остается у меня в голове и в тех решениях, которые никто не видит. Я долго шел к тому, чтобы попробовать все это проанализировать и как-то преобразовать во что-то полезное. Например, в заметки на этом сайте. Хочется верить, что эта заметка окажется первой ласточкой и дальше будет больше и интереснее.

С и C — это разные буквы для компьютера

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

Учащиеся очень часто путают буквы кириллицы и латиницы. Человеку кажется, что они одинаковы и видит он их тоже одинаково. Но компьютер буквы (символы) воспринимает совсем иначе. И для него они могут отличаться.

Например, у нас есть два слова:

cop
сор

Визуально вам может показаться, что это одно и тоже слово. Однако для компьютера эти слова состоят из совершенно разных символов — верхнее написано на латинице, а нижнее на кириллице. А вот как их «видит» компьютер:

99 111 112
1089 1086 1088

Можете сами проверить.

Чаще всего ошибаются, когда первым символом в строке идет буква с. Человек начал набирать на английском, увидел на каком-то символе, что ошибся с раскладкой и убирает явно английские, но буква c ему кажется вполне русской и ее он оставляет. Однако, периодически бывают случаи, когда люди умудряются вставить латинский символ в середину кириллической строки. Это мне объяснить уже сложнее, но вот как-то получается. Так что будьте внимательны и не путайте символы кириллицы и латиницы. Или, если вам кажется, что правильный вывод в задаче со строками и вывод вашего решения совпадают — проверьте, не перепутали ли вы символы разных раскладок.

Если же вы уже прошли этап «перепутать с и c», то можете взглянуть на статью Абсолютный минимум об Unicode на 2023 год, чтобы понять, насколько глубока кроличья нора строк и кодировок. Беременным и людям со слабым сердцем по ссылке лучше не переходить и не пытаться во все это вникать) Я предупредил.

Рубрики
Программирование Разное

День Святого Валентина in code

Прочитал замечательную пятничную статью на Хабре и подумал, а ведь отличная идея, как совместить приятное с полезным. Конечно повторять описанное в оригинальной статье не хотелось, да и проблем с этим нет — языков то много (не так — ОЧЕНЬ много). В общем решил сделать что-то похожее, но используя языки программирования, которые не вошли в статью на Хабре.

Принцип аналогичный. Язык программирования и следом фрагмент кода, который выводит строку «I love you!». Так как самые известные языки уже были использованы в оригинальной статье, пришлось покопаться, выбирая что-то не сильно банальное в плане синтаксиса, и что-то осмысленное в плане названий. Ну и ограничится десятком примеров, чтобы не раздувать кодом статью до безобразия. Ну что, поехали?

Рубрики
Python Программирование

Python, FoxDot и музыка

Дело было вечером, делать было нечего. Листал я хабр, скучал. И наткнулся вот на эту статью:
Как писать музыку на Python — помогут три тематические библиотеки (для специалистов разного уровня)

Дело в том, что музыку я пробовал «сочинять» (или – собирать?) на компьютере еще лет 15 назад, с помощью программы Dance eJay 4. С помощью набора семплов там можно было собирать различные мелодии. Ничего особенного, но мне тогда было очень интересно. И вот тут возможность совместить приятное с полезным, python с музыкой. Как же не попробовать 🙂

Итак, приступим к процессу установки, настройки и запуска чуда музыки в питоне под названием FoxDot.

Переходим по ссылке:
https://foxdot.org/installation/