Сова пишет…
3K subscribers
373 photos
37 videos
5 files
440 links
Download Telegram
Вот в ЭКОСИСТЕМЕ APPLE есть такое приложение как iPhone Mirroring

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

Что интересно, эта фича работала несколько недель сразу после релиза, а потом перестала.

Месяцем позже Apple выкатили апдейт для всех устройств и вроде заработало.

Сейчас я решил снова воспользоваться этой фичей: мне пришло уведомление с айфона, тыкнул, открылось iPhone Mirroring.

Но! Apple предлагает мне встать, найти айфон и разблокировать его, чтобы использовать эту фичу!

Но тогда нафига мне эта фича? Как так?
😁33🔥2👍1
Сова пишет…
Вброшу еще немного инфы Чуваки из godaddy настолько безумны, что банят тупо всех, даже своих старых клиентов
Ну и теперь окончательно понятно что это за компания.

Я начал перенос последнего домена, когда мне разблокировали доступ на 48 часов.

Потом выяснилось, что для переноса нужно сменить контактные данные,
а подтверждение занимает 48 часов 🤡.

Спустя 48 часов аккаунт снова был заблокирован,
перенести домен я не смог, а когда написал в поддержку, мне ответили, что теперь аккаунт был закрыт навсегда.
😁39😢12🌚6🤷‍♂5🔥2
Казалось бы, что может быть такого, в патчинге глобальных функций в javascript окружении?

Не так давно, сообществу удалось пропушить отмену манки-патчинга fetch командой next.js.

Но вы знали, что StrictMode патчит console.log?

Попробуйте вот этот код:


import "./styles.css";
import { useEffect, StrictMode } from "react";
import ReactDOM from "react-dom/client";

const rootElement = document.getElementById("root")!;
const root = ReactDOM.createRoot(rootElement);

root.render(
<StrictMode>
<App />
</StrictMode>
);

function App() {
useEffect(() => {
console.info("useEffect fn called!");
}, []);

return <h1>Hello CodeSandbox</h1>;
}


И вы увидите, один лог "useEffect fn called!"
Но если добавить счетчик


let amount = 0;

export default function App() {
useEffect(() => {
console.info("useEffect fn called!", ++amount);
}, []);

return <h1>Hello CodeSandbox</h1>;
}


То, сразу будет заметна проблема:


useEffect fn called! 1
useEffect fn called! 2


И вы можете сказать: ну что такого, удобно же?
Но вам не кажется, что об этом можно было написать в документации?
https://react.dev/reference/react/StrictMode

А еще можно дать флаг, чтобы выключить это поведение (может и есть, но в документации нет ничего!)

Отлаживать работу сложных компонентов, когда React вставляет палки в колеса на каждом шаге, это адовое действо!

Если хочется потыкать:
https://github.com/facebook/react/blob/main/packages/shared/ConsolePatchingDev.js

Может это только у меня так?

Оказывается, да!
В более поздних 17+ версиях react это поведение откатили.
Теперь подсвечивают второй лог более бледным цветом

Да здравствует здравый смысл, раз уж у нас нет нормального фреймворка
🗿16👍8👎7❤2
Очень нравится, когда удается настолько сократить код при этом повысить читаемость
35👍11😁8🌚3🤩1
Forwarded from Effector news (Дима Zerꙫbias)
effector 23.3.0

- Улучшены сообщения об ошибках для skipVoid и store without sid: теперь по стектрейсу видно в каком сторе произошло исключение, что помогает быстрее найти и исправить его поведение
- Добавлена поддержка произвольного количества аргументов в колбэк scopeBind. Автоматически позволяет передать в reflect bind колбэки с числом аргументов больше одного
- Исправлено поведение clearNode в большом ряде ситуаций при работе с withRegion


Мы продолжаем активную работу над моделями и новым мажорным релизом. Данный минорный релиз потребовался чтобы позволить разрабатывать MVP моделей поверх 23 версии не углубляясь в эффективную реализацию. Разработка будет проходить в этом репозитории. Stay tuned!
12👍7🔥2👎1😡1
С сегодняшнего дня мой юзернейм в великой социальной сети — x.com/sergeysova

Теперь у меня есть:
- t.me/sergeysova
- github.com/sergeysova
- x.com/sergeysova

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

Удалось связаться с предыдущим владельцем юзернейма, а так как аккаунт не использовался, то пользователь поменял на другой, за что ему отдельное огромное спасибо!
👎120🔥24❤5👍4🌚1
В виду популяризации нейросетей, а также инструментов разработчиков с AI, я добавил в effector.dev несколько подходов, которые облегчат работу.

Стоит начать с коллекции всей документации в виде единого файла. Передаете любую ссылку из списка ниже в ваш ChatGPT/Gemini/Grok и задаете вопросы.
Изначальная задумка отсюда:
https://scalabledeveloper.com/posts/llms-txt-with-astro/

В effector доступно несколько документов:
https://effector.dev/docs/llms.txt
https://effector.dev/docs/llms-full.txt

А также я сделал отдельно локализованные версии:
https://effector.dev/en/llms-full.txt
https://effector.dev/ru/llms-full.txt
https://effector.dev/uz/llms-full.txt
Не вся документация переведена полностью, поэтому недостающие статьи дополняются английским исходником.

Из этих файлов вычищены внутренние ссылки, ID-заголовков, а также вырезан некоторый кастомный markdown синтаксис. Это уменьшает количество токенов.
🔥388👍5👎1
Кроме этого, я уже давненько создал Custom GPT под названием Effector Assistant, вы можете найти его в каталоге ChatGPT GPTs.

Я загрузил в него не только документацию effector, но еще и WithEase, некоторые свои статьи и рекомендации для ChatGPT.

Вот пример ответа:
https://chatgpt.com/share/67b43fa3-bfe0-8002-8b6c-cdc9b43ab351
1❤16👍66🔥2
Раз уж пишу про обновление документации effector, то расскажу, что сейчас сообщество активно пишет новые статьи и улучшает уже написанные!

Effector становится все более привлекательным инструментом для изучения.

Сейчас я не вкладываю много сил в документацию, так как недавно участвовал в программном комитете Podlodka React Crew #2, а также продолжаю дописывать контент для frontend.vision и активно стараюсь не выгореть.

Количество материалов по effector растет с каждым днём, я даже не успеваю вычитывать все новые статьи, поэтому активно использую некоторые AI-технологии для создания контента.

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

Вообще, это подход так называемого RAG (Retrieval-augmented generation), но вместо использования полноценного инструмента я собрал свой RAG дома на коленке используя NodeJS + SQLite запуская в CLI.

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

Если интересно, расскажу как это работает подробнее
🔥249❤5👎3👍2
Я каким-то образом пропустил Rust 1.85

Язык перешел на новую стабильную версию синтаксиса Edition 2024

https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html
👍8🔥1
Forwarded from Hacknote.js (Никита Балихин)
Системы эффектов

Недавно послушал выпуск Подлодки про "Системы эффектов в языках программирования" и решил поделиться некоторыми рандомными рассуждениями на эту тему.

"Окраска" функций

"Окраской" функций называется некоторая декларация эффектов, содержащихся в функции.

В JavaScript есть 2 варианта "окраски" функций:

- async — обозначает, что функция асинхронная и позволяет использовать внутри неё оператор await
- * — обозначает, что функция является генератором и позволяет использовать внутри неё оператор yield

Fun fact: эти 2 варианта можно скомбинировать, чтобы получить AsyncIterator, который можно перебирать оператором for await...of.

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

Обработка исключений

В Java есть оператор throws, позволяющий "окрасить" функцию эффектом выброса определённого типа исключения и на этапе сборки удостовериться, что эти исключения обработаны.

JavaScript/TypeScript не позволяет типизировать исключения (разве что задокументировать их с помощью JSDoc или TSDoc), но теоретически эту проблему можно решить знаменитой монадой Either.

Чистота функций

Бандлеры используют аннотацию /*#__PURE__*/, которая обозначает отсутствие побочных эффектов в функции, для более эффективного тришейкинга (упомянал об этом в своём докладе).

В самом JavaScript нет языкового средства для выражения чистоты функции — то есть отсутствия в ней эффектов, хотя было бы классно использовать это знание, например, для исполнения кода во время сборки (как, например, c babel-plugin-macros).
🔥8❤3👍3
В документацию effector.dev подъехал ПР

Теперь в навигации есть красивый переключатель разделов, спасибо @senzujuju

https://github.com/effector/effector/pull/1232
16🔥5❤4👍1🤩1
Знаете, когда 10 лет опыта в IT вложены не только в карьерный рост, но и в крутые сторонние медиапроекты и создание качественного контента? Вот Андрей Смирнов — это как раз такой случай.

Что он уже успел:

Уже 9 лет в IT-менеджменте — управлял людьми в X5 Tech, IPONWEB и Rambler.

Ведёт аж два подкаста: Frontend Weekend и «600k в секунду». Правда, второй уже давно пора переименовать в «1M в секунду» — инфляция, что поделать.

Организовал свою первую конференцию по софтовым навыкам Soft Weekend.

Регулярно выступает на крупнейших конференциях: TeamLead Conf, HolyJS, Frontend Conf, CodeFest и других.

Участвует в программных комитетах CTO Conf, Podlodka Teamlead Crew и ИТ-Пикника.

Но главное, почему я вообще об этом пишу — это его канал. Там не просто «сухая экспертность», а живые истории, личный опыт и много реально работающих советов.

Например, что мне зашло:

- «Как придумать идеальную тему для доклада» 
- «Стоит ли доверять интуиции?»
- «Технические навыки у управленцев?»

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

Рекомендую подписаться.
👎453🔥10❤9🤷‍♂73
Уже не первый раз вижу статьи раскрывающие проблему окрашивания функций в разные цвета.

Если коротко:


async function red() {}
function blue() {}


Мы не можем просто так вызывать асинхронные red внутри обычных синхронной blue функциий, а точнее дождаться результата.
Нам нужно "перекрасить" нашу синхронную функцию в асинхронную, добавив маркер async, что повлияет на код использующий эту функцию, что в свою очередь потребует "перекрашивать" и этот код тоже, и так далее вверх по стеку вызовов.

Энтони показывает как можно обобщить работу с синхронными и асинхронными функциями с помощью библиотеки quansync и генераторов.

Правда это добавляет третий "цвет" функций — теперь нужно использовать генераторы, еще и в обертке quansync.
Но подход выглядит по крайней мере любопытно.

https://antfu.me/posts/async-sync-in-between
👎15🤔5🔥2👍1💯1
О, супер штука.
Я пока не потрогал, но концептуально мне очень нравится.

В мире opensource есть два основных подхода работы с пакетами:
А. npmjs-like
Б. go-like

Подход А — исходники пакета лежат где-то в git-репозитории (обычно github), через CI собираются и публикуются в сторонний реестр. Этот реестр гарантирует, что версия пакета не будет удалена, даже если с репозиторием что-то случилось.

Но это, вполне может вызвать расхождения между кодом в репозитории и кодом в реестре. В общем-то, ничего не мешает во время публикации, добавить любой код в бандл.
Частичное решение этой проблемы — NPM Package Provenance.
https://github.blog/security/supply-chain-security/introducing-npm-package-provenance/

Подход Б — работать без реестра, выкачивать код непосредственно из git-репозитория. Для гарантии сохраняются хеши версий, чтобы нельзя было подменить код в ветке или git-tag и таким образом внедрить уязвимость.
Но, в случае удаления репозитория, все зависимые проекты сломаются.

Новый тул, является дополнением к первому подходу npmjs-like. Он предлагает возможность проверить, собирается ли из исходников тот же код, что лежит в реестре.
Что может существенно повысить доверие к разработчикам.

https://blog.vlt.sh/blog/reproducibility
👍10👎2🔥1
Вы наверняка слышали про Rspack — альтернатива Webpack, но на Rust и с совместимостью по плагинам и конфигам.

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

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

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

https://rsdoctor.dev/blog/release/release-note-1_0
👍11❤3👎1
Из интересных проектов использующих Rspack экосистему — Lynx

Собирает React проект в Native приложения для мобилок.
Из любопытного: имеет кастомные директивы "background only" и "main thread" для выполнения функций в разных потоках.

https://lynxjs.org/react
👍5🔥4👎2
Очень любопытный проект

Ходит на сайт с девтлузами React и строит граф зависимостей компонентов на странице.

К сожалению, исходники закрыты, проект на ранней экспериментальной фазе, но потыкать оказалось любопытно. Не требует установки.

https://react-explorer.com/
❤11👍8🤔4🔥2👎1
В Next.js 15 убрали автоматическое кеширование fetch().
Перестать манкипатчить стандартные методы — движение в верном направлении.

Взамен появился "use cache":
https://nextjs.org/docs/app/api-reference/directives/use-cache

А также cache() в React 19:
https://react.dev/reference/react/cache

А статья от Авроры показывает как использовать cache() для мемоизации вызовов экшенов


// When using cache(), the return value can be cached/memoized per render across multiple server components
const getComments = cache(async (postId: string) => {
return fetchedData // actual implementation here
});


Но использовать его можно только в компонентах, еще и без await:


export default async function PostPage({ params }: { params: Promise<{ postId: string }> }) {
const { postId } = await params;

// Prefetch the comments, but don't await the promise, so it doesn't block rendering
getComments(postId);

return (
<div>
<h1>Post: {postId}</h1>
<Suspense fallback={<div>Loading post...</div>}>
<Post postId={postId} />
</Suspense>
</div>
);
}


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

https://aurorascharff.no/posts/avoiding-server-component-waterfall-fetching-with-react-19-cache/
🤔12❤3👎3👍1