Тёма осваивает цифровое колдовство
![топ 100 блогов](/media/images/default.jpg)
Надоели две вещи: публичные политики и коронавирус. Не знаю, что больше. Но в Иране, говорят, они решили подружиться. Пожелаем удачи всем.
Пока же — развлекаюсь, типа, программированием.
Тоже полезная штука для приведения мозга в порядок. Хотя бы до такой степени, чтоб обрести понимание: законы робототехники Азимова — это всё же литература, а по жизни — замучаешься ты объяснять какому-нибудь Скайнету, что такое «причинить вред человеку». Пальцы сотрёшь об расстановку условий — и всё равно нихрена ничего яснее не станет для электронного надмозга. Ибо, при любых самых наиквантейших нейросетях, какие есть или могут быть, уровень абстрактного мышления у него всё равно как у анекдотической блондинки. И всякий, кто хоть когда-то мостырил какой-то «думатель» в своих программах — прекрасно это понимает и не будет нести ахинею про «скоро они нас превзойдут во всём».
То есть, даже самые базовые навыки программирования — дают прививку от иллюзий касательно искусственного интеллекта.
Ну и я, конечно, не программер, никогда не был, никогда не претендовал — но периодически случаются обострения интереса. Ибо всё-таки, живя в нашем мире, какие-то скрипты выстраивать уметь надо. Это как машину водить: не все обязаны быть автогонщиками, но хоть как-то рулить желательно. А даже если не рулить — то просто знать машинные повадки, когда по тем же улицам ходишь и желаешь ходить дальше, на своих не менее чем двоих.
Вот виконт Алексей Артёмович — он, хотя тоже не программер (он всё-таки «шоумэн» больше), но довольно серьёзно этим занимается. И для своих каналов делает всякую анимацию (и утилитки для её создания), и в совместных проектах участвует (преимущественно — с бывшими моими невольничками) — ну и хорошо поднатаскался. Спит с Питоном в обнимку под песенки на Си-диезе.
Но, конечно, у него возможности есть.
У меня-то в его возрасте — была Батина двушка IBM (которую все боялись трогать за какой-то код, потому что это казался невообразимо сложный агрегат ценою в пару жигулей, служебный), да в школе — бэкашки. На которых шёл Бейсик.
И у меня к нему до сих пор нежные чувства. Потому что он реально позволял косячить, как угодно, ваять с царственной небрежностью, а потом, если обнаружил, что у тебя не хватает строк под код — просто выходишь через Goto куда подальше, дописываешь блок там, потом возвращаешься тем же Goto. Очень удобный был оператор.
Получалось, конечно, заплетание пути программы в очень причудливый такой «мёбиус» - что называется «спагетти-кодинг» и считается дурным тоном. Но тогда для школоты — было нормально. Даже круто. Главное — работало.
Потом, когда снова увлекался, — делал простенькие всякие игрушечки на Вижуал-Бейсике в девяностые, позже — в Мультимедиа Флеше, на Экшн Скрипте.
А сейчас — решил JavaScript'ом овладеть. Ну так, на полшишечки.
И вот если в Бейсике можно было вышивать при помощи Goto по всему телу программы, а в AC — по фреймам, размещая код там и тут, то в JS этого нет.
Хотя, немножко разобравшись за пару дней, убедился, что упихивать код в функции и вызывать их в случае надобности — даже удобнее, чем прыгать через строчки на боевой блохе Goto.
Но к некоторым особенностям, конечно, нужно привыкнуть.
Было дело, чуть мозг не вскипел, когда я силился понять, какого хрена функции не передаются значения вполне себе живых переменных.
Потом разобрался, что если значение присваивается в теле другой функции — не нужно писать Let (как привык с Бейсика), не нужно обозначать Var – а просто «a=x”, и вот тогда новое значение уйдёт в другие функции по цепочке.
Наверное, на каких-то «системных» курсах по JS проходят такие вещи — но я просто посматривал видосики, как люди кодят простенькие программки/игрушки. Так интереснее учиться. «Детективнее».
Но в принципе более-менее разобрался. Многое — конечно, очень похоже на Action Script из Флеша (который тоже кое-как припомнил).
Вот, сейчас дописал собственную «масштабную» функцию для назначения управляющих клавиш. Чтоб можно было и по нескольку их вешать на одно действие. Так, «болванка» для подключения к грядущим возможным разработкам, буде время и желание.
Дал глянуть Лёшке — он оценил. «Кое-что можно и оптимизировать, но признаков явных и тяжких дефектов мозга — не выявлено».
От него — это комплимент.
Ещё — задал процедуры создания полей и размещения флотов для «первого в мире реалистичного космического боя». Давно была задумка — может, сейчас доведу до... если не «ума» - то его хоть какой-то видимости.
Серьёзно, вот продавить нужные условия на переговорах с каким-нибудь правительством или срубить бабла на более чем предсказуемых качелях фондового рынка — это рутина. Не то, чтобы совсем уж скучно — но тут сюрпризов не бывает, при моём опыте. И напрягаться особо не приходится.
А вот наваять игровое поле для звездобольских пострелушек — это повод для гордости. Практически — как в отрочество вернуться.
Но и просто интересно смотреть, как разные ребята на Ютубе по-разному решают задачи, гуляя между трёх полянок: JavaScript, HTML, SCC. Это особенно занятно, поскольку можно сразу проверить работу получающейся странички в браузере, безо всякой там компиляции в исполняемый файл.
Может, я созрею до того, чтобы забацать собственный сайт и разместить там кое-какие творения.
Попутно, как англотичер (в числе прочего), отметил, что эти программеры, когда не нативы, а русские-французы-немцы — очень старательно выговаривают слово width («ширина», часто употребляемый параметр). «УиДth”.
На самом деле, настолько акцентированно — никто из нативов его не произносит. Если «д» и звучит — то «мимолётно», как будто над строчкой этаким «верхним индексом». А в принципе — вполне нормальным будет и «ленивое» произношение, где width неотличимо от with.
Пользуясь случаем, в очередной раз порекламирую такой ресурс, как youglish. Очень полезно, если хочешь узнать, как на самом деле произносятся слова в английском разными носителями (преимущественно — грамотными, но всё же не «дикторами»).
Но это уж — про человеческие языки, а не машинные.
Что до машинных — позволю и себе немного поумничать на тему функции, которая присутствует, наверное, во всех языках, но немножко по-разному может реализовываться.
Речь — о цикле с while.
И вот ещё в советские времена доводилось встречать недоумение: «Нахрена он нужен, когда есть For?”
Попробую объяснить, как понимаю, где именно while будет полезен.
Вот представьте, что злая мачеха отправила маленькую девочку удить рыбу. И наказала не возвращаться, пока та не поймает реально большого карася, не меньше, чем на килограмм. Что большая редкость в тамошних водоёмах. Но вот пока не выудит — будет ловить.
Как это реализовать?
Ну, можно, конечно, использовать пляски с бубнами вокруг условий с If. И повторный вызов функции из самой себя, пока не «клюнет» килограммовый карась (ну или возврат через Goto в Бейсике).
И можно как-то обозначить вероятность поимки такого большого карася, чтобы это реально редкость была.
Но гораздо проще (лично для меня, во всяком случае) — сделать это через цикл с while.
Var randomFish = 1;
while (randomFish<1000) {
randomFish = Math.random() * 1001);
}
Ну и в тело цикла — воткнуть переход к функции, которая описывает рыбалку.
Раз за разом будет генериться случайное число от 0 до 1 и умножаться на 1001. Какова вероятность, что это произведение окажется больше 1000? Ну, вот где-то одна тысячная. То есть, не известно, на сколько именно предстоит застрять внутри этого цикла — но, скорее всего, довольно долго он будет играть. Что и требуется.
Вот так «дёшево и сердито» задаётся «трудность» условия и низкая вероятность его удовлетворения. Когда ситуация не безвыходная (это не бесконечный цикл), но - «застрятельская».
Но ладно — хорош умничать. В действительности я всё же дилетант в программировании, тем более на JaveScript, которую увидел впервые три дня назад.
Поэтому, пока выдалось время — буду дальше осваивать и баловаться плюшками-игрушками.
|
</> |