code logs -> 2014 -> Fri, 17 Oct 2014< code.20141016.log - code.20141018.log >
--- Log opened Fri Oct 17 00:00:17 2014
00:13 himi [fow035@Nightstar-dm0.2ni.203.150.IP] has joined #code
00:13 mode/#code [+o himi] by ChanServ
00:49 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has quit [Ping timeout: 121 seconds]
00:52 simon_ [simon@Nightstar-2og823.pronoia.dk] has quit [Connection closed]
00:52 simon_ [simon@Nightstar-2og823.pronoia.dk] has joined #code
01:02 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has joined #code
01:02 mode/#code [+o Alek] by ChanServ
02:01 Checkmate [Z@Nightstar-484uip.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
02:12 VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has quit [[NS] Quit: Program Shutting down]
02:31 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has quit [Ping timeout: 121 seconds]
02:45 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has joined #code
02:45 mode/#code [+o Alek] by ChanServ
03:59 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has quit [Ping timeout: 121 seconds]
04:13 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has joined #code
04:13 mode/#code [+o Alek] by ChanServ
05:12 Vornicus [vorn@ServerAdministrator.Nightstar.Net] has quit [[NS] Quit: Leaving]
05:23 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has quit [Ping timeout: 121 seconds]
05:35 Kindamoody[zZz] is now known as Kindamoody
06:47 himi [fow035@Nightstar-dm0.2ni.203.150.IP] has quit [Operation timed out]
08:00 Orthia [orthianz@Nightstar-78f.inp.224.119.IP] has quit [Ping timeout: 121 seconds]
08:05 Orthia [orthianz@Nightstar-g7s.ovb.98.101.IP] has joined #code
08:05 mode/#code [+o Orthia] by ChanServ
08:05 Checkmate [Z@Nightstar-484uip.cust.comxnet.dk] has joined #code
08:08 macdjord is now known as macdjord|slep
08:59 celticminstrel [celticminst@Nightstar-l2rg83.dsl.bell.ca] has quit [[NS] Quit: KABOOM! It seems that I have exploded. Please wait while I reinstall the universe.]
09:30 Kindamoody is now known as Kindamoody|afk
10:48 himi [fow035@Nightstar-v37cpe.internode.on.net] has joined #code
10:48 mode/#code [+o himi] by ChanServ
10:53
<@Tarinaky>
Argh
10:53
<@Tarinaky>
Why is RUby telling me Complex has no method new.
10:53
<@Tarinaky>
Literally WTF
10:57
<@TheWatcher>
Well, the reason is complex...
10:57
< Julius>
How do you metaphorically WTF?
10:57 * TheWatcher flrrd
10:57
<@Tarinaky>
The API docs says Complex has methods.
10:57
< Julius>
Does it have a new method?
10:57
<@Tarinaky>
According to the API doc
10:57
<@Tarinaky>
And on reflection it's not new I want, but coerce.
10:57
<@Tarinaky>
And calling coerce doesn't work either
10:58
<@Tarinaky>
Apparently it's because I'm looking at the wrong version.
10:58
<@Tarinaky>
Well that makes it better...
11:44 VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has joined #code
12:14 thalass [thalass@Nightstar-nk1uh0.bigpond.net.au] has joined #code
12:14 mode/#code [+o thalass] by ChanServ
13:16
<@Tarinaky>
Can someone explain to me what the cdecl and stdcall calling conventions are?
13:42
< RchrdB>
IIRC, cdecl is all args on stack and stdcall is the local ABI which these days is as much as possible in the registers
13:43
< RchrdB>
Wikipedia has a fuller description but the articles are a little convoluted
13:55
<@Tarinaky>
Apparently with Python ctypes you have to specify which is used?
14:46 Alek [omegaboot@Nightstar-c8t.a00.36.73.IP] has joined #code
14:46 mode/#code [+o Alek] by ChanServ
14:57
< RchrdB>
Tarinaky: yes, but if it were anything other than the default then the C library .h include file would have to specify it too
14:58
< RchrdB>
if there isn't a calling convention explicitly declared on a function in the .h file then you probably don't need to specify the calling convention in Python's ctypes either, because they'll both default to the same convention.
14:58
< RchrdB>
Sorry for the slow reply, I was at lunch.
15:57
< VirusJTG>
Do any of you have advice for teaching a first time student of programing? It has come time for my FPY to gain the perspective that learning programing teaches.
15:57
< VirusJTG>
PFY rather
15:59
<@Tarinaky>
VirusJTG: Pick your language based on the teacher's knowledge of it and ability to assist debugging hard problems /not/ for reasons of trendiness or ease of learning.
15:59
<@Tarinaky>
The latter properties are nice to have... but if you're only a couple of pages ahead of the student then you're not a very good teacher.
16:01
<@Tarinaky>
An added plus if you have languages/toolsets/etc... which're immediately useful to the student's problem domain.
16:02
<@Tarinaky>
Unless you're worried about them exceeding the master and leaving for a better job :P
16:02 thalass is now known as THalass|sleep
16:04
< VirusJTG>
The only languages I know are C++, C#, and VB.NET
16:04
< RchrdB>
How well do you know C#? Of those, that's the most fun sounding one.
16:04
< VirusJTG>
I think, of those C++ is the most universally useful
16:05
<@Tarinaky>
Is C++ the one you know best?
16:05
< VirusJTG>
I know it well enough to make AD, and MS SQL server calls
16:05
< VirusJTG>
but I know C++ the best as that what I trained in when I was in collage
16:05
< VirusJTG>
I can do in line SQL in C++, regardless of DB used
16:06
<@Tarinaky>
The other alternative is to throw a "Teach yourself programming in 72.5 minutes for the profoundly deaf"
16:06
<@Tarinaky>
+book at them
16:06
< VirusJTG>
I also remember deep stack, heap, and garbage collation
16:07
< VirusJTG>
Sounds like giving her a C++ for dumbies book, an Ubuntu install, and walking her through the book would be my best bet?
16:07
<@Tarinaky>
There're a lot of very good autodidact programming books out there now... the 'Learn Python/Ruby/Morris-Dancing the Hard Way' series get good press.
16:07
<@Tarinaky>
No idea if they're good.
16:09
<@Tarinaky>
VirusJTG: That sounds like an entirely workable strategy.
16:10
<@Tarinaky>
VirusJTG: I'd be careful about 'walking through' though. You want them to attempt to solve any problems first.
16:10
<@Tarinaky>
There's a balance.
16:10
< VirusJTG>
Thanks for the input guys. I appreciate it. Even if she doesn't want to become a programmer, I'm a firm believer that all sysadmins need to know at least one programing language.
16:10
< RchrdB>
and it should be Perl
16:10
< VirusJTG>
Tarinaky I understand and agree with your point
16:11
< RchrdB>
wait, no, that was 10 years ago
16:11
< RchrdB>
and it should be Ruby ;)
16:12 * Tarinaky is only mildly disappointed no-one broke down giggling at the "Teach yourself programming in 72.5 minutes for the profoundly deaf" joke.
16:12
< VirusJTG>
oh I giggled
16:13
< VirusJTG>
I just didn't emote as such
16:13
<@Tarinaky>
Learn Morris Dancing the Hard Way?
16:19 celticminstrel [celticminst@Nightstar-l2rg83.dsl.bell.ca] has joined #code
16:19 mode/#code [+o celticminstrel] by ChanServ
16:23
< RchrdB>
There isn't an easy way to learn Morris Dancing.
16:23
<@Tamber>
There's the hard way, and the harder way.
16:23 mode/#code [+oooooooooooo RchrdB Attilla grindhold Checkmate simon_ VirusJTG Xon Syka Turaiel EvilDarkLord Julius [R]] by Tamber
16:24
<@Tarinaky>
You throw basket balls at them while shouting "MORRIS!" until they're able to expertly defect the projectile with their stick and jig away.
16:25
<@RchrdB>
That sounds more fun than actual Morris Dancing.
16:26
<@Tarinaky>
Basically, it's reenactment for people who're scared of getting hurt.
16:26
<@Tarinaky>
Show up sunday, look like a pratt with your friends.
16:26
<@Tarinaky>
Retire to a cozy pub with a good selection of real ales.
16:26 * Tamber ties bells to Tarinaky.
16:53
<@iospace>
so, I have figured out how to make less open up vim when I hit v in it o:
17:01 Netsplit *.net <-> *.split quits: @Attilla, @Syka, @Tarinaky
17:01
<@RchrdB>
iospace: ooh, please share?
17:02
<@iospace>
RchrdB: so, in less, if you hit v, it'll open whatever EDITOR is defined to
17:02
<@iospace>
if not, just vi
17:02 Netsplit over, joins: Attilla
17:02
<@iospace>
so I just set EDITOR to be vim, so :3
17:02
<@RchrdB>
oh OH
17:02
<@iospace>
i completely stumbled on it by chance XD
17:03
<@RchrdB>
I just tried it to see what it did by default because you mentioned it.
17:03
<@RchrdB>
Emacs came up.
17:03
<@RchrdB>
Guess what I have in $EDITOR? :)
17:03 PinkFreud [WhyNot@Pinkfreud.is.really.fuckin.lame.nightstar.net] has quit [Ping timeout: 121 seconds]
17:03
<@iospace>
emacs
17:03
<@iospace>
:P
17:03
<@iospace>
but yes, that was a fun discovery ^^
17:05 Syka [the@Nightstar-c409v3.vividwireless.net.au] has joined #code
17:05 Tarinaky [tarinaky@Nightstar-e99cts.net] has joined #code
17:05 mode/#code [+o Tarinaky] by ChanServ
17:23 Checkmate [Z@Nightstar-484uip.cust.comxnet.dk] has quit [Ping timeout: 121 seconds]
17:26 PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has joined #code
17:27 mode/#code [+o PinkFreud] by ChanServ
17:57 Checkmate [Z@Nightstar-ro94ms.balk.dk] has joined #code
18:51 macdjord|slep is now known as macdjord
19:54 Kindamoody|afk is now known as Kindamoody
20:16 EvilDarkLord [jjlehto3@Nightstar-evu5hu.org.aalto.fi] has quit [Ping timeout: 121 seconds]
20:17 EvilDarkLord [jjlehto3@Nightstar-evu5hu.org.aalto.fi] has joined #code
20:37 Kindamoody is now known as Kindamoody[zZz]
20:58 Checkmate [Z@Nightstar-ro94ms.balk.dk] has quit [Ping timeout: 121 seconds]
21:01
<@Tarinaky>
Regexp question: how do I match nothing?
21:01
<@Tarinaky>
i.e. I want a regexp like:
21:02
<@Tarinaky>
/(\d*)d(\d+)(h|l|f|or nothing?)/
21:02
<@Tarinaky>
To match lines like 1d6, 1d8, d8, d6f
21:03
<@Tarinaky>
With three parameters in the regexp, one of which is always non-null and the other two can be null.
21:03
<@Tamber>
/(\d*)d(\d+)[hlf\s]/ ?
21:03
<@Tamber>
Depending on what 'nothing' is meant to be.
21:04
<@Tamber>
*wedges some parens around the square brackets*
21:04
<@Tarinaky>
Nothing being zero characters
21:04
<@Tamber>
*nods*
21:04
<@Tarinaky>
Isn't \s whitespace?
21:04
<@Tarinaky>
i.e. a character?
21:04
<@Tamber>
/(\d*)d(\d+)([hlf])$/
21:05
<&jerith>
Tarinaky: (h|l|f|) should do it.
21:05
<@Tamber>
Yup.
21:05
<@Tarinaky>
If anyone is familiar with Painbot/DMBot/Karmabot's dice syntax... Can you cast a quick eye over this to see if you can spot anything wrong with it?
21:06
<@Tarinaky>
I'm not sure if this regexp engine supports anchors.
21:06
<@Tarinaky>
'(\d*)d(\d+)(h|l|f|)(,\d+|)'
21:08 * Tarinaky is currently trying to fuck^Wfork an existing IRC bot as a backup DMBot because the original has bitrot and the creators of Painbot/Karmabot are not on my christmas card list atm.
21:10
<&jerith>
What codebase?
21:10
<@Tarinaky>
Willie was the first one I found.
21:10
<@Tarinaky>
I figured if I just threw away all of its existing modules, and wrote a new dice.py module, I'd be done.
21:16
<@Tarinaky>
Okay, apparently (\d*)d(\d+)(h|l|f)?(,\d+)? has the same effect.
21:16
<@Tarinaky>
I was worried that the parameter numbers would shift around.
21:26
<@Tarinaky>
Argh. Crap.
21:26
<@Tarinaky>
Found something I forgot.
21:29
<@Tarinaky>
I can't think how I should sensibly handle the case d20+6-2
21:29
<@Tarinaky>
And d20-2+6
21:29
<@Tarinaky>
Hmm...
21:29
<&jerith>
... are you parsing dice specs with regexes?
21:29
<@Tarinaky>
Yes.
21:29
<&jerith>
Is this Python?
21:29
<@Tarinaky>
Yes.
21:29
<@Tarinaky>
Is the answer "Don't"?
21:30
<&jerith>
https://pypi.python.org/pypi/Parsley
21:30
<&jerith>
(It's not the most high-performance parser out there, but it's the nicest I've used.)
21:30
<@Tarinaky>
Does this return an re object?
21:30
<@Tarinaky>
I'm passing the regexs to another library which is doing all the heavy lifting.
21:31
<&jerith>
What's the other library?
21:31
<@Tarinaky>
Willie
21:31
<&jerith>
And what heavy lifting is it doing?
21:31
<@Tarinaky>
Being an IRC bot.
21:32
<@Tarinaky>
Willie's standard dice module has a different dice syntax.
21:32
<&jerith>
Oh, it has a dice module.
21:32
<@Tarinaky>
But the dice module does the wrong thing.
21:33
<@Tarinaky>
I'm trying to replace the dice module with one that matches another bot's dice spec.
21:33
<&jerith>
Sounds like you want your own dice module.
21:33
<@Tarinaky>
Correct.
21:33
<@Tarinaky>
Which is what I need the Regex for :P
21:34
<&jerith>
So have Willie give you the raw strings and do the parsing and dice stuff yourself?
21:34
<&jerith>
Parsley makes it easy to have modular bits of syntax that fit together nicely without stepping on each other.
21:35
<@Tarinaky>
I'm not sure there's a way to get willie to give me the raw strings without, basically, blocking /every/ module.
21:36
<@Tarinaky>
And thus reimplementing more bits of functionality.
21:36
<@Tarinaky>
Which I'm trying to avoid.
21:36
<&jerith>
Use a better bot?~
21:36
<&jerith>
What other things of Willie's are you using?
21:36
<@Tarinaky>
Well, basically, /all/ I want to do is replace dice.py
21:36
<@Tarinaky>
And then have it work
21:36
<&jerith>
Also, you can probably give Willie a regex that gets you the raw string.
21:37
<@Tarinaky>
Yeah, but from what I gather it'll stop giving it to triggers once one matches.
21:37
<@Tarinaky>
Hmm...
21:38
<@Tarinaky>
I cna probably stick a big ([\+\-\*\/\d\s]*) block in the middle.
21:38
<&jerith>
By "raw string" I mean "stuff after `.roll`" or whatever.
21:38
<@Tarinaky>
And pass /that/ block into a parser.
21:38
<@Tarinaky>
Trouble is the other bot's dice spec wants the command to look like !d6
21:38
<@Tarinaky>
Without a 'command'
21:40
<&jerith>
Give it a regex of r'\s*!(.*)$' or something?
21:40
<@Tarinaky>
But then !help won't work :P
21:40
<&jerith>
Give it a lower priority than the more specific commands?
21:40
<&jerith>
Is `!3d6` a legitimate dice roll?
21:41
<@Tarinaky>
Yes
21:44
<&jerith>
And `!2+3d6`?
21:44
<@Tarinaky>
Yes.
21:44
<@Tarinaky>
You're right.
21:44
<@Tarinaky>
I should use low priority and then pass it to a real parser :/
21:46
<&jerith>
I have saved you a lot of pain. You're welcome. :-)
21:47
<@Tarinaky>
I'm not convinced this is going to work :/
21:48
<&jerith>
It's going to work better than a pile of horrible regexen.
21:48
<@Tarinaky>
Only if it works at all >.<
21:48
<&jerith>
If your code's in a public repo, I might have some time this weekend to poke at it with a pointy stick.
21:48
<&jerith>
It's been a while since I wrote an IRC bot.~
22:00
<@Tarinaky>
jerith: Yeah. Both my fork and the original.
22:00
<@Tarinaky>
jerith: https://github.com/Tarinaky/LanceBot
22:00
<@Tarinaky>
21:58 <+Tarinaky> !d6
22:00
<@Tarinaky>
21:58 < LanceBot> Tarinaky: Caught a dice expression, possibly?
22:00
<@Tarinaky>
21:58 <+Tarinaky> !help
22:00
<@Tarinaky>
21:58 < LanceBot> Tarinaky: Say !help <command> (for example .help c) to get help for a command, or .commands for a list of commands.
22:01
<@Tarinaky>
21:58 < LanceBot> Tarinaky: Caught a dice expression, possibly?
22:01 * Tarinaky facepalms.
22:01
<@Tarinaky>
This is with a rule catching the regex /^!(.*)$/
22:07 Checkmate [Z@Nightstar-g2q2tu.customer.tdc.net] has joined #code
22:07
<@Julius>
In PainBot, I'm detecting the shorthand by the first character being a) a number, b) the letter d, or c) an opening paren.
22:07
<@Julius>
This is after it tried to match the input string to every other possible command first.
22:08
<@Tarinaky>
Trouble is... that's going to fail if you have any commands beginning with 'd'
22:08
<@Julius>
No.
22:08
<@Tarinaky>
!date begins with the letter d
22:08
<@Tarinaky>
It /is/ a solution...
22:08
<@Julius>
It tries every other possible interpretation first.
22:08
<@Julius>
Then, if no command is found to be matching, it tries parsing as a shorthand.
22:08
<@Tarinaky>
I can't see an easy way to get willie to do that.
22:09
<@Tarinaky>
It seems to do the other commands /and/ this regex
22:09
<@Tarinaky>
Hence the output log above
22:10
<@Julius>
Ugh.
22:10
<@Julius>
You appear to be modifying someone else's bot.
22:10
<@Julius>
Without the writer on-hand to explain it to you, even.
22:11
<@Tarinaky>
I'm practicing the skills I've learned at work.
22:11
<@Tarinaky>
I can always send an email to the original author.
22:11
<@Tarinaky>
But I should try to RTFS first :/
22:11
<@Julius>
Can you locate the place where it decides what a given input is supposed to be?
22:12
<@Tarinaky>
Working on it.
22:13
<@Tarinaky>
bot.py
22:13
<@Tarinaky>
Not sure which function yet.
22:16 * Julius looks at that file.
22:16
<@Tarinaky>
I think dispatch
22:17
<@Tarinaky>
But that only mentions commands, not rules.
22:17
<@Julius>
I do not know where it stores command definitions.
22:18
<@Julius>
This bot looks like it reinvents a whole lot of wheels.
22:18
<@Tarinaky>
In an attribute of the Willie object called commands
22:19
<@Julius>
Add a low priority command that tries to roll itself?
22:20
<@Tarinaky>
Then it won't trigger on !3d6
22:20
<@Tarinaky>
It'll only trigger on !<command name> 3d6
22:20
<@Julius>
Why not?
22:20
<@Julius>
Can't you put a regexp as the command name?
22:20
<@Julius>
If not, then you need to modify the dispatcher so it has a if-all-else-fails case.
22:21
<@Tarinaky>
That's what I'm thinking the cleanest solution might be.
22:22 Checkmate is now known as Serah
22:23 Serah is now known as Checkmate
22:24 * Julius will be doing a migration of company email stuff to Office 365 in 30 minutes.
22:24
<@Julius>
Truly, may God have mercy on my soul should there be any problems here.
22:24
<@Julius>
Adobe won't save me now.
22:24 RchrdB [RichardB@Nightstar-v5j366.understood.systems] has quit [[NS] Quit: WeeChat 1.0.1]
22:24
<&McMartin>
Adobe forsook you long ago
22:25 RchrdB [RichardB@Nightstar-v5j366.understood.systems] has joined #code
22:25 * Tarinaky tries adding a tactical 'return' statement.
22:25
<@Julius>
The decision to buy into Office 365 was made during my vacation. I think it was a poor choice. But now it's done, and it can potentially resolve a bunch of niggling issues my coworkers have been experiencing, even if it costs more.
22:26
<@Tarinaky>
Umm what
22:26
<@Tarinaky>
Okay, I've apparently forgotten how to write Python
22:26
<&McMartin>
What what
22:26
<&McMartin>
In the cloud
22:26
<@Tarinaky>
print "Foo?"
22:26
<@Tarinaky>
Syntax error?
22:27
<&McMartin>
Are you using Python 3?
22:27
<@Tarinaky>
No
22:27
<@Tarinaky>
2.7.3
22:27
<&McMartin>
Have you imported print_function from __future__?
22:27
<&McMartin>
2.7.5 accepts the command you gave
22:27
<@Tarinaky>
Yes
22:27
<@Tarinaky>
Derp
22:28
<&McMartin>
I should refactor Ophis so that it runs in both 2.7 and 3.x
22:41
<&ToxicFrog>
print_function supremacy
22:42
<&McMartin>
Ophis also needs to shift over to bytebuffers, though.
22:48
<@Tarinaky>
Speaking to the people in willie's IRC channel it sounds like having an awful regex of doom might be the way forwards :/
23:06 * Julius swears.
23:06
<@Julius>
Problem 1: Pale Moon causes an authentication problem when used to log into Office 365. Solution is to use Chrome instead.
23:08
<&McMartin>
What is Pale Moon?
23:08
<@Julius>
A Firefox clone.
23:08
<@Julius>
Problem 2: Chrome doesn't display the website correctly. Checkboxes are hard to determine if they are checked or not.
23:13
<@Julius>
Argh.
23:14
<@Julius>
More trouble, I think the page isn't displaying correctly. There's no obvious "NEXT" functionality in here.
23:16 * Julius boots up Opera.
23:16
<@Julius>
I'm looking for some combination of magic that lets me render the site correctly AND let me log in.
23:17
<&ToxicFrog>
It's going to be IE6, isn't it.
23:17 * TheWatcher shudders
23:18
<&McMartin>
ToxicFrog: For Cloud!Office? Probably not
23:18
<&McMartin>
It'll be at least IE8~
23:19
<@Julius>
Which is probably completely incompatible with my ancient OS. Fortunately I have a second box that's newer.
23:20
<@Julius>
Fuck. There's no obvious next step in Opera either. Is suspect this is working as designed.
23:25
<@Julius>
This is dogshit. All of the links lead to YOU ARE NOT AUTHORIZED.
23:25
<@Julius>
Why the hell am I not authorized to buy a license?!
23:25
<@Julius>
Or anything else?
23:29
<@Julius>
The help file I am constantly being redirected to is completely unhelpful.
23:29
<@Julius>
It is intended for a markedly different setup.
23:29
<@Julius>
I cannot follow its instructions, because the interface it references doesn't exist.
23:31
<@Julius>
It seems as though part of the thing recognizes me as an administrator, while another does not.
23:35
<@[R]>
Julius: you're running 98?
23:35
<@[R]>
(IIRC XP supports up to IE 8)
23:36
<@Julius>
Found the problem. The coworker who did this in my stead while I was on vacation failed to assign me proper privileges.
23:36
<&McMartin>
-_-
23:36
<&McMartin>
At least that is super-consistent with the mysterious errors
23:37
<@Julius>
I'm a service admin, not a global admin like I need to be to do this.
23:38
<@Julius>
MS is also to blame, I feel. An unformatted 403 is not very helpful.
23:38
<@Julius>
I would have like a "looks like you're a X, but you need to be Y to do this".
23:38
<@[R]>
MS being shitty at UI is unsurprising
23:39
<@Julius>
Doubly so since I was getting a 403 error that was not actually related to the lack of priveleges.
--- Log closed Sat Oct 18 00:00:33 2014
code logs -> 2014 -> Fri, 17 Oct 2014< code.20141016.log - code.20141018.log >

[ Latest log file ]