https://github.com/TimonPost/cargo-dependency-inheritor - неплохая простая тулза для наведения порядка с зависимостями в воркспейсах.
Workspace dependencies появились в Rust больше года назад, но в старых воркспейсах зависимости из крейтов в общие волшебным образом конечно не переехали. Я месяцами смотрел на один свой воркспейс с 34 мемберами и думал наконец навести там порядок, а тулза справилась за пару секунд.
В общем, рекомендую. Можно также гонять уже по "новым" воркспейсам - тоже найдет, где навставляли одинаковых крейтов и перенесет в общий Cargo.toml.
p.s. не всегда умеет работать с зависимостями по path. если падает - закомментировать, прогнать, раскомментировать.
Workspace dependencies появились в Rust больше года назад, но в старых воркспейсах зависимости из крейтов в общие волшебным образом конечно не переехали. Я месяцами смотрел на один свой воркспейс с 34 мемберами и думал наконец навести там порядок, а тулза справилась за пару секунд.
В общем, рекомендую. Можно также гонять уже по "новым" воркспейсам - тоже найдет, где навставляли одинаковых крейтов и перенесет в общий Cargo.toml.
p.s. не всегда умеет работать с зависимостями по path. если падает - закомментировать, прогнать, раскомментировать.
Сегодня буду ругать каналы, и не только в Rust.
Каналы - они хорошо, когда вы пишете какое-нибудь приложение, которое что-то куда-то складывает. Запустил канальчик, с одной стороны вебсокет принимает, с другой в базу пишется. Забился канал - вебсокет подождет: "эй, на той стороне - обождите! в очередь, сукины дети"
Каналы - они плохо, когда их начинают совать в системы реального времени. Почему? Потому что в системе реального времени нам наплевать, в каком состоянии она была секунду назад, нам важно знать что происходит сейчас. Какая нам разница, сколько показывал датчик температуры, если мы его не складываем в базу? Никакой. Нам надо прямо сейчас - или у нас потепление, или похолодание, и принять меры.
Поэтому в системах реального времени все задачи решаются через shared context. Один воркер значит кидает в регистр значение датчика, а другой берет. Значение всегда свежее, никаких очередей, а что там раньше было - да кому какое дело.
Но это не значит, что в системах реального времени не бывает задач, для которых нужны каналы. А вдруг мы, допустим, пишем лог? Уже желательно канал. А вдруг у нас классический пример робота - vending machine. Нам совершенно наплевать, какие кнопки по выбору товара нажимал юзер, нам нужна последняя. При этом нам (а особенно юзеру) не наплевать, сколько и каких он закинул монет в приемник.
Такую задачу уже либо классически решаем через shared context, только упражняемся с математикой и задрачиваем jitter, чтоб не пропустить монетку. Либо скрещиваем ежа с ужом, там канал - тут контекст, а потом пытаемся во всем этом разобраться.
Хотя всё можно было бы решать через каналы. Можно, но нельзя. Потому что какой-то надмозг когда-то придумал что в каналах сендеры - существа совершенно бесправные и должны, сукины дети, стоять в очереди. Или отвалить. Еще хорошо если им дадут посмотреть большая ли она, а может и не дадут.
std::sync::mpsc я даже не рассматриваю, там не каналы а порнография для детей старшего дошкольного и младшего школьного возраста. Возьмем crossbeam. Или async_channel. Или любой другой популярный, уважаемый крейт.
Ни в одном нет для отправителя force send. Нет возможности очистить канал, если получатель затупил. Нет возможности пушнуть в полный канал, чтобы последнее значение оттуда вывалилось.
Чтобы сделать такую элементарную операцию, нам нужно идти через жопу - иметь под рукой клон receiver'а и вычистить его самостоятельно. Других вариантов у нас не имеется.
Каналы - они хорошо, когда вы пишете какое-нибудь приложение, которое что-то куда-то складывает. Запустил канальчик, с одной стороны вебсокет принимает, с другой в базу пишется. Забился канал - вебсокет подождет: "эй, на той стороне - обождите! в очередь, сукины дети"
Каналы - они плохо, когда их начинают совать в системы реального времени. Почему? Потому что в системе реального времени нам наплевать, в каком состоянии она была секунду назад, нам важно знать что происходит сейчас. Какая нам разница, сколько показывал датчик температуры, если мы его не складываем в базу? Никакой. Нам надо прямо сейчас - или у нас потепление, или похолодание, и принять меры.
Поэтому в системах реального времени все задачи решаются через shared context. Один воркер значит кидает в регистр значение датчика, а другой берет. Значение всегда свежее, никаких очередей, а что там раньше было - да кому какое дело.
Но это не значит, что в системах реального времени не бывает задач, для которых нужны каналы. А вдруг мы, допустим, пишем лог? Уже желательно канал. А вдруг у нас классический пример робота - vending machine. Нам совершенно наплевать, какие кнопки по выбору товара нажимал юзер, нам нужна последняя. При этом нам (а особенно юзеру) не наплевать, сколько и каких он закинул монет в приемник.
Такую задачу уже либо классически решаем через shared context, только упражняемся с математикой и задрачиваем jitter, чтоб не пропустить монетку. Либо скрещиваем ежа с ужом, там канал - тут контекст, а потом пытаемся во всем этом разобраться.
Хотя всё можно было бы решать через каналы. Можно, но нельзя. Потому что какой-то надмозг когда-то придумал что в каналах сендеры - существа совершенно бесправные и должны, сукины дети, стоять в очереди. Или отвалить. Еще хорошо если им дадут посмотреть большая ли она, а может и не дадут.
std::sync::mpsc я даже не рассматриваю, там не каналы а порнография для детей старшего дошкольного и младшего школьного возраста. Возьмем crossbeam. Или async_channel. Или любой другой популярный, уважаемый крейт.
Ни в одном нет для отправителя force send. Нет возможности очистить канал, если получатель затупил. Нет возможности пушнуть в полный канал, чтобы последнее значение оттуда вывалилось.
Чтобы сделать такую элементарную операцию, нам нужно идти через жопу - иметь под рукой клон receiver'а и вычистить его самостоятельно. Других вариантов у нас не имеется.
https://www.bohemia-automation.com/events/cyberscotlandweek-2024/
Напоминаю, уже в понедельник буду вещать. Презентации намалеваны, накрашены. Но сексизмы, расизмы, эйджизмы и прочие -измы из текста выкинуты цензорами, извините.
Как и картинки из Heavy IE.
Напоминаю, уже в понедельник буду вещать. Презентации намалеваны, накрашены. Но сексизмы, расизмы, эйджизмы и прочие -измы из текста выкинуты цензорами, извините.
Как и картинки из Heavy IE.
Bohemia-Automation
Bohemia Automation @ CyberScotland Week 2024
Security in modern IoT in critical industrial sectors
На плате читаются SATA M2 но не читаются NVMe.
Как думаете, кто виноват? Я бы сам не поверил, но виноват блок питания.
Как думаете, кто виноват? Я бы сам не поверил, но виноват блок питания.
Помнится рассказывал, как я купил по случаю Toughbook CF-19.
У меня MK7, который выпускался с довольно неплохим железом на борту (USB3, отличная поддержка SATA SSD, в машине уже стоял 2TB). При этом имеется VGA, аппаратный serial, rj12 под модем и даже Firewire 400.
Заглушки в основном - добротная резина (заменяемая), часть (батарея, SSD и основная крышка) - железные. Я бы даже сказал чугунные - иногда по заглушке нужно приложить молотком, чтобы открыть, если давно не смазывалась.
Мне достался армейский экземпляр. Из особенностей - отсутствует веб-камера и встроенный микрофон (при этом есть разъемы как под отдельный микрофон, так и под 3.5mm гарнитуру со встроенным). Учитывая, сколько спайвари сейчас сыпят прямо из коробки, скоро чувствую перейду на такой и в повседневной жизни.
Еще из особенностей - Panasonic комплектует практически все toughbooks режимом concealed mode, который можно активировать в BIOS. Если опция включена, по Fn+F8 вырубается wifi+bluetooth, звук, а монитор переходит на пониженную яркость или выключается вообще. Всё сделано добротно и аппаратно и никакими софтварными хитростями устройствам из режима не выйти, причем после reboot/shutdown машина помнит, в каком режиме вы находились. Что именно и как выключать - настраивается там же в BIOS.
Из особенностей работы под Linux:
- Иногда (редко) ALSA психует, что система загружалась в "скрытном" режиме и отказывается играть звук после выхода. Решается походом в sleep и обратно.
- Тачскрин работает прекрасно. что компенсирует отвратительный тачпад панасоников.
- На боку находятся 6 дополнительных кнопок, которые используют в планшетном режиме. Под Linux они из коробки не работают - это отдельная мини-клава, которая висит на i2c. Можно поставить дополнительный софт от умельцев.
У меня MK7, который выпускался с довольно неплохим железом на борту (USB3, отличная поддержка SATA SSD, в машине уже стоял 2TB). При этом имеется VGA, аппаратный serial, rj12 под модем и даже Firewire 400.
Заглушки в основном - добротная резина (заменяемая), часть (батарея, SSD и основная крышка) - железные. Я бы даже сказал чугунные - иногда по заглушке нужно приложить молотком, чтобы открыть, если давно не смазывалась.
Мне достался армейский экземпляр. Из особенностей - отсутствует веб-камера и встроенный микрофон (при этом есть разъемы как под отдельный микрофон, так и под 3.5mm гарнитуру со встроенным). Учитывая, сколько спайвари сейчас сыпят прямо из коробки, скоро чувствую перейду на такой и в повседневной жизни.
Еще из особенностей - Panasonic комплектует практически все toughbooks режимом concealed mode, который можно активировать в BIOS. Если опция включена, по Fn+F8 вырубается wifi+bluetooth, звук, а монитор переходит на пониженную яркость или выключается вообще. Всё сделано добротно и аппаратно и никакими софтварными хитростями устройствам из режима не выйти, причем после reboot/shutdown машина помнит, в каком режиме вы находились. Что именно и как выключать - настраивается там же в BIOS.
Из особенностей работы под Linux:
- Иногда (редко) ALSA психует, что система загружалась в "скрытном" режиме и отказывается играть звук после выхода. Решается походом в sleep и обратно.
- Тачскрин работает прекрасно. что компенсирует отвратительный тачпад панасоников.
- На боку находятся 6 дополнительных кнопок, которые используют в планшетном режиме. Под Linux они из коробки не работают - это отдельная мини-клава, которая висит на i2c. Можно поставить дополнительный софт от умельцев.
Сегодня на CSW обсуждали пароли, вспомнил две истории
История первая, короткая
Клиент хотел, чтобы при смене пароля он отличался от старого минимум на 3 символа. Очень удивился, что наш бэк не знает пароль юзера. Но к специалистам не пошел, оставили так.
История вторая, подлиннее
Другой клиент очень хотел голосовой пароль для авторизации в форме "вторая и пятая буква/цифра вашего пароля". Причем номер буквы-цифры должен был генериться рандомно.
Клиенту объяснили, что мы задолбаемся строить хеши для каждой пары букв и предложили построить 4-5 вариантов, типа "первая и третья, вторая и пятая". Клиент сказал, что мы лохи и он обратится к специалистам. И таки обратился.
Через год база паролей была чудесным образом слита. А когда я получил доступ, чтобы посмотреть что случилось, рядом с нашим солёным-хешеным password в базе красовалось новое поле "password_plaintext".
Специалисты поработали отлично. Как всегда.
История первая, короткая
Клиент хотел, чтобы при смене пароля он отличался от старого минимум на 3 символа. Очень удивился, что наш бэк не знает пароль юзера. Но к специалистам не пошел, оставили так.
История вторая, подлиннее
Другой клиент очень хотел голосовой пароль для авторизации в форме "вторая и пятая буква/цифра вашего пароля". Причем номер буквы-цифры должен был генериться рандомно.
Клиенту объяснили, что мы задолбаемся строить хеши для каждой пары букв и предложили построить 4-5 вариантов, типа "первая и третья, вторая и пятая". Клиент сказал, что мы лохи и он обратится к специалистам. И таки обратился.
Через год база паролей была чудесным образом слита. А когда я получил доступ, чтобы посмотреть что случилось, рядом с нашим солёным-хешеным password в базе красовалось новое поле "password_plaintext".
Специалисты поработали отлично. Как всегда.
Задолбался я искать на свой Toughbook настройки тачскрина, которые бы эмулировали правый клик по лонг-тачу (там что-то не wacom-совместимое), поэтому накидал по-быстрому своё.
https://github.com/divi255/x-right-touch
Должно работать на любых тачскринах вообще. Под Wayland не уверен, но это вопрос к автору крейта rdev, когда он там допилит свою абстракцию
Логика тупая, как я в 3 часа ночи:
- на низком уровне иксы видят нажатие по экрану как mouse click, но если это незнакомый тачскрин, то без определенной кнопки в принципе
- в X11::listen ивент трансформируется уже в LeftButton, что запускает хендлер гестуры, который через указанное время сэмулирует клик RightButton
- второй тред слушает тачпады и мыши через libinput и если LeftButton нажата физически, гестура абортируется
- также гестура абортируется, если курсор слишком далеко ездил от начальной точки (значит у юзера dragging)
p.s. интересный опыт, под голые иксы еще на расте не писал
https://github.com/divi255/x-right-touch
Должно работать на любых тачскринах вообще. Под Wayland не уверен, но это вопрос к автору крейта rdev, когда он там допилит свою абстракцию
Логика тупая, как я в 3 часа ночи:
- на низком уровне иксы видят нажатие по экрану как mouse click, но если это незнакомый тачскрин, то без определенной кнопки в принципе
- в X11::listen ивент трансформируется уже в LeftButton, что запускает хендлер гестуры, который через указанное время сэмулирует клик RightButton
- второй тред слушает тачпады и мыши через libinput и если LeftButton нажата физически, гестура абортируется
- также гестура абортируется, если курсор слишком далеко ездил от начальной точки (значит у юзера dragging)
p.s. интересный опыт, под голые иксы еще на расте не писал
GPT действительно изменился. Если раньше он писал код, то теперь даёт пару примеров и требует чтобы ты все сам сделал по аналогии. Классика
- Вася, возвращайся, нам программист нужен
- Вы же GPT купили
- GPT уже ПМ, а нам программист нужен
- Вася, возвращайся, нам программист нужен
- Вы же GPT купили
- GPT уже ПМ, а нам программист нужен
Записи моих вебинаров с последнего CyberScotland Week
https://www.youtube.com/playlist?list=PLC4R6pMal63rY8eMgJ8Q8bZ0kj4DKyEQV
https://www.youtube.com/playlist?list=PLC4R6pMal63rY8eMgJ8Q8bZ0kj4DKyEQV
Чем больше работаю, тем меньше понимаю Computer Science, хотя имею по ней даже диплом.
В реалтайм-системах есть такая "известная проблема", как priority inversion. На вики довольно длинная статья (господа ученые любят много болтать по пустому поводу), поэтому расскажу на пальцах:
- есть два треда, один бегает с priority HIGH, другой с LOW
- LOW забрал Mutex и что-то там под ним пилит
- HIGH добежал до Mutex и вынужден ждать LOW
Я за свою карьеру пожалуй не встречал варианта, чтобы нельзя было быстро вытащить данные из-под Mutex и это бы привело к каким-то серьезным последствиям. Даже если у вас толстый объект, клонирование Arc даже на современном ембеде занимает порядка 5-10 наносекунд (специально когда-то мерял). А архитектуру всегда можно подпилить так, чтобы исключить любые коллизии по этому поводу.
Но у ученых проблема существует, и они с ней воюют уже десятки лет. Самая известная беда-печаль была в конце 90х, когда у американцев марсоход из-за мютекса пошел в ребут и сутки простоял.
Я помню ту историю. Разработчики очень гордятся, что марсоход не потерял ни байта данных, потому что они все сразу флушались на диски. А вот догадаться флушать куда-то текущую очередь команд почему-то никто не додумался - ну ладно там, окно с Землей раз в пару дней, прилетит новая, какие проблемы. Тогда нечего и ныть. Вообще в любой промышленной системе better crash+reboot than freeze - это правильно, это они молодцы. Только остальное подкачало.
Тем не менее, наука не стоит на месте и сейчас применяются два варианта, чтобы победить "ужасную проблему": priority ceiling и priority inheritance. Чтобы не описывать долго оба, скажу что они примерно одинаковы по результату - тот блок кода, который лазит под Mutex, получает high priority, либо сразу (в ceiling), либо когда HIGH-тред дополз и встал (в inheritance).
Просто вытащить данные из-под Mutex никто, видимо, даже не собирается. Clone - не наши методы, наши методы зато - костыли, говно и палки.
В реалтайм-системах есть такая "известная проблема", как priority inversion. На вики довольно длинная статья (господа ученые любят много болтать по пустому поводу), поэтому расскажу на пальцах:
- есть два треда, один бегает с priority HIGH, другой с LOW
- LOW забрал Mutex и что-то там под ним пилит
- HIGH добежал до Mutex и вынужден ждать LOW
Я за свою карьеру пожалуй не встречал варианта, чтобы нельзя было быстро вытащить данные из-под Mutex и это бы привело к каким-то серьезным последствиям. Даже если у вас толстый объект, клонирование Arc даже на современном ембеде занимает порядка 5-10 наносекунд (специально когда-то мерял). А архитектуру всегда можно подпилить так, чтобы исключить любые коллизии по этому поводу.
Но у ученых проблема существует, и они с ней воюют уже десятки лет. Самая известная беда-печаль была в конце 90х, когда у американцев марсоход из-за мютекса пошел в ребут и сутки простоял.
Я помню ту историю. Разработчики очень гордятся, что марсоход не потерял ни байта данных, потому что они все сразу флушались на диски. А вот догадаться флушать куда-то текущую очередь команд почему-то никто не додумался - ну ладно там, окно с Землей раз в пару дней, прилетит новая, какие проблемы. Тогда нечего и ныть. Вообще в любой промышленной системе better crash+reboot than freeze - это правильно, это они молодцы. Только остальное подкачало.
Тем не менее, наука не стоит на месте и сейчас применяются два варианта, чтобы победить "ужасную проблему": priority ceiling и priority inheritance. Чтобы не описывать долго оба, скажу что они примерно одинаковы по результату - тот блок кода, который лазит под Mutex, получает high priority, либо сразу (в ceiling), либо когда HIGH-тред дополз и встал (в inheritance).
Просто вытащить данные из-под Mutex никто, видимо, даже не собирается. Clone - не наши методы, наши методы зато - костыли, говно и палки.
Ни один студент не смог мне объяснить, зачем ему знать теорему Пифагора. Если он конечно не слесарь и не пилит треугольные держаки на полки.
Это примерно уровень преподавания всего, в первую очередь основ математики. А потом люди лезут в лотереи, МММ, берут микро-займы, не понимают как работает НДС и почему, если ты потерял 20%, а потом отыграл 20% назад - то ты в минусах.
Зато знают сумму квадратов катетов.
p.s. Преподавание на абстрактных вещах - лучший способ привить ненависть к предмету до конца жизни.
Это примерно уровень преподавания всего, в первую очередь основ математики. А потом люди лезут в лотереи, МММ, берут микро-займы, не понимают как работает НДС и почему, если ты потерял 20%, а потом отыграл 20% назад - то ты в минусах.
Зато знают сумму квадратов катетов.
p.s. Преподавание на абстрактных вещах - лучший способ привить ненависть к предмету до конца жизни.
Это я только на презах хвалю комьюнити, а так совсем наоборот. Например, на гитхабе стало больше дебилов. Намного больше, чем было раньше.
Раньше дебильный PR было видно сразу - он был дебильно оформлен с самого начала. Теперь дебилы научились открывать PR'ы, которые выглядят вполне прилично, но обязательно что-то ломают.
Поэтому обкладывайтесь тестами еще больше. Времена лихие.
Раньше дебильный PR было видно сразу - он был дебильно оформлен с самого начала. Теперь дебилы научились открывать PR'ы, которые выглядят вполне прилично, но обязательно что-то ломают.
Поэтому обкладывайтесь тестами еще больше. Времена лихие.
https://github.com/casey/just - хорошая замена make, RIIR, кому не хватает cargo. Синтаксис в целом совместим, кроме переменных, а так дает много дополнительного.
Пользуюсь уже пару месяцев, рекомендую.
Пользуюсь уже пару месяцев, рекомендую.
Наконец дошли руки сделать себе кастомный GPT под кодинг. Наконец оно не болтает, пока не спросят.
GPT здорового асоциального человека.
https://chat.openai.com/share/f23dce39-ca1d-4390-9030-83c5cfbc33ef
GPT здорового асоциального человека.
https://chat.openai.com/share/f23dce39-ca1d-4390-9030-83c5cfbc33ef
ChatGPT
ChatGPT - Connect to PostgreSQL: SQLx.
Shared via ChatGPT
Раз уж начал, немного обозрю, что предлагают OpenAI в плане кастомизации.
Варианта два - либо вы делаете кастомного чатбота, тогда ваши клиенты должны покупать подписку на GPT4, либо берете API и делаете т.н. "агентов". Это коммерчески разные продукты и бюджет, само собой, раздельный.
Оба варианта дают примерно следующее:
- загрузить инструкции
- загрузить knowledge base
Агент дает возможность самому выбрать модель и немного поиграть с её настройками.
А теперь критика:
- Инструкция - это по сути статик-prefix промпта, который будет добавляться автоматом в начале сессии. Инструкция должна быть четкой и ясной и сделать универсального бота для разных тем примерно не получится - он не умеет четкий IF-ELSE-MATCH и будет постоянно нести отсебятину.
- То же самое относительно knowledge base. Либо бот начинает общение с поиска в KB, либо несет то, чего понабирался в интернете. Можно указать некоторые правила, но если не хотите рандома - указывать четко, сначала KB, потом остальное. В такой стратегии тоже есть свой минус - бот может отказаться отвечать вообще, если в KB этого нет.
- ИИ революция немного задерживается - боты страшно тупят. У нас традиционно, еще со времен первых Pandas, минуты в API-параметрах указываются как "T" (5T = 5 минут). Не смотря на то что в KB это теперь написано для дебилов (читай - для GPT) прямо возле каждого API-метода, бот всё равно пытается ставить "m" или "M" или что угодно, а "T" ставит только после того как ему сделали замечание. Это нормально для бота общего назначения, но если это "корпоративный" бот - клиенты ждут от него немного другого.
- Инструкции агентов похоже давно сломаны и всем плевать. Одинокие выкрики на форумах "бот не понимает инструкции" давятся суппортом "давайте более четкие". Я пробовал инструкции из одного приложения - нормально не работают. В чат-версии всё нормально. При том что агент жрет бабки, как 6-литровый гелик бензин.
- KB в PDF - специальная олимпиада. Если не хотите всяких "&1234#;" в ответах, давайте ему только тексты и картинки. Про PDF лучше забыть.
В общем, покопавшись внутри OpenAI, можно уверенно сказать, что это компания с неплохой моделью, но отвратительной, глючной и дорогой обвеской.
Варианта два - либо вы делаете кастомного чатбота, тогда ваши клиенты должны покупать подписку на GPT4, либо берете API и делаете т.н. "агентов". Это коммерчески разные продукты и бюджет, само собой, раздельный.
Оба варианта дают примерно следующее:
- загрузить инструкции
- загрузить knowledge base
Агент дает возможность самому выбрать модель и немного поиграть с её настройками.
А теперь критика:
- Инструкция - это по сути статик-prefix промпта, который будет добавляться автоматом в начале сессии. Инструкция должна быть четкой и ясной и сделать универсального бота для разных тем примерно не получится - он не умеет четкий IF-ELSE-MATCH и будет постоянно нести отсебятину.
- То же самое относительно knowledge base. Либо бот начинает общение с поиска в KB, либо несет то, чего понабирался в интернете. Можно указать некоторые правила, но если не хотите рандома - указывать четко, сначала KB, потом остальное. В такой стратегии тоже есть свой минус - бот может отказаться отвечать вообще, если в KB этого нет.
- ИИ революция немного задерживается - боты страшно тупят. У нас традиционно, еще со времен первых Pandas, минуты в API-параметрах указываются как "T" (5T = 5 минут). Не смотря на то что в KB это теперь написано для дебилов (читай - для GPT) прямо возле каждого API-метода, бот всё равно пытается ставить "m" или "M" или что угодно, а "T" ставит только после того как ему сделали замечание. Это нормально для бота общего назначения, но если это "корпоративный" бот - клиенты ждут от него немного другого.
- Инструкции агентов похоже давно сломаны и всем плевать. Одинокие выкрики на форумах "бот не понимает инструкции" давятся суппортом "давайте более четкие". Я пробовал инструкции из одного приложения - нормально не работают. В чат-версии всё нормально. При том что агент жрет бабки, как 6-литровый гелик бензин.
- KB в PDF - специальная олимпиада. Если не хотите всяких "&1234#;" в ответах, давайте ему только тексты и картинки. Про PDF лучше забыть.
В общем, покопавшись внутри OpenAI, можно уверенно сказать, что это компания с неплохой моделью, но отвратительной, глючной и дорогой обвеской.
This media is not supported in your browser
VIEW IN TELEGRAM
Взял второго джуна. На удивление мне понравился.
GPT пишет общую задачу, а копилотом добиваем мелочи.
GPT пишет общую задачу, а копилотом добиваем мелочи.
На удивление с этим всем ИИ я стал более социален и более грамотно начал раздавать задания подчиненным.
Потому что привык объяснять как для ИИ. Кричать на ИИ тем более бесполезно. Он только глупо извиняется.
Потому что привык объяснять как для ИИ. Кричать на ИИ тем более бесполезно. Он только глупо извиняется.