БлогNot. Блог ПерСа

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

php безопасность учебное c++ программирование форматы сказка картинка игра список шахматы статистика язык словарь random ошибка javascript графика css браузеры личное маразм юмор блог анекдот книги эзотерика цензура философия памятка сервис россия аббревиатура email english дата софт pascal mathcad ссылки excel word алгоритм история общество психология зомбоящики реклама firefox цвет все теги все комментарии


[1-15] [16-30] ... [1666-1680] [1681-1682]


Прикреплённое сообщение, правила и всё такое

Остеклить балкон, лоджию в Новосибирске? Проверено, Вам сюда

Encoding: Windows-1251 (Russian). Если картинки выключены: Поиск ::: Статистика ::: Помощь ::: E-mail ::: RSS ::: Nickolay.info

Для полноценной работы блога нужны картинки + JavaScript + Cookies. Ссылки, открывающие новое окно (вкладку), подсвечены.

Даже по законам Эрефии этот блог не является СМИ, все сообщения выражают личную точку зрения автора блога и являются оценочными суждениями, при этом любые совпадения мест, имён, названий и действующих лиц далеко не случайны. В блоге нет файлов, способных нанести вред Вашему компьютеру или мобильному устройству. Если Вам не исполнилось 18+, срочно отвалите отсюда, прикиньтесь ветошью и не отсвечивайте покиньте этот блог. Учтите, что читая этот блог, Вы вторгаетесь на мою личную территорию :) Страница статьидалее...
19.01.2038, 15:15 [7863]


PHP: авторизация с помощью cookies, простой пример

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

Ниже показан небольшой листинг, реализующий авторизацию пользователя с помощью "куки", хранящей зашифрованную алгоритмом md5 контрольную сумму от пароля. Имя кукиза auth отличается от имени встроенной переменной, "ответственной" за пароль ($trypass), так безопасней.

Вместо формы для ввода пароля он передаётся ссылкой через метод $_GET, разумеется, в жизни так делать не нужно.

Также показана "альтернативная" моей обычной обработка параметров функцией get_param. Обратите внимание, что глобальный массив $_REQUEST содержит как данные массивов $_GET и $_POST, так и все $_COOKIE, что позволяет получить компактный код обработки числовых и строковых параметров скрипта.

Предполагается, что файл выполняется на хосте под именем cookie.php, вот полный листинг: Страница статьидалее...
22.02.2017, 10:21 [56]


C++: как поддерживать динамическое свойство класса и нужно ли это делать :)

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

Естественно, для этого придётся освободить память, которую свойство занимало ранее.

Простой листинг может выглядеть примерно так: Страница статьидалее...
21.02.2017, 13:59 [59]


PHP: выравниваем текст по столбцам

Речь не идёт о задаче красивого форматирования программного кода отступами (code alignment). Её можно попытаться решить многочисленными плагинами для Notepad++, такими как Ident By Fold или мощный TextFX с собственным меню (правда, все они обычно не работают так, как тебе нужно).

Отметим также, что код на C++ можно подровнять в редакторе среды Visual Studio. Пройдите в верхнее меню Сервис, Параметры, откройте список Текстовый редактор - C/C++ - Табуляция и настройте отступы по блоку так, как вам удобно

Мы хотим более скромно решить задачу columns alignment, то есть, "раскидать" некие строки текста с разделителями (в формате CSV или подобном) по столбцам, ширина каждого из которых определяется максимальной шириной попадающего туда элемента. Например, если разделитель - это пробел, а данные - это

Привет, мир
2 столбца!

то получится один из трёх вариантов результата

Привет,|мир     
2      |столбца!

Привет,|     мир
      2|столбца!

Привет,|  мир   
   2   |столбца!

в зависимости то того, как мы хотим выравнивать текст внутри столбцов (символом '|' показан разделитель между столбцами).

В PHP эта задача, в общем, уже решена стандартной функцией str_pad, нам остаётся лишь обернуть её в небольшой класс ColumnAlinger и снабдить его несколькими настройками: Страница статьидалее...
19.02.2017, 15:36 [81]


Факты про Ёжку-Кошку, которые вы знали, но боялись в этом себе признаться :)

Ребёнок хочет такую "запись в интернете", что ж, сделаем.

1. Она появилась из волшебного леса, созданного великим волшебником по имени Забылкакзовут (за 3000 лет он и правда забыл, как его зовут). Чтобы создать лес, волшебнику пришлось выдернуть одну нить из ковра времени и свернуть её в колечко.

2. Из-за этого в волшебном лесу время идёт по кругу, там всегда сегодня, лето и хорошая погода. У этого есть обратная сторона - зайчонок никогда не вырастет, а волк навеки останется голодным.

3. Она не просто помесь кошки, ёжика и лемура, она - нечто большее. В конце концов, у неё 3 мамы, которых она никогда не видела, и один папа - сам волшебник. В каком-то магическом смысле он - папа всем говорящим жителям леса, но Ёжку-Кошку он не просто научил говорить, а сам создал. Она была последней, когда волшебной силы оставалось только на одно существо, но в лесу не хватало как минимум трёх, догадайтесь, каких. Поэтому Ёжка-Кошка и считает его папой.

4. У Ёжки-Кошки на спине колючки, она кричит "мук-ляк", обожает баловаться, есть карандаши и откусывать фарфоровые ручки от чашек. Не ест она, пожалуй, только металл и вату. Металлом можно поломать даже её зубы, а от ваты очень уж в горле щекочет. Поэтому спит она на ватной фуфайке, а другой накрывается. Деревянная кровать давно была бы сгрызена.

5. Дети всего мира в последние годы знают о Ёжке-Кошке, называя её то HedgeKitty, то Erizo-Gatito, то ещё как. А она дружит только с девочкой Энни, живущей на краю деревни, из которой есть тропинка в волшебный лес. Нам трудновато изобразить Ёжку-Кошку, ведь она всё время вертится, пусть будет хоть эта картинка. Страница статьидалее...
18.02.2017, 14:58 [114]


QT: применяем текстовые поля ввода и регулярные выражения
Виджеты-примеры построены на шаблоне QWidget и показывают удобство регулярных выражений при типовой обработке текстовых данных :)

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

1. Проект StringToTemplate показывает "динамическую" проверку вводимой строки на соответствие шаблону (в данном случае, вещественному числу в обычной форме записи). Для работы понадобился единственный пользовательский слот slot1(), обрабатывающий сигнал textChanged() от однострочного поля ввода lineEdit типа QLineEdit. Результат проверки в виде знака "+" или "-" выводится в метку label, вот весь основной код, комментарий поясняет части "регулярки": Страница статьидалее...
17.02.2017, 19:51 [131]


PHP: скрипт статистики шахматного клуба :)

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

Вёрстка макета - ещё табличная, мне этот код понадобился просто для иллюстрации некоторых приёмов программирования (альтернативная обработка параметров $_REQUEST функцией get_request_param из листинга, сохранение и продление cookies и т.д.)

База MySQL состоит всего из двух таблиц - players и games, sql-файл для создания таблиц базы прилагается в архиве (schema.sql).

Все настройки, в том числе, макета сайта, записаны в файле config.php, изменить его легко. Файлы закодированы в Юникоде, так что базу данных для скрипта, по умолчанию называемую chess, нужно создать с типом сопоставления кодировки utf8_general_ci.

Система считает количество побед, ничьих и поражений игроков, меняет рейтинги, начиная с указанного в настройках стартового (см. функцию get_new_rating), позволяет хранить и просматривать игры в формате PGN или другом (текст просто вставляется в поле <textarea> при создании новой игры).

Редактирование игр или удаление игроков не предусмотрено, ведь это нарушило бы целостность базы, потребовав обратного пересчёта рейтингов, учёта того, что партия игралась двумя людьми и т.д., в общем, это был бы уже совсем другой скрипт, можете попробовать такой написать, а этот рассчитан на аккуратного редактора, который, в случае чего, залезет в БД "вручную" :) Личные данные игрока, то есть, имя и комментарий изменить при этом можно.

Может, закину туда какие-нибудь свои партейки со временем, а пока пусть лежит в работе онлайн и в виде архива с исходниками: Страница статьидалее...
16.02.2017, 10:54 [169]


PHP: класс для генерации пары слов "Имя+Фамилия"

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

Используя 3 содержащихся в архиве небольших файла-словаря:

класс getRussianNames генерирует и возвращает с помощью метода get список из нужного количества мужских или женских имён и фамилий:

Больше русских фамилий одним файлом было вот тут. Для женской формы русской фамилии отдельного словаря нет, функция getWomanForm склоняет их по простейшим правилам:

Все файлы и сам скрипт - в однобайтовой кодировке Windows-1251, для работы с Юникодом, возможно, придётся немного поправить регулярные выражения.

Также код показывает, как включённый через include или require скрипт может узнать свою текущую папку, например, если файлы скрипта находятся на сервере во вложенной папке namelist, а вызывается (и берёт дополнительные файлы-словари) он из папки, находящейся уровнем выше, как и показано в коде. Менять что-либо в коде класса в норме не придётся.

Вот исходники и результат тестового прогона: Страница статьидалее...
14.02.2017, 14:57 [197]


Про fgets и fflush(stdin) в Studio 2015

Обычные проблемы с "пропущенными" элементами ввода при последовательном использовании нескольких fgets (gets) или scanf (scanf_s) с шаблонами %s и %c для ввода с консоли нескольких строк подряд:

const int SIZE = 30; //размер текстовых полей
struct person { //описание структуры
 char f[SIZE]; //фамилия
 char d[SIZE]; //должность
 float zp, pr; //зарплата, премия
 char prof; //профсоюз
 person *next; //указатель на следующего в списке
};
//...
person vvesti() { //ввод элемента с клавиатуры
 person p;
 printf("\nFIO?"); 
 fgets(p.f, SIZE-1, stdin);
 p.f[strlen(p.f) - 1] = '\0';
 printf("\nDolgnost?"); fgets(p.d, SIZE-1, stdin);
 p.d[strlen(p.d) - 1] = '\0';
 printf("\nZP?"); scanf_s("%f", &p.zp);
 printf("\nPremia?"); scanf_s("%f", &p.pr);
 printf("\nProf (+/-)?"); scanf_s("%c", &p.prof);
 return p;
}

При попытке вызвать эту функцию для ввода и возврата введённой структуры (здесь это не слишком опасно, так как структура невелика и все поля в ней статические), как минимум, мы рискуем пропустить ввод одной или нескольких строк:

 
 1. Show all
 2. Add in head
 3. Add in tail
 4. Delete by number
 5. Sort by name
 6. Edit by number
 7. Search by name part
 0. Exit 2

FIO?
Dolgnost?_

Классические fflush (stdin);, поставленные перед fgets, могут помочь в Студии-2010 но не 2015. Опытным путём нетрудно выяснить, что в 2015 рулит только Страница статьидалее...
10.02.2017, 16:02 [213]


У разных экземпляров класса методы - это разные функции в памяти или одна и та же? :)

Одна и та же, если я правильно понял вопрос :) Приходится ещё и телепатом работать.

Метод класса с именем f() - это одна и та же функция для разных экземпляров класса, иначе размеры exe'шек были бы ещё намного больше :)

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

Посмотрите на скрин ниже (из Visual Studio), там вроде всё понятно. Если создавать объекты не в стеке, а в куче, например, кодом

#include 

class A {
 int n;
public: 
 A();
 int f();
};

A::A() { n=0; }

int A::f() {
  return ++n;
}

int main() {
  A *a = new A(); A *b = new A();
  a->f();
  b->f();
  return 0;
}

там будет то же самое, только адреса, конечно, другие :)

Если нужно одно общее свойство для всех экземпляров класса, она объявляется статическим (static).

А статические функции-члены тоже существуют, но они имеют доступ только к другим статическим функциям или статическим данным в пределах класса. Иначе как они узнают, со свойствами какого экземпляра работать? Страница статьидалее...
10.02.2017, 15:42 [207]


Javascript: движение картинки за курсором по-современному

Вроде бы недавно писалось, но на базе древнего кода, так что работать толком не будет ни в новых IE 10-11, ни в новой линейке Firefox, а может, и в других браузерах, других под рукой нет.

Старый заслуженный код корёжить не хочется, сделаем движение картинки за курсором мыши по-современному и простому. Для скорости разработки реализуем только движение изображения за курсором, ведь при необходимости можно в функции getClickPosition определить более сложные правила для установки требуемых координат картинки (picture.style.left и picture.style.top), например, как-то зависящие от расстояния между рисунком и курсором мыши, как в том коде с круговым движением.

Задачу решим за 3 простых шага.

1. Поставим картинку, которая будет бегать за курсором поверх остального контента. Правда, она будет при этом занимать место в макете сайта. Зато стиль задаст заодно поведение картинки, чтобы она начинала двигаться через нужное время и не делала это слишком интенсивно: Страница статьидалее...
09.02.2017, 17:14 [230]


Несколько шахматных задач из реальных партий :)

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

Думаю, Вы легко решите эти несложные проблемы :) Во всех случаях мои фишки фигуры были белыми. Страница статьидалее...
08.02.2017, 16:41 [237]


C++: произвольное дерево из чисел с ограниченным количеством потомков узла

Ниже приведён листинг простого примера на работу с произвольным деревом чисел (см. поле info структуры). Так как узлы сравниваются между собой по значениям info, все они предполагаются разными. В реальном приложении можно оценивать это info как идентификатор записи, добавив в структуру любые произвольные данные.

По условию задачи, максимальное количество потомков ограничиваем константным значением COUNT. Заметим, что в реальных приложениях память всё равно лучше выделять некоторыми "порциями", как, собственно, и делают стандартные контейнеры STL. Каждый раз "перевыделять" оперативку функциями вроде realloc чревато "дырками" в памяти приложения, а всё время делать delete и new при добавлении нового элемента в контейнер слишком не экономично.

В принципе, подобный листинг есть и вот здесь, только с malloc и "опасной" realloc. Также здесь дерево выводится в консоль в "древовидной" форме и есть метод для удаления поддерева.

Код проверен в Visual Studio 2010 Express, где благополучно сработал. Страница статьидалее...
08.02.2017, 11:50 [219]


Ифкуиль табасаранский

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

Вот баянчик в тему:

Перед нами стол. На столе стакан и вилка. Что они делают? Стакан стоит, а вилка лежит. Если мы воткнем вилку в столешницу, вилка будет стоять. Т.е. стоят вертикальные предметы, а лежат горизонтальные? Добавляем на стол тарелку и сковороду. Они вроде как горизонтальные, но на столе стоят. Теперь положим тарелку в сковородку. Там она лежит, а ведь на столе стояла. Может быть, стоят предметы готовые к использованию? Нет, вилка-то готова была, когда лежала. Теперь на стол залезает кошка. Она может стоять, сидеть и лежать. Если в плане стояния и лежания она как-то лезет в логику "вертикальный-горизонтальный" , то сидение - это новое свойство. Сидит она на попе. Теперь на стол села птичка. Она на столе сидит, но сидит на ногах, а не на попе. Хотя вроде бы должна стоять. Но стоять она не может вовсе. Но если мы убьём бедную птичку и сделаем чучело, оно будет на столе стоять. Может показаться, что сидение - атрибут живого, но сапог на ноге тоже сидит, хотя он не живой и не имеет попы. Так что, поди ж пойми, что стоит, что лежит, а что сидит. А мы ещё удивляемся, что иностранцы считают наш язык сложным и сравнивают с китайским.

На самом деле, у нас ещё не всё так плохо, в табасаранском языке, к примеру, 46 падежей, а в искусственном языке Ithkuil - 81.

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

А по поводу языков - не нужно забывать, что язык есть, прежде всего, система шифрования "свой-чужой", следовательно, логичность и простота его возрастают по мере удаления от дикости "природного состояния" войны всех со всеми. Разве не замечаете, насколько усложнился наш лексикон за последние несколько лет? Страница статьидалее...
04.02.2017, 16:16 [257]


На 2017-й рассчитайся...

Неинтересны стали эти традиционные заметки о посещаемости за год, но так и быть, напишу ещё одну.

Общее количество визитов, которые "Метрика" сочла значимыми - более 360000. По распределению видно, что "пик" стал повыше, а достигнут он традиционно перед новым годом, сессия, "панимаешь": Страница статьидалее...
04.02.2017, 12:48 [227]


[1-15] [16-30] ... [1666-1680] [1681-1682]

  в началопоиск по блогунаписать авторустатистика

Наверх Яндекс.Метрика
© PerS
вход