Vulpo One

PHP 5.5 yield

Извращаюсь с новой игрушкой

<?php
$a = function () {for ($i = 0; $i < 10; $i++) yield $i;}; foreach ($a() as $i) echo $i; // 0123456789

Жаль, что не работает foreach ($a as $i) echo $i;, тогда можно было бы написать короче

<?php
foreach(function () {for ($i = 0; $i < 10; $i++) yield $i;} as $i) echo $i;

Или будь PHP похож на одного из своих предков, можно было бы

<?php
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;

Даже извращения не работают типа

<?php
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})->__invoke() as $i) echo $i;

Если кто не догнал, я пытаюсь сделать вот это:

(0..9).each { |i| print i }

Comments


Расшифровывалка паролей FTP для FAR Manager

Потребовалось сегодня по работе, все забыли пароль к одному серваку =)

Всё оказалось проще пареной репы.

  1. Лезем в настройки фара и находим заветный пароль в формате hex:a1b21a2112100162681711
  2. Идем в репо фара и находим исходник шифорвщика/дешифровщика — http://farmanager.com/svn/trunk/plugins/ftp/Crypt.inc
  3. Пишем обертку для дешифоратора или переделываем его по аналогии на любимый язык

Я подумал и решил, что проще всего переделать его на Ruby

#!/usr/bin/ruby

src = ''
ARGV[0].scan(/../).each { | tuple | src += tuple.hex.chr }

xor_mask = (src[0]^src[1]) | 80

src = src[2..-1]
src.each_byte do |c|
  res = c ^ xor_mask
  print res.chr
end

print "\n"

P.S. Господа Ruby-кодеры, если меня, конечно, читают такие, объясните, пожалуйста, почему лезет варнинг? Совсем не понимаю где я Doing It Wrong.

./far_pwd_decode.rb:4: warning: already initialized constant Src
./far_pwd_decode.rb:8: warning: already initialized constant Src

P.P.S. За гениальную строчку

.scan(/../).each { | tuple | Src += tuple.hex.chr }

спасибо г-ну James “raggi” Tucker.

P.P.P.S. Ога, оказывается переменная с заглавной буквы это константа. thnx to Подвальный кот. Актуальную версию со всеми фиксам всегда можно стащить с репы: https://bitbucket.org/sunchaser/miscellaneous/src

Comments


Получение IP по MAC

Решая задачку раздачи инета на второй комп, наткнулся на необходимость получения IP адреса по MAC. Сначала использовал какой-то скрипт на вижуалбейсике, но при даунгрейде Windows XP до Windows 2000 способ отвалился. Тогда я плюнул на тот скрипт и пару bat-ников обвязки и соединил всё в скрипт на Ruby

Собственно имеем:

  1. Комп с линухом и сквидом, раздающий инет. Внутренний IP — динамический
  2. Комп с Windows, на котором нужен инет. IP — динамический, подсеть та же
  3. Нежелание свзяваться с роутером, чтобы избавиться от этого безобразия =)

Наш алгоритм

  1. Пингуем всю подсеть (да, в винде пинг не умеет броадкасты)
  2. Ищем нужный мак в кэше
  3. Пишем в хостс нужный адрес

Continue readingComments


Я уже совсем потерян для общества?

image0

#!/usr/bin/ruby

require 'date'

puts "Enter your birthdate (YYYY-MM-DD):"
birth = Date.parse(gets, true)
today = Date.today
age   = today-birth # in days

min_age = (2 * (age - 7 * 365.25)).round
max_age = (age/2 + 7 * 365.25).round

min_birth = Date.today - min_age
max_birth = Date.today - max_age

puts "Your age pool is #{min_birth.to_s} - #{max_birth.to_s}"

puts "You're too young ^__^" if min_birth > max_birth

Comments