Оказалось, в C++ можно не писать return в методе, который согласно сигнатуре должен что-то возвращать. Это не синтаксическая ошибка согласно стандарту, а undefined behavior. Соответсвенно, программа в рантайме падает с произвольной ошибкой.
Я буду читать предупреждения от компилятора
Я буду читать предупреждения от компилятора
Я буду читать предупреждения от компилятора
Многие из нас пришли в Google разделяя ценности компании, в том числе ее бывшую позицию касательно цензуры и слежки за людьми в Китае. Мы считали, что Google — компания, которая ставит свои ценности выше прибыли.
У меня ужасная новость для сотрудников Google, подписавшихся под этим требованием.
Эй чувак, мы добавили десктопные приложения в твоё десктопное приложение (веб-браузер), чтобы ты мог запускать десктопные приложения, когда запускаешь десктопное приложение!
Для отслеживающих тему и интересующихся проблемой нерабочего звука на baytrail хромбуках в новых ядрах linux (4.5+): В конце октября 2018 на странице обсуждения бага на arch в комментариях появился патч, решающий проблему. Прямо сейчас я применил этот патч и на моём toshiba chromebook 2 заработал звук в самом новом ядре (4.19).
В рекламе написано "open API" но, кроме надписи, на это "open api" нет ни ссылок, ничего.
Линуксовый дистрибутив запакован tar+xz, но расширение .tar.gz.
Файл выложен почему-то на dropbox, вспоминается анекдот про "солидная фирма возьмёт в аренду степлер".
В комплекте к мессенджеру идёт полный рантайм java, весь мессенджер в распакованном виде занимает 223 Мб.
В сайте там, где квадрат из табличек 3x3, едет вёрстка.
Сайт тормозит (переход между разделами у меня занимает от 1 до 5 секунд на достаточно мощной машине).
Половина разделов "under construction".
Проприетарны как клиентская так и серверная часть, про открытую спецификацию на протокол думаю спрашивать бессмысленно.
При всём этом очень мило выглядит слоган на сайте "spread the word about M1". Т.е. пользователям предлагается spread the word про то, что в мире появился очередной N+1-ый мессенджер c неясным протоколом и сырым сайтом?
Про форумы в статье есть здравое зерно, но mailing lists ещё совершеннее форумов в плане технического инструментария для хранения и поиска информации. Вот в чьём-то личном блоге очень хорошее краткое обоснование, почему mailing lists превосходят в этом плане форумы.
Ну и опять же, что значит "предоставляем свободную платформу"? Есть форумные движки, в тч свободные (phpbb), мессенджеры здесь вообще ни при чём — форумы это отдельная независимая платформа. У вас есть хоть какие-то преимущества перед существующими форумными движками? Есть есть, почему эти преимущества не перечислены, на минуточку, в статье, их рекламирующей?
Кроме ручного ввода данных в дневник расходов (лист бумаги, приложение или файл с данными) нормально автоматизировать получение статистики от банков всё равно невозможно:
— Некоторые платежи производятся за наличный расчёт — любые цифровые решения при этом не работают. Получается, нужно всё равно руками вносить часть данных.
— Банков много, формат экспортируемых данных и API у каждого свои, приложения третьей стороны не факт что поддерживают все банки, возможностей объединить на своей стороне данные от разных банков (не будучи разработчиком) — ноль целых ноль десятых
— Индивидуальные расходы отдельных членов семьи дают не очень много информации о расходах, пока они не объединены в общую статистику. Т.е. или все члены семьи в идеале должны пользоваться одним и тем же приложением/экосистемой и приложение ещё должно уметь сливать статистику вместе, или надо опять вручную объединять данные (и я не видел НИ ОДНОГО мобильного приложения, где была бы нормально реализована интероперабельность). Вот какими костылями приходится пользоваться например мне: я вношу траты руками в Ledger из чеков и СМСок, жена использует какое-то мобильное приложение под iOS, не знаю как у него с взаимодействием с банками, к счастью у него есть csv экспорт. В конце месяца забираю у неё csv, нехитрым скриптом на Perl перегоняю данные в формат Ledger, вливаю в свои (в Ledger это просто приписывание содержимого одного файла с данными в конец другого файла с данными), другим скриптом делаю то же самое в обратную сторону со своими данными (Ledger -> csv для приложения) и отдаю ей для импорта (если есть желание посмотреть красивую картинку с общей статистикой в ios приложении, но обычно просто хватает того, что выводит Ledger).
По тексту:
Все данные хранятся в зашифрованном виде на телефоне пользователя. Они передаются только в банк. Когда приложение удаляется, меняется ключ шифрования или пользователь выходит из профиля, автоматически удаляются и все данные о подключении к банку.
Фраза построена так, как будто любое приложение для выкачки статистики из банка автоматически обладает такими свойствами. :)
То есть скачивают и загружают CSV-файл. Иногда это не самое приятное занятие, потому что возникают ошибки
В смысле? Какие ошибки, это же один из самых простых форматов? Вероятность ошибки в приложении/веб-приложении, парсящих данные от банков, в любом случае выше.
Во-вторых, я от MS ничего не требовал, тем более «открывать всё подряд», а говорил в сослагательном наклонении: «откроют игру — посмотрим». «Не использовать несвободную лицензию для уже существующего небольшого куска кода» — такое же бесплатное действие, как и «выкладывать две малорелевантные утилиты».
Мне ни жарко ни холодно от открытия или не открытия исходников этой игры.
Но я против лицемерия. МС на каждом углу пиарит это loves open source, причём в качестве примеров часто приводят объедки с барского стола вроде этого, либо вложения в open source с прямой выгодой (hyper-v). Открыть две с половиной либы не стоит вообще ничего (равно как ничего не стоит написать в бложек "мы собираемся открыть XXX"). Зато какой инфоповод. "Код для молодых разработчиков" это вообще смешно, примеров хорошего кода сотни по всему интернету, а парсеров и преобразователей данных вообще пруд пруди.
Да, я предвзято отношусь к заявлениям МС об открытии кода и это совершенно нормально. К другой компании мб относился бы более нейтрально, но в адрес МС, извините, применяю презумпцию виновности, тк она себя дискредитировала. Открытие куска игры — вероятно, PR-ход, пока не МС не подтвердят обратное (например не откроют всю игру под свободной лицензией и разрешат коммерческое использование).
Краткое содержание: мы открыли крохотный кусок Minecraft (два внутренних инструмента под Java edition для крайне узкой категории пользователей) под свободной лицензией. Может быть откроем другие куски, но это не точно. Microsoft loves open source, оставайтесь с нами.
Мда. TL;DR: довольно банальная платформа для децентрализованного доступа к файлам с разграничением прав. Пресловутое «разграничение прав» по очевидным причинам перестаёт действовать, когда данные покидают пределы Solid, о чём рекламные лозунги проекта скромно умалчивают. Проект в зачаточном состоянии, до внятных технических спецификаций приходится продираться через тонну мутных маркетинговых текстов, спекулирующих на модной теме privacy.
Как веб дошёл до такой потери децентрализации, до печального нынешнего состояния? Из первого популярного браузере Mosaic удалили инструменты мультимедиа и редактирования. Было решено, что они слишком сложны для обывателя. С этого всё и началось.
Простите, ЧТО?
По сабжу: вижу набросок архитектуры, набор зачаточных спецификаций и пример реализации (клиент, сервер), не вижу ничего революционного. Выглядит неплохо, но, извините, такое может создать любой хороший разработчик, посидев несколько вечеров над архитектурой. Бернерс-Ли на обложке проекта это конечно хорошо, но маловато. Что характерно, типовая реализация клиента в проекте — на Javascript, сервера — на node.js. Очередной стильный, модный, молодёжный стартап?
Spent some time on solid website. It certainly appears to be compliant with all modern standards.
1. Talks about how important privacy is while using Google Analytics
2. Massive fonts
3. Jackpot scrolling
4. Low information content that leaves the reader guessing what you are talking about.
5. Piling on armies of crappy framework over another until something notably unremarkable is achieved.
т.к. адресована конкретным пользователям, а не «неопределнному кругу лиц»
Как это? По такой логике любой распространитель рекламы, на любой рекламный буклет которого я пожалуюсь в ФАС, ответит «это не реклама, это индивидуально подобранный под конкретного пользователя набор предложений от компании». В случае e-mail рекламы он ещё при этом и не соврёт, тк сейчас все делают таргетированную рассылку.
С шаблонными классами это невозможно (виноват, проглядел <> в IsMethodParamsCompatible), кроме ест-но переноса IsMethodParamsCompatible в cpp файл с некрасивым захардкоживанием специализаций в *.cpp файле:
// methodeventhandler.hpp
template<class TMethodHolder, class ...TParams>
class MethodEventHandler : public AbstractEventHandler<TParams...>
{
//...
virtual void call( TParams... params ) override; // прячем определение в cpp файл
// ...
};
// methodeventhandler.cpp
template<class TMethodHolder, class ... TParams>
struct IsMethodParamsCompatible {
// определение класса...
};
template<class TMethodHolder, class ...TParams>
void MethodEventHandler<TMethodHolder, TParams...>::call(TParams...params)
{
// тело ф-и, скопированное из hpp
static_assert( IsMethodParamsCompatible<TMethodHolder, TParams...>::value, "Event and method arguments are not compatible" );
( m_methodHolder->m_object.*m_methodHolder->m_method )( params... );
}
// ХАРДКОД (принудительное инстанцирование заранее известного типа).
// Без кода ниже будет ошибка линковки при сборке test.cpp -
// unresolved symbol MethodEventHandler<MethodHolder<ClassHandler, int, unsigned int>, unsigned int>::call(unsigned int)
class ClassHandler;
MethodEventHandler<events::handlers::MethodHolder<ClassHandler, int, unsigned int>, unsigned int> test(nullptr);
C++11 это вы преуменьшаете :) std::shared_mutex ----> C++17.
Пара поверхностных замечаний (толком код не смотрел):
— Не собралось под GCC из-за некоторого несоответствия стандарту (например в шаблонном производном классе нельзя использовать unqualified type name из шаблонного базового класса — name lookup не обязан туда заглядывать). См пулл-реквест;
— У меня впечатление, что shared_ptr для Holder не обязателен и я бы попытался заменить его на unique_ptr в списке обработчиков + сырой readonly указатель во всех остальных местах.
— shared_ptr(new XXX) -----> лучше использовать std::make_shared(XXX) (классика)
— Некоторые внутренние типы лучше спрятать из публичного интерфейса (eg. IsMethodParamsCompatible)
Фича выглядит интересно, но ИМХО это лишняя сущность.
Самое надёжное средство контроля за входящей почтой от веб-сервиса (хабр, интернет-магазины итд), — это настройки вашего аккаунта на этом вебсервисе в разделе «управление уведомлениями/рассылкой». Никакие супер-умные алгоритмы mail.ru не умеют логиниться на хабр и тыкать в настройки рассылки — они лишь являются косвенным средством управления входящей рассылкой по факту её получения: активировать линк unsubscribe в письме, попытаться применить машинное обучение для выборочной фильтрации ит.д. Сложно, ненадёжно, не прозрачно.
Вот простая стратегия для избавления от лишней рассылки (не обязательно в почтовом ящике mail.ru).
1. Как только регистрируетесь на каком-то сайте — СРАЗУ идёте в настройки аккаунта и отключаете рассылку рекламы. Если реклама продолжает приходить — пишем в саппорт сайта с указанием на ст. 18.1 ФЗ №38-ФЗ «О рекламе», согласно которому сайт обязан прекратить любую рассылку рекламы в адрес юзера по индивидуальному запросу от него. Также на всякий случай кликаем на unsubscribe в той рекламе от сайта, которая уже успела придти.
2. Также отключаем в аккаунте все уведомления, кроме самых важных (статус заказа, уведомление о входящих ит.д.).
На этом этапе может выясниться, что некоторые не рекламные уведомления отключить технически невозможно. Пример — неотключаемая рассылка «Важная информация для вас от Paypal» от собственно пейпала (абсолютно бесполезная хрень с размытым заголовком в лучших традициях спама). Наличие такой проблемы — хороший повод прекратить пользоваться услугами сайта, но при необходимости можно настроить «тупой» фильтр по заголовку/тексту на почтовом сервере (без всякого машинного обучения итд).
3. Оставшиеся легитимные уведомления опять же фильтруем вручную «тупыми» фильтрами.
Всё.
Upd: по прозрачности этой «быстрой отписки» опять же вопрос — это разовое действие или оно имеет перманентный эффект, например создаёт какой-то фильтр со сложной логикой? Если второе, то это обычный фильтр, добавляющийся к созданным мной, или что-то скрытое и недоступное для пользовательских настроек?
Я буду читать предупреждения от компилятора
Я буду читать предупреждения от компилятора
Я буду читать предупреждения от компилятора
У меня ужасная новость для сотрудников Google, подписавшихся под этим требованием.
До того, как зашла речь про цензурирование, вы умудрялись не заметить, что работаете в компании, сканирующей личную переписку клиентов в маркетинговых целях, цензурировавшей поисковую выдачу в том же Китае в середине нулевых, впихивающей неотключаемую рекламу на Youtube, агрессивно борющейся с поставщиками сборок андроида без G-Suite и делающей ещё много разных забавных вещей.
Текст статьи обновлён соответственно (UPDATE 3).
Мда...
В рекламе написано "open API" но, кроме надписи, на это "open api" нет ни ссылок, ничего.
Линуксовый дистрибутив запакован tar+xz, но расширение .tar.gz.
Файл выложен почему-то на dropbox, вспоминается анекдот про "солидная фирма возьмёт в аренду степлер".
В комплекте к мессенджеру идёт полный рантайм java, весь мессенджер в распакованном виде занимает 223 Мб.
В сайте там, где квадрат из табличек 3x3, едет вёрстка.
Сайт тормозит (переход между разделами у меня занимает от 1 до 5 секунд на достаточно мощной машине).
Половина разделов "under construction".
Проприетарны как клиентская так и серверная часть, про открытую спецификацию на протокол думаю спрашивать бессмысленно.
При всём этом очень мило выглядит слоган на сайте "spread the word about M1". Т.е. пользователям предлагается spread the word про то, что в мире появился очередной N+1-ый мессенджер c неясным протоколом и сырым сайтом?
Про форумы в статье есть здравое зерно, но mailing lists ещё совершеннее форумов в плане технического инструментария для хранения и поиска информации. Вот в чьём-то личном блоге очень хорошее краткое обоснование, почему mailing lists превосходят в этом плане форумы.
Ну и опять же, что значит "предоставляем свободную платформу"? Есть форумные движки, в тч свободные (phpbb), мессенджеры здесь вообще ни при чём — форумы это отдельная независимая платформа. У вас есть хоть какие-то преимущества перед существующими форумными движками? Есть есть, почему эти преимущества не перечислены, на минуточку, в статье, их рекламирующей?
— Некоторые платежи производятся за наличный расчёт — любые цифровые решения при этом не работают. Получается, нужно всё равно руками вносить часть данных.
— Банков много, формат экспортируемых данных и API у каждого свои, приложения третьей стороны не факт что поддерживают все банки, возможностей объединить на своей стороне данные от разных банков (не будучи разработчиком) — ноль целых ноль десятых
— Индивидуальные расходы отдельных членов семьи дают не очень много информации о расходах, пока они не объединены в общую статистику. Т.е. или все члены семьи в идеале должны пользоваться одним и тем же приложением/экосистемой и приложение ещё должно уметь сливать статистику вместе, или надо опять вручную объединять данные (и я не видел НИ ОДНОГО мобильного приложения, где была бы нормально реализована интероперабельность). Вот какими костылями приходится пользоваться например мне: я вношу траты руками в Ledger из чеков и СМСок, жена использует какое-то мобильное приложение под iOS, не знаю как у него с взаимодействием с банками, к счастью у него есть csv экспорт. В конце месяца забираю у неё csv, нехитрым скриптом на Perl перегоняю данные в формат Ledger, вливаю в свои (в Ledger это просто приписывание содержимого одного файла с данными в конец другого файла с данными), другим скриптом делаю то же самое в обратную сторону со своими данными (Ledger -> csv для приложения) и отдаю ей для импорта (если есть желание посмотреть красивую картинку с общей статистикой в ios приложении, но обычно просто хватает того, что выводит Ledger).
По тексту:
Фраза построена так, как будто любое приложение для выкачки статистики из банка автоматически обладает такими свойствами. :)
В смысле? Какие ошибки, это же один из самых простых форматов? Вероятность ошибки в приложении/веб-приложении, парсящих данные от банков, в любом случае выше.
Насмотрелся уже на корпорации, выкладывающие в опенсорс говнокод на своих условиях по остаточному принципу.
Во-вторых, я от MS ничего не требовал, тем более «открывать всё подряд», а говорил в сослагательном наклонении: «откроют игру — посмотрим». «Не использовать несвободную лицензию для уже существующего небольшого куска кода» — такое же бесплатное действие, как и «выкладывать две малорелевантные утилиты».
Мне ни жарко ни холодно от открытия или не открытия исходников этой игры.
Но я против лицемерия. МС на каждом углу пиарит это loves open source, причём в качестве примеров часто приводят объедки с барского стола вроде этого, либо вложения в open source с прямой выгодой (hyper-v). Открыть две с половиной либы не стоит вообще ничего (равно как ничего не стоит написать в бложек "мы собираемся открыть XXX"). Зато какой инфоповод. "Код для молодых разработчиков" это вообще смешно, примеров хорошего кода сотни по всему интернету, а парсеров и преобразователей данных вообще пруд пруди.
Да, я предвзято отношусь к заявлениям МС об открытии кода и это совершенно нормально. К другой компании мб относился бы более нейтрально, но в адрес МС, извините, применяю презумпцию виновности, тк она себя дискредитировала. Открытие куска игры — вероятно, PR-ход, пока не МС не подтвердят обратное (например не откроют всю игру под свободной лицензией и разрешат коммерческое использование).
Простите, ЧТО?
По сабжу: вижу набросок архитектуры, набор зачаточных спецификаций и пример реализации (клиент, сервер), не вижу ничего революционного. Выглядит неплохо, но, извините, такое может создать любой хороший разработчик, посидев несколько вечеров над архитектурой. Бернерс-Ли на обложке проекта это конечно хорошо, но маловато. Что характерно, типовая реализация клиента в проекте — на Javascript, сервера — на node.js. Очередной стильный, модный, молодёжный стартап?
Upd: Коммент на слэшдоте выражает всю суть:
Как это? По такой логике любой распространитель рекламы, на любой рекламный буклет которого я пожалуюсь в ФАС, ответит «это не реклама, это индивидуально подобранный под конкретного пользователя набор предложений от компании». В случае e-mail рекламы он ещё при этом и не соврёт, тк сейчас все делают таргетированную рассылку.
С шаблонными классами это невозможно (виноват, проглядел <> в IsMethodParamsCompatible), кроме ест-но переноса IsMethodParamsCompatible в cpp файл с некрасивым захардкоживанием специализаций в *.cpp файле:
Упс, да, EventHandler конечно.
Но они экспортируются в публичный заголовочный файл eventhandling.hpp. Такие вещи лучше прятать в cpp файлы.
Пара поверхностных замечаний (толком код не смотрел):
— Не собралось под GCC из-за некоторого несоответствия стандарту (например в шаблонном производном классе нельзя использовать unqualified type name из шаблонного базового класса — name lookup не обязан туда заглядывать). См пулл-реквест;
— У меня впечатление, что shared_ptr для Holder не обязателен и я бы попытался заменить его на unique_ptr в списке обработчиков + сырой readonly указатель во всех остальных местах.
— shared_ptr(new XXX) -----> лучше использовать std::make_shared(XXX) (классика)
— Некоторые внутренние типы лучше спрятать из публичного интерфейса (eg. IsMethodParamsCompatible)
Самое надёжное средство контроля за входящей почтой от веб-сервиса (хабр, интернет-магазины итд), — это настройки вашего аккаунта на этом вебсервисе в разделе «управление уведомлениями/рассылкой». Никакие супер-умные алгоритмы mail.ru не умеют логиниться на хабр и тыкать в настройки рассылки — они лишь являются косвенным средством управления входящей рассылкой по факту её получения: активировать линк unsubscribe в письме, попытаться применить машинное обучение для выборочной фильтрации ит.д. Сложно, ненадёжно, не прозрачно.
Вот простая стратегия для избавления от лишней рассылки (не обязательно в почтовом ящике mail.ru).
1. Как только регистрируетесь на каком-то сайте — СРАЗУ идёте в настройки аккаунта и отключаете рассылку рекламы. Если реклама продолжает приходить — пишем в саппорт сайта с указанием на ст. 18.1 ФЗ №38-ФЗ «О рекламе», согласно которому сайт обязан прекратить любую рассылку рекламы в адрес юзера по индивидуальному запросу от него. Также на всякий случай кликаем на unsubscribe в той рекламе от сайта, которая уже успела придти.
2. Также отключаем в аккаунте все уведомления, кроме самых важных (статус заказа, уведомление о входящих ит.д.).
На этом этапе может выясниться, что некоторые не рекламные уведомления отключить технически невозможно. Пример — неотключаемая рассылка «Важная информация для вас от Paypal» от собственно пейпала (абсолютно бесполезная хрень с размытым заголовком в лучших традициях спама). Наличие такой проблемы — хороший повод прекратить пользоваться услугами сайта, но при необходимости можно настроить «тупой» фильтр по заголовку/тексту на почтовом сервере (без всякого машинного обучения итд).
3. Оставшиеся легитимные уведомления опять же фильтруем вручную «тупыми» фильтрами.
Всё.
Upd: по прозрачности этой «быстрой отписки» опять же вопрос — это разовое действие или оно имеет перманентный эффект, например создаёт какой-то фильтр со сложной логикой? Если второе, то это обычный фильтр, добавляющийся к созданным мной, или что-то скрытое и недоступное для пользовательских настроек?