Прикре.Пил

Блог непосредственно в ЖЖ не веду, профиль, в основном, для комментирования.
Моя домашняя страничка вот: nickolay.info
Мой блог тут: blog.kislenko.net. С 17.10.12 его анонсы транслируются сюда. Некоторые записи, связанные с подключением стилей и скриптов, могут отображаться в анонсе некорректно из-за фильтрации контента движком "ЖЖ", в этом случае их нужно смотреть в работе на оригинальной странице блога.
На комментарии отвечу скорее в своём блоге, чем здесь.

Шаблон класса для работы с массивами из элементов любых скалярных типов данных

22:07 17.02.2020

Код пытается ответить на следующие дикие для нормального человека, но жизненно важные для юного программиста вопросы:

  • как сделать шаблон класса для работы с массивами из элементов любого скалярного типа данных <T>
  • как вызвать из шаблона конструктора без аргументов шаблон конструктора с аргументом (правильно - только списком инициализации, пожалуй, см. C() : C(10) { }
  • как генерировать исключения с помощью макроса assert из <cassert>, накладывая ограничения на нужные параметры методов, в том числе, конструкторов;
  • как переопределить оператор [] в шаблоне класса массива для нормального обращения к элементам любого скалярного типа данных через квадратные скобки
  • как при этом создать объект класса "целиком в куче" (большого смысла не имеет, так как динамические свойства, такие как a, всё равно получают память в "куче" при выделении её оператором new) - см. C <float> *f = new C <float> (size) - но, с другой стороны, как вы ещё создадите на этих операторах контейнер с размерностью, заданной через переменную, а не через константу?

Куда смотреть, когда все эти проблемы покажутся неразрешимыми: например, в сторону умных указателей или интерпретируемых языков типа JavaScript/PHP :)

Проверено в консоли Visual Studio 2019.

читать далее в блоге ПерСа


Всеобщая мобилизация, интернетизация и дебилизация...

12:54 16.02.2020

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

1994. Сделал с партнёром первый web-сайт в городе. Вообще, год был хороший. Бомжевал после выпуска из университета, работал кровельщиком, готовился к поступлению в аспирантуру.

1996. Невиданная роскошь - инет дома по модему в 9600 бит/с, скорость, впрочем, быстро выросла до 28 и потом до 56К.

И только с 2007 - постоянное подключение через локалку.

Лето 1998. Испытания сети ССС-900, позднее известной как "МТС" и начавшей тогда подключать в неслыханном формате GSM. Всюду езжу с цветным (!) Siemens S10, выданным компанией просто под копию паспортных данных и с халявной симкой. Народ смотрит диким глазами как на инопланетянина. В то время даже новые русские, останавливая свои 600-е на перекрёстках, бегут к телефону-автомату, чтобы перезвонить на пришедший по пейджеру номер. Звонить по сотовой связи слишком дорого.

Начало 2003. Всеобщая мобилизация и сотовые уже у всех.

2007. "Лопате" в виде Eten X500+ дико завидуют.

2014. Даже бомжи у помойки сидят с "лопатами", намного превосходящими ту. А я уже хожу с дешманским кнопочным, из принципа.

2020. К инету подключён даже холодильник. А я стараюсь обходиться совсем без телефона, соцсетей и мессенджеров.

читать далее в блоге ПерСа


Строим зависимость количества шагов сортировки от размерности массива

12:54 16.02.2020

Сортировки - одна из самых классических задач, имеющих широчайшую сферу применения.

Давайте сравним пару распространённых алгоритмов сортировки не по времени выполнения, как в этом скрипте на PHP, а по количеству шагов цикла, выполняемому алгоритмом. Фактически, это будет прямо коррелировать с временной сложностью.

Возьмём один из "базовых" алгоритмов (подойдут линейная сортировка выбором или сортировка "пузырьком", имеющие одинаковую вычислительную сложность) и один из "продвинутых", скажем, популярную быструю сортировку.

Меняя размерность массива от 100 до 10000, будем генерировать вектор случайных целочисленных значений, снимать с него копию и выполнять сортировки. Ниже показана программа на C++, проверенная в консоли Visual Studio 2019.

читать далее в блоге ПерСа


Юристы

12:54 16.02.2020

Не обижайте юристов, они работают как умеют...

Файл "Юристы" датировался примерно годом 2008-м, самым расцветом плодов 90-х перед падением в бездну нового отмороженного капутализма (вроде всего одну букву в "капитализме" заменили, а вышло вона что - уникальный строй, соединяющий все недостатки социализма со всеми пороками капитализма и не имеющий преимуществ ни одного из них).

А сегодня один мой уважаемый корреспондент прислал это, что вызывало воспоминания, тут же найденные в облаке.

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

Например, один симпатичный юрист, вызвавшийся помочь разрешить одну непреодолимую для гражданина РФ (Омереги, впрочем, тоже) проблему с приватизацией участка, как оказалось, совсем не заинтересован в деньгах и клиентах (их с избытком), но весьма заинтересован в чаепитиях с домашними пирогами, так как дома ему их приготовить некому... Будем использовать хоть такую инсайдерскую информацию.

Разумеется, сама проблема вызывана исключительно запутанностью и самопротиворечиями законов ЭтойСтраны, но никак не нашими противоправными или коррупционными действиями (к стыду своему, я так и не научился воровать в РФ, откуда все проблемы).

Давайте их кормить домашними пирогами и некоторым количеством человеческого отношения. И вы тоже ешьте пироги и соблюдайте закон, граждане. Если, конечно, он в вашей стране есть :)

Ну а вот и файлик:

читать далее в блоге ПерСа


PHP 7.X и 5.X: сравним производительность сами

12:54 16.02.2020

Недавно я упоминал этот старый и заслуженный тест производительности PHP: http://www.php-benchmark-script.com/

Интересно было сравнить версии на старом компе, дома такого нет и не хочется ставить Denwer с PHP5 на новый комп, хотя Denwer и легко удаляется.

Вот что вышло на компе Windows 7 x64, 4 Gb RAM для версий PHP 7.4.2 (XAMPP), PHP 7.3 (XAMPP) и PHP 5.5.9 (Denwer). Статистика усреднена по десятку запусков в каждой конфигурации.

читать далее в блоге ПерСа


Миграция с PHP5 на PHP7: что чаще всего приходится править в исходниках

12:54 16.02.2020

Если не считать необходимого теперь перехода с MySQL на MySQLi и борьбы с Warning: A non-numeric value encountered, есть ещё несколько типовых проблем при миграции скриптов с PHP 5.X (особенно если исходная версия ниже 5.3) на PHP 7.3 - 7.4. Попробую приспособить для описания решений эту заметку, если ещё всплывёт подобное.

читать далее в блоге ПерСа


PHP7 и кодировка windows-1251

12:54 16.02.2020

Вы перешли на PHP7, с помощью phpMyAdmin перекодировали базу данных в utf-8 из windows-1251 (учтите, что если даже сделать экспорт файла в кодировку utf-8, в запросе CREATE TABLE сгенерированного файла .sql всё равно будет написано

DEFAULT CHARSET=cp1251;

и вам придётся исправлять это на

DEFAULT CHARSET=utf8;
для каждой таблицы). Естественно, некоторые вложенные папки со старыми скриптами остались в кодировке windows-1251, менять их нецелесообразно.

Увы, размещение в серверной папке скрипта файла .htaccess со стандартным указанием

AddDefaultCharset windows-1251

может не помочь - по-прежнему отображаются кракозябры-"ромбики"...

читать далее в блоге ПерСа


Переезд и возможные проблемы

12:54 16.02.2020

Пора было ещё N лет назад сделать... просто посмотрел, насколько PHP7 быстрее (вот, кстати, классический тест на производительность PHP) и тут же созрел.

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

Весь домен kislenko.net "переехал" на PHP 7.4 и utf-8, в течение некоторого времени могут быть баги в разных местах, пишите в комменты, чтобы помочь мне их выловить :)

А вот (служебный) список скриптов, которые, скорее всего, не будут совместимы без мелких переделок. Если в нём уже пусто, значит, всё более-менее заработало.

читать далее в блоге ПерСа


PHP: почему 1 + 2 не равно 3 или Warning: A non-numeric value encountered

18:47 11.02.2020

Запустим на локальном или удалённом сервере вот такой небольшой скрипт.

<?php
 $a = 1;
 $b = 2;
 echo "Сумма=" . $a + $b;
?>

Вроде бы, мы вправе рассчитывать, что получим 1 + 2 = 3. Но не тут-то было.

В версии PHP 5.2 видим вывод:

2

В версии PHP 7.3.10 имеем в браузере:

Warning: A non-numeric value encountered in ... on line 4
2

Как видно из таблицы приоритетов, на момент написания заметки приоритеты у "+", "-"и "." одинаковы, а ассоциативность - левая, так что получаем ("Сумма=" . $a) + $b = 0 + 2 = 2

А предупреждение связано с тем, что в PHP8 это будет интерпретировано как "Сумма=" . ($a + $b) и получится строка "Сумма=3".

Разумеется, и сейчас надёжнее написать

echo "Сумма=" . ($a + $b);

, чтобы получить правильный результат.

читать далее в блоге ПерСа