Справедливости ради стоит заметить что получить случайную строку можно и без использования индекса, алгоритмов (вариант shsweb), лишь используя стандартные средства php. Вариант без индекса.
Вариант с индексом (1000 запусков)
real 0m43.108s
user 0m26.154s
sys 0m14.333s
Вариант без индекса (1000 запусков)
real 0m43.902s
user 0m26.150s
sys 0m14.161s
Потребление памяти в обоих случаях ~0.31-0.32mb.
Итог: потребление памяти и время выполнения примерно одинаковое.
@taliban, я не предлагаю каждый раз парсить файл полностью. Всего 1 раз строится индекс, сохраняется в файл, далее используются эти данные. Это позволяет предсказуемо просто получить доступ к любой строке по её номеру (первый плюс). И нет необходимости каждый раз парсить файл в поисках подходящего фрагмента-строки (что в некоторых случаях может быть медленнее, чем использование индекса).
Можно сказать что это два альтернативных решения. Всему своё время и место.
> В массиве около 1000 байт, соответственно, при выполнении этой магии с el[0]-i случается тоже магия, если запаковывать снова в байт, оно отваливается(
В одном предложении две магии. Фантастика.
> Товарищ avalak, если все просто и тривиально, скажите мне, пожалуйста, как вы сохраните в байте, а потом запишите в файл значение 123 — 500 ?)
Нет, это с чего Вы решили что 123 — 500 = -377 можно уместить в одном байте?
b — signed char (от -128 до 127). 1 байт.
i — int. 4 байта.
Что происходит у Вас в коде? Читаем файл по байтам, затем, фактически, из типа signed char/byte вычитаем int/long (пока это происходит в python проблем нет тк нет строгой типизации) и пытаемся упаковать в signed char/byte.
Рано или поздно ловим ожидаемое
struct.error: byte format requires -128 <= number <= 127
и называем это «магией». Упаковать в байт не получилось и вы пакуете в int (а он занимает 4 байта (то есть исходный байт + ещё 3 (вот они, те самые «3 ноля»))).
В чём проблема то? Что тут непонятного? Где здесь магия?
Положительные эмоции… Мир ввергнут в хаос, какие уж тут положительные эмоции? Разве что вы сами участвуете в процессе.
Провести день с семьёй, извиниться, увидеть море, прыгнуть с парашютом, признаться той девушке, забить на всё и махнуть в Вегас, etc. Для всего этого не нужен конец света. Мы живём в мире где никто не может поручиться за то что доживёт до завтра: дтп, ограбление, падение метеорита, подавился курочкой, etc. Живи так чтоб ни о чём не сожалеть.
Я не спорю с тем что обработка картинок на сервере не серебряная пуля, но и минусов у этого метода не так много (нагрузка на процессор при большом потоке картинок и удвоение места на диске: оригинал + результат).
Тем не менее в некоторых случаях это может быть подходящим решением.
Во всяком случае есть альтернатива в виде box-shadow inset. Рецепт от Opera. Мне этот вариант ближе чем png обёртка.
Возможно есть подходящий плагин для thunderbird. Точно есть плагин для экспорта писем.
Как вариант, можно сохранить письма от робота на диск и пройтись простейшим скриптом (если нужны только email'ы) (открыть файл -> регуляркой выбрать email'ы -> сохранить в файл -> повторить для следующего).
Возможно есть плагин, добавляющий email'ы в контакты (но тогда они смешаются с адресной книгой).