Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Моделирование Виртуальной Вычислительной Системы.


Моделирование Виртуальной Вычислительной Системы.
 
Выпуск N35
home URL
автор рассылки: noonv (noonv[AT]narod[.]ru)
"Я чувствовал беспричинное желание, как и обычно при встрече с таким типом людей, тряхануть ее и выкрикнуть правду ей в лицо: «Ты бесполезный, уродливый кусок мяса. Твоя жизнь была безнадежной и отвратительной до сих пор, и впредь она станет только хуже. Перестань лгать самой себе»."
Ирвин Уэлш Евротрэш

Приветствую вас, уважаемые читатели!

Вначале небольшой обзор интересных ссылок и занятных ресурсов, накоторые мне посчастливилось натолнуться. На форуме одного из моих любимых сайтов на следующий очень интересный пост, напрямую относящийся к теме этой рассылки. Рекомендуется к прочтению :) Ну а прочитать можно здесь (http://www.wasm.ru/forum/viewtopic.php?id=17801).
К сожалению, опять были вынужденные задержки с выходом рассылки :(
Но! За это время кроме работы я разбирался с IDS Snort (http://www.snort.org), в результате была написана статья "Автоматизация оповещений Snort" (http://noonv.h1.ru/page.php?id=9), которая была опубликована в }{ (http://www.xakep.ru/post/37554/default.asp)
Написана статья по моей старой задумке "Эшелонированная оборона: Frontier Antivirus и MDS"(http://noonv.h1.ru/page.php?id=8), которая была опубликована на http://www.securitylab.ru.
А так же я принял участие в локализации полезной утилиты Snortalog (http://jeremy.chartier.free.fr/snortalog/)
И в добавок к этому оказываю помощь проекту NNFpp (http://nnfpp.sourceforge.net) - но этот вопрос будет затронут позже, когда будет затронут вопрос нейронных сетей.

Вооооооот :)

Кстати Вашему вниманию представляю Жизнь на Питоне :))) (Python code of Life) за основу взят исходник Жизни на C# :)
скачать можно здесь:
http://noonv.h1.ru/se/r/f/35/life.py

#!/usr/local/bin/python

"""
life.py

for Life game

                                                XIII
"""

import sys
import random

L_SIZE=20
L_SIZEY=60

l_i=0       # counters
l_j=0
l_age=0     # age of population
l_coef=0    # coefficient for check cell

file_name ="life.txt"

def printt(string_):
    sys.stdout.write(string_);sys.stdout.flush(); # :))
    return None


class Life:
    age=0
    table_size_x=60
    table_size_y=20
#for store life-array
    itable=[]

    def __init__(self):
        self.age=0
        self.table_size_x=L_SIZEY
        self.table_size_y=L_SIZE
        self.itable=[]
        self.Zero()
        return None
    
    def Zero(self):
        #
        # set elements of itable zero
        #
        i=0
        line=[]
        self.itable=[]
        while i<self.table_size_y+2 :
            i+=1
            j=0
            while j<self.table_size_x+2 :
  j+=1
  line.append('0')
            self.itable.append(line)
            line=[]
        #
        # set border
        for i in range(0,self.table_size_x+2):
     self.itable[0][i]='-'
     self.itable[self.table_size_y+1][i]='-'
 for j in range(0,self.table_size_y+2):
            self.itable[j][0]='|'
     self.itable[j][self.table_size_x+1]='|'
    
        self.itable[0][self.table_size_x+1]='+'
        self.itable[self.table_size_y+1][0]='+'
 self.itable[0][0]='+'
 self.itable[self.table_size_y+1][self.table_size_x+1]='+'
 return None

    def Load(self):
        #
        # generate random configuration
        #
        i=0
        j=0
        for j in range(1,self.table_size_y):
            for i in range(1,self.table_size_x):
                if random.random()<0.3:
                    self.itable[j][i]='*'
        return None

    def Loadfile(self,file_name_):
        #
        # read configuration from file
        #
        i=0
        j=0
        try:
            f=open(file_name_,'r')
            print "[i] open "+file_name_,
        except IOError:
            print "[!] Cant open file "+file_name_
            return -1
        print "..ok"
        i=len(f.readline()) # without "\n"
        j=len(f.readlines())
        # print i,j
        self.table_size_x=i-1
        self.table_size_y=j+1
        self.Zero()
        
        f.seek(0)
        for j in range(0,self.table_size_y):
            for i in range(0,self.table_size_x):
                self.itable[j+1][i+1]=f.read(1)
            c=f.read(1) # read "\n"
        f.close()
        return None

    def Show(self):
        #
        # write age
        printt("Age: "+str(self.age)+"\n")
        self.age+=1
        #
        # show configuration without borders :)
        #
        for j in range(0,self.table_size_y+2):
            for i in range(0,self.table_size_x+2):
                #
                # print self.itable[j][i], # print very bad idea because it use space :(
                # http://www.python.org/search/hypermail/python-1994q1/0121.html
                #
                # sys.stdout.write(self.itable[j][i]);sys.stdout.flush();
                if self.itable[j][i]=='d':
                    self.itable[j][i]='0'
                if self.itable[j][i]=='a':
                    self.itable[j][i]='*'
                if self.itable[j][i]=='0':
                    printt(' ') # sys.stdout.write(' ');sys.stdout.flush();
                else:
                    printt(self.itable[j][i])# sys.stdout.write(self.itable[j][i]);sys.stdout.flush();
            printt('\n') # sys.stdout.write('\n');sys.stdout.flush(); # :))
                    
        self.Next()
        return None

    def Next(self):
        #
        # calculate next configuration
        #
        i=0
        j=0
        neibor=0
        for j in range(1,self.table_size_y+1):
            for i in range(1,self.table_size_x+1):
                if self.itable[j][i]=='0' or self.itable[j][i]=='*':
                    neibor=0
                    if self.itable[j-1][i]=='*' or self.itable[j-1][i]=='d': # west
                        neibor+=1
                    if self.itable[j-1][i-1]=='*' or  self.itable[j-1][i-1]=='d': # north-west
   neibor+=1
      if self.itable[j][i-1]=='*' or self.itable[j][i-1]=='d': # north
   neibor+=1
      if self.itable[j+1][i-1]=='*' or self.itable[j+1][i-1]=='d': # north-east
   neibor+=1
      if self.itable[j+1][i]=='*' or self.itable[j+1][i]=='d': # east
   neibor+=1
      if self.itable[j+1][i+1]=='*' or self.itable[j+1][i+1]=='d': # south-east
   neibor+=1
      if self.itable[j][i+1]=='*' or self.itable[j][i+1]=='d': # south
   neibor+=1
      if self.itable[j-1][i+1]=='*' or self.itable[j-1][i+1]=='d': # south-west
   neibor+=1
      #
      if neibor<=1 or neibor >= 4: # will die
                        if self.itable[j][i]=='*': # if comment it string we will have BAD Life version :)))))
                            self.itable[j][i]='d'
                    elif neibor==3: # will born
                        if self.itable[j][i]=='0':
                            self.itable[j][i]='a'

        return None


#-----------------------------------------
#
# begin here :)
#

life = Life()

if len(sys.argv)<2 :
    print "life v0.1"
    print "usage: python life.py <file_with_configuration>\n"
    life.Load()
else:
    if life.Loadfile(sys.argv[1])!=None:
        sys.exit()

letter=raw_input("press Enter for next step; for Exit press q: ")        
while 1:
    life.Show()
    letter=raw_input("")
    if letter=='q' or letter=='Q':
        print "Bye!\n"
        break

Недавно инспектируя каталог с проектом, наткнулся на старый screenshot программы, демонстрирующий работу программы с ошибкой в развитии клеток, вследствии чего проиходит демографический взрыв и клетки занимают всю поверхность Мира :)

если картинка не загрузилась, то скачать её можно по прямой ссылке http://noonv.h1.ru/se/r/35.gif

Счастливо!

[noonv@volodia noonv]$ logout

XIII

Рейтинг@Mail.ru

В избранное