8 сентября 2008 г.

A каких файлов больше всего у Вас?

            Мне стало интересно, а каких файлов нынче больше всего у компьютеров.
Вывод к которому я пришел меня удивил. Это файлов весом 0 байт. :) К такому выводу меня привел статистический анализ.
            Я собрал 342125 файлов с 3 компьютеров. Общий вес файлов составил 403 ГБ. В состав этих файлов входило всё: и несколько установок Windows, и инсталяционные файлы, и музыка, и фильмы, и картинки, и дистрибы линукса и т.д.

            После этого занялся статистикой.

            Навороченный SigmaPlot 10.0 (цена лицензии около 1 k$) смог проанализировать первых 66177 значений. :) Excel XP (цена лицензии около 0,2 k$) повел себя ещё хуже. Он согласился анализировать только 65536 значений... :)
Не отказались считать описательную статистику только пакет Statistica 6.0 (цена лицензии около 6 k$) и бесплатная R 2.7.0.

            Был использован для анализа R.
            Вот текст кода:

rm(list=ls(all=TRUE)) #очищаем среду
t1<-Sys.time() #засекаем время
c<-read.table("c:\\i.txt") #читаем данные
d<-as.numeric(c[!is.na(c)]) #переводим в массив
rm(c)
Size<-d[!is.na(d)] #чистим NA ячейки
rm(d)
len<-length(Size) #считаем размер выборки
Size<-sort(Size) #сортируем
summary(Size) #описательная статистика
SizeMB<-Size/1024/1024 #переводим в мегабайты
sd(SizeMB)/sqrt(len)/1024/1024 # SE
hist(SizeMB, ylim=c(0, 200), col=2, breaks=100) #строим график
#text(locator(1),"Отлично виден пик")
#text(locator(1),"в районе 700 МБ.")
#text(locator(1),"Это фильмы.")
length(Size[Size<10*1024])/len*100 #ищем число файлов меньше 100 кб и 1 МБ
length(Size[Size<100*1024])/len*100
median(Size)
hist(Size[1:(len*0.76)]/1024, col=3, breaks=300, xlab="kbytes") #второй график
#text(locator(1),"<5 Кб")
#text(locator(1),"21-22 Кб")
sum(Size[Size<5*1024])/1024/1024 #первый пик
length(Size[Size<5*1024])/len*100
(sum(Size[Size<22*1024])-sum(Size[Size<21*1024]))/1024/1024 #второй пик
(length(Size[Size<22*1024])-length(Size[Size<21*1024]))/len*100
(sum(Size[Size<720*1024*1024])-sum(Size[Size<650*1024*1024]))/1024/1024/1024 #третий пик
(length(Size[Size<720*1024*1024])-length(Size[Size<620*1024*1024]))/len*100
Sys.time()-t1 #останавливаем таймер


            На машине Cel850/256/60 пакет R через 23,5 секунды выдал, что средний файл весит 1,21±0,04 МБ. Минимальный размер файла логично, что составил 0 байт. Максимальный 1,8 ГБ.
Даааа. Тяжело нынче занять компьютер надолго...

            Кроме этого программа успела подсчитать следующее.

            Медиана составила 32557 байт. То есть средний в ряду файл весит именно столько. 50% файлов весят больше него, а 50% меньше.
            94,4% файлов оказалось весят меньше чем 1 МБ.
            76,9% файлов - меньше 100 кБ.
            Пики наблюдались в интервале 0-5 Кб (22% от всех файлов, вес 134 МБ), 21-22 Кб (2% всех файлов, вес 132 МБ) и 620-720 МБ (0,06% от всех файлов, вес 133 ГБ). Легко объяснить пик в районе 700 Мб - это фильмы.

            Статистика позволяет подсчитать количество фильмов на жестком диске. Запросто видно, что фильмов в выборке оказалось около 200 штук. А вот найти пик в районе mp3 записей (2-10 Мб) и картинок (40-500 Кб) не удалось.
            Пик в районе 0-5 Кб тоже объясним, так как самых мелких файликов больше всего, а начинаются они от 0 Кб.

            А вот пик в диапазоне 21-22 Кб непонятен. От соседей он отличается в два с половиной раза.
            20-21 Кб - 0,75% от всех файлов весом 51 МБ.
            21-22 Кб - 1,81% от всех файлов весом 132 МБ.
            22-23 Кб - 0,71% от всех файлов весом 53 МБ.

            Теперь можно сделать выводы.

            Распределение файлов по весу ассиметричное. Больше всего оказалось файлов с минимальным весом. Можно даже сказать, что на компьютерах больше всего файлов с точным весом 0 байт. В моем случае их оказалось 1105.
            А вот наугад взятый файл должен весить несколько килобайт. Скорее всего даже меньше 100 Кб (с вероятностью более 77%). А вот если выбрать случайным образом несколько тысяч файлов, то их вес будет зависеть от среднего значения. То есть от каждых 10 000 файлов следует ожидать, что они будет весить около 12 ГБ.

Ref. Корректор библиографических списков

            Когда я составлял библиографический список к своей диссертации, заметил, что в Ворде (я имею ввиду Word 6.0, Word97, Word2000, WordXP, Word2003) нет средств облегчающих эту работу. При написании текста ссылки формировались и помещались в общий список. После того, как я выровнял список по алфавиту, моя нумерация, а значит и связь с текстом пропала.
            Поиск в интернете не привел ни к чему. Старинные макросы а-ля 97-ые нынче не пашут, WordExpert.ru рекомендовал мне использовать Word2007, который мне использовать запрещают этические, религиозные, практические, правовые и прочие
нормы.
            Наводить порядок вручную, оказалось муторно. Как-никак ссылок было больше чем 200. В итоге я написал, используя RAD Lazarus (Visual FreePascal) маленькую програмку, которая соотносит старую нумерацию с новой.
            Для начала я привел библиографический список к текстовому виду.

1) В конец каждой ссылки поставил её номер.
2) Сделал выравнивание по алфавиту.
3) Сохранил в формате TXT.


В итоге получился файл с таким содержимым:




1. Абуладзе, К.И. Паразитология ... / К.И. Абуладзе и др.; под. ред. К.И. Абуладзе. - 2-е изд., испр. и доп. - М.: Колос, 1982. - 496 с. 196
2. Бабянскас М.А. Иммунологическая ... : дис. … док. вет. наук. / М.А. Бабянскас. - Кайшядорис, 1965. - 619 с. 207
3. Багманова, Н.Н. Комплексная ... : дис. … канд. вет. наук: 03.00.19; 16.00.03 / Н.Н. Багманова. - Самара, 2003. - 113 с. 236



            Где первая нумерация - истинная, а последняя - ложная.

            Программка способна открывать файлы с подобным содержимым, и определять ложную нумерацию. Истинную она подсчитывает сама, поэтому приведенные в примере истинные цифры не обязательны.
            Смотрите только, чтобы в файле не было пустых строк, иначе может не совпасть число ссылок с имеющимся. На всякий случай программа пишет, сколько ссылок она насчитала (Поле "Записи").
            Теперь после загрузки файла можно вводить старую нумерация в поле для ввода. Формат может быть любым, главное, чтобы числа были отделены запятыми.

То есть следующие введенные данные однозначны:

[7, 12, 100]

[7,100, 12]

7,12,100

7 Привет, Лунатикам!!!,,,,, 12, 0100


            Теперь после нажатия кнопки "Обработать", появится результат в таком формате: 41, 43, 120.
            Кроме того, что ссылки будут переведены от ложной к истинной нумерации. Они ещё будут и расставлены по возрастанию.
            При работе программа рисует крупным кеглем число распознанных введенных ссылок. Если число найденных истинных совпадает, то появляется крупный символ "=". В противном случае возникнут символы "<>", что обозначает, что программа столкнулась с ошибкой поиска истинной нумерации, и число найденных истинных номеров не равно оному ложных.

            Скачать сию чудо софтину можно здесь: http://freesoft.ru/?id=675484 [475 kb] [GPL].

            Засим, всё. Sapienti sat! Удачного использования.

            P.S. Программа поставляется с исходным кодом. Так как ещё много вещей можно реализовать, например, автоматическую вставку и извлечение данных из буфера, вместо ручной вбивки. Можно даже сделать процесс фоновым. То есть в Ворде помещаешь текст со ссылками в буфер. Ждешь 100-200 миллисекунд и вставляешь его обратно в исправленном виде.
            P.P.S. А можно сделать выравнивание за счет программы. Скормить ей оба списка с разными нумерациями. И пущай она сама соотносит старую и новую нумерации. Чтобы это было реализовано добровольцем я и вложил исходники к программе.

Негры ночью воруют уголь

            Написал я за 5 минут на Delphi5 игрушку - шутер . Мультимедиа эффекты (звук) взял из шутера Soldiers of Fortune.
            Скачать сие чудо можно здесь: http://freesoft.ru/?id=675301 [240 kb] [GPL].

1 августа 2008 г.

Рекурсия


Казалось бы, XXI век на дворе. Мощные компьютеры вокруг. Научились играть в шахматы, а вот с рекурсией до сих пор большие сложности.


Код, набранный в блокноте, размером в 24 символа вешает компьютер окончательно.



Вот код.

Файл 1.bat

start 1.bat

start 1.bat


Аналогичную функциональность на JS удалось вложить всего в 158 символов.



Файл index.html:

<html><head><script>a='1';{while(1)a=eval('a=eval('a=a+a')+eval('a=a+a')')+eval('a=eval('a=a+a')+eval('a=a+a')');}</script></head><body></body></html>


Опасность JS в том, что я мог бы вложить его даже в эту страницу и браузер бы завис.


Тестовый стенд: Windows XP SP2, IE 6, Opera 9.51. Celeron 850/256/60.


P.S. Шахматы дались компьютерам случайно, подойдя под их тип арифметики. Вот какую-либо игру типа Arimaa им в ближайшее время не ломануть.

21 июля 2008 г.

Беларускiя комiксы. V

Беларускiя комiксы. IV

Беларускiя комiксы. III

Беларускiя комiксы. II

Беларускiя комiксы. I

Тут няма анiякай памылкi. Сапраўды iснуюць беларускiя комiксы.


На працягу некалькiх дзен я буду выкладываць прыклады гэтага вiда творчасцi. Мусiць, некаторыя вам спадабаюцца.



 



5 июня 2008 г.

На стыке генетики и информатики

Кишечная палочка Escherichia coli — излюбленный объект генных инженеров, давно используемый в качестве универсальной биохимической фабрики. Геном различных «пород» (штаммов) E. coli содержит 4,6 миллионов пар нуклеотидов и 4377 генов. В переводе на байты это составит около 1,11 Мб. И заметьте, что палочка не просто хранит 1 Мб информации. А хранит/читает/копирует/изменяет/выполняет заложенную в её геноме информацию. (http://users.rcn.com/jkimball.ma.ultranet/BiologyPages/G/GenomeSizes.html)



Теперь посмотрим, что происходи у человека. Согласно http://en.wikipedia.org/wiki/Chromosome (07.07.2007), у человека приходится 984 гена на хромосому, 128,3 миллиона оснований на хромосому, 132,4 тысяч оснований на ген. Прочитан геном на 92,70%.



Так как оснований в ДНК всего 4 (А, Г, Т, Ц). То одно основание несет 2 бита информации (2^2=4). А весь геном порядка 769957500 байт (3079830000x2/8). Что приблизительно равно 734,3 Мб информации. И это в каждой клетке организма в двух копиях (2n). Генеративные клетки (например, сперматозоид) несут только по одной копии генома (1n). И все равно 734,3 Мб информации на сперматозоид – тоже много.



Здесь не учтен объем генетической информации митохондрий, теломер, центромер, гетерохроматиновых участков хромосом. Так что общий объём информации в каждой клетке человека порядка 2 Гб.


Неизвестно, как ещё сюда добавить негеномную ненаследуемую информацию человека – его память.



Если принять средний вес клетки за 5x10^-12 кг, то информации на 1 кг веса человека придется не менее: 370 ЭБ (400000000000 ГБ). Подсчет очень не точен, потому что числа астрономические, отсюда и астрономическая погрешность. Но все равно компьютерным носителям ещё очень далеко до таких масштабов миниатюризации. Куда там жестким дискам весом 800 г и объемом в 500 ГБ (1:640 000 000 к человеческой ткани) или microSD флэш-карточкам весом 0,3 г и объемом в 4 ГБ (1:30 000 000).



Google дает пользователям по 6 ГБ места. Если каждый землянин (6,6x10^9) воспользуется этим местом, то всего получится не более 37 ЭБ (1:10 кг человеческой ткани, 1:700 человека).



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



P.S. Правда, забыл упомянуть, что смысловых (транскрибируемых) участков в ДНК человека всего около 2%. Так что образ генотипа человека занимает не 1 Гб, а порядка 50 Мб. :)

P.P.S. Геном человека и шимпанзе (наиболее человекоподобной обезьяны) совпадает на 98,8%. Глядя на такой высокий уровень подобия можно только отметить, что мы произошли не от обезьян в общем или шимпанзе в частности, а от общего предка.