oleg_log
1.77K subscribers
1.86K photos
129 videos
9 files
2.77K links
Shelter for antisocial programmers "Oleg"

halp: @olegkovalov
web: https://olegk.dev
fov: @oleg_fov
chat: @oleg_log_blabla
podcast: @generictalks
Download Telegram
Успехи языка Fortran за год. Ни разу не встречал Фортран на гитхабе, а оказывается зря.

Язык стал ближе к людям, появился stdlib, package manager, да и сайтик миленький.

https://medium.com/modern-fortran/first-year-of-fortran-lang-d8796bfa0067

https://fortran-lang.org/

Еще порадовало колво компиляторов, скорее это исторически, но я не уверен, есть ли другой язык с таким же набором https://fortran-lang.org/compilers/
Пришла пора хвастаться. Загрузчик конфига для Go aconfig дорос до v0.10.0

- умеем читать дефолты, файлы, енв и флаги
- умеем читать файлы JSON, YAML, TOML
- для этих форматов еще и теги полей структуры генерим
- зависимости на форматы файлов опциональны (дада, в коробке 0 зависимостей в go.mod)
- файлы можно мержить
- аж 100 звездочек, старшая лига ну
- что-то там еще было
- и роскошная документация конечно же

лайк-подписка-колокольчик https://github.com/cristalhq/aconfig #hq
Токио 1.0 анонсировали

https://tokio.rs/blog/2020-12-tokio-1-0
Откопал прикольную штучку: билд и запуск докера одной командой.

docker run -it $(docker build -q .)

1. docker build понятно о чем

2. -q - Suppress the build output and print image ID on success

3. docker run полученного хеша

И мне кажется это отлично) Правда есть минус, что параметры в docker run должны идти перед -it что чууть ломает UX.

Знатоки, что там еще посоветуете из быстрых и полезных команд для Докера?
Ахахахха, там дальше на канале пояснения
Начнем с простого. Рубрика «у всех ведь было такое».
Просто бизнес понял, что крупный бизнес не уйдет с реляционных, а продать им что-то надо /тред

https://twitter.com/copyconstruct/status/1342360717135998978
Сразу скажу - не идите в коменты к предыдущему посту. Потратите время и прочитаете шум.

По поводу 4го. Если в осколках 2020 кто-то еще рассказывает, как крупный бизнес живёт в ДЦ, то заставляйте деда пить таблетки попросите человека успокоиться, мир чуть изменился.

А выводы хорошие, хотя Snowflake смотрится как нахайпленный продукт для IPO, вот только им 8 лет, а почему о них так мало слышали (моё окружение и я в пузыре?) - вопрос https://xn--r1a.website/nosingularity/656
Мне какие-то недели назад нужен был тупейший туториал "так что там в этих кубах" и вот я его нашел.

Схема выше, наверное, лучшее описание что зачем и как. Вместо тысячи линий в ямле и документации.

https://nikhiljha.com/posts/kubernetes-intro/
Какие интересноси про GPT-2(и скорее 3) запостили.

This paper demonstrates that in such settings, an adversary can perform a training data extraction attack to recover individual training examples by querying the language model.
We demonstrate our attack on GPT-2, a language model trained on scrapes of the public Internet, and are able to extract hundreds of verbatim text sequences from the model's training data. These extracted examples include (public) personally identifiable information (names, phone numbers, and email addresses), IRC conversations, code, and 128-bit UUIDs.

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

Вроде бы и проблема теоретическая, но уже с практическими примерами. Интересно смотреть за темой security в AI/ML.

пост для потребления https://bair.berkeley.edu/blog/2020/12/20/lmmem/

пейпер https://arxiv.org/abs/2012.07805
Проекту только полгода, а какие планы-то. Все конечно ощущается unsafe костылями, но оно того стоит. Не знаю как вам, а мне идея крайне нравится.

Cosmopolitan makes C a build-once run-anywhere language, similar to Java, except it doesn't require interpreters or virtual machines be installed beforehand.

Cosmo provides the same portability benefits as high-level languages like Go and Rust, but it doesn't invent a new language and you won't need to configure a CI system to build separate binaries for each operating system.

What Cosmopolitan focuses on is fixing C by decoupling it from platforms, so it can be pleasant to use for writing small unix programs that are easily distributed to a much broader audience.

Compared with glibc, you should expect Cosmopolitan to be almost as fast, but with an order of a magnitude tinier code size. Compared with Musl or Newlib, you can expect that Cosmopolitan will generally go much faster, while having roughly the same code size, if not tinier.

https://justine.lol/cosmopolitan/index.html
ахахахахаха
подведу и я "итоги"

@tgstat_bot 2020 <channel name>

и популярный пост https://xn--r1a.website/oleg_log/2967
Красивая история о том, как переход на бинарный формат данных, дал приложеню на тел чуть больше воздуха.

Итого:
1. берем жсон на 15мб - декодим 20сек на Galaxy S4 (чтобы там не было внутри)
2. берем FlatBuffers на 4мб с теми же данными - получаем 0.5сек.
3. ...
4. ПРОФИТ

Тут скорее отдельная заслуга FT, что они пряменько лежат в памяти. В любом случае, JSON хоть и везде, но наверное после 100кб файла/запроса/структуры стоит начать думать про что-то более бинарное, как следствие оптимальное.

https://blog.extrawurst.org/gamedev/unity/programming/rust/2020/12/26/unity-flatbuffers.html

Такие посты заставляют задуматься, сколько же в мире неоптимальных решений, сколько потраченных петабайт RAM-а и спаленных деревень cpu-циклов. Так и живём, шо.
ммм, кружечка приехала.
дада, у меня хороший маникюр.
поделитесь какой у вас свэг крутой был?
Любопытный, но довольно бесполезный пример полиморфизма в Go

В гошечке есть несколько способов писать полиморфные функции:

1. интерфейсы;
2. тайп свитчи и тайп кастинг интерфейсов;
3. рефлексия;

Недавно мне понял, что есть чётвёртый подход, который стал возможен с появлением type alias — назовём его апкастингом типов. Работает оно так:

func main() {
printName(Cat{"Whiskey"})
printName(Dog{"Chappie"})
}

type Cat struct { Name string }

type Dog struct { Name string }

type named = struct { Name string }

func printName(n named) {
fmt.Println(n.Name)
}

В спеке Go указано, что присваивание x типа V к переменной типа T валидно в случае, если V и T основаны на одинаковых типах и T — не именованный тип ("x's type V and T have identical underlying types and at least one of V or T is not a defined type."). Псевдонимы типов не считются именованными типами, так что мы можем принимать в аргумент n любую кастуемую структуру.

К сожалению, это не слишком полезно — наверное только если вы не хотите делать пачку геттеров и у вас есть пачка одинаковых структур разных типов.