Первая вещь, которую должен выучить программист, — это то, что его обучение никогда не закончится 🤓
Если бы вы устроились фронтенд-разработчиком 10 лет назад и с тех пор не выучили ничего нового, то сегодня остались бы без работы. Индустрия несётся вперёд с огромной скоростью, стоит немного замешкаться, и вот ты уже не понимаешь, о чём говорит "эта молодёжь" у кулера, тимлид закатывает глаза, как будто вместо твоего кода смотрит на какой-то вымерший 1000 лет назад древний язык, а список непонятных слов в требованиях к вакансиям начинает пугать🫣
Так что, чтобы не стать динозавром раньше времени, я продолжаю прокачивать базу — нативный JS, начал проходить курс на Udemy по продвинутому JavaScript, состоящему из 4 проектов разной сложности, начиная от простого лендоса и заканчивая созданием UI-библиотеки, которую я хочу написать на TypeScript и React.
Ну и продолжаю учить Python, пару дней назад закончил курс по основам на Хекслете, сейчас хочу попробовать новый для себя формат — обучение по книжке — вдруг зайдёт?))
————————————————————————
Информационный перегруз?
Не, не слышал😂
Если бы вы устроились фронтенд-разработчиком 10 лет назад и с тех пор не выучили ничего нового, то сегодня остались бы без работы. Индустрия несётся вперёд с огромной скоростью, стоит немного замешкаться, и вот ты уже не понимаешь, о чём говорит "эта молодёжь" у кулера, тимлид закатывает глаза, как будто вместо твоего кода смотрит на какой-то вымерший 1000 лет назад древний язык, а список непонятных слов в требованиях к вакансиям начинает пугать
Так что, чтобы не стать динозавром раньше времени, я продолжаю прокачивать базу — нативный JS, начал проходить курс на Udemy по продвинутому JavaScript, состоящему из 4 проектов разной сложности, начиная от простого лендоса и заканчивая созданием UI-библиотеки, которую я хочу написать на TypeScript и React.
Ну и продолжаю учить Python, пару дней назад закончил курс по основам на Хекслете, сейчас хочу попробовать новый для себя формат — обучение по книжке — вдруг зайдёт?))
————————————————————————
Информационный перегруз?
Не, не слышал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Как я ноду поднимал. Часть 1 😎
Любая уважающая себя компания не станет выпускать на рынок сырой продукт с кучей багов. А как лучшего всего проверить проект на прочность? Правильно, запустить тестирование🤓 а, поскольку мы тут все в крипте😎 , то и разговор пойдёт о запуске проектов на блокчейне. Как ни странно, но тестирование таких проектов проводится в тестовых сетях(тестнетах). Давайте разбираться, что же такое нода и зачем её поднимать?)
Нода (узел) — это обычный компьютер, на котором запущена и постоянно работает определенная программа. Под компьютером нужно понимать необязательно ваш домашний комп, в основном ноды запускают (поднимают) на серверах. Зачем? Как минимум, это интересно! Если вас всегда привлекала техническая часть криптовалют, то вам точно стоит попробовать) Чисто технически — нода связана с другими такими же узлами и вместе они как раз и образуют единую сеть, цель которой — прийти к консенсусу, механизму, который исключает повторную трату крипты, что была задействована в транзакции.
А ещё это отличная возможность поучаствовать в топовых проектах на начальных стадиях. Например те, кто участвовал в тестнете Solana, могли заработать десятки тысяч долларов на монетах, которые получили в награду за поддержку сети.
Вот и я, ради спортивного интереса, решил сыграть в эту лотерею) Меня привлёк проект Minima. Фишка проекта в том, что ноды можно было разворачивать не только на компах и серверах, но и на смартфонах. Вот где настоящая децентрализация! Ведь у той же Solana по факту 2/3 сети развёрнута в паре дата-центров, что делает её уязвимой и убивает саму идею крипты.
————————————————————————
to be continued...
Любая уважающая себя компания не станет выпускать на рынок сырой продукт с кучей багов. А как лучшего всего проверить проект на прочность? Правильно, запустить тестирование
Нода (узел) — это обычный компьютер, на котором запущена и постоянно работает определенная программа. Под компьютером нужно понимать необязательно ваш домашний комп, в основном ноды запускают (поднимают) на серверах. Зачем? Как минимум, это интересно! Если вас всегда привлекала техническая часть криптовалют, то вам точно стоит попробовать) Чисто технически — нода связана с другими такими же узлами и вместе они как раз и образуют единую сеть, цель которой — прийти к консенсусу, механизму, который исключает повторную трату крипты, что была задействована в транзакции.
А ещё это отличная возможность поучаствовать в топовых проектах на начальных стадиях. Например те, кто участвовал в тестнете Solana, могли заработать десятки тысяч долларов на монетах, которые получили в награду за поддержку сети.
Вот и я, ради спортивного интереса, решил сыграть в эту лотерею) Меня привлёк проект Minima. Фишка проекта в том, что ноды можно было разворачивать не только на компах и серверах, но и на смартфонах. Вот где настоящая децентрализация! Ведь у той же Solana по факту 2/3 сети развёрнута в паре дата-центров, что делает её уязвимой и убивает саму идею крипты.
————————————————————————
to be continued...
Please open Telegram to view this post
VIEW IN TELEGRAM
Как я ноду поднимал. Часть 2 😎
Итак, я арендавал VPS(виртуальный сервер) за 5 евро/мес, открыл доку минимы и начал установку. Это оказалось сложнее, чем я думал, благо в телеге уже был большой чат, где мне помогли с настройкой🖖 После небольших танцев с бубном моя нода завелась и я начал обратный отсчёт до разлока кнопки "бабло" 🤣
Где-то через пол-года мне капнуло 170 монет за тестнет, я их сразу застейкал(стейкинг — аналог вклада), а недавно мне пришло письмо, что команда решила раздать ещё монет, но для этого нужно зайти в магазин приложений. И тут случилось ужасное🫣 я понял, что случайно удалил файл с паролем! Ничего страшного, подумал я, пароль ведь можно посмотреть в самой ноде...но, как оказалось, команду, которая его показывала, решили отключить!
И вот я без новых монет и без доступа к старым😢 Если проект когда-нибудь взлетит, то я буду похож на одного из тех ребят, которые по фану намайнили биткоина и забыли об этом, пока он не стал стоить бешеные тыщи🤑
Но я не сдаюсь, есть вариант переустановить ноду, не факт, что это поможет, но попробовать стоит👌
————————————————————————
А как 🫵 относишься к крипте?)
Итак, я арендавал VPS(виртуальный сервер) за 5 евро/мес, открыл доку минимы и начал установку. Это оказалось сложнее, чем я думал, благо в телеге уже был большой чат, где мне помогли с настройкой
Где-то через пол-года мне капнуло 170 монет за тестнет, я их сразу застейкал(стейкинг — аналог вклада), а недавно мне пришло письмо, что команда решила раздать ещё монет, но для этого нужно зайти в магазин приложений. И тут случилось ужасное
И вот я без новых монет и без доступа к старым
Но я не сдаюсь, есть вариант переустановить ноду, не факт, что это поможет, но попробовать стоит
————————————————————————
А как 🫵 относишься к крипте?)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Предыдущие три недели посвятил этим книжкам 📕
Первая — популярное издание с примерами кода, рассчитанное на новичков. Довольно подробно разбираются базовые концепции Python и программирования в целом. Во второй части книги — 3 проекта на выбор:
1) аркадная игра
2) визуализация данных
3) веб-приложение
Визуализации данных мне хватает на работе, веб-приложений я уже насоздавался, а разработка игр меня особо не привлекает + все эти проекты скорее прокачивают знание конкретных библиотек, чем чистого питона.
В итоге я решил, что, если уж погружаться в библиотеки, то в чём-то новеньком)) и вот я уже изучаю создание телеграмм-ботов)) оказывается, у них приличный функционал, например, можно запилить прилу на реакте, интегрировать его в телегу и вот у вас уже дополнительный источник лидов))
Вторая — руководство по TypeScript. JS — слабо-типизируемый язык, это значит, что он может динамически изменять типы данных, с которыми работает, а это чревато багами. При чём узнаем мы о них только на этапе выполнения программы💀
По-этому TypeScript сейчас — must have для любой серьёзной компании с крупными проектами. Но проблема в том, что по мере роста кодовой базы работа с типами становится очень запутанной и ухудшает читаемость кода.
Так вот данная книга должна научить писать правильный TS, чтобы не возникало вышеописанных проблем😎 И, возможно, так и есть, но меня хватило ровно на половину книжки)) дальше я уже начал терять нить повествования🙈 так что вернусь к ней позже.
Вообще, этот метод работает. Если я читаю книжку или смотрю видос, где слабо понимаю происходящее, то я его не свайпаю, а добавляю в закладки. И, когда возвращаюсь к непонятному контенту через какое-то время, происходит чудо — понимание, постепенно, начинает приходить🤓
Что касается обучения по книжкам в целом — то мне зашло. Во время чтения проще вдумываться в сложные понятия, но есть и минус — иногда встречается устаревшая информация.
————————————————————————
А вы читаете программистские книжки?)
Первая — популярное издание с примерами кода, рассчитанное на новичков. Довольно подробно разбираются базовые концепции Python и программирования в целом. Во второй части книги — 3 проекта на выбор:
1) аркадная игра
2) визуализация данных
3) веб-приложение
Визуализации данных мне хватает на работе, веб-приложений я уже насоздавался, а разработка игр меня особо не привлекает + все эти проекты скорее прокачивают знание конкретных библиотек, чем чистого питона.
В итоге я решил, что, если уж погружаться в библиотеки, то в чём-то новеньком)) и вот я уже изучаю создание телеграмм-ботов)) оказывается, у них приличный функционал, например, можно запилить прилу на реакте, интегрировать его в телегу и вот у вас уже дополнительный источник лидов))
Вторая — руководство по TypeScript. JS — слабо-типизируемый язык, это значит, что он может динамически изменять типы данных, с которыми работает, а это чревато багами. При чём узнаем мы о них только на этапе выполнения программы
По-этому TypeScript сейчас — must have для любой серьёзной компании с крупными проектами. Но проблема в том, что по мере роста кодовой базы работа с типами становится очень запутанной и ухудшает читаемость кода.
Так вот данная книга должна научить писать правильный TS, чтобы не возникало вышеописанных проблем
Вообще, этот метод работает. Если я читаю книжку или смотрю видос, где слабо понимаю происходящее, то я его не свайпаю, а добавляю в закладки. И, когда возвращаюсь к непонятному контенту через какое-то время, происходит чудо — понимание, постепенно, начинает приходить
Что касается обучения по книжкам в целом — то мне зашло. Во время чтения проще вдумываться в сложные понятия, но есть и минус — иногда встречается устаревшая информация.
————————————————————————
А вы читаете программистские книжки?)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Решил я тут спросить у Skynet ChatGPT его мнение о своём посте про цифровое бессмертие и вот, что он ответил👇
Дальше я решил уточнить, что он думает о самой идее переноса сознания по средством замены биологических нейронов на искусственные👇
После этого я попросил его порассуждать, как бы он сам реализовал такую идею👇
Кстати, я использую ChatGPT не только для того, чтобы обсудить какие-то около-философские вопросы ради любопытства, но и в реальной работе))
Думаю, позже напишу об этом подробный пост 🖨
————————————————————————
Как считаете, Skynet уже где-то рядом?🤖
Думаю, позже напишу об этом подробный пост 🖨
————————————————————————
Как считаете, Skynet уже где-то рядом?
Please open Telegram to view this post
VIEW IN TELEGRAM
Как я использую ChatGPT на работе
Как я писал в одном из предыдущих постов, обучение программиста никогда не заканчивается. Особенно сейчас, когда хорошо, если просто успеваешь следить за выходом новых технологий, не то, что детально их изучать и тестить. Но ChatGPT — как раз та фича, на которую точно стоит потратить время.
Последняя презентация OpenAI показала, как сильно всего за 1 год спрогрессировал её главный продукт и хотим мы этого или нет, дальнейшую интеграцию ИИ в нашу жизнь уже не остановить.
Какими же дарами синтетического разума пользуюсь я? Про Midjourney я уже рассказывал, сегодня же речь пойдёт о ChatGPT.
Я использую обычный бесплатный телеграм-бот, куда закидываю куски кода и свои вопросы на русском. Дальше будет простой, наглядный пример одного реального кейса.
Как я писал в одном из предыдущих постов, обучение программиста никогда не заканчивается. Особенно сейчас, когда хорошо, если просто успеваешь следить за выходом новых технологий, не то, что детально их изучать и тестить. Но ChatGPT — как раз та фича, на которую точно стоит потратить время.
Последняя презентация OpenAI показала, как сильно всего за 1 год спрогрессировал её главный продукт и хотим мы этого или нет, дальнейшую интеграцию ИИ в нашу жизнь уже не остановить.
Какими же дарами синтетического разума пользуюсь я? Про Midjourney я уже рассказывал, сегодня же речь пойдёт о ChatGPT.
Я использую обычный бесплатный телеграм-бот, куда закидываю куски кода и свои вопросы на русском. Дальше будет простой, наглядный пример одного реального кейса.
Сначала, чтобы задать контекст, я просто закидываю код, который надо доработать.
В данном случае мне нужно по выбранному значению фильтра скрывать один виджет и показывать другой.
👇
В данном случае мне нужно по выбранному значению фильтра скрывать один виджет и показывать другой.
👇
const content = ['widget-91d54751ffe044e6924b3b56f36fe754', 'widget-5a41fe962c9a4dd7832f6e0173310a56']
const ct = content.map(item => document.getElementById(item))
const filterValue = visApi().getSelectedValues(w.general.renderTo)
const hideTabContent = () => {
ct.forEach(item=> {
item.style.display= 'none'
})
}
switch (filterValue[0][0]) {
case '1кв':
hideTabContent();
ct[0].style.display= 'block';
break;
case '2кв':
hideTabContent();
ct[1].style.display= 'block';
break;
case '3кв':
hideTabContent();
ct[2].style.display= 'block';
break;
default:
hideTabContent();
ct[0].style.display= 'block';
}
const ct = content.map(item => document.getElementById(item))
const filterValue = visApi().getSelectedValues(w.general.renderTo)
const hideTabContent = () => {
ct.forEach(item=> {
item.style.display= 'none'
})
}
switch (filterValue[0][0]) {
case '1кв':
hideTabContent();
ct[0].style.display= 'block';
break;
case '2кв':
hideTabContent();
ct[1].style.display= 'block';
break;
case '3кв':
hideTabContent();
ct[2].style.display= 'block';
break;
default:
hideTabContent();
ct[0].style.display= 'block';
}
Forwarded from ТочкаGPT
В предоставленном коде, вы создаете массив `ct`, содержащий элементы DOM, полученные с помощью `document.getElementById(item)`. Затем вы используете `filterValue` для определения значения фильтра.
Далее, у вас есть функция `hideTabContent()`, которая скрывает все элементы `ct`, устанавливая их стиль `display` на `'none'`.
Затем вы используете оператор `switch` для проверки значения `filterValue[0][0]`. В зависимости от значения, вы вызываете `hideTabContent()` и затем устанавливаете стиль `display` для соответствующего элемента `ct`.
В целом, код скрывает все элементы `ct`, а затем отображает только один из них в зависимости от значения фильтра.
Далее, у вас есть функция `hideTabContent()`, которая скрывает все элементы `ct`, устанавливая их стиль `display` на `'none'`.
Затем вы используете оператор `switch` для проверки значения `filterValue[0][0]`. В зависимости от значения, вы вызываете `hideTabContent()` и затем устанавливаете стиль `display` для соответствующего элемента `ct`.
В целом, код скрывает все элементы `ct`, а затем отображает только один из них в зависимости от значения фильтра.
👍1
Далее я прошу дополнить код выше, подписавшись на изменение переменной filterVallue и получаю такой ответ👇
Forwarded from ТочкаGPT
Чтобы подписаться на изменение переменной `filterValue` и автоматически скрывать и отображать элементы `ct` в зависимости от значения `filterValue`, вы можете использовать геттеры и сеттеры. Вот как это можно сделать:
```javanoscript
const content = ['widget-91d54751ffe044e6924b3b56f36fe754', 'widget-5a41fe962c9a4dd7832f6e0173310a56'];
const ct = content.map(item => document.getElementById(item));
let filterValue = visApi().getSelectedValues(w.general.renderTo);
const hideTabContent = () => {
ct.forEach(item => {
item.style.display = 'none';
});
};
const showTabContent = (index) => {
hideTabContent();
ct[index].style.display = 'block';
};
Object.defineProperty(window, 'filterValue', {
get: function() {
return filterValue;
},
set: function(newValue) {
filterValue = newValue;
switch (filterValue[0][0]) {
case '1кв':
showTabContent(0);
break;
case '2кв':
showTabContent(1);
break;
case '3кв':
showTabContent(2);
break;
default:
showTabContent(0);
break;
}
}
});
// Пример использования
filterValue = visApi().getSelectedValues(w.general.renderTo); // Передаем новое значение filterValue
```
В этом коде мы определяем геттер и сеттер для переменной `filterValue` с помощью `Object.defineProperty()`. При каждом изменении значения `filterValue`, сеттер будет вызываться автоматически. Внутри сеттера мы обновляем значение `filterValue` и затем вызываем функцию `showTabContent()`, чтобы отобразить соответствующий элемент `ct` в зависимости от нового значения `filterValue`.
Вы можете использовать этот пример в своем коде, чтобы подписаться на изменение `filterValue` и автоматически скрывать и отображать элементы `ct`.
```javanoscript
const content = ['widget-91d54751ffe044e6924b3b56f36fe754', 'widget-5a41fe962c9a4dd7832f6e0173310a56'];
const ct = content.map(item => document.getElementById(item));
let filterValue = visApi().getSelectedValues(w.general.renderTo);
const hideTabContent = () => {
ct.forEach(item => {
item.style.display = 'none';
});
};
const showTabContent = (index) => {
hideTabContent();
ct[index].style.display = 'block';
};
Object.defineProperty(window, 'filterValue', {
get: function() {
return filterValue;
},
set: function(newValue) {
filterValue = newValue;
switch (filterValue[0][0]) {
case '1кв':
showTabContent(0);
break;
case '2кв':
showTabContent(1);
break;
case '3кв':
showTabContent(2);
break;
default:
showTabContent(0);
break;
}
}
});
// Пример использования
filterValue = visApi().getSelectedValues(w.general.renderTo); // Передаем новое значение filterValue
```
В этом коде мы определяем геттер и сеттер для переменной `filterValue` с помощью `Object.defineProperty()`. При каждом изменении значения `filterValue`, сеттер будет вызываться автоматически. Внутри сеттера мы обновляем значение `filterValue` и затем вызываем функцию `showTabContent()`, чтобы отобразить соответствующий элемент `ct` в зависимости от нового значения `filterValue`.
Вы можете использовать этот пример в своем коде, чтобы подписаться на изменение `filterValue` и автоматически скрывать и отображать элементы `ct`.
👍1
Прелесть в том, что ChatGPT не только выполнил задачу(пока не идеально), но и улучшил мой код, вынеся добавление display: 'block' в отдельную функцию. Продолжаю допиливать запрос. Прошу доработать код с учётом того, что он запускается на платформе Visiology, поэтому для подписки на изменение переменной нужно использовать
visApi().onSelectedValuesChangedListener({ guid, widgetGuid }, handler) void
то есть handler будет исполняться, когда юзер выбрал значение, а внутри уже берём это значение и через visapi передаём на другой виджет
visApi().onSelectedValuesChangedListener({ guid, widgetGuid }, handler) void
то есть handler будет исполняться, когда юзер выбрал значение, а внутри уже берём это значение и через visapi передаём на другой виджет
Далее мне понадобилось ещё 2 уточняющих промпта, чтобы Chat выдал мне полностью рабочий код. На всё про всё у меня ушло минут 20. Да, это был довольно простой пример, но с учётом того, что ещё год назад подобное казалось уделом далёкого будущего, подумайте, что будет лет через пять?