Pull to refresh
31
0
Send message
Когда то давно купил книгу «Криптоанархия. Кибергосударства и пиратские утопии». Книга издана MIT Press в 2001 г. и на русском языке вышла в 2005.

Тогда меня просто название заинтересовало — прочитал и поставил на полку (книга интересная, но тогда мне казалась фантастикой).

И вот сейчас, прочитав этот пост, я понимаю, что эта книга начинает быть пророческой. В частности раздел III «Как виртуальная реальность требует юрисдикции реального права» и особенно статья 15 "… как финансы властей штатов и местных властей становятся жертвой наезда на информационной магистрали".

Когда читал ответы, то постоянно думал — как это реально можно сказать своими словами на собеседовании. Но боюсь, что если описывать ответы своими словами, а не академическим языком, то можно внести немалую долю субъективизма авторского изложения. Так что на мой взгляд — лучше уж в качестве копипасты, которую каждый сам сможет сформулировать своим языком.

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

Прошу прощения, в комментарии выше неверно указана ссылка, правильная: github.com/trollixx/qtcreator-tabbededitor-plugin
Актуальная версия на GitHub (Форк разработчика Oleg Shparber, на SourceForge плагин не работает в новых версиях QtCreator).
Лично для меня программирование — это искусство. Представьте — вы своими руками создаете новый мир и вы решаете, по каким правилам он функционирует. Потенциально каждый из нас может реализовать любую задачу, но не каждый из людей может отразить ее в программном коде. Создаваемый программистом мир живет в своей — новой вселенной. Если вы что-то сделали неверно в своей программе, то вы можете это исправить. Скульпторам в этом плане сложнее — проблематично вернуть кусок мрамора, который уже отколот. У программиста область для реализации творчества (на мой взгляд) гораздо шире, чем у кого-либо из людей творческих профессий. Если абстракционист нарисовал свою картину, то для того, чтобы получить feedback он выставляет ее на всеобщее обозрение, а программист реализует абстракции, невидимые конечному пользователю и это формирует тонкое чувство стройности системы, когда ты ощущаешь, что проектные решения удачны.
Поэтому я считаю, что программисты рождаются и становятся не в тех, кто руководствуется «рублем» или «престижностью», а в тех, кто чувствует тягу к творчеству в его особой форме — программированию.
P.S. Возможно сумбурно изложено, но надеюсь кому-нибудь будет созвучна эта мысль.
Я в лоб не пробовал. Использовал только тот JS, который взаимодействует с объектами QML. Как вариант — использовать QGraphicsProxyWidget. Примеры можно посмотреть в этой ветке.
Но лично мне этот вариант не очень нравится.
Нет не обязательно — так просто озвучено в идее гибридных приложений. В примере JS использовался только для отображения. Как и в случае использования С++ с QML (на мой взгляд) в JS целесообразно реализовывать только функционал, отвечающий за интерфейс, а бизнес-логику (domain model) стоит оставить в C++.
Спасибо, для этого видимо нужно будет выполнить еще и пункт 1 ваших замечаний. В представленном коде «Reload» приводит к пустой странице.
Спасибо Вам большое, я доработал статью, добавив раздел «Отладка JavaScript в гибридном приложении» и удалив соответствующий пункт о недостатках. Может Вы заодно подскажете, как активировать опцию «Always enabled», чтобы отладка запускалась в момент создания QWebView? (у меня она не имеет эффекта и «сбрасывается» при каждом запуске приложения). Буду очень Вам признателен.
Да, верно, но у меня с шрифтами в системе все очень плохо пока. Пожалуйста, посмотрите на пример на сайте — там должно быть не так страшно (у меня и там страшно).
В книге «Clear Code» (Чистый код) об этом пишется
Первое правило: функция должна быть компактной. Второе правило: функция должна быть еще компактнее.

Не уверен правда, можно ли автора отнести к «отцам».
В статье вроде не было слов «проще уволить» — была фраза «проще нанять». Мне кажется, что если, например С-программисты, успешно выполняли до этого свои функции в компании, то соответствующее направление в компании никуда не денется и они будут востребованы и дальше (как и в целом в отрасли).
А еще я теперь стараюсь не придерживаться дословно оригинальной статьи и частично «выпиливаю» вкрапления о менеджменте.
Да, такая мысль тоже пришла во время перевода.
Я скопирую ровно то, что написано в статье выше:
Исключения
Функциональная декомпозиция приемлема, если не требуется объектно-ориентированного решения. Данное исключение также может быть применено в тех случаях, когда в сущности чисто функциональное решение обернуто в классы для того, чтобы предоставить объектно-ориентированный интерфейс.

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

Замеров быстродействия не выполнял. Наверное быстродействие в первую очередь будет зависеть от того, насколько быстро работает транспорт, например именованный канал или TCP сокет.

По поводу рассинхронизации реплик — она однозначно может наступить, если соединение потеряно и реплика становится обособленной. Какого либо сигнала (на подобии disconnected) я не обнаружил — только метод isReplicaValid). В том месте, где обрабатываются ошибки QTcpSocket находится вот такой код:
    case QAbstractSocket::ConnectionRefusedError:
        //... TODO error reporting

что наталкивает на мысль, то никакой стратегии (как и обработки ошибки потери соединения) пока нет. В перечне дальнейших возможных улучшений модуля автором указан пункт «Record and replay». Что это такое, пока непонятно. Если будет записываться история изменения состояний объекта, чтобы эти изменения потом можно было воспроизвести в репликах, то возникают дополнительные вопросы, связанные, например, с тем, что реплика может менять состояние источника в ответ на входящие сигналы.

По поводу многопоточности — объекты взаимодействуют либо посредством QLocalSocket (named pipe в Windows и local domain socket в *nix) или с помощью QTcpSocket. Ну а взаимодействие с самим QObject со стороны кода приложения выполняется стандартными сигналами/слотами.
Это надо делать include заголовочного файла SQLite, который в плагине используется.

Что если переопределить в плагине setPassword таким образом, что когда БД еще не открыта, то setPassword устанавливается для connection, а когда БД уже открыта, то setPassword выполняет sqlite3_rekey?
Не слишком мудрено получится?
Шифратор (дешифратор) устанавливается как кодек для pager-а.
Место pager-а в архитектуре SQLite — на рисунке.


В случае любого, даже незначительного повреждения файла невозможно гарантированно восстановить все данные и из незашифрованной БД, если такой механизм не предусмотрен в самой БД. А если восстановить почти все, то потом еще нужно найти то, что испортилось. Для восстановления (на мой взгляд) стоит предусмотреть резервное копирование (бэкапы/дампы).

В любом случае, принимая решение о использовании этого плагина для критически важных данных, потребуется провести его оценку (как минимум по быстродействию и по эффективности шифрования (действительно ли нет незашифрованных данных в временных файлах, например).
При попытке обращения к БД с помощью sqlite3 выдается сообщение об ошибке:
Error: file is encrypted or is not a database

Таким образом можно сделать вывод о том, что шифруется файл полностью (структура БД также скрыта).
Да, все верно. Но как это сделать в рамках Api QSqlDatabase?

Information

Rating
Does not participate
Location
Россия
Registered
Activity