Как стать автором
Обновить
2
0
Евгений Даниленко @JekaMas

Golang и распределенные системы

Отправить сообщение

О каких сильных сторонах идёт речь?

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

Как только эфир перейдет на PoS эфир "умрет" - да здравствует %заменитель_эфира%.

Только если упоротые гики ждут, а далеко не все комьюнити.

И, тут эти гики вечно забывают самую главную вещь -- да "всем" плевать на технологию\PoS\PoW\весьэтотрокетсаенс(тм) и прочее - всем нужен конечный продукт - деньги. Поэтому эфир уже сейчас начал иногда сдавать позиции RVN\ERgo\Firo\Cortex

Он делает(добываемость\биржи\етц) "цену" монете, а не вот это вот все. Смекаете?)

Я смотрю, круги от того выступления, которое было уже почти год назад, до сих пор волнуют растишек :) Намечается очередной срач, в котором все стороны будут опять повторять все те же самые тысячу раз обсосанные аргументы, на запах заглянет «царь сишки» с очередного аккаунта… хотя, может быть, и ему уже надоело :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Пуш с ревью — как секс в презервативе)) ощущения не те!
НЛО прилетело и опубликовало эту надпись здесь
Потому что нет проектов, целиком написанных на Rust. Если же нам нужно сопрягаться с основной частью проекта, написанной на C/C++, то Rust — это как бы не худший выбор из возможных.
Работа с «сырой» памятью там настолько затруднена, и поверх наброшено столько мозголомных абстракций, что допустить ошибку при прописывании ffi-биндингов очень просто, а вот её отлов потом может занять буквально недели, и всё равно не будет полной уверенности, что на всех платформах программа будет стабильно работать.
Вот классический пример:
extern crate libc;
extern {
    fn c_func(x: *mut *mut libc::c_void);
}

fn main() {
    let x = 0 as *mut u8;
    c_func(&mut (x as *mut libc::c_void));
    println!("new pointer is {}", x);
}
Вопрос: что напечатает эта программа? А она вне зависимости от действий внешней функции c_func выдаст… 0x0. Чтобы всё работало как надо, указатель нужно описать вот так:
(&mut x) as *mut _ as *mut *mut libc::c_void
Да, вот такое вот мозговыносящее месиво, и если где-то в нём ткнул не тот символ, то компилятор сделает неявное копирование, и будет работать с копией, которая к тому же когда функция вернётся, станет невалидной и рано или поздно память будет чем-то переписана. Отлаживать такое — просто адский ад, особенно когда программа потом падает совсем не там, где «портится» долбанный указатель, да ещё и один раз из десяти, так что даже воспроизвести баг с трудом выходит.
И это ещё ничего. Куда веселее, когда вам нужно собрать программу под 32 и 64 бита, и вот вдруг оказывается, что сишный компилятор и Rust не сошлись во мнениях, как при разной битности должны выглядеть выравнивания внутри структур/union'ов либо разрядности отдельных элементов. И тоже где-то кем-то портятся данные, и ведь хрен поймёшь, почему так. Доходит до того, что приходится в отладчике смотреть ассемблерный код, разбираясь, как интерпретируются структуры внутри функций.
Если кто-то хочет без особых усилий пощупать все эти «замечательные» особенности Rust'а, могу предложить отладить вот эту программку. Это — маленькое приложение-пример, демонстрирующее использование из-под Rust'а сишного GUI-фреймворка Nuklear с GDI+ бэкендом. Бинарник при правильной сборке получается менее 300 Кб. Так вот, если вы попытаетесь собрать это не под 64-битную винду, а под 32 бита, полученный exe свалится с сегфолтом. Задача: разобраться, почему 64 бита компилируется нормально, а 32 дают нерабочий бинарник.
ответ
Ошибка находится в файле nuklear-rust/nuklear-sys/src/lib.rs, в этом коде:
#[repr(C)]
#[derive(Copy, Clone)]
pub union nk_handle {
    pub ptr: *mut ::std::os::raw::c_void,
    pub id: ::std::os::raw::c_int,
    _bindgen_union_align: u64,
}
где _bindgen_union_align нужно объявить как u32 для 32-битной сборки, чтоб получить рабочий бинарник.
Когда найдёте и исправите первый баг, получив рабочий бинарник, вот вам задачка повышенной сложности: определить, почему под 32 бита в окне обрезается половина надписей в контролах, когда на 64 битах всё _вроде бы_ нормально. (На самом деле ни хрена не нормально, просто команды прорисовки контролов «удачно» встали, но перетасовав их местами можно и на 64 битах получить тот же эффект).
На этот раз подсказывать не буду — не стану портить «удовольствие». И да, понадобится отладчик — придётся лазить в asm-код.
Подводя итог, Rust — это последнее, что я хотел бы использовать, если придётся писать и отлаживать биндинги к C/C++ коду. Вот просто ужас-ужас такое потом саппортить.

Неплохое сравнение бесконечной прокрутки с другими вариантами приводил недавно один из разработчиков веб-интерфейса Google Photos в своей статье о том, как они этот интерфейс делали. Кстати, мне их итоговое решение (когда скроллбар не «растёт» по мере прокрутки вниз, а сразу примерно отображает общий масштаб контента и позволяет быстро «мотать» его к началу или к концу) очень понравилось!

В init 'defer runtime.GC()' смахивает на memory leak, ибо в цикле мы будем добавлять новые и новые defer в stack, а вызовутся они, скорее всего никогда.
Да и не нужен он. Гошный рантайм сам с этим справится.

> Проведём маленький эксперимент, если Вы не против — мне любопытно чего такого я не знаю на фундаментальном уровне, из того, что преподают в ВУЗах в качестве базы.

Ну я вот писал программу по нескольким курсам, один из основных — «Алгоритмы и структуры данных», вот база (не все, особенно и последнего семестра, нужно знать и доказывать, но основные свойства полезно знать).

Вот примерный список, я надеюсь, он после обкатки скорректируется. Общий объем 225 часов (чисто лекции, практика Python-C-C++ идет отдельными часами).

Поиск в массиве
1.1 Линейный поиск
1.2 Двоичный поиск
1.3 Троичный поиск
1.4 Интерполяционный поиск
Структуры данных
1.5 Массив
1.6 Стек
1.7 Очередь, двусторонняя очередь
1.8 Словарь
1.9 Хеш-таблица

Сортировки, анализ алгоритмов
2.1 Bubble sort (пузырьковая сортировка)
2.2 Merge sort (сортировка слиянием)
2.3 Quick sort (быстрая сортировка)
2.4 Bucket sort (блочная сортировка)
2.5 Heap sort (пирамидальная сортировка)
2.6 Insertion sort (сортировка вставками)
2.7 Counting sort (сортировка подсчетом)
2.8 Radix sort (порязрядная сортировка)
2.9 Timsort и другие гибридные алгоритмы сортировки

Рекурсия, математическая индукция
3.1 Хвостовая рекурсия
3.2 Обратная польская запись
3.3 Числа Каталана
3.4 Вычисление биномиальных коэффициентов
3.5 Метод градиентного спуска
3.6 Метод сопряженных градиентов
3.7 Принцип динамического программирования
3.8 Метод ветвей и границ
3.9 Методы Gradient boosting
3.10 Алгоритм Кадана
3.11 Поиск методом золотого сечения
3.12 Производящие функции
3.13 Запаздывающие генераторы Фибоначчи
3.14 Memoization
3.15 Корекурсия
3.16 Задача 3-SAT
3.17 Алгоритм фрактального сжатия
Структуры данных (рекурсивные)
3.18 Список
3.19 Дерево
3.20 Граф

Строки
4.1 Z-функция
4.2 Алгоритм Кнута-Морриса-Пратта
4.3 Алгоритм Ахо-Корасик
4.4 Алгоритм Бойера-Мура
4.5 Алгоритм Бойера-Мура-Хорспула
4.6 Сходство Джаро-Винклера
4.7 Расстояние Левенштейна, алгоритм Укконена
4.8 Расстояние Дамерау-Левенштейна
4.9 Алгоритм Карпа-Миллера-Розенберга
4.10 Алгоритм Каркайнена-Сандерса
4.11 Алгоритм Арикавы-Аримуты-Касаи-Ли-Парка
4.12 Алгоритм Ву-Менбера
4.13 Алгоритм Ландау-Вишкена
4.14 Алгоритм Майерса
Структуры
4.15 Префиксное дерево
4.16 Суффиксный массив
4.17 Суффиксное дерево

Порядковые статистики, потоковые алгоритмы
5.1 Алгоритм BFPRT
5.2 Алгоритм Манро-Патерсона
5.3 Алгоритм Канна-Гринвальда
5.4 Алгоритм большинства голосов Бойера-Мура
5.5 Алгоритм Lossy Count

Деревья
6.1 Эйлеров обход дерева, DFS, BFS
6.2 Двоичное дерево поиска
6.3 Декартово дерево
6.4 Красно-черное дерево
6.5 АВЛ-дерево, дерево Фибоначчи
6.6 Splay tree (расширяющееся дерево)
6.7 B, B+, B* дерево, 2-3 дерево
6.8 PQ-дерево
6.9 Дерево отрезков
6.10 Дерево Фенвика
6.11 Алгоритм двоичного подъема (задача LCA)
6.12 Алгоритм Фарах-Колтона и Бендера (RMQ, LCA)
6.13 Sqrt-декомпозиция
6.14 Центроидная декомпозиция
6.15 Heavy-light декомпозиция
6.16 Фибоначчиева куча
6.17 Куча, 2-3 куча
6.18 Очередь с приоритетами
6.19 Множество
6.20 Система непересекающихся множеств
6.21 Лес непересекающихся множеств
6.20 Ассоциативный массив

Графы
7.1 Обход в ширину (BFS)
7.2 Обход в глубину (DFS)
7.3 Топологическая сортировка
7.4 Алгоритм Munagala-Ranade
7.5 Алгоритм Mehlhorn-Meyer
7.6 Задача о динамической связности
7.7 Алгоритм поиска точек сочленения графа
7.8 Алгоритм поиска мостов графа
7.9 Алгоритм Косараю
7.10 Алгоритм Тарьяна
7.11 Задача 2-SAT
7.11 Алгоритм Брона-Кербоша
7.12 Конденсация графа
7.13 Раскраска графа
7.14 Задача о назначениях
7.15 Венгерский алгоритм
7.16 Алгоритм Ульмана
Структуры
7.17 Матрица смежности
7.18 Матрица достижимости
7.19 Матрица сильной связности
7.20 Матрица Лапласа
7.21 Матрица Инцидентности
7.22 Список смежности
7.23 Список ребер

Графы: циклы
8.1 Алгоритм поиска Эйлерова цикла
8.2 Алгоритм поиска Эйлерова пути
8.3 Алгоритм поиска Гамильтонова цикла
8.3 Алгоритм поиска Гамильтонова пути
8.4 Задача Коммивояжера

Графы: остовное дерево
9.1 Теорема Кирхгофа
9.2 Теорема Кэли о числе деревьев, код Прюфера
9.3 Лемма о безопасном (минимальном) ребре
9.4 Алгоритм Краскала
9.5 Алгоритм Примы
9.6 Алгоритм Борувки
9.7 Задача устранения петель в сети Ethernet (STP)
9.8 Задача Штейнера

Графы: кратчайший путь
10.1 Алгоритм Дейкстры
10.2 Алгоритм Best-First
10.3 Алгоритм A*
10.4 Алгоритм Левита
10.5 Алгоритм Беллмана-Форда
10.6 Алгоритм Флойда-Уоршелла
10.7 Алгоритм ALT
10.8 Алгоритм Reach-based pruning

Графы: потоки в сетях
11.1 Алгоритм Форда-Фалкерсона
11.2 Алгоритм Эдмонса-Карпа (алгоритм Диница)
11.3 Алгоритм поиска потока минимальной стоимости
11.4 Сети Петри
11.5 Алгоритм проверки графа на двудольность
11.6 Алгоритм раскраски двудольного графа
11.7 Алгоритм Хопкрофта-Карпа
11.8 Венгерский алгоритм
11.9 Blossom алгоритм (алгоритм Эдмондса)
11.10 Алгоритм Штор-Вагнера

Геометрия
12.1 Метод Гаусса
12.2 Поиск точек в прямоугольнике
12.3 Алгоритм Бентли-Оттмана
12.4 Алгоритм Грэхема
12.5 Алгоритм Джарвиса
12.6 Алгоритм Чана
12.7 Алгоритм Киркпатрика
12.8 Метод трассировки луча
12.9 Метод суммирования углов
12.10 Диаграмма Вороного и триангуляция Делоне
12.11 Алгоритм Форчуна
12.12 Рекурсивное построение диаграммы Вороного
12.13 SLERP
Структуры
12.13 R, R+, R* дерево
12.14 K-мерное дерево
12.15 BSP, VP дерево
12.16 Дерево покрытий

Персистентные структуры
13.1 Метод копирования пути
13.2 Метод толстых узлов
Структуры
13.3 Персистентный стек
13.4 Персистентная очередь
13.5 Персистентное дерево

Консенсус в сетях
14.1 Алгоритм Paxos
14.2 Задача Византийских генералов
14.3 Кворум
14.4 CAP-теорема
14.5 PACELC-теорема
14.6 Королевский алгоритм
14.7 Алгоритм Zyzzyva
Структуры
14.8 Blockchain

Целочисленное программирование
15.1 Каноническая форма, сложность решения
15.2 Алгоритмы полного перебора
15.3 Алгоритм Нарайаны
15.4 Задача о ранце
15.5 Алгоритм Meet-in-the-Middle
15.6 Задача раскроя
15.7 Метод обратного поиска
15.8 Задача планирования производства
15.9 Задача оптимизации телекоммуникационных сетей
15.10 Метод секущих плоскостей, алгоритм Гомори
15.11 Алгоритм Альфа-Бета отсечений
15.12 Жадные алгоритмы
15.13 Матроиды, алгоритм Радо-Эдмонса

Быстрые вычисления
16.1 Умножение Карацубы
16.2 Алгоритм Шенхаге-Штрассена
16.3 Алгоритмы возведения числа в степень
16.4 Алгоритмы возведения в степень числа по модулю
16.5 Алгоритм Кули-Тьюки
16.6 Алгоритм Штрассена

Факторизация
17.1 Алгоритм Евклида (НОД)
17.2 Алгоритм факторизации Ферма
17.3 Метод квадратичных форм Шенкса
17.4 Ро-алгоритм Полларда
17.5 Метод квадратичного решета
17.6 Общий метод решета числового поля
17.7 Факторизация с помощью эллиптических кривых
17.8 Тест Агравала-Каяла-Саксены
17.9 Алгоритм Берлекэмпа

Дискретное логарифмирование
18.1 Алгоритм Гельфонда-Шенкса
18.2 Алгоритм COS

Обработка очередей
18.1 Семейство алгоритмов Round-robin
18.2 Алгоритм EDF
18.3 Алгоритм SRTF
18.4 Алгоритм Fixed-priority pre-emptive scheduling
18.5 Задача составления расписания (JSP, OSSP)
18.6 CFS планировщик
18.7 BFS планировщик

Кеширование
19.1 T-дерево
19.2 Алгоритм Белади
19.3 FIFO, LIFO кеширование
19.4 LRU, PLRU кеширование
19.5 MRU кеширование
19.6 RR кеширование
19.7 LFU кеширование
19.8 MQ кеширование
19.9 ARC кеширование

Рандомизированные алгоритмы
20.1 Метод Монте-Карло
20.2 Поиск наименьшего набора ребер, разрезающего циклы
20.3 Муравьиный алгоритм
20.4 Алгоритм Каргера
20.5 Изоморфизм графов (алгоритм Blum-Kanan)
20.6 Rapidly exploring random tree
20.7 Тасование Фишера-Йетса
20.8 Алгоритм Karloff–Zwick

Вероятностные тесты на простоту
21.1 Тест Ферма
21.2 Тест Миллера-Рабина
21.1 Тест Бейли-Померанца-Селфриджа-Уогстаффа

Вебграфы
22.1 Модель Болобаша-Альберта
22.2 Модель Болобаша-Риордана
22.3 Модель Бакли-Остгус
22.4 Модель копирования
22.5 PageRank, Google matrix
Структуры
22.1 MapReduce
22.2 Apache GiGraph
22.3 Pregel

Хеширование
23.1 Двойное хеширование
23.2 Фильтр Блума
23.3 Count-min sketch
23.4 Универсальное хеширование
23.5 SWIFFT
23.6 MD5
23.7 SHA-2
23.8 SHA-3 (Keccak)
23.9 Дерево Меркла
23.10 Подпись Меркла
23.11 Хеш-функции, учитывающие близость (LSH)
23.12 Хеширование на основе расстояния Хэмминга
23.13 MinHash
23.14 SimHash
23.15 Поиск ближайшего соседа c помощью LSH

** При этом стоит учесть что запланированы еще курсы по Теории графов, Дискретной математике, Экстремальным задачам, Машинному обучению, Теории сложности и пр.пр.пр. Т.е. это просто фундаментальный курс по алгоритмам и структурам данных, который является точкой отсчета для всего остального (ну как курс по Математическому анализу).

*** Это несколько больше чем я сам знаю, так что это еще и мой план для себя подтянуть неизвестные/забытые темы. Обсудив его с коллегами, на предмет кто будет читать мы пришли к выводу, что мы все были бы рады и сейчас прослушать такой курс.
да, есть такое, вот например исследование: www.cs.umd.edu/~aseem/solidetherplas.pdf

Несколько месяцев назад общались с сингапурскими студентами на эту тему, вот их проект тут на тему формальной верификации: www.comp.nus.edu.sg/~loiluu/oyente.html

Плюс пока искал наткнулся на еще один проект: securify.ch

А еще есть Tezos, которые обещают вставить формальную верификацию в протокол. Но обещанного три года ждут )
вы конкретно про банки или вообще? я вообще отвечу. на вскидку вот список обширный: www.cryptocoinsnews.com/smart-contracts-12-use-cases-for-business-and-beyond

другой пример: голосование акционеров и контроль подсчета голосов.

но надо, конечно, отдавать отчет, что во многих случаях очень часто все упирается у регуляторку и опасения участников.

Похоже, что дискуссия не привела, к желаемому результату. То что я пишу касается руководителей в первую очередь. Простите за грубость, но есть такая деятельность, менеджмент и она сложная. В этой деятельности проведено много исследований признанных научным сообществом. Та часть которая здесь обсуждается затрагивают 2 области как минимум. Одна область, это проектирование работы сотрудников. Другая — это стиль руководства. По проектированию работы можно применять модель Хэкмана и Олдхема (1976) это даст определенную опору в понимании мотивации подчинённых.
С стилями руководства несколько сложнее, но то что я наблюдаю в аргументах меня огорчает. "Теория Х" Мак-Грегора в худшем её появлении. Такое характерно для конца 19, начала 20 века в развитых странах. Аргумент "человек слаб", это подход, давайте называть вещи своими именами, невежественного в менеджменте человека, такое недопустимо. Это прямая обязанность менеджера спроектировать работу подчиненного, спроектировать, а не стоять над душой с безмозглым (избыточным) контролем. Запомните золотое правило:" Ни один человек не нанимается на работу для того чтобы работать плохо". За всё остальное отвечает менеджер.
Обращаюсь к всем кто имеет подчинённых, читайте академические учебники по менеджменту, Хотя бы «Основы менеджмента» М. Мескона, М. Альберта, используете научно обоснованные подходы в управлении, эти подходы работают и помогают.

А на основании чего ГЭС не возобновляемые?

image

А вот статья https://arxiv.org/abs/1504.06603 с их более мощным (по заявлениям авторов) алгоритмом.

Вообще, интересные варианты алгоритмов. Но все нужно проверять, думаю, протестируем их для нашей задачи, совместно с другими алгоритмами.
Вы еще забыли про Смолтолковский true message passing, когда описывали «чистый» ООП. А еще, что интересно, ООП может относиться не к языку, а к технологии. COM тому пример.

А тот «странный» человек, с которым вы спорили, в некотором смысле прав. Только он сильно путает принципы и реализацию, и еще фанатично уверен в том, что ООП бывает только прототипный.
Основа ООП — это message passing, что в современных скриптовых языках реализуется как динамическая типизация и механизм call-by-name, отсюда и его высказывания про то, что «динамизм — основа ООП».
Далее, в случае прототипного ООП исчезают сами классы, отсюда и наследование в классическом понимании тоже исчезает, потому он и говорит, что «наследование для ООП чужеродно».

Думаю, что фанатизма надо меньше, а терпимости к чужой точке зрения больше. Тем более, что, как ни странно, вы оба правы (пока дело не доходит до взаимных оскорбительных выпадов)
Посмотрите книгу Curve and Surface Fitting with Splines (Numerical Mathematics and Scientific Computation), автор Paul Dierckx. Основные идеи в статье взяты оттуда.

У нас, слава Богам, в противовес всему этому говну есть Складчина, Складчик и трекеры образовательной тематики, о которых уже писали на хабре:


Обзор e-Learning трекеров (часть II) / Хабрахабр
https://habrahabr.ru/post/125053/
27 июл. 2011 г. — BitMe.org, BitSpyder.net, LearnBits.me, Elbitz.net уже подробно рассмотрены. Итак, новые участники обзора: 1. ScienceHD...


https://habrahabr.ru/post/127508/
1 сент. 2011 г. — Есть инвайт на bitspyder.net, если нужно- почту в личку… Есть инвайт на bitspyder.net и learnbits.me. почту, как обычно, в личку ).


Приглашения на закрытые зарубежные трекеры… — Хабрахабр
https://habrahabr.ru/post/150670/
1 сент. 2012 г. — 0. ↑ ↓. За инвайт на BitSpyder и eBookvortex буду очень благодарен… И не забудьте прочитать правила bitspyder.net/rules.php. Удачи!


Обзор e-Learning трекеров или Век живи — век учись! / Хабрахабр
https://habrahabr.ru/post/70461/
8 окт. 2009

1

Информация

В рейтинге
4 276-й
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность