Wikipedia:Reference desk/Archives/Computing/2010 November 7

From Wikipedia, the free encyclopedia
Computing desk
< November 6 << Oct | November | Dec >> November 8 >
Welcome to the Wikipedia Computing Reference Desk Archives
The page you are currently viewing is an archive page. While you can leave answers for any questions shown below, please ask new questions on one of the current reference desk pages.


November 7[edit]

.sla extension on Scribus[edit]

I'm trying to open a .sla document on the latest Scribus version, but it says it doesn't support this file format. I know .sla is a Scribus file extension, so what is the problem? Thank you a lot. Leptictidium (mt) 10:59, 7 November 2010 (UTC)[reply]

Three possibilities spring to mind:-
  • 1 - The file has a .sla extension, but was created by another program that uses the same extension rather than Scribus
  • 2 - The file has had it's extension changed and is actually (for example) a .doc file
  • 3 - The file is corrupt.

Exxolon (talk) 11:26, 7 November 2010 (UTC)[reply]

The file in question is the Welcome to Wikipedia brochure, downloaded from the Wikimedia Bookshelf website. Is there any problem with the file? --Leptictidium (mt) 11:52, 7 November 2010 (UTC)[reply]
The outreach page you cite says the document needs Scribus 1.3.5, and indeed the header info in the file says "Version="1.3.5.1". 1.3.5 is newer than the standard version available for download from the Scribus site or in Linux package repositories. The outreach page also says where to get a sufficiently new version. -- Finlay McWalterTalk 16:16, 7 November 2010 (UTC)[reply]

Ping[edit]

-What is the use of Ping command in command prompt?

like, "ping wikipedia.com" ? Max Viwe | Wanna chat with me? 14:56, 7 November 2010 (UTC)[reply]

To test network connectivity, response time, status of a sites server, etc. The Ping article explains in more detail. 82.44.55.25 (talk) 15:01, 7 November 2010 (UTC)[reply]


you're playing pingpong with Wikipedia. (This means it must be configured to play pingpong -- not all servers are). The numbers you see are how long (in milliseconsd) the ball takes to get to Wikipedia and back. (1000 would mean it takes on second to go there and back). Normally ping is not recreational, it's just to see if you have a netwokr connection with the other side and how long it takes to get a virtual ping-pong ball (a small packet of data) there and back again. 84.153.212.109 (talk) 16:10, 7 November 2010 (UTC)[reply]

Python object creation failure idiom[edit]

I'd like to write

Thing = MyObject(...mymin,mymax...)  ## returns None if mymin ≥ mymax

if Thing:

but a moment's experimentation shows that this won't work: Thing receives an object even if MyObject.__init__ says return None. Several less elegant approaches occur to me:

  • Raise a custom exception.
  • Give MyObject a field self.valid, to be read only once.
  • Take the validity testing (typically more complicated than this toy example) out of MyObject.

What's the customary way? —Tamfang (talk) 20:05, 7 November 2010 (UTC)[reply]

I think it's really going to depend on context, and your example is a bit too abstract to clarify (I appreciate it's deliberately abstract). If constructing a MyObject with those parameters is bad (like asking for a new network socket with an invalid socket family) then that's surely a plain old programming error, and an exception is called for (and you do the caller a favour if it's as soon as possible - at the constructor, rather than returning an essentially useless object). If, however, an "invalid" MyObject isn't entirely useless (or that it might, by some other means, sensibly become useful) then maybe MyObject should have a state variable (I'm-useless-now, I'm-useful, I-used-to-be-useful). Some objects evolve (sockets do that), so if the bad condition is a temporary one, an exception doesn't seem appropriate. As a general rule, exceptions should be exceptional, and someone who reads the docs properly and upon whom fortune smiles should never see one (or should be able to avoid one without much effort). -- Finlay McWalterTalk 20:51, 7 November 2010 (UTC)[reply]
A related point, about custom exceptions. What kind of exception, or whether you need to define a bunch of different exceptions, is down to you thinking about what a caller would reasonably do with the different exceptions. If your code can raise three different types of custom exceptions, that means you think there are circumstances in which a reasonably caller would want to catch only one or two of those three; if they'll always catch only all or none, then they might as well all be the same type (and you can still stuff any relevant details into the exception object if needed). I occasionally see things that amount to the-first-parameter-was-wrong-exception vs the-second-parameter-was-wrong-exception, when surely wrong-parameter-exception would be all that's useful (with a value inside it, or just a string, saying which). -- Finlay McWalterTalk 21:00, 7 November 2010 (UTC)[reply]
The customary way is to raise a ValueError; that's meant for exactly this kind of situation, where the type of the function arguments is correct, but the values are meaningless to the function. Specify what went wrong in the exception message, e.g.
raise ValueError("mymin must be less than mymax")
--Link (tcm) 22:00, 7 November 2010 (UTC)[reply]
Yes, that's overwhelmingly true. Curiously the very example I randomly chose is the one thing I can find that, in the case of an obviously bad parameter doesn't - socket.socket(1234, socket.SOCK_STREAM) raises a socket.error. For everything else (in my epic 10 minute long quest typing stupid values into various Python functions) gets a ValueError every time. -- Finlay McWalterTalk 22:48, 7 November 2010 (UTC)[reply]
"but a moment's experimentation shows that this won't work"
That's not entirely true. You can easily make it work by assign a factory function which creates your objects, to the variable MyObject, so that the call MyObject() calls this function instead of the class directly. For all effects and purposes, it would work the same way as before, except that this function now has the option of returning None. --128.32.129.245 (talk) 01:02, 8 November 2010 (UTC)[reply]
The class method that creates a new instance is called __new__, not __init__. __init__ initializes an already-created instance, which it gets as an argument, and doesn't return anything. But I really don't think that you want to override __new__. You should either throw an exception from __init__ or make a separate factory function, as other people have already said. -- BenRG (talk) 10:15, 8 November 2010 (UTC)[reply]

Network Security[edit]

Hello. When I returned home, the wireless light on my modem was on, but my laptop was off and my peripheral hardware aren't connected wirelessly. Was someone trying to piggyback on my Internet? Thanks in advance. --Mayfare (talk) 22:36, 7 November 2010 (UTC)[reply]

At least for the Netgear and Linksys devices I've seen, the wireless light being on just means the modem's wireless function is enabled. If it's flashing that would suggest traffic (but I don't know if some random device somewhere innocently interrogating the networks it sees would make for much if any flashing). The best thing for you to do is to make sure you've got the wireless security settings turned on (WPA/WPA2, not WEP, not unencrypted). -- Finlay McWalterTalk 22:52, 7 November 2010 (UTC)[reply]