Category Archives: Линупсы

Сотни быдлокода.

Java, custom annotation, AspectJ, Maven: minimalistic example

Goal: some code must be executed before/after the method annotated with custom annotation.
We need a custom annotation first:

package yourpackage;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
    public boolean isRun() default true;
}

An aspect:

package yourpackage;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
 
@Aspect
public class MyCustomAspect {
    @Before("execution(* *.*(..)) && @annotation(MyCustomAnnotation)")
    public void advice(JoinPoint joinPoint) {
        System.out.printf("BINGO! advice() called before '%s'%n", joinPoint);
    }
}

Continue reading

Dummy SMTP server

Решение автора JOTN, отсюда:

#!/usr/bin/perl -w
use Net::SMTP::Server;
use Net::SMTP::Server::Client;
 
$server = new Net::SMTP::Server('localhost', 25) || die("$!\n");
 
while($conn = $server->accept()) {
	my $client = new Net::SMTP::Server::Client($conn) ||
	die("Unable to handle client connection: $!\n");
	$client->process || next;
 
	# Here's where you can write it out or just dump it. Set $filename to
	# where you want to write it
	$filename = './collected_mail.txt';
	open(MAIL,">> $filename") || die "$filename: $1";
	print(MAIL "$client->{MSG}\n");
	close(MAIL);
}

/etc/ssmtp/ssmtp.conf:

root=postmaster
mailhub=localhost
#rewriteDomain=
hostname=localhost
FromLineOverride=YES

Под Ubuntu необходимые пакеты называются libnet-smtp-server-perl и ssmtp.

Быстрый генератор случайных имён-фамилий для базы данных

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

Continue reading

Памятка: avr-gcc, компиляция

Необходимые компоненты:

port install avr-gcc avr-libc

Создание объектного файла, линковка и получение исполняемого модуля:

avr-gcc -g -Os -mmcu=attiny2313 -c main.c
avr-gcc -g -Os -mmcu=attiny2313 -o main.elf main.c
avr-objcopy -j .text -j .data -O ihex main.elf main.hex

Заливка:

avrdude -c usbasp -p attiny2313 -U flash:w:main.hex

Перекидывание почты в базу: PHP, IMAP, MySQL

Возникла необходимость перелить в базу данных содержимое почтового ящика. По получившемуся архиву должен осуществляться относительно быстрый поиск. Следующий скрипт забирает письма по IMAP, парсит их, помещает в MySQL, и при необходимости удаляет обработанную почту (отвечающий за удаление кусок кода нужно раскомментировать). Если удалять письма не нужно, то для более быстрой работы можно использовать опцию readonly при инициализации соединения с почтовым сервером.

В скрипте не предусмотрена обработка писем во вложенных папках, так как это не требовалось. Данные собираются в поля: дата, отправитель, получатели (to, cc и bcc скомбинированы в одну строку) и тема письма. Полная копия письма также сохраняется в BLOB.

Continue reading

OS X: Disable cmd-p printing from Finder

Original post by Acker.

I’ve accidentally sent pages upon pages of programming to a printer and wasted so much paper cause I fat-fingered ⌘P instead of ⌘O.

To remove command+p from finder:

Open System PreferencesKeyboardKeyboard ShortcutsApplication Shortcuts in the left panel → click the «+» button below the right panel → Select Finder as your Application. Then set the menu title to exactly the case-sensative value of «Bring All to Front» and set Keyboard Shortcut to ⌘P by actually pressing the-command-key+p-key.

I tried setting the Keyboard Shortcut of command+p to «Open» but the command+o stopped working.

DOD GS600 обновление прошивки

Оригинал статьи на http://videoregistratori.ru/.

Внимание!
Обновление прошивки в некоторых случаях может сделать ваш видеорегистратор неработоспособным. Поэтому если вы беретесь за его обновление, вся ответственность лежит только на вас.

Один из питерских магазинов, тесно сотрудничающий с Каркам, выложил у себя на сайте программу, без которой невозможно было перепрошить DOD GS600, DOD GS300, Каркам Q3, Каркам Q3 Lite, V1000-GS.

Continue reading

Из EAGLE 6.2 в TopoR 5.3 Lite и обратно

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

Следующий метод должен работать.

Continue reading

Hint: reptyr

Hint from serverfault.

My office job routinely sees me connected to a Linux box via VNC.

Sometimes I start a remote job on the console, and realize later that it runs much longer than expected. (Should have started that one under Screen in the first place…)

I don’t want to keep my workstation running overnight just to keep the VNC session open; I would like to move that already-running remote job into a Screen session (on the remote box), so I can power down the workstation (and reconnect next morning).
DevSolar

Solution:
reptyr — A tool for «re-ptying» programs.

reptyr is a utility for taking an existing running program and attaching it to a new terminal. Started a long-running process over ssh, but have to leave and don’t want to interrupt it? Just start a screen, use reptyr to grab it, and then kill the ssh session and head on home.
«reptyr PID» will grab the process with id PID and attach it to your current terminal.

After attaching, the process will take input from and write output to the new terminal, including ^C and ^Z. (Unfortunately, if you background it, you will still have to run «bg» or «fg» in the old terminal. This is likely impossible to fix in a reasonable way without patching your shell.)

OS X: Migrating to SSD «properly»

Today our target is to migrate OS X from 250GB Hitachi HDD to 160GB OCZ solid-state drive. To do it in proper way we have to take into account a few things:

  • partitions must be aligned to increase drive performance
  • GPT uses unique IDs, that is why we shouldn’t just duplicate all data from one drive to another, but create a new partition table
  • we have to use TRIM for our new SSD to increase drive life
  • it would be nice to enable noatime mount option for filesystems on SSD to minimize writes to it

It is strongly recommended to create a full image backup of your HDD first!
If it all goes wrong this is the only way you are going to get everything back.

Continue reading

Gentoo + GPT + LVM + RAID5. Brain dump

Установка Gentoo на систему без EFI, с программным RAID5, возможностью расширять хранилище до гигантских размеров с помощью разметки дисков с GPT и настройки LVM поверх рейда. Для загрузки используется Grub2.

Continue reading

Best way to compress Fraps video

Для сильного сжатия видео, записанного с помощью утилиты Fraps, можно использовать набор библиотек ffmpeg. При этом ролики сжимаются с размера порядка 1ГБ до 50МБ без особо заметных потерь качества картинки и звука.

Для Windows

Упёрто здесь.

I’ve written a couple bat files that I use for encoding my Fraps recordings (quickly and well). First up, I have the lossless variation incase I’m doing mostly static desktop recordings:

SETLOCAL ENABLEDELAYEDEXPANSION
SETLOCAL ENABLEEXTENSIONS
for /F "delims=;" %%A IN ('dir /b *.avi') DO (
ffmpeg -i "%%A" -acodec ac3 -ab 192000 "%%~nA.ac3"
ffmpeg -i "%%A" -vcodec rawvideo -f yuv4mpegpipe -an -pix_fmt yuv420p - | x264.x64 - --stdin y4m --crf 0 --bframes 5 --b-adapt 2 --ref 4 --mixed-refs --no-fast-pskip --direct auto --deblock -3:-3 --subme 10 --trellis 2 --analyse all --8x8dct --me umh --output "%%~nA.noaudio.mkv"
mkvmerge -o "%%~nA - lossless.mkv" --forced-track 1:no -d 1 -A -S "%%~nA.noaudio.mkv" --forced-track 0:no -a 0 -D -S "%%~nA.ac3" --track-order 0:1,1:0
del "%%~nA.ac3"
del "%%~nA.noaudio.mkv"
)
pause

For the other one, I use a lossy mode that’s pretty indistinguishable between the source and the encode in motion:

SETLOCAL ENABLEDELAYEDEXPANSION
SETLOCAL ENABLEEXTENSIONS
for /F "delims=;" %%A IN ('dir /b *.avi') DO (
ffmpeg -i "%%A" -acodec ac3 -ab 192000 "%%~nA.ac3"
ffmpeg -i "%%A" -vcodec rawvideo -f yuv4mpegpipe -an -pix_fmt yuv420p - | x264.x64 - --stdin y4m --crf 19 --bframes 5 --b-adapt 2 --ref 4 --mixed-refs --no-fast-pskip --direct auto --deblock -3:-3 --subme 10 --trellis 2 --analyse all --8x8dct --me umh --output "%%~nA.noaudio.mkv"
mkvmerge -o "%%~nA.final.mkv" --forced-track 1:no -d 1 -A -S "%%~nA.noaudio.mkv" --forced-track 0:no -a 0 -D -S "%%~nA.ac3" --track-order 0:1,1:0
del "%%~nA.ac3"
del "%%~nA.noaudio.mkv"
)
pause

Continue reading

Mount point permissions, OS X NFS sharing. Brain dump

Задача: есть комп загруженный с Gentoo LiveCD, в нём имеется жёсткий диск с инфой, которую нужно быстро и не заморачиваясь расшарить для макоси. И чтоб не было никаких The folder «shared» can’t be opened because you don’t have permission to see its contents.

На лине:

mount -t ntfs -o rw,users,uid=65534,gid=65534,umask=0000 /dev/sda1 /mnt/shared/
echo '/mnt/gentoo *(rw,no_root_squash,sync,anonuid=65534,anongid=65534,insecure,no_subtree_check)' >> /etc/exports
/etc/init.d/nfs restart

В OS X:
Finder → Go → Connect to server… (⌘K) → Server Address:
nfs://192.168.0.1/mnt/shared

Возможные косяки:

  • Неправильные права доступа для самой шары (конкретно в нашем случае — /mnt/shared имеет достаточные для работы права Access: (0555/dr-xr-xr-x) Uid: (65534/ nobody) Gid: (65534/ nobody));
  • Недостаточные права в /etc/exports. В этом примере роль играет опция insecure;
  • Неправильно введён адрес сервера или путь к расшаренной директории со стороны макоси;
  • Настройками файрвола зарезан NFS с одной из сторон.

Continue reading