• Приготовься к введению в России социального рейтинга
    –5
    ..., но объясните подробнее, что не так с кредитами.

    Как минимум то, что деньги сами по себе не могут порождать деньги. Ростовщичество это чистейший абсурд.

    Судя по тому что писал Н. С. Лесков («Волки в России», 1869 год), роставщичество, еще не так давно считалось зазорным делом (ниже его цитата):

    «Есть у нас и другие волки, которых не мешало бы истребить, это учредители гласных касс ссуд, разврат которых не только не уменьшился с гласностью, но принял более широкие размеры и наглость которых увеличилась пропорционально тому же. Мы не разделяем того мнения, что дозволенное законом ростовщичество — лучше скрытого, и имеем на то свои основательные причины. Прежде ростовщики сознавали, что действуют преступно, и всеми мерами скрывали свое гнусное ремесло, что много ли, мало ли, но оберегало нравственность народа. Тогда ростовщичеством не всякий решался заниматься, не только боясь этого занятия как противозаконного, но и стыдясь его как безнравственного, а потому ростовщиками в то время были только люди, которые, подобно публичным женщинам, могли совершенно отречься от стыда. Дозволение им действовать гласно привело к тому, что теперь многие приучились смотреть на ростовщичество как на простое коммерческое дело, и такое мнение случается не раз слышать от очень порядочных людей. Кроме того, многие лица, даже не совершенно испорченные, занялись теперь ростовщичеством с совершенно свободной совестью, как делом, дозволенным законом, а следовательно, и совершенно нравственным.»
    см. подробнее 1
    см. подробнее 2

    И что мы видим сейчас в головах у людей. Окно Овертона в действии?

    Также есть хорошие цитаты на данную тему от Фомы Аквинского, Мартина Лютера и Аристотеля, копипастить не буду, приведены здесь: islam.stackexchange.com/a/7699

    Советую еще почитать про понятие частичного банковкского резерва.

    А и совсем забыл: youtu.be/joBG79MNCGs
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Comment from a drafted post.
  • Сопротивляйтесь добавлению в проект новых библиотек
    +3
    Добрый день!

    В посте речь идет про разработку а не про деплой/использование конечными пользователями. Моменты описанные в статье актуальны для любого кроссплатформенного проекта.
  • Аннотация к «Effective Modern C++» Скотта Майерса. Часть 2
    0
    По сути все зависит от конкретной реалиции STL ведь.
  • Идеальная передача и универсальные ссылки в C++
    +1
    Всем доброго дня!

    Всем интересующимся, в дополнение, советую также прочесть интереснейшую статью Efficient argument passing in C++11, Part1 (Part2, Part3). В ней, вопрос эффективной передачи аргуменов в С++11, охватывается чуть более глобально, а также предлагается подход к реализации runtime perfect forwarding'а (напомню в С++11, perfect forwarding доступен только для шаблонов, т.е. этот механизм нам доступен только в compile time).
  • О бедном C++ API замолвите словцо!
    +5
    Если быть точнее. то это пример технологии D-Pointer, который конечно же является частным случаем Pimpl.
  • Вступают в силу новые правила ввоза товаров из-за рубежа (посредники предупреждают пользователей)
    0
    Наверное как и раньше было, т.е. имеется ввиду цена товара.
  • Конкурсная программа PHDays IV
    –3
    Я тоже видать не понял суть) — не совсем понятен смысл шага на котором ребятам предлагается выпить крепкий горячительный напиток. Если под этим шагом понимается штраф, то почему бы его не заменить чем нибудь менее пагубным и более полезным, мы ведь за здоровое поколение.
  • Один из методов работы с конфигурационными файлами в С++ (Qt)
    0
    Самое главное это, как написал выше EuroElessar:
    compile-time check


    Если же было принято решение вынести ключи, в виде строковых констант, например в отдельное пространство имен, можем столкнуться со следующим (вырезка из поста):
    * во первых слишком многословно, т.е. информация дублируется (key1 -> «key1», и т.д.).


    * во вторых при достаточном количестве ключей и секций, велика вероятность, что придется прописывать константы для всех комбинаций, что не очень удобно.

    Тут стоит пояснить поподробнее. Если первый пункт («многословность») можно отнести чисто к взгляду с эстетической точки зрения, то второй пункт затрагивает некоторые практические моменты.

    Например предположим что у нас в настройках надо хранить два пароля для FTP и для HTTP серверов:

    в предлагаемом мною методе нам достаточно определить два enum's таким образом (дефолтную секцию General для наглядности опустил):

    //Settings.h
    class Settings{
        ...
    public:
        enum Section{
            HTTP,
            FTP
        };
    
        enum Key{
            Password
        };
    
        ....
    
    };
    


    Альтернативный вариант c использованием констант:
    //Settings.h
    class Settings{
    public:
        typedef const char * Section;
        typedef const char * Key;
    
        static Section HTTP;
        static Section FTP;
        static Key Password;
    
        ...
    
    };
    
    //Settings.cpp
    Settings::Section Settings::HTTP = "HTTP";
    Settings::Section Settings::FTP = "FTP";
    Settings::Key Settings::Password = "Password";
    


    А теперь представим что нам надо добавить еще 2 ключа — URI и Login (для HTTP и FTP серверов)

    Вариант с «магическими» enums требует минимальных изменений — всего-лишь надо добавить два элемента в перечисление Key:
    //Settings.h
    class Settings{
        ...
    public:
        enum Section{
            HTTP,
            FTP
        };
    
        enum Key{
            URI,
            Login,
            Password
        };
    
        ....
    
    };
    


    Вариант с классическими константами требует куда больше изменений:
    //Settings.h
    class Settings{
    public:
        typedef const char * Section;
        typedef const char * Key;
    
        static Section HTTP;
        static Section FTP;
        static Key URI;
        static Key Login;
        static Key Password;
    
        ...
    
    };
    
    //Settings.cpp
    Settings::Section Settings::HTTP = "HTTP";
    Settings::Section Settings::FTP = "FTP";
    Settings::Key Settings::Password = "URI";
    Settings::Key Settings::Password = "Login";
    Settings::Key Settings::Password = "Password";
    


    Из приведенных выше примеров можно заметить, что вариант использующий классические константы требует больших изменений как в *.h так и в *.cpp файлах. Этого конечно же можно избежать если вынести константы в хеадер в отдельное пространство имен (как описано в посте), или же обозначить их как constexpr (но это уже требует поддержки C++11). Но в любом случае реализация получится более многословной => усложнение модификации.
    Можно привести еще много фактов в пользу применения описанного тут метода по сравнения с применением констант, но это потребует куда большего объема текста чем этот комент)
  • Один из методов работы с конфигурационными файлами в С++ (Qt)
    0
    В чем новизна? Что есть у Вас чего нет в официальной документации?
    Осмелюсь спросить: Вы читали пост целиком? :)

    Задав в поиске на хабре «QSettings» и нашлось больше 5 тем не включая вашу.
    Если Вы все же читали пост целиком (ну или хотябы чуть дальше середины), то могли бы заметить что все те статьи, что выдает поиск, никак не касаются вопросов затронутых здесь. Там применяется простой метод использования QSettigns. Здесь же я описываю, метод работы с конфигами и его реализацию, которая не привызанна именно к QSettings, я же написал в статье:
    В данной реализации, класс QSettings, используется исключительно для кроссплатформенного доступа к настройкам. Конечно же по желанию QSettgins может быть заменен любым другим механизмом, например SQLite.


    Наверное я неправильно начал введение, что у читателей сводится мнение что все дальнейшее будет касаться исключительно работы с QSettigns.
  • Консольный комфорт
    +1
    Sannis:
    А что мне это даст? Или что это даст заинтересованным лицам?

    как миннимум быстрый просмотор кода всем интересующимся)
  • Клиент для сервиса Forvo.com подручными средствами
    0
    Теперь понял что Вы имели ввиду) Но это то что я описал в первом варианте, к сожалению этот метод для программ имеющих разнородные кавычки, по описанным в статье причинам, становится непригодным.
  • Клиент для сервиса Forvo.com подручными средствами
    0
    Рад что статья оказалось полезной, насчет возможности закачки, ее можно добавить таким образом:

    найти в скрипте эту строку
    mpg123 -q $URL
    
    и заменить (или дополнить) ее этой строкой
    curl -o "$WORD.mp3" $URL
    

    Таким образом будет скачиваться mp3 файл с названием того слова которое давалось в поиске.
    Кстати, вроде Anki позволяет в словари добавлять аудиозаписи, так что таким образом можно пополнять и произношения. Насчет плагинов для Anki — надо посмотреть, возможно ли их написание.
  • Клиент для сервиса Forvo.com подручными средствами
    0
    Ди и несовсем понял про универсальный способ мультилайн однострочников, можно поподробнее?
  • Клиент для сервиса Forvo.com подручными средствами
    0
    Да согласен, лоадер выходит еще проще реализовать)
    Интересно возможно ли седом реализовать аналог getAwkProgram (та что в репозитории)?
  • Клиент для сервиса Forvo.com подручными средствами
    0
    Да, действительно это тоже вариант, такой синтаксис я встречал однажды, но если честно ни разу не применял) Этот вариант гораздо лучше первого, но всеже считаю второй читабельнее, но это уже вопрос вкуса)

    PRG=$(cat <<END
    BEGIN{
    print «from awk program»
    }
    END
    )
  • Мысли перед сном: алгоритм фрактального перемешивания
    +1
    Совет по поводу реализации данного алгоритма на С++:
    Не всегда правильно/логично, с точки зрения проектирования, все реализовывать через классы. В данном случае считаю что логичнее было бы реализовать в виде функций. Да понимаю, что обычно всегда есть тяга к «объектности», но просто не всегда она уместна)
  • Мысли перед сном: алгоритм фрактального перемешивания
    0
    … чтобы постить на него все что в голову пришло, невзирая на полезность и адекватность пришеднего.

    Хм… зачем же так строго?) Да конечно перед публикацией все же надо хорошо обдумать все, проверить корректность решения и пр. Но ведь все не просчитаешь, порой нужен свежий взгляд со стороны. Уверен что как статья так и комментарии к ней будут полезны как автору так и многим другим.
  • Спасение CD/DVD-дисков полировкой
    0
    Я не отрицаю что надежность хранения данных на CD/DVD оставляет желать лучшего, считаю что, в обозримом будущем, их полностью вытеснят накопители на Flash ну и облака :)
  • Спасение CD/DVD-дисков полировкой
    0
    Насколько помню мне помогло такое: лоскут ткани, натер его паста ГОИ (+ по моему маслом еще смачивал). Таким методом мне удалось вручную востановить 2 DVD. Ручной метод требует большого запаса терпения. Также следует помнить что движение лоскута должно быть вдоль радиуса, а не вдоль окружности.
  • Спасение CD/DVD-дисков полировкой
    0
    У нас китайские DVD-шки стоят ~5 р. шт. (если брать пачку) => 5/4,7 = 1 р на гиг.
  • Цитаты о разработке программного обеспечения
    +1
    Кто нибудь в курсе кого это высказывание (точную формулировку не помню):
    «Только гений может создать машину которой сможет пользоваться любой глупец, глупец же создаст машину которой сможет пользоваться только гений.»
  • Плохие привычки программистов
    0
    Честно говоря, пока что, я тоже не нашел нормального метода, я просто стараюсь перед каждым комитом (в котором есть значительные изменения) править uml. Мне тоже было бы интересно узнать метод получше)
  • Плохие привычки программистов
    0
    Преждевременная оптимизация — да, может нанести урон архитектуре.
    Но оптимизация в целом — как же без нее? Порой без нее просто невозможно.
  • Плохие привычки программистов
    0
    Считаю что хорошему коду, ну а также и правильной архитектуре всей системы способствует применение таких инструментов как UML. При его использовании — мы можем взглянуть на архитектуру/код с высоты птичьего полета и увидеть многие недостатки (если таковы имеются). Это я обнаружил на собственном примере, когда взглянул на код проекта, который я реализовывал 3 года назад без применения UML. Когда пишешь код, постепенно углубляешься все больше и больше в реализацию, теряя при этом свежий взгляд на систему в целом, что может привести ко многим концептуальным ошибкам.
  • Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)
    0
    Возникала подобная мысль, только я хотел использовать хеш-таблицу или что-нибудь подобное для кеширования уже найденных проекций сегментов. Но идею отложил в сторону, так как, пока что не нашел метода, как параллельно, без блокировок, строить кеш.
    Если конечно Ваше решение как-нибудь возможно распараллелить, то будет отлично, в противном же случае у нас появится последовательный участок, который, несмотря на то что в последовательном режиме может дать большой прирост всему алгоритму, в параллельном думаю может снизить эффективность (закон Амдаля).
  • Какой тип синтаксиса языков программирования удобнее?
    +1
    Думаю, скобки удобнее. Да конечно во первых это — привычка, если уже привык к ним, то остальное, наверное, будет казаться уже не столь удобным.
    Но тут есть еще второй момент — практичность, т.е. если я, например, захочу по чату передать фрагмент программы, то вся логика может пострадать из-за того что какие-то пробелы/табы проглотились. Т.е. я считаю, что логика программы не должна зависеть от форматирования текста этой программы, потаму что это логически разные понятия, а ввод любой дополнительной зависимости — обычно накладывает дополнительные ограничения.
  • Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)
    0
    Спасибо за инфу!
    Значит можно считать что статья выполнила все поставленные цели.
    Надо будет почитать про BLAST.
  • Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)
    0
    Скажите, Вы разве ушли куда-то от квадратичной сложности?

    Нет конечно, не ушел)
    Основной целью было разработать и реализовать алгоритм, который хорошо параллелится. Как я и написал в «Заключении» — алгоритм пришел мне на ум почти сразу же после прочтения условия задачи, конечно это были только наброски, без деталей. После этого удалось более детализировать и более выгодным образом его распараллелить.
  • Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)
    0
    Спасибо, за заметку, поправил в теле поста)
    Также благодарю Lockal, за то что указал на ошибки пунктуации.
  • Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)
    0
    И да, важный факт тут, использовать число M, потому как некоторые участники тупо на него забивали, а ведь если это число большое, решение, эффективно использующее M, будет работать куда шустрее.

    Кстати, заметил что скорость референсного кода, практичеки, не зависит от M, конечно я понимаю что сравнивать референсный код с реализацией этого алгоритма — не корректно, но всеже это удивило)

    Могу ли я вас попросить в конце добавить оценку сложности времени выполнения и потребления памяти для вашего решения, так будет видно ещё больше насколько оно хорошее или плохое в отношении к другим решениям. Спасибо :)

    Если допустить, что M — константа (хотя от этого параметра сильно зависит скорость), то, если я не ошибаюсь, суммарная сложность будет:
    O((N1 — M + 1) * N2) + O step3 = O(N1 * N2) + O step3, где N1, N2 — длина первой и второй строк соответственно; O step3 — сложность шага 3.
    Пока что не могу точно сказать какова сложность шага 3, так как тут идет не совсем прямая зависимость от N1, N2.