в отличие от традиционных фпс, где главный герой -- единоличный христос-спасатель мира от вселенского зла, код4 демонстрирует более правдоподобную картину вооружённого конфликта, а именно: нихуя непонятно, вокруг пиздец и очень легко умереть. конечно это игра, через что лечение, сейв-лоад, прицел, подсказки и индикаторы, но даже со всей этой хуитой получается реалистичненько. вслед за номадом вынужден особо отметить миссии стрелка на ганшипе и снайпера в припяти. надо бы поиграть в остальные, думаю день д там сделан неплохо. интересно, что по вв1 игр почти нет (навскидку ничего кроме красного барона девяносто какого? второго? не вспоминается).

also, люто бешено реквестирую у небес мморпг, суть такова: команда корабля (морского, воздушного, космического). Чтобы не было как в еве -- единственный пилот десятикилометровой дуры, или как в ил-2 -- скакать с места на место. Для борьбы с дисконнектами ввести старпома и запасных механиков/стрелков.

вообще, мне больше нравились бы в пве евы редкие, но тяжёлые бои, чем более 9000 погасших красных крестиков в день.



@темы: ya.ru:text

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

also, э. м. ремарк ничотак.



@темы: ya.ru:text

интересная личность вывесила фотку

хтате после прослушивания мановара должен заметить что хороших треков у них штук пять-семь. и даже пресловутый пафос тут не при чём, просто хуита вместо музыки.



@темы: ya.ru:photo

01:45

новогодние открытки студии лебедева как-то особенно унылы. один жгун ещё торт, да и то только на фоне.



@темы: ya.ru:text

если godaddy просто писал, что при проведении платежа произошла ошибка, то дотфм требует выслать им по факсу заполненное заявление и заверенный ксерокс карты с двух сторон ололо. мне вот интересно, они деньги с карты сняли или нет? если сняли, не поленюсь блядь пойти в банк и опротестовать платёж, потому что они там охуели ваще в конец.



@темы: ya.ru:text

крупнейший в мире регистратор -- это какой-то полный пиздец. не говоря уж о том, что он с отвращением отказался от моих шекелей даже после того как заставил зарегать визу на пейпэле сукасука.

почему ж кругом такое говно интересно.



@темы: ya.ru:text

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

sparks



@темы: ya.ru:text

01:32

3

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

полностью оттюненный 911 турбо 3,3 не едет быстрее 220. это блядь как вообще называется? 944 s турбо мотает по сторонам как весь пиздец! ебать, во всей игре ни одной нормальной тачки. мне что, опять сдувать пыль с нфс2се? вы заебали блядь, я её всю вдоль и поперёк уже заиграл за восемь то лет!



@темы: ya.ru:text

встретите экванта -- без разговоров бейте морду.

окадо тоже, причём ногами.

etch



@темы: ya.ru:text

убить всех людейпоискать в Яндексе

  • Невыносимо хочу
и давно




@темы: ya.ru:wishlist

не торопясь делаю ферму роутеров, соответственно понадобилось фигачить и ловить броадкасты. не нашёл ничего лучше чем взять и набыдлокодить самому. обожаю блядь перл ололо. теперь, после личного знакомства, обожаю значительно больше чем раньше, заочно.

telecaster.pl

#!/usr/bin/perl -w

sub usage {
local $OUTPUT_RECORD_SEPARATOR = '';
pod2usage (-exitval => 1, -verbose => 0);
}

our $VERSION = 'ambulance';
$OUTPUT_RECORD_SEPARATOR = "\n";

use strict;
use warnings;
use English;
use Socket;
use Getopt::Long 2.33;
use Pod::Usage;

my (@DESTS, @IFACES, $PORT, $DRY);
GetOptions (
'dest=s' => \@DESTS,
'iface=s' => \@IFACES,
'port=i' => \$PORT,
'test' => \$DRY,
) or usage ();
(defined ($PORT) and $PORT > 0 and $PORT < 65536) or usage ();
defined ($DRY) or $DRY = 0;
if ($#DESTS < 0 and $#IFACES < 0) { @DESTS = inet_ntoa (INADDR_BROADCAST) }

foreach (@IFACES) {
open (IFCONFIG, "ifconfig '$_' 2>&1 |";) or die ("open fail: $!";);
while () {
/^\s*inet\s+.*broadcast\s+(.*)\s*/ and push (@DESTS, $1);
}
close (IFCONFIG) or warn ("ifconfig fail: $! $?";);
}

my $DEST;
for (my $ID = 0; $ID <= $#DESTS; $ID++) {
if ($DEST = inet_aton ($DESTS [$ID])) {
$DESTS [$ID] = $DEST;
} else {
warn ("bad destination: ${DESTS [$ID]}";);
splice (@DESTS, $ID, 1);
$ID -= 1;
}
}
@DESTS = keys %{{ map { $_ => 1 } @DESTS }}; #this voodoo uniq's DESTS

my $MSG = '';
if ($#ARGV < 0) {
while () { $MSG .= $_; }
@ARGV = $MSG;
}

socket (UDP, PF_INET, SOCK_DGRAM, getprotobyname ('udp')) or die ("socket fail: $!";);
setsockopt (UDP, SOL_SOCKET, SO_BROADCAST, 1) or die ("setsockopt fail: $!";);
foreach $MSG (@ARGV) {
if ($MSG) {
foreach $DEST (@DESTS) {
if ($DRY) {
print ("send ".length ($MSG)." bytes to ".inet_ntoa ($DEST).":$PORT";);
} else {
send (UDP, $MSG, 0, sockaddr_in ($PORT, $DEST)) or warn ("send fail: $!";);
}
}
} else { warn ("can't send an empty message";) }
}

__END__

=head1 NAME

B -- send or broadcast your messages over UDP

=head1 SYNOPSIS

B [B<-t>] [B<-d> I] [B<-i> I] B<-p> I [B<] [I ..]

Use B< to explicitely separate the messages from the options.
If no messages are given as arguments, reads for one on STDIN.

=head1 OPTIONS

=over 4

=item B<--dest> or B<-d>

Specifies a destination IP address.
May be supplied more than once.

=item B<--iface> or B<-i>

Specifies an interface name to use its broadcast address.
Actually this option is passed to L, so you can specify anything
L expects, for example an interface group.
May be supplied more than once.

=item B<--port> or B<-p>

Specifies a UDP port.
Since there is no sensible default value, this option is mandatory.

=item B<--test> or B<-t>

Do not actually send anything, just show what will be done.

=item B<--version> or B<-v>

Show the program version and exit.

=item B<--help> or B<-h>

Show a short syntax summary and exit.

=back

=head1 DESCRIPTION

This program allows you to broadcast data over UDP or send it to a host.
You have to specify the UDP port number and you may provide the destination
address (possibly a broadcast one). The text of message may be given as
an argument (there may be more than one argument, in this case every argument
will be treated as a separate message and will be sent as such) or you may
pipe the text to the program. Note that STDIN will only be read if no arguments
are given.

Passing more than one destination and interface is supported. The sсript tries
to determine every possible address, removing duplicates, then the message(s)
will be sent to every address supplied. If there is not a single address to
send to, nothing will be sent (obviously). Note that the default value of
B<255.255.255.255> (a local network broadcast) will only be used if not a single
destination or interface is given.

Be warned that this program is not designed to send an arbitrary stream of data.
No packet management is available, it just gets a string and sends it, that's all.
Also, seems that the maximum size of the message cannot exceed ( - 28) bytes.

Exit status is B<0> on success or some non-zero value if any error occurs.

=head1 EXAMPLES

B

This command will send two messages: "hello" and "bye bye" to host 10.10.10.10 on port 12345.

B

This command will broadcast two messages: "hello" and "bye bye" to every host in the network 10.0.0.0/8 on port 12345.
The same messages will also be sent to the broadcast addresses of all the interfaces in the group "carp".

B

This command will broadcast a message "Wait, what?" to every host in the segment on port 12345.

=head1 SEE ALSO

L

=head1 BUGS

B<--iface> option parses L's output, which differs between systems. Only tested on OpenBSD currently. Should not
work in Linux.

A broadcast to 255.255.255.255 does not seem to actually work. One has to set the route explicitely. (SO_DONTROUTE, bind to i
face?)

=head1 LICENSE

This software is public domain.

=cut


tbrd.pl

#!/usr/bin/perl -w

sub usage {
local $OUTPUT_RECORD_SEPARATOR = '';
pod2usage (-exitval => 1, -verbose => 0);
}

sub cleanup {
defined (fileno (CHILD)) and close (CHILD);
defined ($PIDFILE) and -e ($PIDFILE) and unlink ($PIDFILE);
}

our $VERSION = 'absolute';
$OUTPUT_RECORD_SEPARATOR = "\n";

use strict;
use warnings;
use English;
use Socket;
use Getopt::Long 2.33 qw(:config no_ignore_case);
use Pod::Usage;
use POSIX;
use MIME::Base64;

my ($NOFORK, $CHILD, $MYPORT, $MYADDR, $PIDFILE);
GetOptions (
'no-detach' => \$NOFORK,
'call=s' => \$CHILD,
'port=i' => \$MYPORT,
'addr=s' => \$MYADDR,
'Pidfile=s' => \$PIDFILE,
) or usage ();
defined ($CHILD) or usage ();
(defined ($MYPORT) and $MYPORT > 0 and $MYPORT < 65536 and $CHILD) or usage ();
defined ($NOFORK) or $NOFORK = 0;
defined ($PIDFILE) or $PIDFILE = '/var/run/tbrd.pl.pid';
defined ($MYADDR) or $MYADDR = inet_ntoa (INADDR_ANY);
my $MYIP = inet_aton ($MYADDR) or die ("bad IP address: $MYADDR";);

chdir ('/') or die ("chdir fail: $!";);
umask (0) or die ("umask fail: $!";);
open (STDIN, '/dev/null') or die ("reopening STDIN fail: $!";);

my $FORKED_PID;
if (! $NOFORK) {
setsid () or die ("setsid fail: $!";);
defined ($FORKED_PID = fork ()) or die ("fork fail: $!";);
$FORKED_PID and exit ();

-e $PIDFILE and die ("pidfile $PIDFILE exists";);
open (PID, ">$PIDFILE";) or die ("open pidfile fail: $!";);
syswrite (PID, $PROCESS_ID) or die ("write to pidfile fail: $!";);
close (PID) or die ("close pidfile fail: $!";);

open (STDOUT, '>/dev/null') or die ("reopening STDOUT fail: $!";);
open (STDERR, '>/dev/null') or die ("reopening STDERR fail: $!";);
}

socket (UDP, PF_INET, SOCK_DGRAM, getprotobyname ('udp')) or die ("socket fail: $!";);
bind (UDP, sockaddr_in ($MYPORT, $MYIP)) or die ("bind fail: $!";);
print ("Bound to $MYADDR:$MYPORT okay.";);

$SIG{CHLD} = 'IGNORE';
open (CHILD, "| $CHILD";) or die ("opening child process ($CHILD) fail: $!";);
print ("Opened child ($CHILD) okay.";);

my $MAXSIZE = 10240;
my ($MSG, $PEERADDR, $PEERPORT, $LINE);
while (1) {
($PEERPORT, $PEERADDR) = sockaddr_in (recv (UDP, $MSG, $MAXSIZE, 0));
$LINE = inet_ntoa ($PEERADDR)." $PEERPORT ".encode_base64 ($MSG, '');
syswrite (CHILD, $LINE."\n";);
print ($LINE);
}

END {
cleanup ();
}


__END__

=head1 NAME

B -- a trivial UDP broadcast receiver daemon

=head1 SYNOPSIS

B [B<-n>] [B<-a> I] [B<-P> I] B<-p> I B<-c> F

=head1 OPTIONS

=over 4

=item B<--addr> or B<-a>

Specifies an IP address to bind to.
B<0.0.0.0> (all interfaces) is used if not given.

=item B<--port> or B<-p>

Specifies a UDP port.
Since there is no sensible default value, this option is mandatory.

=item B<--call> or B<-c>

Specifies a program to run. This options is mandatory.

=item B<--Pidfile> or B<-P>

Specifies a filename to write the process ID of the forked precess.
If B<--no-detach> option is given, PID will not be written at all.

=item B<--no-detach> or B<-n>

Tells the daemon to not detach from the terminal and to echo some information.
Useful for debugging.

=item B<--version> or B<-v>

Show the program version and exit.

=item B<--help> or B<-h>

Show a short syntax summary and exit.

=back

=head1 DESCRIPTION

This program binds to a UDP port and listens for UDP packets on it.
Every packet received is then supplied to some external program or
sсript (defined with B<--call> option). It does nothing besides this.

The child is called as the same user as the daemon itself.
The packet contents is piped on child's STDIN along with sender's
IP address and UDP port.

So the logic is like this:

1. Daemon binds to a socket and forks out (unless B<--no-detach> option was given);

2. Daemon starts a program specified and opens its STDIN;

3. Every packet received is fed to a program's STDIN like this: sender's address,
a space, sender's port, a space, base64-encoded message.

=head2 Security considerations

If you need to bind to a priviledged port you have to run this daemon as root.
If you need to run the child as root (for example you have to modify the routing table),
then you should run this daemon as root also.

=head1 FILES

=over 4

=item F

Contains the process ID of the running daemon. The name of this file can be manually set with
B<--Pidfile> option.

=back

=head1 SEE ALSO

L

=head1 BUGS

This program is intentionally developed in the most primitive way to keep things as simple
as possible. If you need anything this program does not do (like binding to multiple addresses)
it is advised to search for a more appropriate tool.

The program should complain about the problems to syslog rather than just STDERR.

=head1 LICENSE

This software is public domain.

=cut




@темы: ya.ru:text

очень, очень редко, но случается: бор -- торт.





@темы: ya.ru:text

я уже один раз ругался на нфс5, но успел забыть какая там жопа и щас произвёл rediscover. хотя оказалось что ручник тащемта вполне юзабелен. но ебать. одна единственная ошибка -- и до свидания. реалистично но невероятно заёбывает.





@темы: ya.ru:text

окадо просто умиляют ололо. корбина блядь! это ты во всём виновата!





@темы: ya.ru:text

10:49

evilized

почему-то считается что софт должен быть юзабельным, предупредительным, услужливым, няшным и кроссплатформенным. то есть понятно почему так считается.

такой софт невозможно уважать. к нему относишься как к одноразовой вилке. другое дело старошкольные олдтаймеры, тот же ви. набыдлокодил в нём скриптец с экран и уже горд собой как будто день не зря прошёл.

а то расслабились все. ной вот жаловался что он закрыл хром, и хром -- фигасе -- закрылся. хуле ты тыкал в крестик in the middle of something? случайно? в следующий раз будешь аккуратнее.



@темы: ya.ru:text

пеарю, хотя меня всё равно никто не читает ггг

http://kolen.livejournal.com/968168.html



@темы: ya.ru:text

держитесь чуваки за стул, ща одну вещь покажу.

https://bugs.launchpad.net/ubuntu/+source/bluez-gnome/+bug/284994

тлдр: в 8.10 отсутствует возможность ввести пин при спаривании -- всегда юзается случайный (кроме отдельных захардкоденных устройств). чуваки охуели и спросили у гномов: "вытамчоваще?". гномы ответили что это не баг а фича.

капитан о: без комментариев.



@темы: ya.ru:text

так как пдкш нихуя не умеет, пришлось парсить dhcpd.leases авком:

#!/usr/bin/awk -f

function dform (date, time) {
gsub ("/", "", date)
gsub (":", "", time)
return (date time)
}

BEGIN {
OUTER = "yes"
PIPE = "date -u '+%Y%m%d%H%M%S'"
PIPE | getline NOW
close (PIPE)
}

{
if (OUTER == "yes";) {
if ($1 == "lease";) {
IP = $2
STARTS = ""
ENDS = ""
NAME = IP
gsub ("\\.", "-", NAME)
OUTER = "no"
}
} else {
sub (";$", "";)
if ($1 == "starts";) {
STARTS = dform($3, $4)
}
if ($1 == "ends";) {
ENDS = dform($3, $4)
}
if ($1 == "client-hostname";) {
sub ("^\"", "", $2)
sub ("\"$", "", $2)
NAME = tolower ($2)
}
if ($1 == "}";) {
if (NOW > ENDS) { # lease is free
if (! ADDRS [IP]) ADDRS [IP] = ""
} else { # lease is bound
if (! ADDRS [IP] || TIMES [IP] < STARTS) {
ADDRS [IP] = NAME
TIMES [IP] = STARTS
}
}
OUTER = "yes"
}
}
}

END {
for (IP in ADDRS) print IP " " ADDRS [IP]
}


r1

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

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



@темы: ya.ru:text

бсд авк сука строгий:

#!/usr/bin/awk -f

function dform (date, time) {
gsub ("/", "", date)
gsub (":", "", time)
return (date time)
}


если потом написать STARTS = dform ($3, $4), то сосём хуйцы; надобно убрать пробел перед скобкой. при этом встроенные функции пробел жрут и не пищат. парсер ояебу.




@темы: ya.ru:text