← All posts tagged code

4DA
Emacs code
Сделай свое общение на point.im более разнообразным:

Сделай свое общение на point.im более разнообразным =>
Кококо лойс кукарек ле маман.ле маман разнообразным

(setq ko-table ["k" "ле" "yay" "лойс" "маман" "кококо" "кукарек" "зафорсил"])

(defun make-ko-regexp (word-len sw start end)
  (let ((rx (format "\\b[[:alpha:]]\\{%d\\}\\b" word-len)))
    (replace-regexp rx sw nil start end)
    rx))

(defun kokoify (start end)
  (interactive "r")
  (save-excursion 
    (dotimes (number (length ko-table) nil) 
      (make-ko-regexp (+ 1 number) (aref ko-table number) start end))))

;; select the region and call M-x kokoify
4DA
code systemd
Увидел следующую замену systemd:

```
#define _XOPEN_SOURCE 700
#include <signal.h>
#include <unistd.h>

int main()
{
    sigset_t set;
    int status;

    if (getpid() != 1) return 1;

    sigfillset(&set);
    sigprocmask(SIG_BLOCK, &set, 0);

    if (fork()) for (;;) wait(&status);

    sigprocmask(SIG_UNBLOCK, &set, 0);

    setsid();
    setpgid(0, 0);
    return execve("/etc/rc", (char *[]){ "rc", 0 }, (char *[]){ 0 });
}
```

Какие подводные камни?
4DA
code ski olympics sports
Расписание горнолыжных соревнований TZ: MSK+4
| Day     | Date                    | Begin       | End         | Discipline                 |
| День 3  | Воскресенье, 9 февраля  | 11:00       | 13:10       | Скоростной спуск, мужчины  |
| День 4  | Понедельник, 10 февраля | 11:00/15:00 | 12:30/16:10 | Суперкомбинация, женщины   |
| День 6  | Среда,       12 февраля | 11:00       | 13:10       | Скоростной спуск, женщины  |
| День 8  | Пятница,     14 февраля | 11:00/15:30 | 12:30/16:40 | Суперкомбинация, мужчины   |
| День 9  | Суббота,     15 февраля | 11:00       | 13:10       | Супергигант, женщины       |
| День 10 | Воскресенье, 16 февраля | 11:00       | 13:10       | Супергигант, мужчины       |
| День 11 | Вторник,     18 февраля | 11:00/14:30 | 13:00/16:10 | Гигантский слалом, женщины |
| День 12 | Среда,       19 февраля | 11:00/14:30 | 13:00/16:10 | Гигантский слалом, мужчины |
| День 15 | Пятница,     21 февраля | 16:45/20:15 | 18:00/21:25 | Слалом, женщины            |
| День 16 | Суббота,     22 февраля | 16:45/21:50 | 18:15/20:15 | Слалом, мужчины            |
4DA
Emacs code
Костыль для емакса чтобы в конец буфера вставлялся первый встретившийся выше номер поста или комента (вида #foo/bar).

(defun do-reply-to-post-comment ()
  (if (re-search-backward 
       "^#[0-9a-zA-Z]+\\(/[0-9a-zA-Z]+\\)?" nil t 1)
      (progn
        (end-of-buffer)
        (insert-buffer-substring-no-properties (current-buffer)
                                               (match-beginning 0) (match-end 0))
        (insert " "))
    (message "No comments found")))

(defun reply-to-post-comment()
  (interactive)
  (save-excursion
    (do-reply-to-post-comment))
  (end-of-buffer))

(global-set-key (kbd "C-c r") 'reply-to-post-comment)
4DA
code racket
Суровый выхлоп работы ракетовского макростеппера:
(define (g) 
  (forever (let ([abort abort]) 
             (unless #t (abort)) (abort))))))

Для тех, кому интересно: первый abort имееет контекст из раскрытия макроса `while', а второй - из раскрытия макроса `forever', этакие костыли для обхода гигены без использвания stx-params.
сорцы: http://paste.lisp.org/display/138905
соус:  barzilay.org/misc/stxparam.pdf‎
4DA
Emacs programming code
Короче, меня заебало в emacs, что backward-kill-word удалит 
int array [];
    ^^^^^^^^^
вот это, вместо вот этого
int array [];
          ^^^
Простого способа пофиксить это я не нашел, то есть либо хачить syntax-table, чтобы знаки пунктуации принадлежали word syntax class,
либо перебыдлить backward-kill-word самому.


Что я и сделал. Найденым багам буду рад шопиздец.
https://github.com/4DA/emacs-stuff/blob/master/smart-kill.el

P.S В бонус перебыдлил kill-word.
4DA
code shit
cl_int clEnqueueWriteImage
Enqueues a command to write to an image or image array object from host memory. 

ptr

    The pointer to a buffer in host memory where image data is to be written to.


image data is to be written to
to be written to
4DA
Lisp programming code racket
На лоре спросили:
/можно ли написать на Racket такую функцию, чтобы внутри неё (в её динамическом окружении) делений на 0 возвращало 0, а не прерывало вычисления/

Короче, да:

(define-syntax-rule (try-or-zero body ...)
  (let/cc k (with-handlers ([exn? (λ _ (k 0))]) 
	      body ...)))

(define (testl l) 
  (if (null? l)
      '()
      (cons (try-or-zero (/ 1 (car l)))
            (testl (cdr l)))))

(testl '(1 2 3 0 5))
4DA
Lisp programming code racket
настало время факториалов.
--------------------------

мемоизация на ракете.
nothing special.	   

#lang racket 
; replace define with a memoized version
(define-syntax define-memoized
  (syntax-rules ()
    [(_ (f args ...) bodies ...)
     (define f
       ; store the cache as a hash of args => result
       (let ([results (make-hash)])
         ; need to do this to capture both the names and the values
         (lambda (args ...)
           ((lambda vals
              ; if we haven't calculated it before, do so now
              (when (not (hash-has-key? results vals))
                (hash-set! results vals (begin bodies ...)))
              ; return the cached result
              (hash-ref results vals))
            args ...))))]))

; example, fibonacci with memoization
(define-memoized (mfib n)
  (cond
    [(< n 1) 1]
    [else (+ (mfib (- n 1)) (mfib (- n 2)))]))
4DA
code shit
llvm[0]: ***** Completed Debug+Asserts Build
llvm[0]: ***** Note: Debug build can be 10 times slower than an
llvm[0]: ***** optimized build. Use make ENABLE_OPTIMIZED=1 to
llvm[0]: ***** make an optimized build. Alternatively you can
llvm[0]: ***** configure with --enable-optimized.

real    80m5.129s
user    297m28.264s
sys     2m28.560s
4DA
programming code racket
Тут короче понадобилось заюзать мне binary heap в racket и захотел я это сделать с использованием стандартных схем итерации через for-iterations.
Однако текущая  binary heap не реализует нужный интерфейс (stream?). 

Поэтому кое-чего нужно доопределить. К счастью, в racket это сделать достаточно просто.

Необходимо задать структуру, реализующую три функции: stream-empty? stream-first и stream-rest
(тест на пустоту потока, получение элемента из головы и хвоста)

(define-struct hstream (v)
  #:methods gen:stream
  [(define (stream-empty? st)
     (eq? (heap-count (hstream-v st)) 0))
   (define (stream-first st)
     (heap-min (hstream-v st)))
   (define (stream-rest st)
     (begin (heap-remove-min! (hstream-v st))
   	    (hstream (hstream-v st))))])

простой пример:

> (define h1 (make-heap <))
> (heap-add! h1 8)
> (heap-add! h1 11)
> (heap-add! h1 2)

> (for/list ([x h1]) x)
for: expected a sequence for x, got something else: #<heap>

> (for/list ([x (hstream h1)]) x)
'(2 8 11)
4DA
Emacs Jabber IRC code
Надоело вручную цопипастить куски текста для квотирования, накостылял велосипед.
Обосрите/найдите косяки чтоли.

(defun quote-selection () 
  "pastes selection prefixed by > to end of input to comment on that"
  (interactive)
  (kill-ring-save (point) (mark))
  (goto-char (point-max))
  (insert "> ")
  (yank)
  (insert (kbd "C-j"))
)
4DA
C++ code
Пиздец. Исходник на с++. Из туторила.
* Запакован в (!) RAR-файле.
* Часть кода выравнивнено пробелами, часть - табами.
* Вот такие перлы:
vecteur dist = s.pos - r.start;
cout << "Mal formed Scene file...
4DA
Unix code shell tmux
Невиданный аттракцион щедрости от меня.
Палю годный кусок конфига для tmux:
Быстрый переход по окнам.

# start Window Numbering at 1
set -g base-index 1

bind-key -n M-1 select-window -t 1
bind-key -n M-2 select-window -t 2
bind-key -n M-3 select-window -t 3
bind-key -n M-4 select-window -t 4
bind-key -n M-5 select-window -t 5
bind-key -n M-6 select-window -t 6
bind-key -n M-7 select-window -t 7
bind-key -n M-8 select-window -t 8
bind-key -n M-9 select-window -t 9
4DA
Рашка code security facepalm
В связи с приказом Федеральной службы безопасности....
....
всем обслуживающим оф. сайтов районных судов по г. Москве
в приказном порядке сменить пароль от аккаунтов администратора на 
aBu2ChSo в целях усиления узловой безопасности.

И.О начальника Управления.                   И.П. Александров

http://ic.pics.livejournal.com/galeonis/8850090/1643219/original.jpg
4DA
programming code optimize
вот код из #1899432

Предлагайте ваши варианты по оптимизации.

//-----------------------------------------
void calcParticles()
{
	#ifdef USE_OPENMP
#pragma omp parallel for
	#endif
	for (int i = 0; i < pVecSz; i++)
	{
		Particle &p = particleVec[i];
		float sqrs = sqrt((X-p.x)*(X-p.x)+(Y-p.y)*(Y-p.y)+(Z-p.z)*(Z-p.z)	);
		// float f = G*((p.M*M)/sqrt(rs));
		float f = G*((p.M*M)/1.0);
		float a = f/p.M;
		float cosx = (X-p.x)/sqrs;
		float cosy = (Y-p.y)/sqrs;
		float cosz = (Z-p.z)/sqrs;
		float ax = a*cosx;
		float ay = a*cosy;
		float az = a*cosz;
		p.vx += ax*1/invFPS;
		p.vy += ay*1/invFPS;
		p.vz += az*1/invFPS;
		p.x += p.vx;
		p.y += p.vy;
		p.z += p.vz;
	}	

}
//------------------------------------------

Сам думаю:
1. Вынести за пределы цикла:
    float f = G*((p.M*M)/1.0);
    float a = f/p.M;
2. Заюзать pthreads (вдруг полущ будет)
3. Заюзать SSE3 для извлечения квадратного корня и подсчетса направляющих косинусов.