On Tuesday, 26 February 2013 at 07:17:49 UTC, Lars T. Kyllingstad
wrote:
What would you improve about it?
1. I would document it properly.
2. As long as it runs in the background, I would return some
kind of process ID from it. (Yes, most browsers today may just
signal another instance to open a new tab and then return, but
would be surprised if they *all* do.)
Pretty sure all major Windows browsers do.
The result is useless anyway. The user can browse away to another
website, and if the browser is tabbed, open a completely
different website and close the tab containing your website. What
the user does from that moment is not the program's business. If
it's important to detect when your website/webapp's tab is
closed, I'd suggest implementing a long-polling request (COMET)
and acting on when the connection is interrupted and there is no
reconnection in 5 seconds.
(3. Maybe put it in a different module, I'm not sure.)
Also, and this is of course extremely subjective, it just looks
out of place and very much "alone". Where is
writeEmailInDefaultClient(address)? Where is
openInAssociatedApp(file)?
I guess no one simply wrote them yet?
writeEmailInDefaultClient(address) is accomplished by opening the
"mailto:"~address URL.
The matter of protocols other than http needs some attention,
though...
4. I would design it so that if I do browse("foo.txt") it opens
foo.txt in the web browser. Correct me if I'm wrong, but it
currently seems that it will open it in the user's text editor
on Windows. (On POSIX systems, too, if $BROWSER isn't set.)
I don't know how you would accomplish that on Windows, without
accessing the association in the OS registry for e.g. the http
protocol. Might be better to change the documentation instead.
Exposing the specifics of whatever programming language you
are using to the end user?
I don't understand what you mean here. It's not exposing any
specifics if you don't implement anything in a way specific to
D.
You pass a string directly from a config file into a rather
low-level function in the programming language's standard
library without any kind of validation.
Running a program from another program should be that simple. I
don't think anyone expects to validate a command-line.