Павел, а можете написать отдельный пост для тех кто только планирует выйти на кикстартер со своим проектом? Кажется что там очень много подводных камней.
Не нужно гнаться за привычным — привычки нарабатываются. Особенно полезные. И не нужно путать привычность с простотой. Методы Optional/Result в Rust просто освоить и просто выработать привычку, да и в целом концепция — простая, хоть и по началу непривычная для кого то.
P.S. Optional в Java теперь тоже есть и даже аналог and_then имеет среди методов — flatMap.
У типа Result есть множество удобных методов для построения цепочек вычислений, напрмер .and_then:
getDB().and_then(select).and_then(from).and_then(where).or_else(foo)
Принято считать, что функтор — это всегда тип, у которого есть только один параметр.
Э… Функтором может быть любой тип подходящего кайнда и ничего странного в этом нет. Примером може служить реализация функтора для Map a b:
instance Functor (Map k) where
-- функция применяется к значениям, а ключи не затрагиваются
И от словаря вполне логично ожидать такого поведения (и именно так реализован функтор для Map). А, скажем, от ячейки лабиринта Cell Int Int a можно ожидать, что функция не затронет координаты ячейки, а коснется только содержимого. И это только вполне очевидные примеры.
В вашем тождестве эквивалентен результат, но не способы его получения.
И написать val mapFilter = map(_+1) . filter(_ > 0) в Scala не получится — map/filter, это не полиморфные функции, а методы класса.
Никакой композиции нет во fluent-интерфейсе, а есть лишь последовательность вызовов.
«composition of multiple monadic operations» — композиции нескольких монадических операций. Это никак не функциональная композиция, да и не композиция вовсе на самом деле — просто-напросто, слегка завуалированный fluent interface
Вопрос был не к конкретному посту, а к сообществу в целом (видимо, зря я не уточнил формулировку)
Перефразирую:
— Почему в рунете визуализатор спектра практически всегда называют эквалайзером?
Org-mode и не заменяет карты памяти. Более того, «электронные» средства для создания MindMaps зачатую проигрывают блокноту А4 и многоцветной ручке — мелкая моторика, рисунки на полях, нажим на ручку, в конце концов — всё это дополнительные мнемонические якоря, на основе которых ММ и работают.
Я же упомянул Org-Mode именно в ответ на комментарий касательно текстового представления, которое автор комментария уже успешно использует.
В целом же — и иерархические списки (деревья) полезны, и ММ. Но в разных ситуациях и польза различна и отнюдь не одинакова для разных людей.
Добавлю плюсов на чашу OrgMode:
— Сорцы не просто вставляются, их ещё и выполнить можно. А результат, скажем, вставить в текст. Причем контекст может сохраняться от блока к блоку и даже восстанавливаться при последующих сеансах работы с документом — очень похоже на IPython Notebook
— Можно писать код и даже целые проекты в одном документе, используя подход Literate Programming
— Emacs из коробки умеет экспортировать org-документ в кучу форматов: acsiidoc, PDF, HTML. В те же Mindmaps, к слову
— Помимо древовидной структуры есть теги и их также можно использовать для структурирования
— Есть API для работы с org-документами из различных языков — теоретически можно синтезировать скриптами хоть код, хоть схему БД
— Поддерживаются гиперссылки, например, на другие документы. Ссылки могут быть и на внешние файлы, в которых можно даже строку указать (file:src/core/app.py:123)
Ознакомьтесь, может быть возьмёте формат на вооружение — формат чисто текстовый, его поддерживают многие приложения, и даже мобильные, что отдельно радует. Я не в курсе, но возможно есть аналоги для Vim. Python-парсер точно есть ;)
Sony Smartband также умеет управлять плеером с помощью «комбо»: кнопка + одинарный/двойной/тройной «тап» (приостановить-возобновить/вперед/назад, соответственно).
Ещё браслет от Sony в связке с Lifelog умеет делать эдакую «закладку жизни» — по долгому нажатию кнопки запоминается время, место, активность, играющая в этот момент музыка. Потом, похоже, этими закладками можно будет делиться (я пока не пробовал за ненадобностью).
Не понравился один «пунктик» в самом приложении Lifelog — показатели можно обновлять только при наличии подключения к Интернет (историю можно смотреть offline). При этом сам трекер телеметрию снимает даже в то время, когда не подключен к телефону/планшету — считает шаги и прочие ускорения.
Ну и при передвижении на самокате/велосипеде шаги не считаются, пока браслет на руке, посему приходится носить в кармане на бедре, пока не придумаю альтернативный браслету чехольчик/кармашек.
Раз на раз не приходится, видимо. Я свою пользую шесть лет и в походах и в технических целях, пару раз даже ей паял. Для данного экземпляра это уже пятая или шестая заправка, и пока тенденции к износу нет.
Всегда с собой:
1. Диктофон
2. noname зарядник «18650 <-> USB», совмещенный с фонарём
3. До-мажор губная гармошка :)
4. Yota Many
5. Nexus 7 II в чехле (с наушниками-затычками, что не совсем в кадр попали)
6. Зажигалка-горелка для термоусадки и подплавления прочих капроновых ниток
7. Кошелёк + паспорт
8. Мульти-инструмент, пригодный для откручивания, открытия, пиления и метания
9. Отвертка с мини-битами (плоскими, philips и torx)
10. Иголки и нитки капроновые чёрные
11. Ручка обычная :)
12. Накопитель с Ubuntu, давно потерявший родной корпус, в последствии — термоусаженый
13. Кабель для зарядки Nokia-звонилки
14. Кабель mini-USB с переходником на micro-USB
15. Victorinox Hiker
16. Dingoo A320
Всё положено в однолямочный swissgear:
Рюкзак приятный вполне, только подумываю поперечную лямку с застёжкой пришить на манер грудного ремешка двухлямочных братьев — при езде на самокате/велосипеде рюкзак норовит сползти со спины под руку ((
P.S. Optional в Java теперь тоже есть и даже аналог and_then имеет среди методов — flatMap.
getDB().and_then(select).and_then(from).and_then(where).or_else(foo)
Э… Функтором может быть любой тип подходящего кайнда и ничего странного в этом нет. Примером може служить реализация функтора для
Map a b
:И от словаря вполне логично ожидать такого поведения (и именно так реализован функтор для Map). А, скажем, от ячейки лабиринта
Cell Int Int a
можно ожидать, что функция не затронет координаты ячейки, а коснется только содержимого. И это только вполне очевидные примеры.И написать
val mapFilter = map(_+1) . filter(_ > 0)
в Scala не получится — map/filter, это не полиморфные функции, а методы класса.Никакой композиции нет во fluent-интерфейсе, а есть лишь последовательность вызовов.
Э… Что, простите?
for — синтаксический сахар для filter/flatMap/map, но никак не функциональной композиции.
Перефразирую:
— Почему в рунете визуализатор спектра практически всегда называют эквалайзером?
Я же упомянул Org-Mode именно в ответ на комментарий касательно текстового представления, которое автор комментария уже успешно использует.
В целом же — и иерархические списки (деревья) полезны, и ММ. Но в разных ситуациях и польза различна и отнюдь не одинакова для разных людей.
— Сорцы не просто вставляются, их ещё и выполнить можно. А результат, скажем, вставить в текст. Причем контекст может сохраняться от блока к блоку и даже восстанавливаться при последующих сеансах работы с документом — очень похоже на IPython Notebook
— Можно писать код и даже целые проекты в одном документе, используя подход Literate Programming
— Emacs из коробки умеет экспортировать org-документ в кучу форматов: acsiidoc, PDF, HTML. В те же Mindmaps, к слову
— Помимо древовидной структуры есть теги и их также можно использовать для структурирования
— Есть API для работы с org-документами из различных языков — теоретически можно синтезировать скриптами хоть код, хоть схему БД
— Поддерживаются гиперссылки, например, на другие документы. Ссылки могут быть и на внешние файлы, в которых можно даже строку указать (file:src/core/app.py:123)
Ознакомьтесь, может быть возьмёте формат на вооружение — формат чисто текстовый, его поддерживают многие приложения, и даже мобильные, что отдельно радует. Я не в курсе, но возможно есть аналоги для Vim. Python-парсер точно есть ;)
eval как раз и добавит чуточку «unsafe» ;)
З.Ы. это, скорее, упражнение на смекалку. На практике такого делать, разумеется, не стоит :)
Ещё браслет от Sony в связке с Lifelog умеет делать эдакую «закладку жизни» — по долгому нажатию кнопки запоминается время, место, активность, играющая в этот момент музыка. Потом, похоже, этими закладками можно будет делиться (я пока не пробовал за ненадобностью).
Не понравился один «пунктик» в самом приложении Lifelog — показатели можно обновлять только при наличии подключения к Интернет (историю можно смотреть offline). При этом сам трекер телеметрию снимает даже в то время, когда не подключен к телефону/планшету — считает шаги и прочие ускорения.
Ну и при передвижении на самокате/велосипеде шаги не считаются, пока браслет на руке, посему приходится носить в кармане на бедре, пока не придумаю альтернативный браслету чехольчик/кармашек.
1. Диктофон
2. noname зарядник «18650 <-> USB», совмещенный с фонарём
3. До-мажор губная гармошка :)
4. Yota Many
5. Nexus 7 II в чехле (с наушниками-затычками, что не совсем в кадр попали)
6. Зажигалка-горелка для термоусадки и подплавления прочих капроновых ниток
7. Кошелёк + паспорт
8. Мульти-инструмент, пригодный для откручивания, открытия, пиления и метания
9. Отвертка с мини-битами (плоскими, philips и torx)
10. Иголки и нитки капроновые чёрные
11. Ручка обычная :)
12. Накопитель с Ubuntu, давно потерявший родной корпус, в последствии — термоусаженый
13. Кабель для зарядки Nokia-звонилки
14. Кабель mini-USB с переходником на micro-USB
15. Victorinox Hiker
16. Dingoo A320
Всё положено в однолямочный swissgear:
Рюкзак приятный вполне, только подумываю поперечную лямку с застёжкой пришить на манер грудного ремешка двухлямочных братьев — при езде на самокате/велосипеде рюкзак норовит сползти со спины под руку ((