This comment is reply for 1787 sumim: Squeak Smalltalk で。(アクセスログのIPアドレスを逆引き). Go to thread root.
sumim #1799(2007/08/03 18:54 GMT) [ Smalltalk ] Rating0/0=0.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| in numLines out queue sema mutex cache | in := FileStream fileNamed: 'access_log'. out := FileStream fileNamed: 'access_log.txt'. queue := SharedQueue new. numLines := 0. [in atEnd] whileFalse: [in nextLine. numLines := numLines + 1]. sema := Semaphore new. [ numLines timesRepeat: [ | pair | pair := queue next. pair first wait. out nextPutAll: pair second; cr]. in close. out close. sema signal] fixTemps fork. in reset. cache := Dictionary new. mutex := Semaphore forMutualExclusion. [in atEnd] whileFalse: [ queue size < 1000 ifTrue: [ | ip rest pair | ip := in upTo: $ . rest := in nextLine. pair := {Semaphore new. #future}. queue nextPut: pair. [ | name | mutex critical: [ name := cache at: ip ifAbsentPut: [ (NetNameResolver nameForAddress: (NetNameResolver addressFromString: ip) timeout: 30) ifNil: [ip]]]. pair at: 2 put: name, ' ', rest. pair first signal] fixTemps fork]]. sema wait
Rating0/0=0.00-0+
[ reply ]
sumim
#1799()
[
Smalltalk
]
Rating0/0=0.00
| in numLines out queue sema mutex cache | in := FileStream fileNamed: 'access_log'. out := FileStream fileNamed: 'access_log.txt'. queue := SharedQueue new. numLines := 0. [in atEnd] whileFalse: [in nextLine. numLines := numLines + 1]. sema := Semaphore new. [ numLines timesRepeat: [ | pair | pair := queue next. pair first wait. out nextPutAll: pair second; cr]. in close. out close. sema signal] fixTemps fork. in reset. cache := Dictionary new. mutex := Semaphore forMutualExclusion. [in atEnd] whileFalse: [ queue size < 1000 ifTrue: [ | ip rest pair | ip := in upTo: $ . rest := in nextLine. pair := {Semaphore new. #future}. queue nextPut: pair. [ | name | mutex critical: [ name := cache at: ip ifAbsentPut: [ (NetNameResolver nameForAddress: (NetNameResolver addressFromString: ip) timeout: 30) ifNil: [ip]]]. pair at: 2 put: name, ' ', rest. pair first signal] fixTemps fork]]. sema waitRating0/0=0.00-0+