© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
28 июня 2017 г. 6:31

Карьера и бизнес в ITEVILEG - Празднуем 2 года и подводим итоги

EVILEG, 2 года

Настал знаменательный день! Ресурс EVILEG празднует два года со дня своего основания - 28 июня 2015 года.

Два года назад был зарегистрирован первый домен ресурса EVILEG в зоне RU, поднят сайт на Wordpress и началась работа над статейными материалами.

Примерно через пол года был зарегистрирован домен в зоне COM, куда спустя год перекочевал ресурс и последние пол года активно развивается.

И теперь настало время подвести итоги двухлетнего развития сайта EVILEG, чей рост неразрывно связан с моим собственным профессиональным ростом. В данном случае одно от другого неотделимо.

23 июня 2017 г. 8:12

DjangoDjango - Урок 025. Комплект полезных батареек Django

Battery, tagging, Framework, Django, ckeditor, REST, django-bootstrap3

Удобство разработки на Django заключается не только в том, что это уже достаточно развитый Framework с богатым функционалом, но и в наличии большого количества качественных батареек (пакетов), которые реализуют необходимый функционал, писать который самостоятельно было бы довольно затруднительно, особенно если вы занимаетесь разработкой сайта в одиночку.

В процессе вот уже более полугодовой разработки сайта на COM домене подобрался именно такой комплект, который значительно облегчает жизнь и ускоряет разработку:

  1. django-ckeditor
  2. django-autocomplete-light
  3. django-tagging
  4. django-bootstrap3
  5. django-modeltranslation
  6. django-daterange-filter
  7. django-phonenumber-field
  8. django-rest-framework
22 июня 2017 г. 10:17

LinuxНастройка HTTPS от Let`s Encrypt с помощью Certbot

LetsEncrypt, Ubuntu, Nginx, HTTPS, SSL, HTTP

Некоторое время назад на сайте перестал обновляться SSL сертификат от Let`s Encrypt . Судя по ошибкам, несколько поменялась структура  файлов для организации ключей. После исследования проблемы наиболее простым вариантом представилась установка SSL сертификатов с помощью специальной утилиты Certbot . Данная утилита производит установку сертификатов в автоматическом режиме, а также автоматически создаёт задачу по обновлению сертификата, которая базируется либо в планировщике cron либо в systemd.

Поскольку сервер сайта работает на Ubuntu 16.04, то и комплект установки был выбран для этой ОС. В случае других ОС на сайте Certbot предоставляются мануалы и для других систем.

Если Вы производите настройку SSL сертификата впервые, то можно воспользоваться руководством на сайте Certbot, если Вы уже производили настройку сертификата с помощью других утилит, например, с помощью пакета letsencrypt без использования certbot, как показано в следующей статье , то скорее всего понадобится сделать небольшую чистку перед установкой Certbot `a.

15 июня 2017 г. 6:58

QtQt/C++ - Урок 067. Использование QMultiMap для словаря синонимов

Qt, QStandardItemModel, QMultiMap, QTableView

QMultiMap является классом, наследованным от QMap, который позволяет хранить несколько значений для одного ключа. То есть ключ может повторяться. Этот класс может быть использован, например, для представления словаря синонимов.

Напишем небольшую программу, которая будет содержать две таблицы:

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

Изначально таблица с ключами будет заполнена, тогда как таблица со значениями будет пустой. При клике по строке в таблице ключей, таблица значений будет заполняться синонимами того слова, по строке которого был произведён клик.

Внешний вид приложения:

9 июня 2017 г. 10:37

C++C++ - Урок 004. Условия и циклы

C++, while, for, do, break, continue, if, else

C++ предоставляет стандартный набор операторов для условий выбора и циклов.

Ключевыми словами, относящимися к конструкциями условий ветвления кода, являются:

  • if
  • else
  • switch
  • case
  • break
  • default

Ключевыми словами, относящимися к конструкциям циклов, являются:

  • do
  • while
  • break
  • continue
  • for
6 июня 2017 г. 16:48

QtQt/C++ - Урок 066. Загрузка файлов на FTP сервер

Qt, QNetworkAccessManager, FTP

Для работы с сетью в Qt 5 используется модуль Network , а для передачи данных по сети можно активно использовать класс QNetworkAccessManager , если Вы не создаёте свой собственный протокол для передачи данных. Но для работы с FTP достаточно использования QNetworkAccessManager , с которым мы уже работали при реализации скачивания файла с сайта .

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

Для этого в окне приложения будет присутствовать кнопка для открытия диалога выбора файла. QLineEdit, в котором будет отображаться путь к файлу. QLineEdit, в который мы будем вводить адрес, по которому будет производиться загрузка файла. Кнопка запуска загрузки, а также прогресс бар, который покажет прогресс загрузки файла на сервер.

5 июня 2017 г. 7:33

C++C++ - Урок 003. Константы

C++, const, constexpr

C++ поддерживает две нотации неизменности:

  1. const - которая подразумевает, что значение не будет изменяться. В первую очередь это используется для спецификации интерфейсов, для данных которые передаются в функции и методы так, чтобы не опасаться, что они будут изменены. Компилятор отслеживает наличие спецификатора const;
  2. constexp - который подразумевает вычисление константы во время компиляции. Используется для размещения данных в памяти, где они не будут повреждены, а также для улучшения производительности.

Например:

const int dmv = 17;                      // константа с именем dmv
int var = 17;                            // переменная var не является константой
constexpr double max1 = 1.4∗square(dmv); // OK, так как square(17) является константым выражением
constexpr double max2 = 1.4∗square(var); // Ошибка, так как var не является константой
const double max3 = 1.4∗square(var);     // OK, поскольку выражение может быть вычислено в рантайме
double sum(const vector<double>&);       // sum не будет модифицировать его аргументы
vector<double> v {1.2, 3.4, 4.5};        // v не является константой
const double s1 = sum(v);                // OK, будет вычислено в рантайме
constexpr double s2 = sum(v);            // Ошибка, sum(v) не является константным выражением.
4 июня 2017 г. 8:52

PostgreSQLИсправление клиентской кодировки базы данных PostgreSQL с LATIN1 на UTF8

PostgreSQL, Django, LATIN1, UTF8

На сайте был один баг, который проявлялся при попытке прикрепления к сообщениям файлов, названия которых были на кириллице. В данном случае сайт выдавал ошибку 503. Это происходило несмотря на то, что кодировка базы данных была в UTF8, после исправления кодировки самой базы данных в предыдущей статье . Тогда как Django выдавал следующее сообщение:

'latin-1' codec can't encode characters in position 55-64: ordinal not in range(256)

Проблема заключалась в том, что кодировка сервера была первоначально выставлена в LATIN1. То есть следующие команды давали следующий вывод:

postgres=# show server_encoding;
 server_encoding 
-----------------
 LATIN1
(1 row)

postgres=# show client_encoding;
 client_encoding 
-----------------
 LATIN1
(1 row)

postgres=# \encoding 
 LATIN1

Выполнение команды SET CLIENT_ENCODING TO 'utf8'; не давало результата, после выхода из psql кодировка возвращалась в LATIN1 .

12 мая 2017 г. 17:06

C++C++ - Урок 002. Типы данных, Переменные и Арифметика

C++, int, char, double, auto, nullptr

Каждая переменная или выражение имеет свой тип данных, например, объявление

int some_variable;

указывает, что переменная some_variable имеет целочисленный тип int.

Объявление позволяет ввести некую переменную в программу. Данная переменная будет обладать неким типом данных: целочисленный, с плавающей запятой, символьный в случае базовых типов данных, или кастомный тип (структура данных, класс). Тип переменной определяет набор операций, которые можно произвести над переменной. Объявление переменной определяет выделение области памяти, которая требуется для неё. А также значение этой переменной, которое с точки зрения компьютера будет являться последовательностью битов. Объявление переменной также несёт в себе то имя, по которому программист будет обращаться к данной переменной в программном коде.

В выше приведенном примере имеем переменную, которая имеет базовый целочисленный тип, с которыми могут производиться арифметические действия, действия сравнения, присваивания и т.д. Обращаться в программном коде к этой переменной будем по имени some_variable.

10 мая 2017 г. 16:38

DjangoDjango - Урок 024. Частые опросы с AJAX

AJAX, Django, Polling

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

Уведомления выглядят следующим образом:

22 июля 2018 г. 20:56
Тарас

C++ - Тест 001. Первая программа и типы данных

  • Результат 73баллов,
  • Очки рейтинга1
22 июля 2018 г. 18:29
Kaptn

C++ - Тест 003. Условия и циклы

  • Результат 100баллов,
  • Очки рейтинга10
22 июля 2018 г. 7:48
Kaptn

C++ - Тест 003. Условия и циклы

  • Результат 64баллов,
  • Очки рейтинга-1
Последние комментарии
18 июля 2018 г. 12:45
plgrm44

Qt/C++ - Урок 050. Логирование событий Qt приложения в текстовый файл

А что мешает сохранить адрес дефолтного обработчика и после вывода в файл вызывать и его?
17 июля 2018 г. 13:34
Arrow

Qt/C++ - Урок 049. QTranslator - динамический перевод мультиязычного приложения на Qt

Работает так: find_package (Qt5LinguistTools)file (GLOB TS_FILES ${SOURCE_DIR}/translations/*.ts)qt5_add_translation (QM_FILES ${TS_FILES})add_custom_target (translations ALL DEPE...
17 июля 2018 г. 9:53
Илья Чичак

Django - Урок 035. Различные шаблоны для рендеринга разных типов контента в поисковой выдаче

тут все упирается в то, что вы хотите дать поисковым роботам. был у меня опыт проектирования страницы для роботов - сделал точки входа - со статикой для роботов и АПИ для JS клиента=) а отлавл...
17 июля 2018 г. 9:43
Евгений Легоцкой

Django - Урок 035. Различные шаблоны для рендеринга разных типов контента в поисковой выдаче

Думаю, что это всё равно стоит оставить для индексирующих роботов поисковых систем, которые испоьлзуют простые GET запросы. Они же AJAX не используют. Так что полностью уйти от этого не получи...
Сейчас обсуждают на форуме
23 июля 2018 г. 11:24
Arrow

QComboBox делегат для QTableView

И можно еще один маленький вопрос: Как изменить значение в ячейке QTableView?
23 июля 2018 г. 8:56
Arrow

Получение прав пользователей на таблицу базы данных

Да, только самый основной прикол в том что для возможности редактирования таблицы пользователю одних прав на таблицу мало, нужны еще и на последовательность: GRANT USAGE O...
23 июля 2018 г. 8:52
Евгений Легоцкой

Перестал работать Qt Maintenance Tool

В настройках есть параметры прокси, возможно, через них сможете завести, через какой-нибудь прокси сервер. По поводу списка репозиториев. сам не в курсе. Спросил на официальном форум...
23 июля 2018 г. 7:59
Евгений Легоцкой

Qt Android

Так, по поводу ошибок, там в main.cpp ещё одна ошибка у вас Надо так написать QQmlApplicationEngine engine;engine.load(QUrl(QStringLiteral("qrc:/main.qml")));DBase myClas...
23 июля 2018 г. 6:44
Евгений Легоцкой

как проверить состояние у динамически созданного CheckBox в qml

Тогда можно расширить эту модель, наследоваться от неё. И добавить в качестве роли ещё и состояние чекбокса, для выбора. Также можно переопределить метод setData, чтобы можно было ус...

Рекомендуемые страницы