понедельник, 2 сентября 2013 г.

ssh Vim +nofsync

Иногда при работе через ssh на зугруженном сервере Vim подвисает. Оказалось, проблема в синхронном I/O с настройками по умолчанию.

здесь проблему лагов решают отказом от fsync в две строчки.


cat >> ~/.vimrc
set swapsync=
set nofsync

пятница, 9 августа 2013 г.

pigz!

Замечательный программист создал параллельную реализацию gzip.

http://zlib.net/pigz/

отдельные файлы жмутся с почти линейным ускорением.

вторник, 23 июля 2013 г.

Powerful Python One-Liners

Нашел подборку однострочных утилит на питоне.

Powerful Python One-Liners

Мне одному кажется, что аналоги на Perl короче?


Эффективная реализация кучи

Нашел диссертацию про эффективные реализации алгоритмов.
Cache-efficient Algorithms and Data Structures: Theory and Experimental Evaluation

А мне как раз нужна быстрая SPSC Priority Queue (читай куча).

Вот статья с теми же алгоритмами для очередей:
Experimental Study of High Performance Priority Queues



Автор приводит результаты сравнений нескольких алгоритмов. Лучшие результаты за Sequence Heap, Auxiliary Buffer Heap, and 4-ary Aligned Heap.

#Картинка из статьи.

PS. Есть ли у кого-нибудь реализация одного из алгоритмов-лидеров?

Python и stdin

Почему питон читает стандартный ввод не так как остальные языки?

python -c 'import sys; [sys.stdout.write(line) for line in sys.stdin.xreadlines()];'

perl -e 'while(<>){print;}'
 

Как сделать так, чтобы программа реагировала по каждому переводу строки? ...и завершалась по первому нажатию <Ctrl-D>

$ python -c 'import sys;import time; b=time.time(); [sys.stdout.write("%f\t%s"%(time.time() - b,l)) for l in sys.stdin];'
1
2
3
4
5
3.411461    1
3.411516    2
3.411521    3
3.411524    4
3.411528    5


$ perl -M'Time::HiRes qw/time/' -e '$t0=time;while(<>){print time()-$t0,"\t",$_}'
1
0.394223928451538    1
2
0.731681108474731    2
3
1.00161504745483    3
4
1.306715965271    4
5
1.96435904502869    5
UPD. подсказали вариант с readline():
Интересно, можно ли написать короче ?
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

def xreadlines(stream):
  while 1:
    try:
      line = stream.readline()
    except KeyboardInterrupt:
      break

    if not line:
      break

    yield(line)


if __name__ == '__main__':
 
  for line in xreadlines(sys.stdin):
    sys.stdout.write(line)