php
14 заметок
терапия
Сейчас этот блог в основном про психотерапию.
как правильно
Слушайте меня, я вас научу правильно жить.
психология
Буржуазная лже-наука, пытающаяся выявить закономерности в людях.
практика
Случаи и выводы из психотерапевтической практики.
кино
Фильмы и сериалы.
книги
Это как кино, но только на бумаге.
nutshells
«В двух словах», обо всем.
дорогой дневник
Записи из жизни (скорее всего, не интересные).
беллетристика
Мои литературные произведения и идеи.
духовный рост
Когда физический рост кончается, начинается этот.
дивинация
Как предсказывать будущее.
половой вопрос
Про секс и сексуальность.
заяижопа
Творческий дуэт с моей женой.
магия
«Магическое — другое название психического».
Карл Юнг
игровой дизайн
Раньше я делал игры.
игры
Компьютерные игры.
язык
Слова там всякие.
людишки
Уменьшительно-ласкательно и с любовью.
культ личности
Про великих людей (то есть, в основном про меня).
hwyd
Уникальная Система Прививания Привычек.
буклет
я
идеи
блоги
spectator.ru
дети
wow
вебдев
музыка
контент
программирование
религия
дейтинг
диалоги
яндекс
кулинария
coub
fitness
символы
йога
шаманизм
tiny
ребенок

Auto Increment with MongoDB

12 лет назад в категориях mongodb php

Популярная по своей дурости задача «а я не хочу эти длинные id, я хочу увеличивающиеся циферки в качестве айдишников».

Несмотря на свою нелепость, она иногда нужна. Например, человекочитаемые номера. «Хуйня номер 10».

Самый простой и рекомендуемый всеми способ — хранить где-то отдельно счетчик и менять его с помощью findandmodify (для чего в php нет отдельного метода, но можно через command).

Но можно сделать проще!

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

Короче, как-то так:


$mongo -> insert ($U);
$inc = $mongo -> find (array ("_id" => array ('$lt' => $U[_id])));
$inc = $inc -> count ();
$inc++;
$mongo -> update (array ("_id" => new MongoId ($U[_id])), array ('$set' => array ("inc" => $inc)));

Ограничения очевидны, но часто «и так сойдет», да-да.

0

Фотосортер

12 лет назад в категориях php фото

Поставил сначала Пикасу. Потом подумал и написал скрипт (вы не поверите — на php), который сортирует все фотографии по директориям, вида год/название камеры/месяц.

Отсортировал все за десять лет.

Оказалось очень удобно, особенно название камеры, сразу видны профессиональные фотосессии и хипстерские фотки с айфона.

Ну и что-то лучше, чем сортировки по годам сложно представить.

Заодно думаю о покупке Canon PowerShot S100, потому что PowerShot G5 уже старенький (и он за эти годы не уменьшился).


/*
$from = "D:\acerbial_media";
$to = "P:";
$copy = "D:\photos";
*/

$Directory = new RecursiveDirectoryIterator($from);
$Iterator = new RecursiveIteratorIterator($Directory);

foreach ($Iterator as $key => $value)
{
$path = pathinfo ($key);

$exif = @exif_read_data($key);
if ($exif[Model]=="iPhone 4") $exif[Model]="iPhone";

$dest = "";

if (!$exif[FileDateTime])
$dest.="/misc/".$path[extension];
else
$dest.="/".date ("Y",$exif[FileDateTime]);

if ($exif[Model])
{
$dest.= "/{$exif[Model]}";
$dest.="/".date ("m.F",$exif[FileDateTime]);
}

$dest.="/".$path[basename];
$dest = str_replace ('//','/',$dest);
$copydest = $copy.$dest;
$dest = $to.$dest;

echo $c.".".$key." -> ".$dest."
";
$c++;

$newpath = pathinfo ($dest);
@mkdir ($newpath[dirname],0777,true);
copy ($key,$dest);

$newpath = pathinfo ($copydest);
@mkdir ($newpath[dirname],0777,true);
rename ($key,$copydest);

}

0

Php maed me sad

13 лет назад в категории php

Сайт про то, какое php гавно неконсистентное.

Помимо того, что перечислено (хотя я не со всем сталкивался), меня в последнее время раздражает, что при нестрогом типировании (это так по-русски называется?), которое, наверное, благо, пустая или несуществующая переменная не считается пустым массивом.

Т.е. foreach ($a as $key => $value) будет ругаться на то, что $a не массив, если $a — не массив (смешно, я знаю).

В моем понимании, $a=""; должно быть «равно» $a=array();

Аргументация?

И в первом и во втором случае можно сделать $a[]="new", и оно будет работать.

Ну и вообще можно по foreach и строку перебирать, если эта строка, почему бы и нет, раз остальное позволять работать со строкой как с «псевдомассивом».

Еще на стыке нестрогого типирования в php и mongodb иногда случаются смешные вещи, типа переменных «145», которые вдруг оказываются строкой, но это не проблема языка.

0

ЧПУ sucks balls

13 лет назад в категориях php вебдев

ЧеловекоПонятные Урлы — это фетиш.

Я буду отказываться от них везде, где можно. В урле, типа www.hobius.com/?user=smirnov я не вижу ничего плохого, например.

Особенно когда по адресу site.com/users/ нет ничего, а по адресу site.com/users/username уже есть.

Ну и заодно, по аналогии с «твиттерскими» адресами, типа twitter.com/#/something, придумал самый простой способ реализовать ЧПУ почти везде безо всяких mod_rewrite и прочего.

Надо вместо таких урлов:

spectator.ru/life/fiction/blue_meteorite

Делать вот такие:

spectator.ru/?/life/fiction/blue_meteorite

Тогда, например, в php мы все получаем в $_SERVER["QUERY_STRING"].

0
«Таро как инструмент самопознания», курс от создателя spectator.ru

21,88%

base_convert (md5($something), 16, 36); на 21,88% круче, чем md5($something); Discuss! Update: На 31,25% круче: $test = trim (base64_encode (md5 ($something, true)),"==");
или (php. (еще 51 слово)

ПОХАПЭ

Смотрю движки основных форумов (потом расскажу, зачем). Смерть, пиздец, жопа, убивать, убивать, убивать. PHP-программисты бывают двух видов: 1. Те, кто не умеют программировать вообще. Специально для таких же был придуман BASIC. «Сделай инструмент для идиота, и только идиот захочет им пользоваться». (еще 165 слов)

Гениальные идеи

Вот, бывает, придумаю гениальную идею и спрашиваю у хакира Болка — хорошая ли идея, будет ли работать? Оказывается, что идея хорошая и более того — хакир Болк уже эту идею пару раз использовал. Сразу возникают противоречивые чувства: 1. Досада. Почему про такие вещи нельзя прочитать почти нигде? Нет, я серьезно: куда ни глянь — всюду обсуждения уровня «как передеть переменную выше. (еще 149 слов)

Skinnable-cacheable

Придумал неболшую идею. Наверняка не я первый.
Идея заключается в том, что страницы кэшируется. Но при этом хочется сделать их Skinnable. То есть чтобы можно было «шкурки» менять. Как кэшировать в таком случае — не совсем понятно. Простой и забавный (полу)выход. Везде в документах пишем и документы, естественно, кэшируем полностью. (еще 71 слово)

ЧПУ и PHP (revisited)

ЧПУ — это термин, придуманный командой НовоКиберска, обозначает он «Человекопонятный УРЛ». Термин нигде широко не употреблялся, пока я не написал 5 сентября 2000 года заметку «ЧПУ и PHP». За эти три года термин довольно неплохо раскрутился. За эти годы очень многие ссылались на эту заметку, поэтому я взял на себя труд переписать ее, добавив еще несколько способов сделать ЧПУ и убрав всякий мусор. (еще 568 слов)

Автоопределение кодировки

Задача: текст может быть или в Koi или в Win. Нужно, чтобы он автоматическии переводился в Win, если нужно.
Есть множесто решений, данное претендует на определенную элегантность и, разумеется, на предельную краткость. Текст, естественно, должен быть длиннее 3 букв. if (substr_count($res, «П»)>substr_count($res, «o»)) $res=convert_cyr_string ($res, k, w); Принцип действия, думаю, понятен?.. (еще 61 слово)

Простое кэширование страниц

Простое кэширование страниц. Для чайников. На PHP. Кэширование — замечательная вещь. Часто (теперь — почти всегда) страницы на сайтах генерятся динамически. Это теперь модно. Однако же — в реальности — почти всегда страница собирается заново гораздо чаще, чем она изменяется. Грубо говоря, мы опубликовали новый документ, и при каждом обращении к нему он заново считывается, скажем, из базы данных, заново прогоняется через шаблон и прочее и прочее. (еще 516 слов)

Templates

Вот еще один правильный взгляд на шаблоны (курсив мой): "I’m basically advocating a «template engine» that uses PHP code as it’s native scripting language. I know, this has been done before. (еще 170 слов)