code logs -> 2009 -> Mon, 27 Apr 2009< code.20090426.log - code.20090428.log >
--- Log opened Mon Apr 27 00:00:30 2009
00:09 * Derakon uses anonymous functions in Python for the first time.
00:09
<@Derakon>
(Made a dict mapping 3, 4, 5, etc. to the functions that make triangular, square, pentagonal, etc. numbers)
00:13 GeekSoldier [~Rob@Nightstar-8573.midstate.ip.cablemo.net] has joined #code
00:13 mode/#code [+o GeekSoldier] by ChanServ
00:49 You're now known as TheWatcher[T-2]
00:51 You're now known as TheWatcher[zZzZ]
01:42 somnolence [~somnolenc@Nightstar-3790.hsd1.ca.comcast.net] has quit [Ping Timeout]
01:51
<@Derakon>
Any suggestions for getting the number of digits in a number in Python that don't involve converting the number to a string (or similar costly methods) first?
01:52
<@McMartin>
None that aren't at least as expensive.
01:52
<@McMartin>
You could take its log base 10.
01:52
<@McMartin>
I don't think that's cheaper than len(str(x)).
01:54
<@Derakon>
Hmm...actually, I can track its magnitude since it increases steadily (Fibonacci sequence). A single division, even of a large number, should be cheaper than stringifying, right?
01:54
<@Finerty>
Fibonnacci sequence approaches exponential growth asymptotically.
02:12
<@Finerty>
If you get the right exponential constant you should be able to just multiply it by the index of the number and find the right one.
02:12
<@Derakon>
O_o
02:18
< simontwo>
Derakon, number of digits? sure... see how many times you can do integer division by ten before you reach 0.
02:18
<@Finerty>
Cheaper to do logarithm.
02:18
< simontwo>
oh, never mind.
02:19
< simontwo>
Finerty, are you saying floating-point base-10 logarithm is quicker?
02:20
<@Finerty>
simontwo: yes.
02:20
< simontwo>
nice to know.
02:20
<@Finerty>
Because you can do any other base logarithm and then a single other logarithm and a single division and get the same answer.
02:21
<@MyCatVerbs>
You can do fixed-point base two logarithm really, really fast, if all you'se wants is an estimate anyway. =)
02:21
<@MyCatVerbs>
Albeit that's not a good idea in Python, because it'd be slower than len(str(x)).
02:22
< simontwo>
yeah. :)
02:23
< simontwo>
right. didn't think of that.
02:23 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has quit [Quit: Z?]
02:44 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Quit: <Insert Humorous and/or serious exit message here>]
03:49 somnolence [~somnolenc@Nightstar-3790.hsd1.ca.comcast.net] has joined #code
05:20 Finerty is now known as Vornicus
05:38 AnnoDomini [AnnoDomini@Nightstar-29180.neoplus.adsl.tpnet.pl] has joined #Code
05:38 mode/#code [+o AnnoDomini] by ChanServ
06:03 Syloqs-AFH [Syloq@ServicesAdmin.Nightstar.Net] has quit [Connection reset by peer]
06:07 KBot [~karma.bot@Nightstar-29697.neoplus.adsl.tpnet.pl] has joined #Code
06:08 AnnoDomini [AnnoDomini@Nightstar-29180.neoplus.adsl.tpnet.pl] has quit [Ping Timeout]
06:09 KarmaBot [~karma.bot@Nightstar-29180.neoplus.adsl.tpnet.pl] has quit [Ping Timeout]
06:09 * Derakon gets to the bit about the 'friend' keyword (in C++), is reminded of a bit one of his profs used to say. "When I say that Bob is my friend, that means that Bob can come over and play with my private parts. That doesn't mean Joe can say "Oh, Prof <x> is my friend, I think I'll go over to his place and play with his private parts."
06:10
< Namegduf>
Haha.
06:10 KBot is now known as KarmaBot
06:14
< Alek>
hmm.
06:14
< Alek>
just what exactly is a dicebot doing in a code channel? >_>
06:15 AnnoDomini [AnnoDomini@Nightstar-29697.neoplus.adsl.tpnet.pl] has joined #Code
06:15 mode/#code [+o AnnoDomini] by ChanServ
06:18
<@Vornicus>
Hey, coders need dice too.
06:33
<@MyCatVerbs>
No we don't, we're perfectly capable of writing dicebo-oh, I thought you meant physical dice.
07:01
< Namegduf>
I once wrote a program to roll D&D ability score rolls until it got a perfect set.
07:02
< Namegduf>
While outputting a status update of how many hundreds of thousands of rolls it had done so far every 100k rolls.
07:02
< Namegduf>
It was simple and stupid.
07:02
< Namegduf>
I wrote it in C to race something someone wrote in ColdFusion. It zoomed past it.
07:03
<@Derakon>
Hmm...I'm getting perfect 18s for six stats using 3d6 in 1000-2000 total rolls.
07:03
<@Derakon>
Sometimes as low as ~550.
07:03
<@Derakon>
Mind, I'm doing one stat at a time.
07:03
<@Derakon>
If you have to do six stats, then restart if they aren't all 18, then yeah, that'd be harder.
07:04
< Namegduf>
Yeah, that's not how ASCORES are generally rolled; you normally roll a whole set at once.
07:04
< Namegduf>
So that's what it did.
07:04
< Namegduf>
It did use ASCORES 5, which made it a tad more complex (4d6, drop the lowest die) but faster.
07:04
<@Derakon>
Okay, yeah, this is taking longer. :)
07:05 * Derakon adds a line of output every 10000 attempts, is currently at half a million.
07:05
<@Vornicus>
You're 50% likely to get 6 18s in 1296 rolls.
07:05
< Namegduf>
Total ASCORES Rolled: 37190075338
07:05
< Namegduf>
Vornicus: Yes, but it has to be six in a row.
07:05
< Namegduf>
And not just in a row, but in one defined set.
07:06
< Namegduf>
(So it can't be the last three of one set and the first three of the next)
07:06
<@Vornicus>
6 in a row is very hard, and 6 in 6 is very very hard
07:06
< Namegduf>
Very very, yeah.
07:06
< Namegduf>
That's the number of sets it rolled.
07:06
<@Vornicus>
!216**6
07:06
<@Derakon>
Yeah, that's 37.2 billion.
07:06
< KarmaBot>
[Vornicus] rolled 216**6: 216**6 = 0.
07:06
<@Derakon>
Pft.
07:06
<@Vornicus>
216^6
07:06
<@Vornicus>
!216^6
07:06
< KarmaBot>
[Vornicus] rolled 216^6: 216^6 = 101559956668416.
07:06
<@Vornicus>
Much better.
07:06
<@Derakon>
1.01559957 * 10^14
07:06
<@Derakon>
Says Google.
07:06
<@Vornicus>
1 in that.
07:07
<@Derakon>
I'll kill my program, then~
07:07
< Namegduf>
ASCORES 5 has a higher chance of rolling an 18 on a given die than simple 3d6 for each.
07:07
<@Vornicus>
'k
07:07
< Namegduf>
1 is a bit nuts.
07:07
< Namegduf>
Crazier would be ASCORES 5 for the lowest possible roll, 3 3 3 3 3 3.
07:07
< Namegduf>
Because it involves rolling...
07:07
< Namegduf>
24 '1's on 1d6 in a set.
07:07
<@Vornicus>
!7776^6
07:07
< KarmaBot>
[Vornicus] rolled 7776^6: 7776^6 = 221073919720733360000000.
07:08
<@Derakon>
Hee.
07:08
<@Vornicus>
1 in that.
07:08
<@Vornicus>
!(1296^6)/(21^6)
07:08
< KarmaBot>
[Vornicus] rolled (1296^6)/(21^6): (1296^6)/(21^6) = 55247704840.488434.
07:08
<@Vornicus>
All 18s in ascores 4 is 1 in that.
07:09
< Namegduf>
Really, I did it as a "Oh, you're doing it in ColdFusion... let's see who can hit it first."
07:09
< Namegduf>
Mine was counting in 100k while theirs was counting in 10k of sets.
07:09
< Namegduf>
They turned theirs off.
07:09
< Namegduf>
Hurray for C.
07:09
<@Derakon>
Python is not, as a general rule, going to win any speed contests.
07:10
< Namegduf>
Unless the competitor is Ruby, no.
07:10
<@Derakon>
On the flipside, it took about a minute to write the program, another minute to change it to look for 6 in a row, and both times it worked on the first try. :)
07:10
<@Derakon>
(Well, second try. First try, I forgot to do "import random")
07:10
< Namegduf>
Haha.
07:10
< Namegduf>
Yeah.
07:11
< Namegduf>
This was one case where the faster program won out, though.
07:12
<@Vornicus>
I once had a java class where the guy said "bui9ld something that looks for all pythagorean triples where all three numbers are under 100."
07:12
<@Vornicus>
So we did. Then I said "now try it with 50,000"
07:12
<@Vornicus>
Mine won.
07:12
< Namegduf>
Haha, nice.
07:13
<@Vornicus>
Mostly because I didn't search.
07:13
< Namegduf>
You used a table?
07:13
<@Vornicus>
No, a formula.
07:13
< Namegduf>
Ah.
07:13
<@MyCatVerbs>
Vornicus: specifically?
07:13
<@Derakon>
See http://en.wikipedia.org/wiki/Pythagorean_triple
07:13 mode/#code [+o Derakon] by ChanServ
07:13
<@Derakon>
See http://en.wikipedia.org/wiki/Pythagorean_triple
07:14
<@Vornicus>
http://paste.ubuntu.com/159094/
07:15 mode/#code [-o Vornicus] by Vornicus
07:15 mode/#code [+o Vornicus] by Vornicus
07:15
<@Vornicus>
http://paste.ubuntu.com/159094/
07:15
<@Vornicus>
That one.
07:15
<@Vornicus>
(this is, obviously, in Python, and a bit more mature)
07:15
<@Derakon>
Which you coincidentally wrote up recently for a PE problem, hey? :)
07:15
<@Vornicus>
Well, not /recently/
07:16
<@Vornicus>
The modification date as listed is December; I know I was using it before that, I had to add in the stop conditions.
07:19
< Alek>
brute force works too, if you want to find all triples. although it probably takes longer. :P
07:19
<@Vornicus>
Slightly!
07:19
< Alek>
for x=1 to n
07:19
< Alek>
for y=1 to m
07:19
<@Vornicus>
But, again, generation >> searching.
07:20
<@Derakon>
Brute force invariably takes longer than an algorithm that actually does some thinking about how things are set up.
07:20
< Alek>
z=sqrt(x^2+y^2)
07:20
< Alek>
if z=int(z)
07:20
<@Vornicus>
Alek: want to pit mine against yours, in a race to 50,000? :D
07:21 * Derakon hands Vorn a ZX Spectrum.
07:21
< Alek>
print x"^2+"y"^2="z"^2 is a Pythagorean triple"
07:21
< Alek>
endif
07:21 * Vornicus would gladly implement it in C64 basic and pit it against your workstation running that thing.
07:21
< Alek>
next
07:21
< Alek>
next
07:21
< Alek>
stop
07:21
<@Vornicus>
:D
07:22
< Alek>
you can also graph. but that's the really slow part. :P
07:22 Derakon is now known as Derakon[AFK]
07:23
< Alek>
I had a LOT of fun with my graphing calc and a program to graph a 2- or 3-variable function (to be inserted) back in high school and early college.
07:23
< Alek>
I'd put in some function and let it run for a few hours.
07:23
< Alek>
some nice patterns. :3
07:23
<@MyCatVerbs>
Alek: no, seriously. Vorn's solution takes, just eyeballing it, at absolute most O(e^(n^0.5)) time just because the b_limit and c_limit will get blown first.
07:24
<@MyCatVerbs>
Brute force is just straight-up exponential.
07:24
< Alek>
also, the problem is that my function doesn't deal with inverted triples.
07:24
< Alek>
3,4,5 and 4,3,5 will both get displayed.
07:24
<@MyCatVerbs>
Er, that's being too loose. Not (e^), for starters. >>
07:25
< Alek>
hm. a little work and I can limit it to one side only. :P
07:25
< jerith>
for y=n to m
07:25
< jerith>
A one character change. :-)
07:25
< Alek>
for x=1 to n
07:25
< Alek>
for y=x to m
07:26
< jerith>
Yeah, I changed the one character wrong. :-/
07:26
< Alek>
:P
07:26
<@Vornicus>
7960 0.319999933243 <--- there are 7,960 triples in lowest terms a < b < c < 50000, and I found that in 0.32 seconds.
07:26
< Alek>
yey
07:26 * Vornicus waits for 1B
07:26
< Alek>
and yes, yours can obviously find the simple triples. :P
07:27 * jerith tries that on his G4 iBook.
07:27
< Alek>
mine finds the multiples as well.
07:27
<@Vornicus>
Okay, I can do that too.
07:27
< Alek>
and if I edit it to skip those, well... it's not brute force any more. :P
07:27
< jerith>
Actually, I don't.
07:27
<@Vornicus>
No, all you care about is whether gcd(a,b) == 1 or not.
07:28
< jerith>
My Euler code on here isn't that far along.
07:28
<@Vornicus>
1B is a bit large, honestly.
07:28
< Alek>
hm. ahh... you're right.
07:28
< jerith>
And I haven't managed to compile ghc to get darcs yet.
07:28
< Alek>
for ...
07:28
< Alek>
for ...
07:28
<@Vornicus>
(for one thing I'm pretty well guaranteed to hit big integers at least a few times)
07:28
< Alek>
if gcd(x,y) = 1
07:29
< Alek>
z=...
07:29
<@Vornicus>
Make sure you define gcd.
07:29
< Alek>
yep, simple edit.
07:29
< Alek>
what do you mean?
07:29
<@Vornicus>
gcd is not a very common function.
07:29
<@Vornicus>
In most languages you will have to implement it.
07:29
< Alek>
graphing calcs DO have it. :P
07:30
<@Vornicus>
I suggest you avoid brute force. :)
07:30
< Alek>
well, brute force is the fast way to set it up, even if it's the slow way to actually do it. :P
07:30
< Alek>
and I'm lazy. <_<
07:30
<@Vornicus>
oh good god you're doing this on a graphing calculator?
07:30
< jerith>
Alek: Which clac?
07:30
< Alek>
I did it SO many times...
07:30
<@Vornicus>
There's no way you can win.
07:30
< jerith>
*calc
07:30
< Alek>
TI-86, 89.
07:30 * jerith ponders trying it on his HP 48G.
07:31
< Alek>
graphing it just to screen limits, pixel by pixel, took me hours. :P
07:31
< Alek>
but that would be the old models.
07:31
< Alek>
the new ones would be much faster. :P
07:31
< jerith>
But first, a mug of delicious Earl Grey and a long, hot bath.
07:31
< Alek>
hmm. I'm sure I can define gcd in basic. :P
07:32
<@Vornicus>
159139 7.0 <--- there are 159139 triples a < b < c < 1e6 with gcd(a,b) == 1.
07:32
<@Vornicus>
and I found that in 7 seconds.
07:32
< Alek>
nice.
07:32
< Alek>
in a million?
07:32
<@Vornicus>
a million.
07:32
< Alek>
go do the billion. we'll wait. :P
07:33
<@Vornicus>
No, I don't feel like waiting two hours.
07:33
<@Vornicus>
Especially as I should have been in bed half an hour ago.
07:33
< Alek>
hm. I should install visual studio, but I need to replace windows first...
07:33
<@Vornicus>
Counting ones that have a higher gcd, 1980642 7.42100000381
07:33 * Alek shakesfist at whoever marked this student version as pirated...
07:34
<@Vornicus>
Without regard to order in a and b: 3961284 6.90999984741
07:36
<@ToxicFrog>
Just download a cracked version, it's easier~
07:37
<@ToxicFrog>
(or, you know, use Code::Blocks, or Cygwin, or Dev-CPP...)
07:37
<@ToxicFrog>
(personally, I favour Cygwin + JEdit)
07:39
< Alek>
TF: no, I actually have FULLY legal 05 and 08 Visual Studio for free.
07:39
< Alek>
I'm talking about windows.
07:39
< Alek>
it keeps reminding me it failed authorization. -_-
07:41 * Vornicus watches it tick when given 1e9, makes sure to add diagnostics.
07:41
< Alek>
>_>
07:42
< Alek>
I thought you said you weren't gonna?
07:42
<@Vornicus>
I decided I could let it run.
07:42
< Alek>
:P
07:43
<@ToxicFrog>
Alek: the fact that you're talking about windows rather than msdev in no way invalidates my point, and may in fact strengthen it~
07:44
< Alek>
:O BASIC-OO
07:44 * Alek eyes it.
07:44
<@ToxicFrog>
(WRT piracy being The Clearly Superior Choice, that is)
07:44
< Alek>
well, thing is, this copy of windows WAS pirated. :P
07:44
<@ToxicFrog>
(I also happen to think that msdev is a good editor but a shitty development environment, but that's a seperate discussion)
07:45
<@ToxicFrog>
Aah, then the wheels have come off at some point, because if it's worrying about activation someone is Doing It Wrong.
07:45
< Alek>
I just got too complacent about the fact it was a student version. and now they marked it as pirated, and I need a new copy. :(
07:50
< Alek>
wagh
07:50
< Alek>
I can't remember some basic code
07:50
< Alek>
and I can't find a more recent manual on the web :(
07:50
<@Vornicus>
It's currently at 26M here.
07:51
<@Vornicus>
(this is a<b<c and gcd(a,b)=1 values)
07:51
< Alek>
more recent than 1964, at least. :P
07:54 * Vornicus could probably put monitoring so it can figure out the current d, but isn't sure it's worth it.
08:00
< Alek>
forget it. -_-
08:01
< Alek>
I don't remember enough basic any more, the edit.com isn't basic-capable any more, and I have work to do and I have to get up in 5 hours. -_-
08:17 * Vornicus examines, determines that there is one speed improvement and one readability improvement that he can make.
08:21
<@Vornicus>
specifically: I can make it so ds that will lose some of its items to limits will break after it is guaranteed that it will hit that limit for all future n; and I can calculate the absolute d limits beforehand.
08:22
<@Vornicus>
(sadly I cannot replace the while with a for; I need to be able to iterate forever in some situations.)
08:25
<@Vornicus>
Indeed, my thing's counting is slowing down significantly now because most n for the higher d give invalid c.
08:33
<@Vornicus>
also it just passed 120M
08:46 Vornicus [Vornicus@Admin.Nightstar.Net] has quit [Quit: ]
10:19 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has joined #Code
10:19 mode/#code [+o gnolam] by ChanServ
10:21 You're now known as TheWatcher
11:36 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
11:36 mode/#code [+o Attilla] by ChanServ
12:20 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
12:21 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
12:21 mode/#code [+o Attilla] by ChanServ
12:38 Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has quit [Quit: Rhamphoryncus]
15:53 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout]
15:54 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
15:54 mode/#code [+o Attilla] by ChanServ
16:05 Syloqs_AFH [Syloq@Admin.Nightstar.Net] has joined #code
16:06 Syloqs_AFH is now known as Syloqs-AFH
16:27 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout]
16:29 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
16:29 mode/#code [+o Attilla] by ChanServ
16:56 Derakon[AFK] is now known as Derakon
17:10 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
17:11 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:11 mode/#code [+o Attilla] by ChanServ
17:18 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
17:18 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:19 mode/#code [+o Attilla] by ChanServ
17:20 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
17:21 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:21 mode/#code [+o Attilla] by ChanServ
17:22 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
17:22 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:23 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
17:24 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:24 mode/#code [+o Attilla] by ChanServ
18:06
<@gnolam>
http://code.google.com/p/xee/source/browse/trunk/XeePhotoshopLoader.m?spec=svn28 #107
18:21
<@TheWatcher>
snrk
18:22
<@TheWatcher>
Poor devil
18:22
<@Derakon>
"The fastest minimum spanning tree algorithm to date was developed by Bernard Chazelle, which is based on the Soft Heap, an approximate priority queue. Its running time is O(m å(m,n)), where m is the number of edges, n is the number of vertices, and å is the classical functional inverse of the Ackermann function." Hee.
18:58 Derakon is now known as Derakon[AFK]
19:45 Derakon[AFK] is now known as Derakon
19:52 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
19:54 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
19:54 mode/#code [+o Attilla] by ChanServ
22:07 Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has joined #code
22:08
<@McMartin>
That sounds familiar. Is it related to union-find?
22:09
<@Derakon>
Not familiar with that problem. Minimum spanning trees are subgraphs of weighted undirected graphs that connect all vertices using the minimum total weight.
22:09
<@Derakon>
And the Ackermann function just grows ridiculously quickly, of course.
22:10
<@Derakon>
Weighted, undirected, connected graphs, I should say.
22:50
<@McMartin>
Union-find is a way for implementing sets efficiently
23:01 * TheWatcher bleghs, starts reading up on how to do autocomplete in form text fields using ajax
23:02 * TheWatcher suspects there must be a Standard Library for this somewhere
23:02
<@McMartin>
GWT~
23:03
<@TheWatcher>
Heh, I suspect that might be a /little/ overkill
23:05
<@TheWatcher>
I'm actually considering steal^H^H^H^H^Hborrowing mediawiki's search box autocomplete code and bending it to my will
23:24 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout]
23:26 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
23:26 mode/#code [+o Attilla] by ChanServ
23:29 AnnoDomini [AnnoDomini@Nightstar-29697.neoplus.adsl.tpnet.pl] has quit [Quit: LotR books were written to justify a coup by the exiled royal house of Gondor, and a war against the so-called lesser races like orcs and Easterners. In reality, Mordor was trying to help Gondor defend itself from Rohan and Aragorn. Aragorn hired black hearted hobbits to sneak a nuclear bomb into Mordor, and the resulting explosion killed millions including the noble Sauron.]
23:43 crem_ [~moo@Nightstar-28703.adsl.mgts.by] has joined #code
23:46 crem [~moo@Nightstar-28703.adsl.mgts.by] has quit [Ping Timeout]
23:55 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout]
23:56 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
23:56 mode/#code [+o Attilla] by ChanServ
--- Log closed Tue Apr 28 00:00:44 2009
code logs -> 2009 -> Mon, 27 Apr 2009< code.20090426.log - code.20090428.log >