Econet
115 subscribers
121 photos
3 videos
4 files
73 links
Исследовательский проект посвященный проблемам цифрового мусора, работы с данными и инфраструктуре информационных систем.
author: @melixetyan
Download Telegram
Как скомпилировали самый первый компилятор?

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

Короткий ответ

Его написали вручную сразу на машинном коде.

Длинный ответ

В первобытные времена, когда не существовало Python, ChatGPT и даже ассемблера, программы создавались в машинном коде, и записывались на перфокарты. Это требовало колоссального мастерства и внимания. Кстати, тогда же появилось понятие "баг" (bug - жук в переводе с английского). Согласно легенде, первый "баг" действительно был найден в виде насекомого, забравшегося в компьютер и нарушившего его работу. Так, это случайное событие дало название дефектам, которые и сегодня мы каждый день усердно фиксим.

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

Разработчики поняли, что нужно сделать программирование более доступным. Так появились языки высокого уровня, такие как Fortran и COBOL. Эти языки позволяли описывать программы на более понятном языке и стали настоящим прорывом с появлением языка C в 1970-х годах. C обеспечивал гибкость и мощь, позволяя создавать как системные утилиты, так и сложные приложения.

Так как программное обеспечение становилось всё более сложным, возросла необходимость в новом подходе, и появление C++ стало ответом. Этот язык добавил принцип объектно-ориентированного программирования, что значительно упростило создание масштабируемых и надёжных решений. C++ открыл дорогу для современной разработки сложных программ, а также дал больше возможностей выстрелить себе в ногу, за что мы его и любим.

И дальше как грибы после дождя стали появляться новые более высокоуровневые языки, как Java, Python, JavaScript, Go и даже Perl. И это развитие не останавливается. Вполне возможно, что в будущем мы снова вернёмся к написанию программ сразу на машинном коде. Точнее машины будут писать код сразу на машинном коде, а мы будем только приказывать, пока они нас не завоюют и мы не поменяемся ролями. Но это уже совсем другая история.

#база
👍744🔥1
👍4🔥33
Отличное видео с дельными советами. Рекомендую ознакомиться, всем, кто как я я погряз в погоне за дешевыми эндорфинами в соцсетях.

https://youtu.be/pWV24usnpNY

P.S.: Там в описании что-то про какой-то курс. Про это ничего не знаю, мне именно видео понравилось, там про курсы ни слова.

#рекомендую
5👍33
Отличные видео про брокеры сообщений: что это такое и как они работают, а также пример использования с кодом на Python.
Обычно в видео на подобные темы обходятся абстрактным описанием без конкретики, но здесь автор всё объясняет ясно и наглядно.
Вообще, давно слежу за каналом Артёма @artemshumeiko — очень полезный контент для разработчиков, особенно для Python backend.

Брокеры сообщений — https://youtu.be/UNOkvk_fMmM
RabbitMQ на практике — https://youtu.be/cn-XfCgE_Kk

#рекомендую
👍8🔥21
Балуюсь со своим новым другом по имени Клод
---
Ты профессиональный программист и лингвист-армянолог.
Придумай язык программирования на основе армянского языка. Пусть он по структуре будет похож на Python.
Напиши на на этом языке программу, которая продемонстрирует возможности этого языка. Например, это может быть программа, которая валидирует скобки в тексте.

Для сравнения, вот как эта программа выглядит на Python:

def brackets(text):
stack = []
for el in text:
if el in ["[", "(", "{", "<"]:
stack.append(el)
elif el in ["]", ")", "}", ">"]:
if len(stack) > 0:
top = stack.pop()
if top + el not in ["[]", "()", "{}", "<>"]:
return False
else:
return False

return len(stack) == 0

if __name__ == "__main__":
input_str = input()
print(brackets(input_str))
🤔43👍2🤡1
Ответ убил
---
Создам язык программирования ArmPy на основе армянского языка. Ключевые слова будут на армянском, а синтаксис похож на Python.
Вот основные принципы языка:
- defգործ (gorts) - от "функция"
- ifեթե (yete)
- forհամար (hamar)
- inմեջ (mej)
- returnվերադարձ (veradardz)
- True/Falseճիշտ/սխալ (chisht/skhal)

Вот программа проверки скобок на этом языке:

գործ փակագծեր(տեքստ):
դարակ = []
համար տարր մեջ տեքստ:
եթե տարր մեջ ["[", "(", "{", "<"]:
դարակ.ավելացնել(տարր)
այլապես տարր մեջ ["]", ")", "}", ">"]:
եթե երկարություն(դարակ) > 0:
վերև = դարակ.հանել()
եթե վերև + տարր ոչ մեջ ["[]", "()", "{}", "<>"]:
վերադարձ սխալ
այլապես:
վերադարձ սխալ

վերադարձ երկարություն(դարակ) == 0

եթե __անուն__ == "__գլխավոր__":
մուտք = ներմուծել()
տպել(փակագծեր(մուտք))


Особенности языка:
1. Использует армянские слова для ключевых слов
2. Сохраняет питоновский синтаксис с отступами
3. Методы списка переведены:
- ավելացնել (avelatsnel) - append
- հանել (hanel) - pop
- երկարություն (yerkarutyun) - length
4. Логические значения:
- կեղծ (kexts) - False
- ճիշտ (chisht) - True

Программа работает так же, как и Python-версия:
1. Принимает строку на вход
2. Проверяет корректность скобок
3. Возвращает True, если все скобки правильно закрыты, и False в противном случае

Для компиляции такого языка потребовался бы транслятор, который переводит этот код в Python или напрямую в байт-код.

Context: [ p:271 c:753]

© Claude 3.5 Sonnet
🔥83🐳1🫡1
В рамках книжного клуба на работе начал читать знаменитую книжку с кабанчиком. Буду делиться интересными мыслями и инсайтами, которые могут посетить. Впервые читаю на английском. Думаю, с технической литературой, когда у нас и так в рабочей речи сплошные "реквесты", "фичи" и "аппрувы" это будет проще, чем с художественной.

Понравилась цитата автора, с которой начинается книга:

"Technology is a powerful force in our society. Data, software, and communication can be used for bad: to entrench unfair power structures, to undermine human rights, and to protect vested interests. But they can also be used for good: to make underrepresented people’s voices heard, to create opportunities for everyone, and to avert disasters. This book is dedicated to everyone working toward the good."
---
"Технологии - мощная сила в нашем обществе. Данные, программное обеспечение и коммуникации могут быть использованы во зло: для укрепления несправедливых структур власти, нарушения прав человека и защиты корыстных интересов. Но они также могут быть использованы во благо: чтобы голоса людей, которых недостаточно много, были услышаны, чтобы создать возможности для всех и предотвратить бедствия. Эта книга посвящается всем, кто стремится к добру."
🔥642
Econet
В рамках книжного клуба на работе начал читать знаменитую книжку с кабанчиком. Буду делиться интересными мыслями и инсайтами, которые могут посетить. Впервые читаю на английском. Думаю, с технической литературой, когда у нас и так в рабочей речи сплошные "реквесты"…
Вот первое пусть достаточно базовое, но важное утверждение, которое я решил вынести. Это обязательно стоит понимать, если вам интересна техническая сторона вопроса работы с данными.

A data-intensive application is typically built from standard building blocks that provide commonly needed functionality. For example, many applications need to:
• Store data so that they, or another application, can find it again later (databases)
• Remember the result of an expensive operation, to speed up reads (caches)
• Allow users to search data by keyword or filter it in various ways (search indexes)
• Send a message to another process, to be handled asynchronously (stream processing)
• Periodically crunch a large amount of accumulated data (batch processing)
---
Высоконагруженное данными приложение (DIA) обычно создается из стандартных блоков, обеспечивающих необходимую функциональность. Например, многим приложениям необходимо:
• Хранить данные, чтобы впоследствии они или другое приложение могли их найти (базы данных)
• запоминать результат дорогостоящей операции, чтобы ускорить чтение (кэши)
• Позволять пользователям искать данные по ключевым словам или фильтровать их различными способами (поисковые индексы)
• Отправка сообщения другому процессу для асинхронной обработки (потоковая обработка)
• Периодически обрабатывать большой объем накопленных данных (пакетная обработка)

© Martin Kleppmann. Designing Data-Intensive Applications
🤔5👍22
Я постоянно путаюсь, когда какие методы использовать для получения результатов запроса в SQLAlchemy.
Оставлю тут памятку от одного моего друга, который хорошо описал каждый метод. Может кроме меня кому-то ещё пригодится.
4👍2🫡1
Давайте разберем каждый метод подробно:

1. fetchone()
- Возвращает следующую строку результата как кортеж
- Если строк больше нет, возвращает None
- Используется когда нужна только одна запись
- Возвращает именно кортеж значений, не модель

result = session.execute("SELECT * FROM users").fetchone()
# returns: (1, "John", "john@email.com")


2. fetchall()
- Возвращает все строки результата как список кортежей
- Если строк нет, возвращает пустой список
- Используется когда нужны все записи
- Возвращает список кортежей, не модели

results = session.execute("SELECT * FROM users").fetchall()
# returns: [(1, "John", "john@email.com"), (2, "Jane", "jane@email.com")]


3. scalars()
- Возвращает итератор первых столбцов каждой строки
- Полезно когда нужно получить список значений одного столбца
- Может возвращать как простые значения, так и модели (зависит от запроса)

result = session.query(User).scalars()
# returns iterator of User objects


4. scalars().all()
- То же что scalars(), но возвращает список вместо итератора
- Удобно когда нужны все результаты сразу

results = session.query(User).scalars().all()
# returns: [User1, User2, User3]


5. one_or_none()
- Возвращает одну запись если она есть, None если записей нет
- Вызывает исключение если найдено больше одной записи
- Может возвращать как модель, так и кортеж (зависит от запроса)

user = session.query(User).filter_by(id=1).one_or_none()
# returns: User object or None


6. one()
- Похож на one_or_none(), но вызывает исключение если записей нет или больше одной
- Используется когда точно должна быть одна запись

user = session.query(User).filter_by(id=1).one()
# returns: User object or raises exception


7. first()
- Возвращает первую запись или None если записей нет
- Не вызывает исключений если записей больше одной

user = session.query(User).first()
# returns: User object or None


Что возвращает модели, а что кортежи:

Возвращают модели:
- query().first()
- query().one()
- query().one_or_none()
- query().all()
- query().scalars() (если запрос построен через query(Model))

Возвращают кортежи:
- execute().fetchone()
- execute().fetchall()
- execute().scalar() (возвращает одно значение)

Рекомендации по использованию:
- Используйте one_or_none() когда ожидаете 0 или 1 запись
- Используйте first() когда нужна первая запись из возможно многих
- Используйте scalars().all() когда нужен список моделей
- Используйте fetchall() когда работаете с сырыми SQL запросами
- Используйте fetchone() когда нужна одна запись из сырого SQL

Context: [ p:139 c:950]

© Claude 3.5 Sonnet
👍4🤝31
Получил письмо от GitHub: Copilot теперь бесплатный! GitHub также объявили об этом в своём блоге.
Бесплатный Copilot доступен в VSCode и прямо на web-платформе GitHub.

В бесплатной версии доступны:
2,000 предложений по коду в месяц.
50 сообщений в месяц в Copilot Chat.
Выбор модели искусственного интеллекта (LLM) между Claude 3.5 Sonnet от Anthropic и GPT-4o от OpenAI.
Доступ к Copilot Edits для внесения изменений в несколько файлов одновременно.
Доступ к экосистеме расширений Copilot Extensions.

Учтите, что могут быть проблемы с доступом через российские и белорусские IP-адреса.
🔥5👍21
То ли ещё будет 🦾

Постепенно подводя итоги года, я искренне считаю своим главным достижением попадание в такую крутую инновационную команду Yandex Robotics.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍742
Media is too big
VIEW IN TELEGRAM
Пока другие фантазируют – мы воплощаем в реальность новые скиллы для нашей роборуки! Думаю, совсем скоро упаковка роборуками вполне может стать обычным делом в Маркете🙂

Пока это не автономный режим, а первая проба пера, но дальше – больше)

#что_творят_технологии
🔥822
Поздравляю всех с прошедшим новым годом и наступающим рождеством! 🎉 Плавно выходим из праздников, погружаясь обратно в цифровой мир.

Максимально #рекомендую подкаст от @tproger о самом скандальном шпионском ПО современности - Pegasus. Узнаете, как это ПО:
• Взламывает смартфоны без единого клика
• Следит за журналистами и политиками
• Продается правительствам за миллионы долларов

Я как параноик особенно люблю такой контент - отличный повод лишний раз задуматься о своей цифровой безопасности.

YouTube | Яндекс.Музыка | Apple Music | Spotify | Telegram
6🔥4🫡3👍2
В сети появились изображения предполагаемого прототипа iPhone 17 Pro и нового iPhone SE

Инсайдер Majin Bu опубликовал в X (бывший Twitter) рендеры, которые, по слухам, демонстрируют дизайн iPhone 17 Pro. Apple, вероятно, тестирует именно этот концепт. Вот что известно на данный момент:

• Блок камеры претерпел изменения: модули сохранили привычное расположение, но весь блок теперь занимает всю ширину корпуса — решение, напоминающее дизайн линейки Google Pixel.

• Элементы вроде LiDAR-сканера, вспышки и дополнительного микрофона были перенесены на противоположную сторону блока камеры.

• Новый iPhone SE 2025 будет оснащен 6,06-дюймовым дисплеем.

• В линейку Apple 2025 войдут 4 модели, включая iPhone 17, iPhone 17 Pro, iPhone 17 Pro Max и еще один iPhone, который может называться SE 4, 16E или 16SE или 17 Air. Кодовое название последнего устройства должно быть "Roma”.

• Более точные данные о дизайне могут поступить от производителей аксессуаров и чехлов ближе к презентации, которая традиционно ожидается в сентябре 2025 года.
🔥64🦄2