Программирование [страница: 2]
- /**
* @author: Revenger
* Date: 2021-05-14
*/

В процессе работы над своим первым проектом в Clion столкнулся с одним неудобством при сборке проекта. Программа после компиляции не запускалась по клику, выводилось сообщение "Для файлов типа 'Разделяемая библиотека' не установлено ни одного...", при этом, через командную строку приложение запускалось.
То есть, при компиляции тип файла устанавливался как "shared library", т.е., "разделяемая библиотека" и что-то с этим нужно делать.
- /**
* @author: Revenger
* Date: 2021-04-09
*/

После многих лет программирования на РНР захотелось попробовать силы в принципиально другом направлении - в десктопной разработке на C++. Здесь сразу пропускаю вопросы типа "почему (не Python, Java, Go, etc)", просто, захотелось.
Это мой первый учебный проект, но, возможно, кому-то также будет полезно для изучения. Аналогов этой программы, если что, десятки и сотни, наверное и намного более функциональные. Но, суть не в этом.
Кто-то бухает, кто-то курит, а мне, вот интересно попробовать изучить другой, непохожий язык программирования. Не только, конечно, это, есть и другие интересы, но они не подходят по тематике этой статьи.
Для изучения чего-то желательно не просто сферический проект в вакууме, а нечто более или менее полезное в работе.
Так как я часто разрабатываю различные API, решил сделать клиента для отправки POST запросов. Для начала достаточно, тем более что это первый опыт разработки на C++.
Дополнительно, получу минимальный опыт в разработке интерфейсов.
Да, я написал еще один велосипед (:
- /**
* @author: Revenger
* Date: 2021-02-04
*/

Решил написать простой пример тестового приложения на GTK3 и C++. Конечно, это не какое-то новшество, в сети такого навалом, но рабочих примеров с гулькин ... хм, нос.
Будет пример создания простого окна с текстовым вводом и кнопкой.
- /**
* @author: Revenger
* Date: 2021-02-03
*/

JavaScript функция, принимающая на вход параметр адресной строки (query string) и меняюща его на указанный.
- /**
* @author: Revenger
* Date: 2020-12-17
*/

Чтобы получить программу, которая не завершается после выполнения, а возвращается в некоторое начальное состояние и ждет команды от пользователя, нужно сделать цикл и выбор значения вводимой перемененой.
- /**
* @author: Revenger
* Date: 2020-12-15
*/

Есть стандартный виджет форм, через который реализована загрузка файла и стандартная проблема с двойной отправкой.
- /**
* @author: Revenger
* Date: 2020-12-10
*/

- /**
* @author: Revenger
* Date: 2020-09-16
*/

Base64 - это способ закодировать некие данные при помощи 64-х символов (a-zA-Z0-9) ASCII и дополнительных символов.
Сложность определения состоит в том, что закодированная строка для программы ничем не отличается от любой другой строки. Можно, конечно, пытаться искать по отсутствию пробелов (не сработает для одиночных слов), по наличию кириллицы (не сработает для некириллических строк) или по наличию спецсимволов (актуально только для HTML).
Вместо этого можно использовать вышеперечисленные методы вместе как дополнительный инструмент определения.
- /**
* @author: Revenger
* Date: 2020-07-22
*/

Самый простой способ убрать все пробелы - это комбинация str_replace и trim. Еще одна шпаргалка.
- /**
* @author: Revenger
* Date: 2020-06-25
*/

Понадобилось мне заполнять на основе ассоциативного массива выпадающий список <select><option></option></select> используя jQuery. Каких-то готовых решений нет, каждый пишет свой велосипед. Вот я тоже напишу свой, но с бантиками.
- /**
* @author: Revenger
* Date: 2020-05-21
*/

Как связать две таблиц через ActiveRecord Yii2, используя промежуточную таблицу.
- /**
* @author: Revenger
* Date: 2020-04-22
*/

В связи с переходом на https возникла проблема при получении файлов при помощи функции file_get_contents, а именно,file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:↵error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed.
- /**
* @author: Revenger
* Date: 2020-02-14
*/

Такое вот решение нашлось в процессе создания формы на базе виджета ActiveForm и сохранения без перезагрузки:
1. используем валидацию на клиенте.
2. ловим событие beforeSubmit и отправляем Ajax-запрос на обработчик.
- /**
* @author: Revenger
* Date: 2020-02-10
*/

При использовании фреймов частая проблема - это неполное отображение содержимого вследствие его динамичности на различных разрешениях. Например, на широкоформатном мониторе условный фрейм отображает все содержимое, а на маленьком мониторе часть содержимого может скрываться нижней границей фрейма из-за его (содержимого) адааптивности. Если сделать фрейм зависимым от высоты содержимого, то такой проблемы не будет.
- /**
* @author: Revenger
* Date: 2020-01-15
*/

Простое и понятное объяснение как использовать абстрактные классы и интерфейсы, в чем их отличие.
- /**
* @author: Revenger
* Date: 2019-12-11
*/

Недавно я писал как можно использовать GridView для отображения данных из одной таблицы, а сегодня задача немного усложняется - нужно фильтровать данные из таблицы по одному из полей. Делать буду максимально просто для общего понимания.
- /**
* @author: Revenger
* Date: 2019-11-20
*/

Пример работы с виджетом GridView. Хороший инструмент для вывода данных в табличной форме. В этом примере я разберу как построить интерфейс для отображения данных в виде таблицы материалов с детальным просмотром каждого из материалов при помощи GridView Yii2.
- /**
* @author: Revenger
* Date: 2019-11-06
*/

Довольно часто встречающееся действие при разработке интерфейсов - нужно скрыть какую-нибудь выпадашку по клику извне. Для примера, есть некий some-dive который, допустим, является каким-то элементом выбора и его надо скрыть как только он перестает быть нужным, например, кликнув где-то в другом месте.
- /**
* @author: Revenger
* Date: 2019-10-02
*/

Нужно выбрать некие данные из таблицы, сгруппировав их по году и месяцу. Пусть это будет количество продаж фирмы "Рога и копыта" с группировкой по месяцам и годам.
- /**
* @author: Revenger
* Date: 2019-10-01
*/

Если у вас есть некая html-форма и вам необходимо валидировать в ней поля перед отправкой, самый простой способ - использовать jQuery Validate и не писать свой велосипед.
- /**
* @author: Revenger
* Date: 2019-09-04
*/

Суть проблемы: у меня есть две таблицы, в одной некоторые записи, а в другой таблице есть поля, содержащие ID записей из первой таблицы. Нужно посчитать во второй таблице сколько записей соответствует полям из первой таблицы.
Я постарался представить это на примере школы, где есть классы (первая таблица), в которых находятся ученики (вторая таблица) и нужно посчитать сколько учеников в каждом из классов.
- /**
* @author: Revenger
* Date: 2019-08-20
*/

Выходной день был немного подпорчен пришедшим в корпоративный чат сообщением о непонятной ошибке "Malformed UTF-8 characters, possibly incorrectly encoded". То есть, не то чтобы сама ошибка была непонятной, скорее причина ее происхождения.
- /**
* @author: Revenger
* Date: 2019-08-09
*/

- /**
* @author: Revenger
* Date: 2019-07-17
*/

Как сравнить две одинаковые по структуре но различающиеся по содержимому таблицы.
- /**
* @author: Revenger
* Date: 2019-05-14
*/

Есть ассоциативный массив с условно неизвестными ключами и нужно получить первый элемент этого массива.
- /**
* @author: Revenger
* Date: 2019-04-04
*/

Подключиться к MSSQL через ODBC можно с настройкой DSN или с использованием параметров подключения а также через PDO. Будут примеры всех (или почти всех) возможных вариантов подключения.
- /**
* @author: Revenger
* Date: 2019-04-03
*/

При работе с Sybase есть несколько малоизвестных нюансов.
- /**
* @author: Revenger
* Date: 2019-03-28
*/

Так чтобы окончательно закрыть все вопросы касательно функция include и require на примерах покажу разницу в поведении этих функций.
- /**
* @author: Revenger
* Date: 2019-02-27
*/

Часто встречающаяся задача которая решается при помощи usort и пользовательской функции. Но немного интереснее становится когда нужно делать это при помощи метода класса.
- /**
* @author: Revenger
* Date: 2019-02-15
*/

Поле ввода в виде тегов, которые можно добавлять и удалять. Нет смысла подробно это описывать, кому нужно - поймет.
Хотя в сети миллионы подобных примеров, мой прост и он работает=)
- /**
* @author: Revenger
* Date: 2019-01-16
*/

Три способа обойти дочерние элементы на jQuery.
Есть несколько способов это сделать, я напишу три из них.
- /**
* @author: Revenger
* Date: 2018-12-27
*/

Шпаргалка по функциям фильтрации текста, в частности, при приеме данных для подготовки SQL-запроса но и для других целей.
- /**
* @author: Revenger
* Date: 2018-12-04
*/

Достаточно простой пример регулярного выражения, показано его устройство с пояснениями.
- /**
* @author: Revenger
* Date: 2018-10-26
*/

Небольшой скрипт на jQuery, показывающий сколько еще слов можно добавить в текстовое поле.
- /**
* @author: Revenger
* Date: 2018-10-26
*/

Простая функция на PHP для валидации разрешенных IP адресов (или запрещенных, кому как удобнее).
- /**
* @author: Revenger
* Date: 2018-10-17
*/

Http заголовки, — пожалуй, главная вещь в общении между устройствами (например, браузер - сайт). Они передают основную информацию об устанавливающемся соединении и о передаваемой информации через это соединение.
А теперь о том, как их выловить.
- /**
* @author: Revenger
* Date: 2018-10-11
*/

Тема, конечно, не новая, но напомнить полезно.
В Yii2 есть свой механизм конструирования SQL запросов, поэтому, стоит использовать только его и не допускать "чистых" запросов. Лучше использовать Active Record или, если не хочется городить модель, использовать CreateCommand.
- /**
* @author: Revenger
* Date: 2018-09-29
*/

- /**
* @author: Revenger
* Date: 2018-08-19
*/

При использовании ssh2_scp_send на сервер приходят обрезанные в конце файлы. Это хорошо заметно на примере текстовых и картинок (просто другие файлы могут не открыться вообще). Проблема заключается в том, что вы не закрываете сеанс SSH. Таким образом, внутренние буферы не очищаются, и файлы полностью не записываются на диск.
- /**
* @author: Revenger
* Date: 2018-08-04
*/

Так уж вышло, что верся сайта для разработчика наодтся за прокси-сервером. Поскольку сайт на Вордпресе, ему периодически нужно лезть в Интернет за обновлениями, а без прямого доступа это невозможно.
Но не все так плохо, Вордпресс можно научить работать через прокси.
- /**
* @author: Revenger
* Date: 2018-07-21
*/

Пример скрипта для скачивания больших файлов с гугл диска. Особенностью скачивания больших файлов является наличие дополнительного подтверждения для скачивания, гугл предупреждает что файл большой уточняет, точно ли его нужно скачать.
- /**
* @author: Revenger
* Date: 2018-07-16
*/

Несколько дней назад перестала работать отправка почты PHPMailer + Gmail. Вероятно, закрутили какие-то гайки, так как до этого все работало, но это не точно, может быть, провайдер приложил руку.
В логе были ошибки ssl3_get_server_certificate:certificate verify failed.
- /**
* @author: Revenger
* Date: 2018-06-14
*/

Абсолютно одинаковые файлы вели себя по-разному а именно, один запускался а другой нет и в логах попадались ошибки: "end of script output before headers". Не помогала даже установка прав 777.
- /**
* @author: Revenger
* Date: 2018-05-10
*/

Нажимая на воспроизведение анимированого изображения на сайте (фб, твиттер, вк т.д.) в консоли браузера можно увидеть что запускается воспроизведение видеофайла.
- /**
* @author: Revenger
* Date: 2018-04-10
*/

Я думаю, каждый программист так или иначе сталкивается с ошибками наподобие "Fatal error: Allowed memory size of 402653184 bytes exhausted (tried to allocate 1126637679 bytes) in /var/www/html/puper-puper-script.php on line 256". Можно, конечно увеличивать количество доступной памяти для PHP, но это нельзя делать бесконечно. Но можно и попытаться разобраться на что расходуется память.
- /**
* @author: Revenger
* Date: 2018-04-05
*/

JSON - результат работы функции json_encode(). Под катом будет описан метод проверки строки, является ли она JSON или нет.
- /**
* @author: Revenger
* Date: 2018-04-03
*/

Flexbox можно назвать удачной попыткой решения огромного количества проблем при верстке, таких, например, как выравнивание блоков по вертикали. Любой верстальщик знает несколько путей выровнять что-либо по вертикали или сделать 3-х колоночный макет с резиновой средней колонкой. Но все эти способы довольно странные, похожи на хак костыли, подходят не во всех случаях, сложны для восприятия и не работают при несоблюдении определенных магических условий, которые сложились исторически и вообще, это не проще обряда вызова Сатаны.
- /**
* @author: Revenger
* Date: 2018-03-31
*/

В некоторых случаях необходимо использовать возможности модели но без использования таблиц. Самый простой пример - валидировать поля формы но без записи в базу.
Нет ничего проще!
- /**
* @author: Revenger
* Date: 2018-03-13
*/

Метод beforeAction позволяет выполнить произвольный код перед выполнением экшена, что следует из его названия. И практический пример использования.
- /**
* @author: Revenger
* Date: 2018-03-12
*/

В Yii2 есть такой функционал как сценарии которые позволяют изменять правила валидации в различных ситуациях.
Например, есть некий набор полей, который будет валидироваться в одном случае и не будет в другом. Сценарии объединяют в понятные группы правила валидации и регистрируя условного Уасю, при редактированиии нельзя будет изменить его логин и при сохранении в базу объекта "Уася" поле "Логин" не будет подвергаться валидации.