As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
What's the best operating system to study in order to write your own x86 operating system from scratch?
I think Minix was created for pretty much that exact purpose.
Have fun!
It might be difficult to comprehend the source for an entire OS all at once. The tutorials over at osdev.org have a few "bare bones" code samples to get you started.
I just wrote my version of x86 kernel from scratch! (for my OS class project) and that was experience I couldn't probably describe. You can find valuable resources at above link.
For my OS class in college we used the Nachos OS Project and implemented that. I did the C++ version, however I think there is also a Java port of this as well. I remember it being very interesting and learning a great deal, even though it was a lot of work.
It all depends on how you want your Operating System to function, if you want a microkernel you should probably study Minix 3, or if you want a monolithic kernel the current linux kernel is a good place to start from (HINT: look in arch/x86/boot, there is some very interesting code in there).
However I personally think that you should read through the Intel and AMD manuals, and then do a bit of reading on the osdev.org forums and wiki. They have plenty of code to study, and are generally helpful towards newbies.
Honestly, you should probably not start with an x86 architecture, or even operating systems but maybe something like an 8-bit starter kit, like a basic Fox11 development kit. In college, I wrote my first (and only) OS in Assembly for an M68HC11 processor (the one in the kit).
If you really want to build your own OS from scratch, you've got a long road ahead of you.
I think best way to read many different operating system sources, definitely osdev barebone tutorials, whitepapers on OS research and documentation on your target hardware.
I personally would recommend looking at l4-ka pistachio kernel, written in pretty darn good C++. There are also multiple smaller projects definitely worth checking out, like jimix or pedigree.
Best to stick around osdev forums and wiki - there is a lot of information there already answered - see http://forum.osdev.org and http://wiki.osdev.org
I read this article a while back. You might find it interesting. This guy wrote MINIX back in the day for the very purpose of teaching OS concepts. So it would probably be a good simple OS to study. http://www.cs.vu.nl/~ast/brown/
However, as Martin and Cory mentioned, it's a big chunk to chew.
There is not much point in studying obsolete OS's which is pretty much all current OS's as they tend to have long lives. Have a look at some fresh ideas (although based on tried and true) like Singularity
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I currently program mainly in C/C++ and Java. I have done little bits of other languages here and there, but I am not proficient in them. I typically just use eclipse for java, and Microsoft Visual Studio for C/C++. I have read a lot of people swear by emacs, yet I haven't really ever used it. I tried it once, but it seemed way more complicated than the editors I was already using, and I gave up on it. However, I am wondering if maybe I should give it another chance, but I want to know if you think it is worth me putting the time in to learn how to use it? Are the benefits that great? And will it still most be useful in maybe 4 or 5 years? I read it has been around already for over 20 or so years.
Also, I am not really skilled at all in unix or Linux or any of that. Would you recommend I learn it? And if so, why?
Emacs is highly worth learning. While I don't like slideshare, let me link you to what Matz had to say about this topic.
I think that it is definitely worth to spend time to Emacs. That is, if you have the time. The first 2 months you do not feel really in control, though every little bit you learn feels like a victory. Now, after 6 months, I am amazed with the possibilities and wrote so many little tweaks. Before, I never did any programming and now I wrote a small little package for Emacs. Life is great.
EDIT in 2019: I do not recommdend it anymore. There's a steep learning curve, and with the great editors available these days it is not going to be worth your time investment. Especially since the amount of people who will be able to add new functionalities to Emacs will decrease (Emacs-Lisp is a shitty language)
Knowing either Vim or Emacs is definitely a good thing. Even when I'm doing C# development in VS, I always keep an Emacs window handy for quick text transformations, log viewing, IDL editing, Git merges, etc.
If your programming experience is only with the C family of languages, the exposure to Emacs Lisp will certainly do you some good!
It depends what your goal is. If your goal is to become a better programmer, then no - emacs won't help you. However if your goal is to be more comfortable working with files and doing development on unix systems particularly on the command line - then yes, emacs is a fine editor to learn. Likewise for vi or vim.
Emacs will surely be around for a long time to come, just like many other editors on the unix command line. It won't go stale, so don't worry about that.
I would definitely recommend you learn a command line editor of some variety, since being comfortable on the CLI (command line interface) is a very useful skill for real world developers. Whenever I interview a candidate for a developer position, CLI comfort is a must-have.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Is LISP or something like Jess the best choice? I'm interested in writing a program that makes a suggestion based on users' answers. Computational considerations are not really a factor this is pretty much a pattern matching engine. Also I would like to make an app for this and put it up on the web.
UPDATE: I would like to put this up on a blog or website and let people use it from there. I guess my question then is there a particular inference engine that works with the .NET family, or PHP, or something to that effect? What are some of the pros and cons of each options etc.
Step 1. Pick an inference engine. There are many choices. Here's a list: http://en.wikipedia.org/wiki/Expert_system#Shells_or_Inference_Engine
Step 2. Use the language that interfaces with the inference engine.
You'll be much happier leveraging an inference engine for expert systems work.
I would like to put this up on a blog or website and let people use it from there
Trivial.
is there a particular inference engine that works with the .NET family, or PHP, or something to that effect?
Doesn't matter.
Here's the confusion. Your "web site" and your "inference application" have NOTHING to do with each other. Nothing.
Your web site can be done in any tool set you can find. It doesn't matter.
Your inference application can be done in any tool set you can find. It doesn't matter.
Your web site will invoke the inference application through any API that makes sense. The lowest common denominator in API's (the reason that none of these choices matter) is to do this.
Write your inference application as a stand-alone command line tool.
Write your web application to run the stand-alone tool, collect the output and turn the output into an HTML page.
Note that this multi-porocess implementation may be faster and make better use of multi-core processors. It forces the OS to manage the web server (Apache HTTPD, for example), the web application and the expert system as potentially three, separate, parallel processes.
You can also take a look at Prolog. SWI-Prolog (http://www.swi-prolog.org) is very complete and has an HTTP support library included (http://www.swi-prolog.org/pldoc/package/http.html). This paper might be helpful in using SWI-Prolog on the web ("SWI-Prolog and the web" http://dare.uva.nl/record/285350)
And, you can find a tutorial on building expert systems with prolog at: http://www.amzi.com/ExpertSystemsInProlog/
You will hear a lot of subjective opinions here, since few people have experience in more than one language writing expert systems.
I can recommend Common Lisp, as there is quite some literature and existing code available in this language, and it is a very powerful language and not too difficult to learn (read "Practical Common Lisp" by Peter Seibel). Of course, any new high level language requires some effort to learn. For the web application, you can use, e.g., Hunchentoot and CL-WHO, and there are a lot of database bindings (I like Postmodern and CL-SQLite).
I would suggest CLIPS and its .net port clipsnet
http://sourceforge.net/projects/clipsnet/
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I know that this is subjective and all, but still, can you provide some list of serious applications that were written in Lisp (perhaps along with what Lisp it is)?
Emacs.
At least parts of it are written in Emacs Lisp.
ITA Software's airline-fare search service. See here to understand why this is impressive.
LISP itself! :)
DART. A logistics app written in Common Lisp for the first gulf war, to free Kuwait from Saddam Hussein. One could say that the war started when this app was ready. The developers worked under intense time pressure to make it possible.
This single application is said to have paid back for all (!) US government investment in AI research.
I'm particularly fond of Maxima. Another nice project I've discovered relatively recently is Nyquist.
One of the most impressive Lisp applications is surely Cyc. Cyc is a project started by Doug Lenat that tries to put common-sense knowledge into a knowledge-based system. Not just a bit, but really really lots of knowledge. Humans have learned a lot of widely different things and it was seen a limitation to artificial intelligence software to not know anything of that. What is the typical color of honey? Do we sit on a chair or under a chair? A cup of fresh coffee is hot. When it rains outside, it does not rain inside. Sea water contains salt, but water in a pond does not. Most birds can fly. Some birds can't fly. It is surprising how many of these facts, rules and concepts people know.
Cyc is under continuous development since 1984 and the knowledge base contains (numbers are from 2004) more than 2.5 million facts and rules. It also contains more than 150 thousand concepts (similar to classes in OOP). Cyc is developed in SubL (a dialect of Common Lisp).
Knowledge is entered in CycL (a declarative logic based language). Specially trained people are entering knowledge. Cyc checks that this new knowledge is not in conflict with existing knowledge. It can also derive new conclusions and one can query it. For its answers it can also generate explanations. Cyc has also many domain-specific heuristics implemented.
In the early days the project started developing on Lisp Machines, but today the software is portable and is also available to interested students and researches (OpenCyc and ResearchCyc).
Lisp Machines were used by NASA to check Space Shuttle starts. From a Symbolics press release from 1990:
"Recently the National Aeronautical and Space Administration (NASA) used Symbolics'
high-definition technology to analyze HDTV video images of the
Discovery launch in real-time. This high-definition system enabled
NASA engineers to get an instant replay of critical launch systems.
The engineers were able to enhance and enlarge high-resolution images
of the lift-off in order to analyze the condition of and spot
potential problems with space shuttle tiles."
They used a bunch of Lisp Machines with special image processing boards.
Sawfish was GNOME's default window manager long time ago. Now they default to Metacity, but you may still use Sawfish (also standalone) and it is still actively developed.
Sawfish is very feature-rich and customizable. Just what you would expect from a LISP window manager.
What eventually became Yahoo! shopping was done with Lisp. See the original author's description
AutoCAD
G2
Yahoo Store
Obidos, The Original Amazon Web Server
This according to Steve Yegge.
http://steve.yegge.googlepages.com/tour-de-babel
Whitehouse Publication Server
During the Clinton administration a Lisp application was used to inform the US citizens about government news. The application was written in Common Lisp and ran on top of the CL-HTTP web server on two Symbolics Lisp Machines (later on the Open Genera virtual Lisp Machine). It also used the Statice object-oriented database. The application provided a taxonomy of government areas which could be queried with a web or an email interface for publications. For example citizens could find out what the vice president Al Gore said about environmental issues in a certain week. This was application was shut down by George W. Bush when he came into office.
Orbitz.com?
Another application I really like is PWGL.
PWGL is a visual programming language for computer aided composition and sound synthesis. It is a LispWorks application, which is available for Windows and Mac OS X (free download). It uses a lot of sophisticated graphics (done in OpenGL) for example in its advanced note editor. It can process and create sounds. It also can use Midi input and output. It comes with a really large amount of examples in its tutorial. If you have LispWorks, you can also load the binaries and write your own code using it.
The capabilities of the application are really amazing and if you are willing to learn its usage, it is hours of fun for the hobby composer and hobby sound designer.
Probably, not the most impressive, but really worth mentioning, considering, that it's mostly a one-man effort: http://piano.aero/
It's hard to say which Lisp software is exactly most impressive, but I would add Symbolics Genera and related software to the list of achievements worth mentioning. Also don't forget SLIME.
See this question for a list of many commercial uses of Lisp.
IRCAM's OpenMusic (computer-aided composition environment).
The matchmaking server for Zone: The Battleground is written in Common Lisp. Their website.
http://www.thanandar.de/
LISP, or at least the LISP evaluator.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
What is the average time that it would take a complete novice, whose background is mostly Windows XP, to go through the FreeBSD handbook and get sufficient mastery to setup a server from the ground up?
It's impossible to say. Not only is it highly dependent upon what sort of person you are, but it also depends on what exactly you are doing and how you define "sufficient mastery". Being able to get Apache operational is a simple matter of following step-by-step tutorials, you could do that in a matter of hours. Being able to run a multi-user server competently takes a hell of a lot longer, and the handbook isn't nearly enough.
It would depend on how much knowledge you have of unix, and from the sounds of things, you probably do not have a whole lot.
Assuming you have little knowledge of unix at all, I would say that it will probably take a few days to get a grasp of what is going on, and possibly a week to have something working.
The FreeBSD handbook is pretty detailed though, and does provide you with a good grounding of everything you need to do to get things to work.
I know that this sounds like an awful lot of time, but in my experience, they really are quite different OS paradigms.
You could start with PC BSD (an easy to use distro) to get a feeling of BSD and then move to more advanced stuff like setting up servers.
As others have noted, configuring a service to do a couple of things isn't very hard, you just have to follow some steps (which any monkey could do), but if you want more, you'll need extra time. A competent sysadmin does not know only the how, but also the why. Grandma can click all day in Windows and even if Windows Server has a GUI for server administration, it doesn't mean she can configure IIS or the DHCP service. By the way, it would be a good thing if you could learn an (Unix) editor, preferably vi, since it's the standard on BSDs; emacs, joe, pico are nice too, but they aren't so popular.
As for the time, it took about two days for me to configure a server. But I had previous Linux experience and the server didn't do anything fancy.
Look if you've never touched a Unix platform, you should learn a lot of things, basically a different philosophy. The FreeBSD Handbook and the community is simply wonderful, but a reference book like the FBSD handbook contains a lot of information that you must develop yourself.
Also, the BSD platform is not easiest of the Unix family to begin from zero.
Good sources to learn:
Absolute BSD book.
The Complete BSD book (this is for Release 5, it's good for learning also).
Man pages. The BSDs man pages are a LOT better than the Linux ones.
FreeBSD Handbook.
FreeBSD forums: forums.freebsd.org and daemonforums.
Any Unix/Linux resource you can get your hands on. Many things are compatible (or near-compatible). e.g, if your friend tells you "I've found an old SGI IRIX / HPUX or (insert unix here) manual that I will throw in the thrashcan" stop it and see what you can learn from it.
Keep in mind that you've a long road ahead. But you'll enjoy it.
Depends on your reading speed :-)
Depends on your needs (I mean: what kind of server).
Once upon a time I did this - installing a FreeBSD on x86- (although I had some Linux knowledge already at that time), and it took me 3 hours, mainly that much time, because I was working on another machine in parallel.
Depends on your background: Did you ever use power shell or other command line "applications" (like batches ;-). For me one of the greatest challenges to switch from a completely GUI'd operating system to an operating system that works best with a shell (something a little bit like the DOS prompt). But the moment you get the hang of it you'll be fine again.
Another aspect is the availability of a second computer beside the one you are setting up. If you can do web searches for additional information while in the midst of doing an install, it can save a lot of time.
As for the original topic, I've used Linux and Unix extensively, but have yet to get FreeBSD working after several tries over many years. I'd always get frustrated before I could get it fully installed and configured for a nice graphical desktop. (So personality obviously matters.) But it has been about two years since I've tried, and it may be simple now...
Please do not consider this a flame against FreeBSD... just a true story that for some reason I couldn't seem to make it work. If it were not a good OS, I wouldn't have attempted so many times.
If you're coming from a primarily Windows background, I think FreeBSD would be a great way to dive into UNIX, but you may also want to check out Ubuntu Linux-- specifically, Ubuntu Server.
Got a spare Pentium 4-based system laying around at home? Burn yourself a CD and go to it.
As a fan of FreeBSD myself, I have to second the recommendation for the "Absolute FreeBSD" book above-- another book worth a look is "Building a Server with FreeBSD 7."
My original rationale for choosing FreeBSD was getting better control over what gets installed-- I was really tired of installing RedHat and/or SuSE and having a few gigabytes of stuff I wasn't going to use installed as part of the base install that wasn't easily removed after the fact. I've grown rather enamored with the BSD way of doing things, but it isn't necessarily for everyone.
Something to consider-- if you have the hardware, run VMWare or VirtualBox, and set up a few virtual machines to get used to various distributions before making the commitment to install a particular one on bare hardware.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am new to any scripting language. But, still I worked on scripting a bit like tailoring other scripts to work for my purpose. For me, what is the best online resource to learn Perl?
If you already know a bit of perl, PerlMonks is a great online resource. You can ask questions in their Seekers of Perl Wisdom section and the answers are often of very high quality. Many people who keep up with the latest developments in Perl hang out there.
As an added bonus, if you ask a clear question, many times the people there take the time to look at the underlying problem and will point out alternate approaches rather than simply taking your question at face value.
I realize that the question is about online sources, but I taught myself Perl in about three weeks thanks to the following books:
Learning Perl
Intermediate Perl
I already had a little bit of background knowledge in C, but the way these books teach is phenomenal. Scripts I've written in Perl are currently powering the data analysis process used by some instrument teams on the UA/NASA Phoenix Mars Lander - and I'm a junior in college! If it's good enough for NASA, it's good enough for you :)
The perldoc documentation is the best source for understanding how to use the language well.
The camel book "Programming Perl" is an excellent printed reference with thorough explanations written by the same people who wrote the perldocs (other books with animals on them are mostly ok.) Beware online tutorials - many of them teach very sloppy perl.
Use 'warnings' and 'strict' - then perl will be very helpful in pointing out your errors.
Perlmonks is also great (they will also tell you to use 'warnings' and 'strict'.)
And then you have to learn the CPAN one module at a time (which is where perlmonks and mailing lists are very helpful.)
http://learn.perl.org/
From the Online Library:
Beginning Perl
Impatient Perl
I highly recommend starting with Simon Cozens' Beginning Perl book.
And also, reading the Perl documentation.
Perl is in a state of (comparatively) rapid change, and has gotten into the position where the best documentation beyond a basic introduction to Perl 5 -- the current major version -- is the electronic documentation which comes with the language itself.
Read 'perldoc perlintro', then look to 'perldoc perl' for the rest of the core language documentation. Note that on Debian systems, you'll need to 'apt-get install perl-doc' to get this documentation.
Once you've got a handle on things, check out 'perldoc perldelta' to see what's new in the version of Perl installed on your system (which should be 5.8.8 or 5.10 these days -- much cool stuff in 5.10!). If the perldelta page isn't making any sense (and believe me, I remember how that feels), just come back to it later.
Finally, freenode #perl for questions you can't find answers to in the docs.
The Official Perl 5 Wiki is a great resource with lots of info and links, and it aims to be beginner-friendly.
Also see the bottom of the wiki home page for the latest headlines from the Planet Perl feed aggregator. It's useful to skim over every few days, because it sometimes answers questions that you didn't know enough to ask, but which you should be asking.
I would very much recommend Programming Perl, but beware you may need a subscription to Safari in order to read it online.
As other people noted, the online book Beginning Perl has a good reputation and is written by a very clueful expert and active Perl contributor. Other than that, I concentrated resources for beginners in the Perl Beginners' Site, and you can probably find something there that would be to your liking.
If you are a beginner, I would suggest you take a look at the cookbook provided by PLEAC. You can find it at http://pleac.sf.net. There you can find cookbooks for most languages.
A new resource is chromatic's Modern Perl, which is available for free online, though you may purchase a paper copy if you prefer.