Wikipedia:Reference desk/Archives/Computing/2010 April 22

Computing desk
< April 21 << Mar | April | May >> April 23 >
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.


April 22

edit

Running Mac OS X software on Windows

edit

Is there any way I can run Mac OS X .app files on Windows, like -- but not using the same method as -- WINE lets Windows programs execute on Linux, Mac OS X, and BSD? --72.87.89.95 (talk) 02:43, 22 April 2010 (UTC)[reply]

You could always run OSX in a virtual machine. [1] 121.72.202.170 (talk) 09:26, 22 April 2010 (UTC)[reply]

Legaly? —Preceding unsigned comment added by 85.183.20.88 (talk) 11:48, 22 April 2010 (UTC)[reply]

See Hackintosh. It's technically possible, with some work. It violates Apple's EULA, which might make it illegal (and might not, depending on jurisdiction, enforceability of EULAs, etc.). --Mr.98 (talk) 11:57, 22 April 2010 (UTC)[reply]

wiki markup

edit

What is the wiki markup to cite articles on other wiki projects? 71.100.1.71 (talk) 03:56, 22 April 2010 (UTC)[reply]

See WP:CT -- kainaw 04:47, 22 April 2010 (UTC)[reply]
I can not find the current syntax for creating inline reference for a Wikipedia sister project.
In the past such references were entered as '''[[w/name of article]]''' .
What is the current syntax? 71.100.1.71 (talk) 05:29, 22 April 2010 (UTC)[reply]
I think WP:IW is what you are looking for. Winston365 (talk) 05:54, 22 April 2010 (UTC)[reply]
Here is how it is done. [[United States]] leads to the English language article, while [[:fr:États-Unis]] leads to the French language article. Similarly, [[:wikt:united]] leads to the definition of the word "united" at Wiktionary. Astronaut (talk) 23:55, 22 April 2010 (UTC)[reply]

server services

edit

Seems like most servers have very upfront services like a time service or quote service. Do any of the server operating systems include a calculator service or similar type services? 71.100.1.71 (talk) 07:56, 22 April 2010 (UTC)[reply]

bc is a command-line accessible calculator. It would be easy to make this accessible over the network, if that was so desired. Nimur (talk) 12:15, 22 April 2010 (UTC)[reply]
I would tend to think there would not be much demand for this, because any computing device can easily be programmed to calculate something, whereas not every computing device knows what time it is. Comet Tuttle (talk) 14:09, 22 April 2010 (UTC)[reply]
There are quite a few irc bots that can do things like that (example). Turning one into a more generic socket listener should be straightforward, but I can't see why anyone would want to. If you've got a computer to connect to the server with, why not just run a calculator on it directly? There are of course also services like Google Spreadsheets, which could be viewed as fancy online calculators. 66.127.53.162 (talk) 22:27, 22 April 2010 (UTC)[reply]

Like other RFC's for testing and measurement purposes. 71.100.1.71 (talk) 10:53, 23 April 2010 (UTC)[reply]

Learning to write a compiler (or at least a language parser)?

edit

At work, we have an application that requires users to write programming code in a relatively obscure language. This programming language is somewhat verbose, reminiscent of COBOL. Nobody likes this language so we want to create some sort of graphical front end that would allow users to define their programming logic without writing any logic (aside from mathematical formulas). The code that they write is relatively simple in that they're not full-blown applications. Basically, they write the equivalent of what typically goes inside of a function. For example, the users might write something like this:

//psueduocode
loop for each item in list
	if variable1 >= variable2 - variable3 then
		call pre-defined-function("error")
	end if
end loop

There's no OO or anything like that to worry about. The only thing we want users to have to write by hand are mathematical formulas, similar to the manner that users enter formulas in Excel.

The problem is that I've never written a compiler or a language parser. So, I want to learn how to create one from scratch.

So far, my Google/Bing searches haven't come up with a lot of useful information. I've found plenty of resources on how to use, for example, lex and yacc.[2] But I don't necessarily want to know how to use lex and yacc, I want to know how to create one myself from scratch. So, basically, I'm looking for a beginner's guide on how to create a language parser. Something that walks me through the process step-by-step.

So far, the best resource I've found are these lecture notes.[3] Unfortunately, it only briefly describes lexical, syntactic and semantic analysis and then jumps into using a pre-made tool.

Note that I don't need to generate any machine code. It's the language parser that I'm interested in.

I'm wondering if I would be a good idea to order university textbook on compiler design.

If anyone has any resources or advice, I'd greatly appreciate it. A Quest For Knowledge (talk) 13:31, 22 April 2010 (UTC)[reply]

Pretty much the standard textbook in this field is Aho, Sethi, and Ullman's Compilers: Principles, Techniques, and Tools (nicknamed The Dragon Book); if this has any failing it's that it doesn't have a lot of concrete code in a real language (it's deliberately trying to present ideas rather than acres of sourcecode). A popular alternative is Andrew Appel's books Modern Compiler Implementation in C, Modern Compiler Implementation in Java, and Modern Compiler Implementation in ML (pretty much the same book but written to meet the expectations of people familiar with those concrete languages). -- Finlay McWalterTalk 13:42, 22 April 2010 (UTC)[reply]
If you are looking for some very simple examples, take a look at my course page for CSC519. It has a simple, hand-written C parser for a small, but Turing-complete language. Compiler discussion starts on page 61 or so of the lecture notes, the concrete example is discusses starting on page 144. --Stephan Schulz (talk) 13:54, 22 April 2010 (UTC)[reply]
In practice lexical analysis isn't very hard. Syntax analysis can be, depending on the language - you generally express the syntax formally in Backus–Naur Form, and then construct a parser (very often a LALR parser) to turn the token stream into an abstract syntax tree; as the LALR article notes, generating that parser from the BNF can be a bit scary (which is why so many people use a LALR parser generator like yacc to do it). With the syntax tree you have a reasonable representation of what (you think) the programmer "meant"; it's the basis of validation, interpretation, or code generation. -- Finlay McWalterTalk 14:08, 22 April 2010 (UTC)[reply]
You might be able to solve the problem of people not wanting to type in verbose repetitive commands by simply using an editor with an auto-complete function. Or, it could work like a wiki editor and have icons to add predefined content. So, you may not need to write your own compiler. StuRat (talk) 14:09, 22 April 2010 (UTC)[reply]
Wait -- lex and yacc are tools for creating compilers; you probably don't need to create a new lex and yacc (there are a lot of different compiler-compilers out there if yacc doesn't do what you want). You feed a description of the language into yacc, and it creates a C program that parses the language.
You might want to consider embedding an existing language, rather than writing your own. It might be harder (but might be easier!) to do than to write an ad-hoc language, but growing an ad-hoc language can be very difficult. I understand that Lua is often used for embedding. You can also embed Python, and probably a whole lot of other nice languages. (This also has the advantage that complete documentation for the language will already exist.) Paul (Stansifer) 14:16, 22 April 2010 (UTC)[reply]

Thanks to everyone for their help and suggestions. I have a lot of reading to do this weekend. :) A Quest For Knowledge (talk) 11:59, 23 April 2010 (UTC)[reply]

You should read Structure and Interpretation of Computer Programs, which you can view online for free. But frankly, writing your own extension language doesn't sound like the right thing you should be doing with your work time for a production project. You're much better off embedding something that's already designed and used, like Lua or Python or even Javascript. Writing a compiler as a personal project is great fun, of course. Every programmer's dream used to be to write the Great American Compiler. A newer and more theoretical book is Practical Foundations of Programming Languages[4] by Robert Harper. 69.228.170.24 (talk) 07:10, 24 April 2010 (UTC)[reply]

c program (English dictionary)

edit

I am a b tech 2nd semester student. I have to prepare a mini project in data structures in c having lines of code=1500!

I wish to make a normal english dicitionary using file handling n linked list..can anyone of you suggest me proper coding for that as i am a beginner in C and lack few general concepts..Supriyochowdhury (talk) 14:03, 22 April 2010 (UTC)[reply]

I hate program assignments that specify the number of lines, as this encourages inefficient coding.
You will need a large (100,000 ?), alphabetical list of English words and definitions in a data file (CSV format would be good). You need some easy way to get this file, as obviously you can't type it in. Then I suggest a binary search for the word that's typed in.
A simple look-up program seems more like a 50 line program than 1500, though. Now, if you add code to allow you to edit dictionary entries, add them in alphabetical order, delete them, provide links to other entries, synonyms, antonyms, use different dictionaries (US vs UK English) etc., then you might get to 1500 lines.
Also note that the entire dictionary may be too large to fit into memory, so you might want to break the data files down, by first letter of the word, or some other method. StuRat (talk) 14:19, 22 April 2010 (UTC)[reply]
C programs are whitespace-insensitive, so the number of lines of code are literally irrelevant. It is possible to have 1500 non-blank lines, each containing a single character or keyword, at the expense of readability. Similarly, one could conceivably write a very large project as a single line of C code (at the expense of readability). It would be better to specify the features you need than to specify an arbitrary number of lines. In fact, you can write any C program, and then add or remove newline characters until it is exactly 1500 lines. If a professor is being intentionally pedantic, they should specify "at least 1500 lvalue assignments" - which would be similarly meaningless from a design point of view, but at least has a precise meaning in terms of implementation. If you are seeking additional features for your dictionary program, you might want to write a text-processing utility to scan a file, analyze its contents, and reprint them so that the contents occupy exactly 1500 lines. When you are done, test it by running that processor on a copy of your source-code, and then recompile the output. You can market it as a "1500-line-dictionary-generator," with the added bonus feature, "works on non-dictionary text files too." Nimur (talk) 15:21, 22 April 2010 (UTC)[reply]
In direct response to the original poster, consider reading linked list, and binary search algorithm (useful for dictionary lookup - so plan your linked list implementation carefully!). Also be sure to check out the excellent wikibook, C Programming, particularly the introductory section on Strings and the in-depth string manipulation chapter. This is the toolkit that a C programmer has for text processing - it is very powerful, and it is good to know what is already available so that you don't waste time writing it yourself. And while we're providing useful links, here is Project Gutenberg's free, free version of an English dictionary: Webster's Unabridged Dictionary pg.1-100, pg.100-200; and the unabridged version in many separate text files. Nimur (talk) 15:36, 22 April 2010 (UTC)[reply]
If you are trying to come up with a project, I suggest this as it is a dictionary-like project, will fill the number of lines of code (if done well) and is somewhat useful. First, get a dictionary of words that you want. By "dictionary", I simply mean a list of words - no definitions. Now, use an indexing algorithm like soundex to sort the words into a hash table of arrays. With the hash of word indexes, you can perform the following rather common function. A user types in a word. You index that word using the same algorithm you used to index the dictionary. You now know which array of words to use because you go to that index in your hash table. Next, use a similarity metric (like a modified Levenshtein distance) to measure the similarity of the word the user typed to every word in the array. If you have a perfect match, no problem. If there is no match, show the best matches as a "did you mean" list. -- kainaw 16:04, 22 April 2010 (UTC)[reply]
The other answers have provided good guidance on your project, but first you might want to seek clarification from your professor... did they say "write a program of exactly 1500 lines" (IMHO, that sounds like a lot to demonstrate you have learned enough about data structures), or did they say "write a program of no more than 1500 lines" (which sounds like the kind of thing a professor would say). Remember, your professor has got to read and evaluate your program, and those of the other students too, and they only have a short time in which to do that. Astronaut (talk) 00:09, 23 April 2010 (UTC)[reply]

Shortcut

edit

I want to make a shortcut to a program that will remember the program when used on use drive and different drive letters. However, standard windows shortcuts do not understand "./" and give an error when I use that. Are there any third party programs that can make persistent shortcuts that work on any drive letter etc and understand "./"? 82.43.89.71 (talk) 14:43, 22 April 2010 (UTC)[reply]

Perhaps you could write a batch script, or a simple Windows script, to check for the correct program location? Then, your shortcut would point to the same location (the script); the script could intelligently redirect and execute the desired program from a set of possible locations. Nimur (talk) 15:07, 22 April 2010 (UTC)[reply]
if exist e:\program.exe    e:\program.exe
if exist f:\program.exe    f:\program.exe
if exist g:\program.exe    g:\program.exe
This script will check for the program.exe in several locations and execute it only if it exists. You can modify it (fairly straightforwardly) and save it as a .bat file. (Note that this script does not do any kind of error-checking or verification; you could add such features as you need). Nimur (talk) 15:10, 22 April 2010 (UTC)[reply]
Are you sure you can't map the drive to a particular drive letter? You can use diskmgmt.msc to set drive letters, and if you choose a letter far out in the alphabet it shouldn't conflict with any other drives. I do not understand your reference to "./" but to refer to something on the same drive as the current directory, you can use for example "\windows\notepad" to execute Notepad from a working directory anywhere on drive C. Jørgen (talk) 19:48, 22 April 2010 (UTC)[reply]
USB drives on other peoples computers almost always have different drive letters ranging from E:\ to K:\ and anywhere in between. Often these computers also have limited rights so I can't just start mapping drive letters and stuff. The reference to "./" just means in computer talk the current directory. But unfortunately as I said Windows shortcuts don't understand this 82.43.89.71 (talk) 06:26, 23 April 2010 (UTC)[reply]
[5] while rather old didn't find anything much more useful then discussed here. The thought did occur to me that if the USB drive is NTFS you could use an NTFS symbolic link for most purposes. Also not really a solution but I'm guessing if the path changes Windows may still be able to find the new path if you use the find target option, but this requires more clicks and other such issues. BTW, I wouldn't use ./ on Windows. Since Windows uses the reverse slash, some programs may understand it, but many will not (*nix based programs like Cygwin may prefer or require it of course). Try .\ instead although this won't help with shortcuts. Nil Einne (talk) 07:49, 25 April 2010 (UTC)[reply]
Alternate fix for this Infamous Windows Annoyance: One way around this annoyance in Windows is to create a standard directory structure that you always use 100% of the time. The trick is to set up something that you are guaranteed to have access to. For example, create a c:\myhome directory.
Then, for the second part of this workaround, you use symbolic links, so that whatever drive you are interested in is always reachable from c:\myhome. The symbolic links will make it so accessing c:\myhome is the same as accessing e: f: g: or whatever. NoClutter (talk) 22:55, 26 April 2010 (UTC)[reply]

I want to generate a Doxygen doc, but my starting point is a GraphViz graph (.dot). I have both programs installed and working.

The end result should be something like [6], where the nodes have html links. How can I do it?

An example of what I want can be seen at the Doxygen page here. I need that, but with hyperlinks.--ProteanEd (talk) 16:02, 22 April 2010 (UTC)[reply]

Download countdown timer

edit

How would a download counter timer be programmed? For example, when you're downloading something on the computer and it sometimes says 'time remaining' which changes as the download progresses. How does the computer know roughly how long the download will finish? Please do not be too technical, I know some things about computers but not in-depth programming techniques. Chevymontecarlo. 19:00, 22 April 2010 (UTC)[reply]

How is a download timer usually programmed? Poorly.
That out of the way, the simple approach, is to take the current download speed (say, 10kilobytes per second) and divide by the size of the portion of the file not yet downloaded ( say, 1000 kilobytes ) and you've got your answer in seconds. (In this case, 1:40).
The problem here is that your download speed can fluctuate. Often wildly fluctuate. The trick is to try to use some sort of intelligent averaging technique. APL (talk) 19:09, 22 April 2010 (UTC)[reply]
Obligatory xkcd link: The author of the Windows file copy dialog visits some friends. Comet Tuttle (talk) 19:17, 22 April 2010 (UTC)[reply]


APL - yes it seems that the estimates are wildly inaccurate when the download starts and then as the download progresses the estimates get better. Thanks for that overview. Chevymontecarlo. 19:23, 22 April 2010 (UTC)[reply]


Comet Tuttle - hahah yeah lol! :D Chevymontecarlo. 19:24, 22 April 2010 (UTC)[reply]
Moving average is one of the simplest techniques. By selecting a proper parameter, even the simplest type - a "single-tap" moving average - can be reasonably accurate. More sophisticated estimators may use heuristic or other averaging algorithms to generate more accurate guesses. No matter how intelligent an algorithm is, it can only be reasonably accurate if there is a certain degree of uniformity or predictability to the transfer speed. Nimur (talk) 19:27, 22 April 2010 (UTC)[reply]

Some TLDs are valid DNS names by themselves, but Mozilla Firefox doesn't know it

edit

I learned today that some TLDs are valid DNS names by themselves, and thus also valid URLs. For example, to is a valid DNS name, with the IP address 216.74.32.107.

As such, http://to/ is a valid URL, consisting of the front page of a URL shortener. But if I enter that URL into Mozilla Firefox, it absolutely insists on instead taking me to http://www.to.com/ which is a some sort of German industrial company. I absolutely hate it when programs think they know what I mean better than I do. How can I make Mozilla Firefox realise that when I say http://to/ I mean to and not www.to.com? JIP | Talk 20:42, 22 April 2010 (UTC)[reply]

The page you're talking about is at http://to./, not http://to/. Typing to. into the address bar works fine in my Firefox. Algebraist 20:50, 22 April 2010 (UTC)[reply]
Does this mean I have misunderstood the relationship between DNS names and URLs, that http://insert DNS name here/ is not a valid URL for all valid DNS names? host to has no problems finding the server hosting the URL shortener, but wget http://to/ doesn't work any better than Mozilla Firefox. wget http://to./ works, though. JIP | Talk 20:56, 22 April 2010 (UTC)[reply]
On the same linux platform as below, nslookup to, dig to, and wget to all work as expected. -- Finlay McWalterTalk 20:59, 22 April 2010 (UTC)[reply]
Firefox 3.5.9 (ubuntu-linux=canonical) is perfectly happy with one entering simply "to" into the url box, or clicking on http://to/ and both take me to the to URL shortening service. Opera, Chrome, and Konqueror on the same platform also work fine. I don't need to add the auxiliary period that Algebraist mentions. Perhaps you have some extension or toolbar that is "helping"? -- Finlay McWalterTalk 20:52, 22 April 2010 (UTC)[reply]
My browser is now behaving as you describe. When I made my post above, it failed to find anything when clicking the link and (understandably, since it thought http://to/ was invalid) went to www.to.com when I entered to. How odd. Algebraist 21:00, 22 April 2010 (UTC)[reply]
No, I use FireFox 3.5.9 on Fedora 12, with no "helpful" extensions. Entering to into the location bar takes me to a Google search. Entering http://to into the location bar takes me to the http://www.to.com site. Clicking on the link to http://to gives me an error message about Firefox not being able to find the server at "to". With the period, everything works. Entering http://to./ (with or without the trailing slash) or clicking on the link takes me to the URL shortening service. Is this some problem with Firefox 3.5.9? JIP | Talk 21:01, 22 April 2010 (UTC)[reply]
Then it may be your ISP's DNS server that's trying to be helpful. Find the IP of that server (your router will know), call that X, and compare the results of:
          dig @208.67.222.222 to
          dig @X to
where that first IP is the OpenDNS server. If X's reply is to google or whatever, there be the problem. -- Finlay McWalterTalk 21:13, 22 April 2010 (UTC)[reply]
Both commands give me the exact same result. So it's not the DNS server that is the problem, but the applications. JIP | Talk 15:20, 23 April 2010 (UTC)[reply]
Firefox has several features which override your exactly-typed URL, including: Smart Keywords, Searching from the Location Bar, and Domain Guessing. Each of these must be disabled in order to guarantee that your Firefox will not "assume" anything about your URL. I have ranted about this many times: most recently, it seems, December 2009 - with instructions on how to disable these annoyances. I regularly surf on a private network with a privately operated DNS system, and it is extremely irritating that Firefox assumes that if I typed nimur, I want http://www.google.com/search?q=nimur. I actually wanted http://nimur, which is perfectly valid on my network (while "google.com" does not exist and yields a "server not found" error). Nimur (talk) 02:18, 23 April 2010 (UTC)[reply]
After looking it up with [7], [8] will work because "to" is now in your DNS cache, associated with an IP address. Assuming you're on Windows, you can open a command prompt and run "ipconfig /flushdns" (on linux restart nscd), which will clear your cache, and Firefox will again forget that it's a valid URL. Interesting stuff. Also, in case anyone wasn't aware, putting a dot at the end works because it explicitly states that you're typing a FQDN, not an unqualified hostname (which your resolver will append your domain suffix to). Indeterminate (talk) 08:57, 24 April 2010 (UTC)[reply]

What do you call the yellow triangle?

edit

[9]

Occasionally it appears in the lower left corner of the screen beside the message "Done, but with errors on page".Vchimpanzee · talk · contributions · 20:58, 22 April 2010 (UTC)[reply]

It is a generic warning icon. -- kainaw 21:39, 22 April 2010 (UTC)[reply]
It is probably derived from warning signs used for automobiles. --Mr.98 (talk) 21:49, 22 April 2010 (UTC)[reply]
Wikipedia doesn't have anything about its use with computers?Vchimpanzee · talk · contributions · 22:35, 22 April 2010 (UTC)[reply]
No, because any software application could use it in a different way. What browser are you using that shows you it? (Go to the Help menu and choose "About Internet Explorer..." or "About Mozilla Firefox" or whatever.) Comet Tuttle (talk) 23:13, 22 April 2010 (UTC)[reply]
In Windows it is part of the generic message box icon set (along with the X in a red circle, question mark in a speech bubble, and "i" in a speech bubble). It's one of a couple icons programmers can choose to convey their messages. It doesn't have specific, system-wide use, other than generally meaning "something important but not necessarily critical." --Mr.98 (talk) 00:40, 23 April 2010 (UTC)[reply]
The Windows development environment calls it both the "warning" icon and the "exclamation" icon - both of which make sense. --Phil Holmes (talk) 08:58, 23 April 2010 (UTC)[reply]
Variations of this are common: commons:Category:Yellow triangles. PrimeHunter (talk) 18:12, 23 April 2010 (UTC)[reply]
(Edit conflict) I went to my computer's help screen and typed in "yellow triangle" but didn't get anything useful. "Done, but with errors on page" helped even less. That's when I most often see it. "Done" didn't give me anything.Vchimpanzee · talk · contributions · 18:14, 23 April 2010 (UTC)[reply]
Again, could you tell us what browser you are using? Also, could you point us to one of the web pages giving you this error? The problem is almost certainly just going to be buggy HTML code on the web site you are visiting; this is all over the Web, due to sloppy developers. Comet Tuttle (talk) 20:13, 23 April 2010 (UTC)[reply]
Internet Explorer 8, but I think I saw it on Firefox too at a library. The problem refers back to this question, but I was wanting to research the symbol just out of curiosity.Vchimpanzee · talk · contributions · 20:18, 23 April 2010 (UTC)[reply]

Or try this.Vchimpanzee · talk · contributions · 21:17, 23 April 2010 (UTC)[reply]

OK, I visited that web page and I do see the yellow triangle error icon in Internet Explorer. As someone mentioned in the previous thread you pointed to, and as I mentioned above, this just means there is an error in the source code of the web page. This is because the coder who wrote the web page was sloppy. (It actually could be the fault of lack of testing some unusual case; but it's probably the coder's fault.) It's nothing to worry about on your end, though it might indicate that the web page is not working the way the coder wanted it to work. Comet Tuttle (talk) 22:53, 23 April 2010 (UTC)[reply]
Additionally, you can double click on the "Done, but with errors on page" message in the status bar to bring up a dialog box that shows the errors on the page. (By the way, the error dialog box refers to the icon as the "warning icon" when it tells you how to double-click the status bar to show the message in the future.) --Bavi H (talk) 07:12, 25 April 2010 (UTC)[reply]
Thanks, I was told to do that here and in some cases it has been helpful. My main purpose was to find out what it was called.Vchimpanzee · talk · contributions · 18:50, 25 April 2010 (UTC)[reply]

Kenny Kerr

edit
  Resolved

What is the difference between this and this Kenny Kerr? Is it the same person? --Andreas Rejbrand (talk) 21:32, 22 April 2010 (UTC)[reply]

I think it is the same person. --Andreas Rejbrand (talk) 23:29, 22 April 2010 (UTC)[reply]