I'm not thinking about a conventional data center, but of self-contained, self-powered autonomous units sprouting up (as you put it) from the sand like cacti. I would expect these devices to be cooled by convection.
I thought that cooling would be less of a problem, because with land on a desert being cheap there would be no need to pack the processor boards closely together. You would need to occupy a large area with solar panels, so why not distribute the computers sparsely under their shade. A 200 W photovolatic panel takes up 1.4 sq m (15 sq ft). Therefore, for a 1000W server you would need 7 sq m (75 sq ft) of panels; I doubt the extra heat generated by the server would be an issue in such conditions.
With electricity costs being a dominant factor in the selection of a data center's location, building one in a sunny desert begins to make sense. You use solar power for the servers; for round-the-clock operation you build centers around the world. Unlike electricity, bits are easy to transport from the place where they are produced to the place where they are consumed.
I don't know if thinkfree will continue to have to temporarily shutdown its website, thereby making your documents inaccessible, but do note that it *is* still in beta. I don't think the fact that they have to make updates makes them less trustworthy.
The fact that they had to shut down the site for updates is an indication that they haven't solved the (difficult) problem of performing live software and hardware updates. This looks to me like a fundamental design constraint of their solution, rather than a bug that can be addressed in a beta-testing cycle. Other internet-based service providers, like Google, Akamai, and (to a limited extend) Wikipedia, addressed this problem from day one. (Wikipedia reverts to a static browsing mode during some update operations.)
As I said, the reliable operation of a service is a difficult problem. At the Second Workshop on Real, Large Distributed Systems (WORLDS '05) Mike Afergan and his colleagues presented a very interesting paper detailing the design methodology used to achieve commercial-quality reliability in the Akamai content delivery network. As they write in the abstract, the Akamai network consists of 15,000+ servers in 1,100+ networks and spans 65+ countries. The paper makes very interesting reading.
"The web site will be unavailable from ...
on
ThinkFree Online Review
·
· Score: 2, Insightful
... 3:00 AM to 8:00 AM PDT on April 25. We apologize for the inconvenience"
is the wording on a banner currently appearing on the thinkfree web site. Am I the only one feeling nervous about having my documents residing on an application service provider where their accessibility is beyond my control?
Either Gates doesn't know what the project is about, or he pretends he doesn't. Gates said:
"The last thing you want to do for a shared use computer is have it be something without a disk... and with a tiny little screen,"
However, the $100 laptop is not a shared computer.
In fact, the goal of each child having ITS OWN computer is an explicit goal of the project.
Why is it important for each child to have a computer? What's wrong with community-access centers?
One does not think of community pencils--kids have their own. They are tools to think with, sufficiently inexpensive to be used for work and play, drawing, writing, and mathematics. A computer can be the same, but far more powerful. Furthermore, there are many reasons it is important for a child to own something--like a football, doll, or book--not the least of which being that these belongings will be well-maintained through love and care.
Gates also said that big costs come from network connectivity, applications and support.
The argument that applications are more expensive than hardware is similarly disingenious: if you pay Microsoft their extortionate retail prices, yes applications are expensive. The same goes for support: paid support is expensive, community-based support is cheap.
Mobile operators are also moving in the same direction with the unlicensed mobile access (UMA) technology. With UMA you'll be able to make calls with your mobile phone through a Wi-Fi network. The operators know that this will eat into their wireless revenue stream, but they hope to recover the losses from a higher usage (you'll be using your mobile phone at home). So the real question is the choice between Microsoft's (nonstandard?) VoIP version and UMA.
You got it slightly wrong. Traditional CCD sensors have a color resolution one third of the stated pixel resolution, which (through filtering) applies to luminance. In the X3 CCD color and pixel resolution are them same. Keep however in mind that our eye also has a significantly higher luminance resolution (rods) than color resolution (cones).
Also, cameras that capture precisely all three colors are still only matched to our limited human vision. The red, green, and blue colors are simply the colors that our cones can distinguish; our cameras and display processes are only good enough for what we humans can see. Important image information is lost every time we take a picture.
Nobody who has read Bakan's book
The Corporation: The Pathological Pursuit of Profit and Power
should be surprised by this development.
Despite Google's You can make money without doing evil
philosophy, its executives have a legal obligation toward its shareholders
to maximize profits, in any legal, but not neccessarily ethical, way.
Any other strategy could be seen as betrayal of their fiduciary duty and could, in theory and subject to the limitations of the business judgment rule, expose them to legal action.
One could claim that doing business in China in the way Google decided to do it was not a smart business move, but that is an entirely different story.
I read my comment again, and realize you're absolutely right. I overstated the advantages of interval arithmetic. I should have phrased it as follows.
If you can't afford to perform error analysis, using an interval arithmetic package will often provide you with a reliable indication on the confidence you can place on the results of your calculation.
I agree that error analysis isa very deep speciality, and therefore programmers not versed in it need every help they can get to produce reliable results, without having to rely on it. The IEEE 754 standard has helped a lot in this area.
Rounding towards the nearest neighbour is the default and ubiquitously used rounding mode. The complementary rounding modes (round toward -+ infinity or 0) are useful for doing calculations with interval arithmetic: a calculation can be performed twice with opposing rounding modes to derive an interval value for the result. If all operations are performed in this way, the final result of a complex calculation is expressed as an interval providing the range in which the real value will be (remember, often floating point numbers only approximate the real number). Using such a package can save you the trouble of performing error analysis. An article in the Journal of the ACM provides the details for implementing this feature.
In the future the client could fetch material, not from Google's cache, but from an idle Web Accelerator client of a nearby computer. Thus Google can gain traction and momentum to deploy a Google-controlled peer-to-peer content delivery network.
This can then be used for delivering content that really requires a lot of bandwdith, like video.
By aggregating web requests from millions of users Google can not only create smarter prefetch algorithms, but also deliver better search results, and even suggest personalized interesting content. Think of it like the web's TiVo.
Google seems to have found a way to use
network effects to gather the visiting habits of all the world's web surfers. The value of this data is priceless. Google's army of Computer Science PhDs is definitely not sitting idle.
I discuss revision control systems in Chapter 6 of the Code Reading book, titled Tackling Large Projects. I also present revision control in the elective course Software Comprehension and Maintenance I am teaching. In that course students have to contribute to an open source project, in order to pass the course.
You are right, version control should be part of "programming" education, and should probably be taught in a software engineering course.
I am glad somebody has pointed out the lack of progress in the palmtop market. My 12-year old HP-100LX is literally falling appart, yet I can not find a worthwhile replacement.
Things I am missing from the current generation of Palms, but I find as built-in features on my [tr]usted HP-100LX are:
A rechargable battery that runs for about three weeks.
The ability to plug in standard AA bateries when the rechargable battery runs out.
A plain vanilla 12V charger port and a backup batery when the two options fail. (In 12 years I have only lost data once, when the machine fell from my bike in a shallow water ditch).
Real (though not preemtive) context switching. When I enter one application, the other one is suspended in the state it was, and will be resumed at exactly the same state when I return to it.
An industry standard file system (FAT), and support for cheap standard PCMCIA memory cards.
A complete spreadsheet (not just a viewer) that includes macros, and graphs.
A customizable database supporting complex queries and a visual form builder.
Customizable calendar, phone book, and note-taking applications, based on the above database.
A scientific and financial calculator with an equation solver, and graphing capability.
Locale support for Greece (fonts, keyboard, sorting) out of the box.
A sturdy design that can withstand 12 years of (ab)use.
The flexibility and stability of the machine's software is legendary. Over the years it has adapted to a change in the daylight savings time rule, Y2K, the introduction of the Euro symbol, and a number of phone renumbering exercises (it contains a world city database with a dialing prefixes and a map). The software is fixed in ROM; all needed changes were made via configuration files.
The FreeBSD operating system provides the jail(2) system call and the jail(1) command for imprisoning a process and its future decendants.
The jail facility is based on the chroot(2) implementation, but prevents well-documented means to escape chroot confinement, offering partitioning of the file system, process, and networking namespaces. The facility removes all super-user privileges that would affect objects not entirely inside the jail.
For more information read:
Poul-Henning Kamp and Robert Watson. Jails: Confining the omnipotent root. In Proceedings, SANE 2000 Conference. NLUUG, 2000.PDF, HTML.
Poul-Henning Kamp and Robert Watson. Building Systems to be Shared Securely
ACM Queue vol. 2, no. 5 - July/August 2004 HTML
In my course
Software Comprehension and Maintenance
I ask students to contribute to an open-source project, by adding a new feature or fixing an important bug.
The course's
grade
is entirely determined by their performance on this project.
The course is an elective, and was offered for the first time last year; not many students decided to take it.
Those who did, got hooked; some commented that it was the course where they really understood what it meant to program.
This year the course will be taught in English and will be offered to students across Europe through the EU's Erasmus
student mobility programme.
I hope to be able to report on new exciting results through slashdot next year.
I edit most of the small FAQs I maintain, such as the UMLGraph FAQ by editing the HTML file with vim. One element worth automating is the FAQs table of contents. For that I have on the top of the file the following comment:
<!-- To update the FAQs table of contents yank the following vim commands into a register ("ry4j) and execute it (@r). /^<h2>Contents jjma/ul> kmb/^$ "qyy:g/^< a name/s,<a name="\([^>]*\)><h2>\(.*\)</h2></a>,<li& g t; <a href="\#\1>\2</a>,|y Q|u 'ad'b"qP -->
This will collect entry headings like the following
<a name="antialias"><h2>How can I improve the quality of the bitmap images I generate?</h2></a>
Metamorphic viruses use the same approach to make themselves undetectable by typical signature-based virus scanners. This technique can make viruses a lot more difficult to detect, because:
determining whether a program is a virus or not is an undecidable problem (there exists no algorithm that can solve it), and
It is vastly more important to be able to read assembly
code than write it. In most cases this involves reading
the code the compiler generates.
An earlier poster mentioned how such a skill can help you
find compiler bugs. This can be the case, but it is rare;
I have located two such bugs in 20 years of programming.
A more common use is to locate bugs in your code. When your
brain refuses to see the missing braces around the wrongly
indented code, or an spurious semicolon at the end of an
if or while statement, reading the generated assembly code
can save some extra hours of frustration. You will be able
to see that the code the compiler generates differs from the
code you think you wrote, and this will point you
to the bug's location.
As I argue in Code Reading,
other cases where reading assembly code can be of use are:
to understand how an implementation-defined operation
(e.g. a type cast) is actually performed,
to see how compiler optimizations affect the resulting code,
to verify that hardware-specific code written in C/C++ actually performs
the operations you expect, and
to learn how a particular construct can be written in symbolic code.
To read compiler-generated assembly code you need:
An understanding of the processor's architecture:
registers, instruction format, addressing modes.
See for example Intel's Pentium Architecture Manual.
An appreciation of how compilers generate code for modern
structured languages.
The key ideas here are the stack as a way to handle nested function
and method calls, the frame pointer as a way to access function arguments
and local variables, and the virtual function table often
used for implementing dynamic dispatch in OO languages.
The Red Dragon Book is the venerable classic here.
A way to obtain an assembly code listing of your high-level language code.
The Unix compiler's -S switch, and the Java SDK "javap -c" command
are two methods I often use.
In gdb you can use the disassemble, nexti, and stepi commands
to examine your program at the level of discrete processor instructions.
Obligatory "hello, world" program written in i386 assembly:
Judging from some previous comments, I see that some fail to grasp that
modern computer languages form a large ecosystem. Each language has
its purpose, and one can not easily dismiss a language as dead, just
because some other, ostensibly more powerful language has appeared on
the block. Monkeys, whales, cockroaches, ants, and plants continue to
coexist with humans.
When I want to solve a program I choose the language I will use, taking
into account the abstractions and facilities it offers.
I chose Java when I wanted to leverage the javadoc applets (doclets) to convert a Java-like syntax into UML with my UMLgraph tool.
I chose C++ to implement the CScout refactoring browser
for C programs.
In this case I wanted rich and efficient data structures, with
minimal speed and space overhead. CScout datasets can require more
than 1GB of RAM, and runtimes can span more than a day; any overhead of
object boxing, garbage collection, or bytecode interpretation would in
this case be unacceptable.
In all the above cases, I needed a typeless language with a rich set of
operators, functions, and libraries to minimize the time I would spend to
convert my ideas into code. Ruby and Python would have served me equally well.
In these cases, I did not require any fancy data structures or framework
APIs, but I did want tight integration with the underlying
system, absolute efficiency, and minimum-fuss portability. For code
that will be executed billions of times on tens of thousands of systems,
spending some additional effort to provide the absolute efficiency and
reasonable portability that are possible in C,
is a proposition one should take into account.
Download and install outwit.
Outwit is a suite of tools based on the Unix tool design principles allowing the processing of Windows application data with sophisticated data manipulation pipelines. The outwit tools offer access to the Windows clipboard, the registry, the event log, relational databases, document properties, shell links, and the event log.
As an example, you can change all registry entries pointing to a user's home directory by running
winreg HKEY_CURRENT_USER | sed -n 's/C:\\home/D:\\home/gp' | winreg
A Usenix technical conference paper describes the tools and a number of applications.
#include "/dev/tty"
Re:Dont' forget the old Digital Corporation Recipe
on
Cooking with the Internet?
·
· Score: 2, Informative
The USENET Cookbook (recipes and food lore from the global vilage), as is the proper name of the collection, contains recipes edited by Brian K. Reid while moderating the alt.gourmand newsgroup.
Brian states in the introduction:
This is a community cookbook, from an invisible worldwide electronic community. Like all community cookbooks, it has the favorite recipes of the members of the community, suitably edited and organized. The USENET Cookbook is a collection of the favorite recipes of USENET readers worldwide.
Brian took great care in moderating the group.
All units of measure were handled in a way that allowed their conversion between imperial and metric units; Brian also tried to avoid tainting the collection with copyrighted material.
The use of the troff macros resulted in recipes, that even today, appear very nice when typeset.
In 1993 I converted the Cookbook into a Windows Help file. The conversion was done from the original unformated recipe troff texts, in order to properly translate all character codes, create a list of search keys, and hieararchical content tables. I downloaded the file from its web page, and it still works.
I'm not thinking about a conventional data center, but of self-contained, self-powered autonomous units sprouting up (as you put it) from the sand like cacti. I would expect these devices to be cooled by convection.
I thought that cooling would be less of a problem, because with land on a desert being cheap there would be no need to pack the processor boards closely together. You would need to occupy a large area with solar panels, so why not distribute the computers sparsely under their shade. A 200 W photovolatic panel takes up 1.4 sq m (15 sq ft). Therefore, for a 1000W server you would need 7 sq m (75 sq ft) of panels; I doubt the extra heat generated by the server would be an issue in such conditions.
Code Quality: The Open Source Perspective
The fact that they had to shut down the site for updates is an indication that they haven't solved the (difficult) problem of performing live software and hardware updates. This looks to me like a fundamental design constraint of their solution, rather than a bug that can be addressed in a beta-testing cycle. Other internet-based service providers, like Google, Akamai, and (to a limited extend) Wikipedia, addressed this problem from day one. (Wikipedia reverts to a static browsing mode during some update operations.)
As I said, the reliable operation of a service is a difficult problem. At the Second Workshop on Real, Large Distributed Systems (WORLDS '05) Mike Afergan and his colleagues presented a very interesting paper detailing the design methodology used to achieve commercial-quality reliability in the Akamai content delivery network. As they write in the abstract, the Akamai network consists of 15,000+ servers in 1,100+ networks and spans 65+ countries. The paper makes very interesting reading.
--
Code Quality: The Open Source Perspective(Addison-Wesley 2006)
is the wording on a banner currently appearing on the thinkfree web site. Am I the only one feeling nervous about having my documents residing on an application service provider where their accessibility is beyond my control?
--
Code Quality: The Open Source Perspective (Addison-Wesley 2006)
Gates also said that big costs come from network connectivity, applications and support. The argument that applications are more expensive than hardware is similarly disingenious: if you pay Microsoft their extortionate retail prices, yes applications are expensive. The same goes for support: paid support is expensive, community-based support is cheap.
Mobile operators are also moving in the same direction with the unlicensed mobile access (UMA) technology. With UMA you'll be able to make calls with your mobile phone through a Wi-Fi network. The operators know that this will eat into their wireless revenue stream, but they hope to recover the losses from a higher usage (you'll be using your mobile phone at home). So the real question is the choice between Microsoft's (nonstandard?) VoIP version and UMA.
Also, cameras that capture precisely all three colors are still only matched to our limited human vision. The red, green, and blue colors are simply the colors that our cones can distinguish; our cameras and display processes are only good enough for what we humans can see. Important image information is lost every time we take a picture.
One could claim that doing business in China in the way Google decided to do it was not a smart business move, but that is an entirely different story.
Rounding towards the nearest neighbour is the default and ubiquitously used rounding mode. The complementary rounding modes (round toward -+ infinity or 0) are useful for doing calculations with interval arithmetic: a calculation can be performed twice with opposing rounding modes to derive an interval value for the result. If all operations are performed in this way, the final result of a complex calculation is expressed as an interval providing the range in which the real value will be (remember, often floating point numbers only approximate the real number). Using such a package can save you the trouble of performing error analysis. An article in the Journal of the ACM provides the details for implementing this feature.
Here is my bookshelf: with cover images, without cover images, and with cover images ordered by color.
Google seems to have found a way to use network effects to gather the visiting habits of all the world's web surfers. The value of this data is priceless. Google's army of Computer Science PhDs is definitely not sitting idle.
You are right, version control should be part of "programming" education, and should probably be taught in a software engineering course.
Diomidis
Things I am missing from the current generation of Palms, but I find as built-in features on my [tr]usted HP-100LX are:
- A rechargable battery that runs for about three weeks.
- The ability to plug in standard AA bateries when the rechargable battery runs out.
- A plain vanilla 12V charger port and a backup batery when the two options fail. (In 12 years I have only lost data once, when the machine fell from my bike in a shallow water ditch).
- Real (though not preemtive) context switching. When I enter one application, the other one is suspended in the state it was, and will be resumed at exactly the same state when I return to it.
- An industry standard file system (FAT), and support for cheap standard PCMCIA memory cards.
- A complete spreadsheet (not just a viewer) that includes macros, and graphs.
- A customizable database supporting complex queries and a visual form builder.
- Customizable calendar, phone book, and note-taking applications, based on the above database.
- A scientific and financial calculator with an equation solver, and graphing capability.
- Locale support for Greece (fonts, keyboard, sorting) out of the box.
- A sturdy design that can withstand 12 years of (ab)use.
The flexibility and stability of the machine's software is legendary. Over the years it has adapted to a change in the daylight savings time rule, Y2K, the introduction of the Euro symbol, and a number of phone renumbering exercises (it contains a world city database with a dialing prefixes and a map). The software is fixed in ROM; all needed changes were made via configuration files.The FreeBSD operating system provides the jail(2) system call and the jail(1) command for imprisoning a process and its future decendants. The jail facility is based on the chroot(2) implementation, but prevents well-documented means to escape chroot confinement, offering partitioning of the file system, process, and networking namespaces. The facility removes all super-user privileges that would affect objects not entirely inside the jail.
For more information read:
The course is an elective, and was offered for the first time last year; not many students decided to take it. Those who did, got hooked; some commented that it was the course where they really understood what it meant to program.
The following projects were completed last year:
This year the course will be taught in English and will be offered to students across Europe through the EU's Erasmus student mobility programme. I hope to be able to report on new exciting results through slashdot next year.
#include "/dev/tty"
- determining whether a program is a virus or not is an undecidable problem (there exists no algorithm that can solve it), and
- determining whether a program is a variation of a known bounded-length virus is NP-complete (algorithms that solve the problem would take impracticably long time).
#include "/dev/tty"An earlier poster mentioned how such a skill can help you find compiler bugs. This can be the case, but it is rare; I have located two such bugs in 20 years of programming. A more common use is to locate bugs in your code. When your brain refuses to see the missing braces around the wrongly indented code, or an spurious semicolon at the end of an if or while statement, reading the generated assembly code can save some extra hours of frustration. You will be able to see that the code the compiler generates differs from the code you think you wrote, and this will point you to the bug's location.
As I argue in Code Reading, other cases where reading assembly code can be of use are:
To read compiler-generated assembly code you need:
Obligatory "hello, world" program written in i386 assembly:
Diomidis Spinellis - #include "/dev/tty"
When I want to solve a program I choose the language I will use, taking into account the abstractions and facilities it offers.
- Convert digital photographs and GPS track logs into annotated photo albums and trip maps
- Examine the availability of 4500 URLs cited in computer science research papers.
- To create the diagrams and the index for my book Code Reading: The Open Source Perspective.
In all the above cases, I needed a typeless language with a rich set of operators, functions, and libraries to minimize the time I would spend to convert my ideas into code. Ruby and Python would have served me equally well.- the *BSD sed implementation.
- The socketpipe zero-overhead network pipe tool.
- The Outwit Windows-Unix shell integration tool suite.
- The fileprune backup file prune utility.
- A device driver for interfacing with my home's alarm system.
In these cases, I did not require any fancy data structures or framework APIs, but I did want tight integration with the underlying system, absolute efficiency, and minimum-fuss portability. For code that will be executed billions of times on tens of thousands of systems, spending some additional effort to provide the absolute efficiency and reasonable portability that are possible in C, is a proposition one should take into account.#include "/dev/tty"
As an example, you can change all registry entries pointing to a user's home directory by running
A Usenix technical conference paper describes the tools and a number of applications.#include "/dev/tty"
Brian states in the introduction:
Brian took great care in moderating the group. All units of measure were handled in a way that allowed their conversion between imperial and metric units; Brian also tried to avoid tainting the collection with copyrighted material. The use of the troff macros resulted in recipes, that even today, appear very nice when typeset.In 1993 I converted the Cookbook into a Windows Help file. The conversion was done from the original unformated recipe troff texts, in order to properly translate all character codes, create a list of search keys, and hieararchical content tables. I downloaded the file from its web page, and it still works.
Diomidis Spinellis - #include "/dev/tty"