Chronos is one of the many Smalltalk-related blogs syndicated on Planet Smalltalk

Discussion of the Essence# programming language, and related issues and technologies.

Blog Timezone: America/Los_Angeles [Winter: -0800 hhmm | Summer: -0700 hhmm] 
Your local time:  


2008 US Holidays

Most of the listed "holidays" will actually be business days, although some will not. The US Federal Holidays (on which most US Government offices will close, along with all Federally-chartered banks) are highlighted in bold. Generally, each business decides on its own which of these days (if any) will be non-business days (and for which employees):

Tue, 01 Jan 2008: NewYearsDay
Tue, 08 Jan 2008: JacksonDay
Mon, 21 Jan 2008: MartinLutherKingDay
Sat, 02 Feb 2008: GroundhogDay
Tue, 12 Feb 2008: LincolnsBirthday
Thu, 14 Feb 2008: ValentinesDay
Mon, 18 Feb 2008: WashingtonsBirthday
Mon, 17 Mar 2008: StPatricksDay
Fri, 21 Mar 2008: GoodFriday
Sun, 23 Mar 2008: Easter
Tue, 01 Apr 2008: AprilFoolsDay
Tue, 22 Apr 2008: EarthDay
Wed, 23 Apr 2008: AdministrativeAssistantsDay
Fri, 25 Apr 2008: ArborDay
Sun, 11 May 2008: MothersDay
Mon, 26 May 2008: MemorialDay
Sat, 14 Jun 2008: FlagDay
Sun, 15 Jun 2008: FathersDay
Fri, 04 Jul 2008: IndependenceDay
Sun, 27 Jul 2008: ParentsDay
Mon, 01 Sep 2008: LaborDay
Sun, 07 Sep 2008: GrandParentsDay
Mon, 13 Oct 2008: ColumbusDay
Fri, 24 Oct 2008: UnitedNationsDay
Fri, 31 Oct 2008: Halloween
Tue, 04 Nov 2008: ElectionDay
Tue, 11 Nov 2008: VeteransDay
Thu, 27 Nov 2008: Thanksgiving
Fri, 28 Nov 2008: DayAfterThanksgiving
Wed, 24 Dec 2008: ChristmasEve
Thu, 25 Dec 2008: Christmas
Wed, 31 Dec 2008: NewYearsEve

The above list was generated by the Chronos Date/Time Library, using the following "do it":

| list |
list := SortedCollection sortBlock: [:a :b | a value < b value].
SemanticDatePolicy unitedStates
nominalAnnualEventOccurenceDatesInYear: 2008 do:
[:semanticKey :date | list add: semanticKey->date].
Transcript cr.
list do:
[:assoc |
cr; show: (assoc value printStringUsing: #rfc2822);
show: ':'; tab; show: assoc key]

Happy (Gregorian) New Year! (2008)

Timepoint now showInCommonWorldTimezones

Tue, 01 Jan 2008 13:55:54 +1300 (NZDT: Pacific/Auckland | New Zealand Time)
Tue, 01 Jan 2008 11:55:54 +1100 (EST: Australia/Sydney | AUS Eastern Time)
Tue, 01 Jan 2008 09:55:54 +0900 (JST: Asia/Tokyo | Tokyo Time)
Tue, 01 Jan 2008 09:55:54 +0900 (WST: Australia/Perth | W. Australia Time)
Tue, 01 Jan 2008 08:55:54 +0800 (HKT: Asia/Hong_Kong)
Tue, 01 Jan 2008 06:25:54 +0530 (IST: Asia/Calcutta | India Time)
Tue, 01 Jan 2008 03:55:54 +0300 (MSK: Europe/Moscow | Russian Time)
Tue, 01 Jan 2008 02:55:54 +0200 (IST: Asia/Jerusalem | Israel Time)
Tue, 01 Jan 2008 01:55:54 +0100 (CET: Europe/Amsterdam)
Tue, 01 Jan 2008 00:55:54 +0000 (GMT: Europe/London | London Time)
Tue, 01 Jan 2008 00:55:54 +0000 (UT: Universal Time)
Mon, 31 Dec 2007 22:55:54 -0200 (BRST: America/Sao_Paulo | E. South America Time)
Mon, 31 Dec 2007 21:55:54 -0300 (ART: America/Argentina/Buenos_Aires)
Mon, 31 Dec 2007 19:55:54 -0500 (EST: America/New_York | Eastern Time)
Mon, 31 Dec 2007 18:55:54 -0600 (CST: America/Chicago | Central Time)
Mon, 31 Dec 2007 17:55:54 -0700 (MST: America/Denver | Mountain Time)
Mon, 31 Dec 2007 16:55:54 -0800 (PST: America/Los_Angeles | Pacific Time)
Mon, 31 Dec 2007 14:55:54 -1000 (HST: Pacific/Honolulu | Hawaiian Time)


Merry Christmas! (in Various Calendars)

Timepoint now showInAllCalendars
Local time is America/Los_Angeles ("Pacific Standard Time")—8 hours west of Universal Time

2007-12-25 AD @ 9:00:15 am -0800 [Gregorian]
0164-15-14 BE @ 9:00:15 am -0800 [Bahai]
1724-04-15 AM @ 9:00:15 am -0800 [Coptic]
2000-04-15 ZH @ 9:00:15 am -0800 [Ethiopic]
5768-10-16 AM @ 9:00:15 am -0800 [Hebrew]
1929-10-04 AS @ 9:00:15 am -0800 [Indian Civil]
1428-12-15 AH @ 9:00:15 am -0800 [Islamic (Fatimid)]
2007-12-12 AD @ 9:00:15 am -0800 [Julian]
2760-12-12 AUC @ 9:00:15 am -0800 [Julian (Imperial)]
1386-10-04 AP @ 9:00:15 am -0800 [Persian]
6244-01-04 SY @ 9:00:15 am -0800 [Solarian]
2007-359 @ 9:00:15 am -0800 [Gregorian-ordinal date]
2007-W52-2 @ 9:00:15 am -0800 [ISO]
J.D. 2454459 @ 9:00:15 am -0800 [Julian Day]
39074:17:00:15.077734 days:hh:mm:ss.s.. since 1901-01-01T00:00:00Z (ST80 epoch)
1198602015 seconds since 1970-01-01T00:00:00Z (Unix epoch)
128430756150777340 100-nanosecond ticks since 1601-01-01T00:00:00Z (MS WIndows epoch)


The Library of Congress in your wrist watch?

The Library of Congress in your wrist watch? from

Every advance in memory storage devices presents a new marvel of just how much memory can be squeezed into very small spaces. Considering the potential of nanolasers being developed in Sakhrat Khizroev’s lab at the University of California, Riverside, things are about to get a lot smaller.



'Kind and Gentle' Molecular Machine Could Operate at Near-Equilibrium

'Kind and Gentle' Molecular Machine Could Operate at Near-Equilibrium from

Molecular machines – tiny machines made of molecules that do mechanical work – are usually thought to operate in a state of non-equilibrium. This makes sense, considering that macro-sized machines operate at non-equilibrium, requiring an additional force to move. On the other hand, equilibrium implies that forces cancel each other out, resulting in an unchanging system, often at rest.



Traffic jam mystery solved by mathematicians

Traffic jam mystery solved by mathematicians from

Mathematicians from the University of Exeter have solved the mystery of traffic jams by developing a model to show how major delays occur on our roads, with no apparent cause. Many traffic jams leave drivers baffled as they finally reach the end of a tail-back to find no visible cause for their delay.



Move over, silicon: Advances pave way for powerful carbon-based electronics

Move over, silicon: Advances pave way for powerful carbon-based electronics from

Bypassing decades-old conventions in making computer chips, Princeton engineers developed a novel way to replace silicon with carbon on large surfaces, clearing the way for new generations of faster, more powerful cell phones, computers and other electronics.



Fundamental discovery reveals how fat is stored in cells

Fundamental discovery reveals how fat is stored in cells from

In discovering the genes responsible for storing fat in cells, scientists at the Albert Einstein College of Medicine of Yeshiva University have answered one of biology’s most fundamental questions. Their findings, which appear in the December 17 to 21 “Early Edition” online issue of the Proceedings of the National Academy of Sciences, could lead to new strategies for treating obesity and the diseases associated with it.



Smalltalk in One Page

Both Travis Griggs and David Buck have recently published their contributions to the "Smalltalk in One Page" project. So I thought I'd provide my condensed specification of Smalltalk syntax (which is excerpted from my Smalltalk primer/tutorial, Smalltalk: Getting The Message):

Smalltalk Syntax: Formal Specification

Below is presented the full and complete formal specification of the syntax (grammar) of ANSI-Standard Smalltalk, using a metalanguage known as Extended Backus-Naur Formalism (EBNF). The specific flavor of EBNF syntax used is as specified by the ISO International Standard for EBNF.

The EBNF grammar of Smalltalk is presented as a list of numbered production rules. Note that there are only 67 production rules, that five of them simply define aliases (alternative names) solely for conceptual clarity, and that over half the production rules concern themselves with literal values, comments, identifiers and other low-level lexical constructs.

Formal EBNF Specification of Smalltalk Syntax

  1. Character = ? Any Unicode character ?;
  2. WhitespaceCharacter = ? Any space, newline or horizontal tab character ?;
  3. DecimalDigit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
  4. Letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M"
                    | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"
                    | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m"
                    | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
  5. CommentCharacter = Character - '"';
            (* Any character other than a double quote *)
  6. Comment = '"', {CommentCharacter}, '"';
  7. OptionalWhitespace = {WhitespaceCharacter | Comment};
  8. Whitespace = (WhitespaceCharacter | Comment), OptionalWhitespace;
  9. LetterOrDigit =
                    | Letter;
  10. Identifier = (Letter | "_"), {(LetterOrDigit | "_")};
  11. Reference = Identifier;
  12. ConstantReference =
                    | "false"
                    | "true";
  13. PseudoVariableReference =
                    | "super"
                    | "thisContext";
            (* "thisContext" is not defined by the ANSI Standard, but is widely used anyway *)
  14. ReservedIdentifier =
                    | ConstantReference;
  15. BindableIdentifier = Identifier - ReservedIdentifier;
  16. UnaryMessageSelector = Identifier;
  17. Keyword = Identifier, ":";
  18. KeywordMessageSelector = Keyword, {Keyword};
  19. BinarySelectorChar = "~" | "!" | "@" | "%" | "&" | "*" | "-" | "+" | "=" | "|" | "\" | "<" | ">" | "," | "?" | "/";
  20. BinaryMessageSelector = BinarySelectorChar, [BinarySelectorChar];

  21. IntegerLiteral = ["-"], UnsignedIntegerLiteral;
  22. UnsignedIntegerLiteral =
                    | Radix, "r", BaseNIntegerLiteral;
  23. DecimalIntegerLiteral = DecimalDigit, {DecimalDigit};
  24. Radix = DecimalIntegerLiteral;
  25. BaseNIntegerLiteral = LetterOrDigit, {LetterOrDigit};
  26. ScaledDecimalLiteral = ["-"], DecimalIntegerLiteral, [".", DecimalIntegerLiteral], "s", [DecimalIntegerLiteral];
  27. FloatingPointLiteral = ["-"], DecimalIntegerLiteral, (".", DecimalIntegerLiteral, [Exponent] | Exponent);
  28. Exponent = ("e" | "d" | "q"), [["-"], DecimalIntegerLiteral];
  29. CharacterLiteral = "$", Character;
  30. StringLiteral = "'", {StringLiteralCharacter | "''"}, "'";
            (* To embed a "'" character in a String literal, use two consecutive single quotes *)
  31. StringLiteralCharacter = Character - "'";
            (* Any character other than a single quote *)
  32. SymbolInArrayLiteral =
                    UnaryMessageSelector - ConstantReference
                    | KeywordMessageSelector
                    | BinaryMessageSelector;
  33. SymbolLiteral = "#", (SymbolInArrayLiteral | ConstantReference | StringLiteral);
  34. ArrayLiteral =
                    | ByteArrayLiteral;
  35. ObjectArrayLiteral = "#", NestedObjectArrayLiteral;
  36. NestedObjectArrayLiteral = "(", OptionalWhitespace, [LiteralArrayElement, {Whitespace, LiteralArrayElement}], OptionalWhitespace, ")";
  37. LiteralArrayElement =
                    Literal - BlockLiteral
                    | NestedObjectArrayLiteral
                    | SymbolInArrayLiteral
                    | ConstantReference;
  38. ByteArrayLiteral = "#[", OptionalWhitespace, [UnsignedIntegerLiteral, {Whitespace, UnsignedIntegerLiteral}], OptionalWhitespace,"]";

  39. (* The preceding production rules would usually be handled by the lexical analyzer;
         the following production rules would usually be handled by the parser
  40. FormalBlockArgumentDeclaration = ":", BindableIdentifier;
  41. FormalBlockArgumentDeclarationList = FormalBlockArgumentDeclaration, {Whitespace, FormalBlockArgumentDeclaration};
  42. BlockLiteral = "[", [OptionalWhitespace, FormalBlockArgumentDeclarationList, OptionalWhitespace, "|"], ExecutableCode, OptionalWhitespace, "]";

  43. Literal = ConstantReference
                    | IntegerLiteral
                    | ScaledDecimalLiteral
                    | FloatingPointLiteral
                    | CharacterLiteral
                    | StringLiteral
                    | SymbolLiteral
                    | ArrayLiteral
                    | BlockLiteral;

  44. NestedExpression = "(", Statement, OptionalWhitespace, ")";
  45. Operand =
                    | Reference
                    | NestedExpression;

  46. UnaryMessage = UnaryMessageSelector;
  47. UnaryMessageChain = {OptionalWhitespace, UnaryMessage};
  48. BinaryMessageOperand = Operand, UnaryMessageChain;
  49. BinaryMessage = BinaryMessageSelector, OptionalWhitespace, BinaryMessageOperand;
  50. BinaryMessageChain = {OptionalWhitespace, BinaryMessage};
  51. KeywordMessageArgument = BinaryMessageOperand, BinaryMessageChain;
  52. KeywordMessageSegment = Keyword, OptionalWhitespace, KeywordMessageArgument;
  53. KeywordMessage = KeywordMessageSegment, {OptionalWhitespace, KeywordMessageSegment};
  54. MessageChain =
                    UnaryMessage, UnaryMessageChain, BinaryMessageChain, [KeywordMessage]
                    | BinaryMessage, BinaryMessageChain, [KeywordMessage]
                    | KeywordMessage;
  55. CascadedMessage = ";", OptionalWhitespace, MessageChain;
  56. Expression = Operand, [OptionalWhitespace, MessageChain, {OptionalWhitespace, CascadedMessage}];

  57. AssignmentOperation = OptionalWhitespace, BindableIdentifier, OptionalWhitespace, ":=";
  58. Statement = {AssignmentOperation}, OptionalWhitespace, Expression;
  59. MethodReturnOperator = OptionalWhitespace, "^";
  60. FinalStatement = [MethodReturnOperator], Statement;
  61. LocalVariableDeclarationList = OptionalWhitespace, "|", OptionalWhitespace, [BindableIdentifier, {Whitespace, BindableIdentifier}], OptionalWhitespace, "|";
  62. ExecutableCode = [LocalVariableDeclarationList], [{Statement, OptionalWhitespace, "."}, FinalStatement, ["."]];

  63. UnaryMethodHeader = UnaryMessageSelector;
  64. BinaryMethodHeader = BinaryMessageSelector, OptionalWhitespace, BindableIdentifier;
  65. KeywordMethodHeaderSegment = Keyword, OptionalWhitespace, BindableIdentifier;
  66. KeywordMethodHeader = KeywordMethodHeaderSegment, {Whitespace, KeywordMethodHeaderSegment};
  67. MethodHeader =
                    | BinaryMethodHeader
                    | KeywordMethodHeader;
  68. MethodDeclaration = OptionalWhiteSpace, MethodHeader, ExecutableCode;

To resolve any ambiguities that may arise due to the absence of optional whitespace, lower-numbered production rules take precedence over higher-numbered production rules. The ambiguity issue is normally taken care of by having production rules 1 through 38 handled by the lexical analyzer, but having the remainder (production rules 39 through 67) handled by the parser.

When compiling a method declaraion, MethodDeclaration is the grammatical start symbol. When compiling executable code that's not a method definition, ExecutableCode is the start symbol (it's possible, for example, to select a section of a method's code in a code browser and execute it, without invoking the method itself; the same is true of the text of code comments, if they happen to contain valid Smalltalk code.)


Researchers developed a quantum 'light switch'

Researchers developed a quantum 'light switch' from

Infinitely secure cryptography that renders any computer unhackable. Computers that can solve the structure of a complicated protein at the drop of a hat. Programs to decrypt complicated enemy secrets. Optical data connections up to 100 times faster than current technology allows.



IBM using light instead of wires for building supercomputers-on-a-chip

IBM using light instead of wires for building supercomputers-on-a-chip from

Supercomputers that consist of thousands of individual processor "brains" connected by miles of copper wires could one day fit into a laptop PC, thanks in part to a breakthrough by IBM scientists announced today.



Waistline Growth On High-carb Diets Linked To Liver Gene

From the Science Daily article "Waistline Growth On High-carb Diets Linked To Liver Gene":

Experts have been warning for years that foods loaded with high-fructose corn syrup and other processed carbohydrates are making us fatter. Now, a University of Wisconsin-Madison study has uncovered the genetic basis for why this is so.

Basically, a gene in liver cells (named "SCD-1") produces the enzyme SCD, which synthesizes fatty acids (a major component of fat.) When the SCD-1 gene is present and active, so that the SCD enzyme is produced in liver cells, the SCD enzyne converts any excess carbohydrates into fatty acids, which end up stored as fat by fat cells.

To get and/or stay thin, you have to avoid carbohydrates. Eat protein and fat instead. Instead of "you are what you eat," it's "you are what your body does with what you eat."


Low-carb Diet Reduces Inflammation And Blood Saturated Fat In Metabolic Syndrome

According to the Science Daily article "Low-carb Diet Reduces Inflammation And Blood Saturated Fat In Metabolic Syndrome," a low-carbohydrate diet is much more effective than is a low-fat diet at reducing both inflammation and blood-levels of saturated fatty acids for people who suffer from metabolic syndrome.

The facts are that:

  • A low-carb diet lowers blood levels of triglycerides much more effectively then does a low-fat diet
  • Even when one's diet is low in fat, carbohydrate-induced lipogenesis caused by a high-carbohydrate diet (which cannot be avoided if one's diet is low in fat) more than overrides the low fat content of the diet
  • Carbohydrates stimulate insulin secretion which biases fat metabolism towards storage rather than oxidation

The above facts are the reason why a low-carb diet, such as the Atkins Diet, not only works for losing weight, but is healthier than a low fat diet. It also explains why the idea that dietary cholesterol is a significant cause of heart disease is nothing but a myth.

If you suffer from either metabolic syndrome, or are overweight, then sugar and flour are deadly poisons. They will kill you at a relatively early age.

Link to full article

Fate Might Not Be So Unpredictable After All, According To New Mathematical Theory

The Science Daily article "Fate Might Not Be So Unpredictable After All, According To New Mathematical Theory" reports on a new mathematical theory by which the mean "first passage time" of a randomly-moving object in a non-homogeneous environment can be calculated.

Calculating the mean "first passage time" (FPT) of an object that takes a random walk through a complex environment provides the average arrival time of the object at a specific destination in that environment. This is especially valuable information when either a) there are many objects talking the random walk at the same time, or b) the object will take the random walk many times repeatedly.

This new theory, if it proves to be correct, could be used to predict:

  • The time required for molecules to arrive at specific locations within cells;
  • Wnen the next major computer virus is most likely to attack a particular computer;
  • How long it should take, on average, for one person to encounter another.

Link to Full article


Could hydrogen sulfide hold the key to a long life?

Could hydrogen sulfide hold the key to a long life? from

Hydrogen sulfide, or H2S, the chemical that gives rotten eggs their sulfurous stench – and the same compound that researchers at Fred Hutchinson Cancer Research Center successfully have used to put mice into a state of reversible metabolic hibernation – has now been shown to significantly increase life span and heat tolerance in the nematode worm, or C. elegans.


Team sculpts 3D particles with light

Team sculpts 3D particles with light from

MIT engineers have used ultraviolet light to sculpt three-dimensional microparticles that could have many applications in medical diagnostics and tissue engineering. For example, they could be designed to act as probes to detect certain molecules, such as DNA, or to release drugs or nutrients.


Scientists generate, modulate, and electrically detect pure spin currents in silicon

Scientists generate, modulate, and electrically detect pure spin currents in silicon from

Scientists at the Naval Research Laboratory (NRL) have generated, modulated and electrically detected a pure spin current in silicon, the semiconductor used most widely in the electronic device industry. Magnetic contacts on the surface of an n-type silicon layer enable generation of a spin current which flows separately from a charge current.



Did a Comet Cause the Great Flood?

Could May 10, 2807 B.C. be the date the Great Flood started? Bruce Masse, an environmental archaeologist at Los Alamos National Laboratory, has proposed the theory that the Great Flood was caused by a comet strike in the Indian Ocean on that date (see below for a translation of that date into all the calendar systems supported by Chronos.)

To learn more, browse over to the Discover Magazine article Did a Comet Cause the Great Flood?

-2806-04-17 BC [Gregorian]
-4649-02-09 BE [Bahai]
-3091-09-15 AM [Coptic]
-2815-09-15 ZB [Ethiopic]
0954-02-14 AM [Hebrew]
-2884-01-27 AS [Indian Civil]
-3533-07-12 AH [Islamic (Fatimid)]
-2807-05-10 BC [Julian]
-2053-05-10 AUC [Julian (Imperial)]
-3428-01-27 AP [Persian]
1430-04-27 SY [Solarian]
-2807-130 [Julian-ordinal date]
J.D. 696296 [Julian Day]


Scientists transform human skin cells into stem cells

Scientists transform human skin cells into stem cells from

Two groups of scientists have successfully transformed human skin cells into stem cells, potentially granting unlimited access to the foundation cells which can replace diseased or damaged tissues and organs, it was announced Tuesday.



Is the answer 2,397,207,667,966,701? French 'mathlete' sets record

Is the answer 2,397,207,667,966,701? French 'mathlete' sets record from

French "mathlete" Alexis Lemaire showed off his rare mental agility Thursday, claiming a new world record after working out in his head the 13th root of a random 200-digit number in just 72.4 seconds.



Breakthrough toward industrial-scale production of nanodevices

Breakthrough toward industrial-scale production of nanodevices from

Scientists in Maryland are reporting an important advance toward the long-sought goal of industrial-scale fabrication of nanowire-based devices like ultra-sensitive sensors, light emitting diodes, and transistors for inexpensive, high-performance electronics products. The study is scheduled for the current issue of ACS’ Chemistry of Materials.



Scientists Create Quantum Cascade Laser Nanoantenna

Scientists Create Quantum Cascade Laser Nanoantenna from

In a major feat of nanotechnology engineering researchers from Harvard University have demonstrated a laser with a wide-range of potential applications in chemistry, biology and medicine. Called a quantum cascade (QC) laser nanoantenna, the device is capable of resolving the chemical composition of samples, such as the interior of a cell, with unprecedented detail.



Syntax Imprinting

I have come to the conclusion that programmers undergo an imprinting process when they learn and then heavily use a particular style of programming language syntax—especially in the case of programming languages they learn early in their career. Once they've been imprinted with a particular syntactical style, they tend to resist learning or using any language whose notational conventions don't closely conform to that style.

This resistance to "foreign" syntactic styles in programming languages goes much deeper than a native speaker's preference for his own spoken language versus some foreign language.

Many people are quite happy to learn multiple human languages. But people do tend to be more willing to learn a foreign language that uses essentially the same writing system as their native language uses. But if one must learn a set of ideograms instead of using an alphabet, or learn an alphabet instead of a set of ideograms (Chinese, Japanese,) or learn a very different alphabet (Roman, Hebrew, Arabic, Cyrillic. etc,) then there is usually far less willingness to make any attempt to learn such a language.

The aversion to learning a really foreign writing system is usually quite strong. People tend to be much less accepting of the differences between the writing systems of English, Hebrew and Chinese than they are of the differences between English, French and German as spoken/written languages. People just don't want to learn what they see as a strange, mysterious, inscrutable and weird system of writing.

The reaction of programmers to "foreign" syntactic conventions in "exotic" programming languages is a lot like the typical reaction to a really different writing system. This intolerance of the radically foreign is not just unfortunate, it's tragic. A lot of programmers are, in effect, crippling their programming abilities by doing the equivalent of refusing to switch from the use of Roman Numerals to Arabic Numerals simply because they've imprinted themselves to Roman Numerals.

Long division is much easier using Arabic Numerals than it is using Roman Numerals. Not all syntax is created equal, even when the semantics is the same. The first step to overcoming a phobia is to acknowledge you are suffering from it. The second step is to decide you want to be cured.

Real programmers should not be afraid of new syntactic conventions. New syntax is often invented for good reason--and in any case, the only way to know is to try it. No pain, no gain.


Smalltalk: Getting The Message

[Updated URL; referenced document was relocated]

I have written a Smalltalk primer/tutorial. It takes a different approach than other programming language primers or tutorials I have seen on the web.

Firstly, it does not assume that the reader knows the syntax of any particular programming language, although it does assume that the reader either knows how to program, or at least that he is comfortable with the relevant mathematics and foundational concepts.

Secondly, it first explains the computational model of Smalltalk, before presenting any Smalltalk syntax.

Thirdly, it takes a bottom-up approach to the presentation of Smalltalk syntax, starting with lexical tokens and ending with method declarations.

Finally, it stresses the importance of messages above all else, and shows how and why those who have attempted to copy Smalltalk in other programming languages failed to "get the message."

Constructive criticism, suggested rewordings to improve clarity, and requests that additional information be included or that additional topics be covered, are encouraged. Such requests should be sent to the author, Alan L. Lovejoy, at the following e-mail address: smalltalk-tutorial (at) alan-lovejoy (dot) net.


Smalltalk: Getting The Message
The Essentials of Message-Oriented Programming with Smalltalk

About Smalltalk

Smalltalk is a foundational programming language that is based on pervasive message passing, pervasive dynamic and strong typing, pervasive reflection and pervasive object orientation.

Message passing: Almost all computation in Smalltalk happens via the sending of messages. The only way to invoke a method is to send a message—which necessarily involves dynamic binding (by name) of message to method at runtime (and never at compile time.) The internals of an object are not externally accessible, ever—the only way to access or modify an object's internal state is to send it a message. So function and data abstraction are both complete and universal. Pervasive message passing is Smalltalk's most important feature—a point that was lost on most of those who have tried to emulate Smalltalk when designing other programming languages.

Dynamic and strong typing: Although any object can be assigned to any variable, the only way to access or modify the internal state of an object is to send it a message—and the sending of any invalid message is detected and prevented at run time. So, even though Smalltalk's pervasive use of dynamic typing enables the programmer to define highly polymorphic abstractions with an extremely high degree of applicability and reusability, it is impossible to apply a function to a value for which there is no valid, defined behavior.

Reflection: In most programming languages, the specifications of types, classes, functions and subroutines exist only in the source code, and so are not accessible at runtime. But in Smalltalk, all specifications of all program constructs (classes, methods, etc.) are live objects that exist both at compile time and at runtime—and those objects are fully accessible to a running program, and can be queried or modified by sending them messages. So a Smalltalk program can not only fully introspect on itself, it has full power to change itself.

Object-orientation: In Smalltalk, all values are objects—even integers and other numbers, characters, strings, classes and blocks of code. Smalltalk is one of the first object-oriented programming languages. Its design was influenced by Lisp, Logo, Sketchpad, Flex and Simula. Smalltalk was developed as a research project at Xerox PARC in the 1970s by a team whose members included Dr. Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Scott Wallace and others.

Warning: Terms such as "object," "class," "type," "method" and hence "object-oriented programming" itself, as used in the context of Smalltalk, do not have the same meanings as they do when used in the context of other programming languages. The term object-oriented programming ("OOP") was coined by Dr. Alan Kay, the inventor of Smalltalk. He intended the term to describe the essential nature of Smalltalk. Unlike Smalltalk, most of the programming languages that market themselves as "object oriented" do not satisfy Dr. Kay's definition of object oriented programming:

"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them."

The full import of "object-oriented programming" as originally defined by Dr. Kay—and how and why the meaning of "OOP" as it applies to Smalltalk differs from the meaning of "OOP" as commonly understood outside of a Smalltalk context, is fully explained in the sections that follow. In addition, Dr. Kay's article "The Early History of Smalltalk" is highly recommended reading for anyone who wants to gain an even deeper insight into why and how Smalltalk came to be what it is, and why it is so different from the mainstream programming languages.


The Semantics of "Variables"

Depending on your terminological tradition, objects have "instance variables," "members," "fields," "slots," "associations" or "references." But what matters isn't the terminology, but the semantics and mathematics.

In terms of structure and mathematics, objects are nodes (vetices, points) in a directed graph, and the references objects make to each other are directed arcs (edges) in the graph. The transitive closure of all the objects reachable by following the references from some root object is commonly called the object graph of the root object. Any object can be considered as the "root" of an object graph—although each object considered as a root node results in a different object graph.

This is one reason you typically don't find either a tree data structure or a graph data structure provided as a Collection class in a typical class library: An object already is a tree or graph node, and by defining the object's instance variables and methods, its class defines the name and semantics of the "arcs" that can be navigated from a node of that type.

Objects are graph-theoretic, in the same sense that relational databases are set-theoretic. Set theory is a subset of graph theory—which is why object-relational mapping is non-trivial.

But what is the semantics of a variable? In other words, what is the meaning of the fact that a particular variable (or any reference by name to an object) has any particular value?


A named object reference, just like an arc in a graph, represents (or "models") an arity-2 predicate, where the two nodes are the arguments of the predicate. The existence of the arc connecting the two graph nodes is, by convention, interpreted as an assertion that the predicate represented ("modelled") by the arc that connects the two nodes is true.

For example, a variable named "parent" would normally be used to assert that whatever object is the value of that variable is the "parent" of some other object (or represents/models the parent of whatever entity is being modelled by that object). More formally, if there is an object A and an object B, and object A has an instance variable named "parent" whose value is object B, then that situation is normally intended to represent (model) the fact that the predicate hasParent(objectA, objectB) is true.

The name of a variable (or of any named reference to a value) should indicate the semantic role played by the variable—in other words, it should name the predicate modelled by the reference. Programmers often fail to do this, preferring instead to give names to variables based on the type of the values to be held by the variables. But that's a fundamental mistake: It's much easier to infer the type of a value from its semantic role, than it is to infer the semantic role from the type. And the semantic role played by variables is far more important to the meaning of code than is the type of their values.

Language designers typically have been making an analogous mistake, focusing consiberable energy and effort on type constraint systems for variables, while almost completely ignoring the core semantics of variables (or other named references to values.) Fortunately, that is beginning to change.

In addition to the semantic role played by a variable, the following aspects of (or perspectives on) the semantics of a reference to an object (value) are also of fundamental importance:

  1. Cardinality: The minimum and maximum number of different individuals that can validly be members of the arity-2 relation defined by the arity-2 predicate represented by an instance variable.
  2. Symmetry: Is the arity-2 predicate represented by an instance variable symmetric? If hasSibling(A, B), then is it necessarily true that hasSibling(B, A)?
  3. Transitivity: Is the arity-2 predicate represented by an instance variable transitive? If hasAncestor(A, B) and hasAncestor(B, C), then is it necessarily true that hasAncestor(A, C)?
  4. Equivalence Semantics: What matters about the object referenced by a variable—it's identity as an object, or the value it represents?
  5. Modality Semantics: Does the referenced value serve to identify the referrer, or is it simply an accidental (transient, variable) property of the referrer?
The remainder this post deals with the equivalence and modality semantics of inter-object references. For a more complete discussion of the cardinality, symmetry and transitivity of inter-object references, check out RDF and OWL.

Equivalence Semantics

The tradition in object modelling is to classify the properties (instance variables) of an object as being either attributes or associations. The usual explanation of the difference is that an instance variable whose type is one of the primitive types is an "attribute," but that an instance variable whose type is one of the object types is an "association." That explanation is misleading at best, and totally wrong at worst.

To see the problem with the conventional explanation, consider an instance variable whose type is java.lang.String. A Java String is an object, not a primitive type. But there can be no question that String-valued instance variables in Java are attributive, not associative. As another example, consider any instance variable of any Smalltalk object. In Smalltalk, all values are objects—there are no primitive types—and so all instance variables have objects as their values. The idea that the instance variables of a Smalltalk object can't be attributive, just because Smalltalk has no primitive types, is absurd on its face: Whether an instance variable is an attributive reference or an associative reference should not depend on which programming language one uses.

The valid explanation of the difference between an attribute and an association is that the equivalence semantics of the two are different. An attribute references the value of an object. An association references the identity of an object. The distinction between the value and the identity of an object only matters if the object is mutable. If an object is immutable, then its value can't be modified. Since an attribute references the value of an object, any change to the value of the referenced object violates the semantics of the attributive reference.

Primitive values (the values of primitive types) are immutable. That's why they are commonly used as the values of attributes. But any object that is immutable can easily serve as the value of an attributive reference—which is one reason that Smalltalk objects can, in fact, have instance variables that are attributes, even though all values are objects.

It can sometimes be the case that an instance variable needs to be an attributive reference, but there is no type or class available whose instances can be the value of such a variable, and which are (or can be made) immutable. Such cases require either that a different class or type be developed whose instances are immutable, or that the programmer take special care to prevent the objects that are referenced attributively from having their values modified in a way that (silently) breaks the intended equivalence semantics of any attributive references to those objects.

One commonly used technique for "safely" using a mutable object as the value of an attributive reference is to use an accessor method that returns a copy of the attributively-referenced mutable object, instead of answering the object itself. Another is to have "object copy" logic that substitutes a copy of the original (mutable) object as the value of any attributive instance variable in any copy of the original object that is created.

Put another way: Knowing both a) the equivalence semantics of a variable and b) the mutability of the objects that will be the values of an instance variable can be quite useful for safely and correctly implementing the code of a class (or generating safe and correct code for it from a model.)

Modality Semantics

The modality semantics of an instance variable deals with the scope or context of the predicate represented by the variable. Does the predicate assert a necessary and universal truth, or does it represent an accidental, transient truth that may be valid only in a limited scope or context? Although the modality of a predicate can vary along a variety of perspectives, so far I've found it useful to classify instance variables into four different modality categories:
  • axiomatic variables
  • identity variables
  • state variables, and
  • transient variables
[Note: Both the names and the definitions of the terms "identity variable" and "state variable" were introduced to me by Bobby Woolf, in a conversation we had at some point in the mid-1990s.]

The predicate represented by an axiomatic variable asserts a universal and necessary truth—in other words, it asserts an axiom.

If the instance variable "guid" represents the assertion that the predicate "hasGuid(referrer, aValue)" must necessarily be true, for all time and in all contexts, then "guid" is an axiomatic variable, and the association between the referrer and the referenced value is axiomatic.

The predicate represented by an identity variable asserts a universal and necessary truth, and its value must be unique with respect to either a) any other object of the same class, or b) any entity in the real world modelled by one or more objects in the program or database. The latter case deals with situations where different objects of different types model different aspects of the same entity in the "real world." Note that all identity variables also qualify as axiomatic variables, but not all axiomatic variables qualify as identity variables.

If the instance variable "guid" represents the assertion that the predicate "hasGuid(referrer, aUniqueValue)" must necessarily be true, for all time and in all contexts, and if the value of the variable must be "unique" (as defined above,) then "guid" is an identity variable, and the association between the referrer and the referenced value is an axiomatic identity relationship.

Note that there are cases where a variable by itself is not an identity variable, but it may participate in an identity relationship along with two or more other variables. In RDBMS terminology, such variables are elements of a multi-part key.

The predicate represented by a state variable asserts a non-universal, accidental truth which is not derivable from other predicates that have been asserted.

If the instance variable "location" represents the assertion that the predicate "hasLocation(referrer, aLocation)" happens to be true, as of a particular moment and/or in a particular context, and if that fact is not derivable from other asserted facts, then "location" is a state variable.

The predicate represented by a transient variable asserts a fact which is derivable from other predicates that have been asserted.

If the instance variable "area" represents the assertion that the predicate "hasArea(referrer, anArea)" is true, but that fact is derivable from other asserted facts (e.g., the width, height and shape of the referrer,) then "area" is a transient variable.

Knowing the modality category of a variable aids in making optimal design decisions when implementing a class (or generating code for a class):
  • The binding of an axiomatic variable to its value should normally be immutable. If mutator methods are provided for such variables, they should not be useable once the instance has been properly initialized.
  • The binding of a state variable to its value should be mutable. It will probably be necessary to define mutator methods for such instance variables.
  • The values of a transient variable can be set to nil at any time, without any loss of information. No mutator methods should be provided for such variables; their value should be lazily computed as necessary.


If you design or architect software, you need to know all of the above concepts. So do those who design software tests, programming languages, or object modelling languages/tools. The above concepts are also vital to the domain of model-driven architecture and model-driven design.

How NOT to market your favorite programming language

My dislike of Java is probably at least as strong as that of Obie Fernandez, but his blog post attacking Java is simply not an acceptable way to debate the matter. [I was alerted to this post by Blaine Buxton].

The author is also flat out wrong on a few major points, most notably the importance of good dev tools. I've found that the better the programmer, the more good tools help: They amplify whatever you've got to give. And I'd take a great programmer using Java over a poor one using any other language. The "dirty little secret" of IT is that quality of personnel matters far more than tools.

Parallel universes make quantum sense

From NewScientist:

21 September 2007
Zeeya Merali
Magazine issue 2622

If you think of yourself as unique, think again. The days when physicists could ignore the concept of parallel universes may have come to an end. If that doesn't send a shudder down your spine, think of it this way: our world is just one of many. You are just one version of many.

David Deutsch at the University of Oxford and colleagues have shown that key equations of quantum mechanics arise from the mathematics of parallel universes. "This work will go down as one of the most important developments in the history of science," says Andy Albrecht, a physicist at the University of California at Davis. In one parallel universe, at least, it will - whether it does in our one remains to be seen.

The "many worlds" interpretation of quantum mechanics was proposed 50 years ago by Hugh Everett, a graduate student at Princeton University. Rather than ...


See also: Parallel universe proof boosts time travel hopes


A better definition for the kilogram? Scientists propose a precise number of carbon atoms

A better definition for the kilogram? Scientists propose a precise number of carbon atoms from

How much is a kilogram? It turns out that nobody can say for sure, at least not in a way that won’t change ever so slightly over time. The official kilogram – a cylinder cast 118 years ago from platinum and iridium and known as the International Prototype Kilogram or “Le Gran K” – has been losing mass, about 50 micrograms at last check. The change is occurring despite careful storage at a facility near Paris.


Mass Spectrometry of Living Subjects

Mass Spectrometry of Living Subjects from

In science fiction movies, it happens all the time: A small device is briefly held against the skin of a sick crewmember and seconds later the monitor displays what ails him. This futuristic image could someday be real.



Researchers genetically engineer micro-organisms into tiny factories

Researchers genetically engineer micro-organisms into tiny factories from

Microorganisms may soon be efficiently and inexpensively producing novel pharmaceutical compounds, such as flavonoids, that fight aging, cancer or obesity, as well as high-value chemicals, as the result of research being conducted by University at Buffalo researchers.



Scientists unlock secrets of protein folding

Scientists unlock secrets of protein folding from

A team led by biophysicist Jeremy Smith of the University of Tennessee and Oak Ridge National Laboratory has taken a significant step toward unraveling the mystery of how proteins fold into unique, three-dimensional shapes.


Nanoscale computer memory retrieves data 1,000 times faster

Nanoscale computer memory retrieves data 1,000 times faster from

Scientists from the University of Pennsylvania have developed nanowires capable of storing computer data for 100,000 years and retrieving that data a thousand times faster than existing portable memory devices such as Flash memory and micro-drives, all using less power and space than current memory technologies.



Physicists have 'solved' mystery of levitation

From the article "Physicists have 'solved' mystery of levitation":

Levitation has been elevated from being pure science fiction to science fact, according to a study reported today by physicists.
In theory the discovery could be used to levitate a person

In earlier work the same team of theoretical physicists showed that invisibility cloaks are feasible.

Now, in another report that sounds like it comes out of the pages of a Harry Potter book, the University of St Andrews team has created an 'incredible levitation effects’ by engineering the force of nature which normally causes objects to stick together.

The levitation is achieved using the Casimir Effect, which normally
is an attractive force, but is turned into a repulsive force in this instance. The most likely immediate application of the new levitation effect is to eliminate friction in micromachines.


Insulin Resistance: The Problem May Be "Bone Deep"

According the the article Skeletal Discovery: Bone cells affect metabolism:

If your blood glucose is out of whack, the problem may be in your bones. New research in mice shows that bone cells exert a surprising influence on how the body regulates sugar, energy, and fat.

The discovery could lead to new ways to treat type 2 diabetes, a disease involving poor regulation of blood glucose. It also means that skeletons act as endocrine organs, which affect other body tissues by releasing hormones into the bloodstream.
"This could also have important ramifications for cardiovascular disease because of the effect on metabolic syndrome," a condition related to diabetes, comments Dana T. Graves of Boston University. "The fact that bone cells regulate energy metabolism, and that they do it through osteocalcin, is a major finding," he says.

Full Article


Physicists establish 'spooky' quantum communication

Physicists establish 'spooky' quantum communication from

Physicists at the University of Michigan have coaxed two separate atoms to communicate with a sort of quantum intuition that Albert Einstein called "spooky."



IBM Brings Single-Atom Data Storage, Molecular Computers Closer to Reality

IBM Brings Single-Atom Data Storage, Molecular Computers Closer to Reality from

IBM today announced two major scientific achievements in the field of nanotechnology that could one day lead to new kinds of devices and structures built from a few atoms or molecules.



Chronos Time Zone Repository Version 2007g Published

Version 2007g of the Chronos Time Zone Repository has been published. It is based on version 2007g of the Olson Time Zone Database.



"Schrödinger's Cat" Theory Proven

From the article Quantum Light Beams Good For Fast Technology:

The researchers have successfully superposed light beams, which produces a state that appears to be both on and off at once.

Light beams that are simultaneously on and off are vital for the next-generation super computers which should be faster than current computers based on bits, that are either on or off.

Previously, only smaller light particles had been superposed and the group has also proved a quantum physics theory known as Schrödinger's cat.


Astronomers find gaping hole in the Universe

Astronomers find gaping hole in the Universe from

University of Minnesota astronomers have found an enormous hole in the Universe, nearly a billion light-years across, empty of both normal matter such as stars, galaxies and gas, as well as the mysterious, unseen “dark matter.” While earlier studies have shown holes, or voids, in the large-scale structure of the Universe, this new discovery dwarfs them all.


Using life's building blocks to control nanoparticle assembly

Using life's building blocks to control nanoparticle assembly from

Using DNA, the molecule that carries life’s genetic instructions, researchers at the U.S. Department of Energy’s Brookhaven National Laboratory are studying how to control both the speed of nanoparticle assembly and the structure of its resulting nanoclusters.



Artificial Life Likely in 3 to 10 Years

Artificial Life Likely in 3 to 10 Years from

(AP) -- Around the world, a handful of scientists are trying to create life from scratch and they're getting closer. Experts expect an announcement within three to 10 years from someone in the now little-known field of "wet artificial life."



Scientists hail ‘frozen smoke’ as material that will change world

From the article Scientists hail ‘frozen smoke’ as material that will change world:

A MIRACLE material for the 21st century could protect your home against bomb blasts, mop up oil spillages and even help man to fly to Mars.

Aerogel, one of the world’s lightest solids, can withstand a direct blast of 1kg of dynamite and protect against heat from a blowtorch at more than 1,300C.

Scientists are working to discover new applications for the substance, ranging from the next generation of tennis rackets to super-insulated space suits for a manned mission to Mars.



Nanoreactors for Reaction Cascades

Nanoreactors for Reaction Cascades from

Living cells are highly complex synthetic machines: Numerous multistep reactions run simultaneously side by side and with unbelievable efficiency and specificity. For these mainly enzymatic reactions to work so well collectively, nature makes use of a variety of concepts. One of the most important of these is division into compartments. Enzymes are not only separated spatially, but also positioned in specific locations within the cell.



Computing breakthrough could elevate security to unprecedented levels

Computing breakthrough could elevate security to unprecedented levels from

By using pulses of light to dramatically accelerate quantum computers, University of Michigan researchers have made strides in technology that could foil national and personal security threats.



Indians predated Newton 'discovery' by 250 years

Indians predated Newton 'discovery' by 250 years from

A little known school of scholars in southwest India discovered one of the founding principles of modern mathematics hundreds of years before Newton according to new research.



Quantum analog of Ulam's conjecture can guide molecules, reactions

Quantum analog of Ulam's conjecture can guide molecules, reactions from

Like navigating spacecraft through the solar system by means of gravity and small propulsive bursts, researchers can guide atoms, molecules and chemical reactions by utilizing the forces that bind nuclei and electrons into molecules (analogous to gravity) and by using light for propulsion. But, knowing the minimal amount of light required, and how that amount changes with the complexity of the molecule, has been a problem.



Scientists float levitation theory

Scientist float levitation theory from

St Andrews scientists have discovered a new way of levitating tiny objects - paving the way for future applications in nanotechnology.


Proposed 'Nanomechanical' Computer is Both Old-School and Cutting-Edge

Proposed 'Nanomechanical' Computer is Both Old-School and Cutting-Edge from

A group of engineers have proposed a novel approach to computing: computers made of billionth-of-a-meter-sized mechanical elements. Their idea combines the modern field of nanoscience with the mechanical engineering principles used to design the earliest computers.



Linguists seek a time when we spoke as one

From the Christian Science Monitor:

Around 50,000 years ago, something happened to our ancestors in Africa. Anatomically modern humans, who had existed for at least 150,000 years prior, suddenly began behaving differently. Until then, their conduct scarcely differed from that of their hominid cousins, the Neanderthals. Both buried their dead; both used stone tools; and as social apes, both had some form of communication, which some think was gestural.

But then, "almost overnight, everything changes very rapidly," says Merritt Ruhlen, a lecturer in the Anthropological Sciences Department at Stanford University in Palo Alto, Calif. Humans began making much better stone tools. They started burying their dead with accouterments that suggested religion. And perhaps most telling, Homo sapiens, the "wise" apes, began creating art.

"People started having imagination at this time much more than they had earlier," says Dr. Ruhlen.



Graphene Nanoelectronics: Making Tomorrow’s Computers from a Pencil Trace

Graphene Nanoelectronics: Making Tomorrow’s Computers from a Pencil Trace from

A key discovery at Rensselaer Polytechnic Institute could help advance the role of graphene as a possible heir to copper and silicon in nanoelectronics.



Physicists get ultra-sharp glimpse of electrons

Physicists get ultra-sharp glimpse of electrons from

MIT physicists have developed a spectroscopy technique that allows researchers to inspect the world of electrons confined to a two-dimensional plane more clearly than ever before.


Trapped, Imaged Single Atoms May Enable Powerful Quantum Computing

Trapped, Imaged Single Atoms May Enable Powerful Quantum Computing from

Quantum computers have the potential to vastly out-perform present-day “classical” computers – if scientists can identify and manipulate promising quantum bits, or “qubits,” the basic information-storing units of a quantum computer.


Scientists work to create nanogenerator

Scientists work to create nanogenerator from

U.S. scientists are developing a nanogenerator -- a tiny device that produces electricity from flowing blood, pulsating blood vessels, or a beating heart.



University of Pennsylvania engineers discover natural 'workbench' for nanoscale construction

University of Pennsylvania engineers discover natural 'workbench' for nanoscale construction from

Engineers at the University of Pennsylvania have taken a step toward simplifying the creation of nanostructures by identifying the first inorganic material to phase separate with near-perfect order at the nanometer scale. The finding provides an atomically tuneable nanocomposite “workbench” that is cheap and easy to produce and provides a super-lattice foundation potentially suitable for building nanostructures.


NRL scientists demonstrate efficient electrical spin injection into silicon

NRL scientists demonstrate efficient electrical spin injection into silicon from

Scientists at the Naval Research Laboratory (NRL) have efficiently injected a current of spin-polarized electrons from a ferromagnetic metal contact into silicon, producing a large electron spin polarization in the silicon. Silicon is by far the most widely used semiconductor in the device industry, and is the basis for modern electronics.



Nano propellers pump with proper chemistry

The ability to pump liquids at the cellular scale opens up exciting possibilities, such as precisely targeting medicines and regulating flow into and out of cells. But designing this molecular machinery has proven difficult.

Now chemists at the University of Illinois at Chicago have created a theoretical blueprint for assembling a nanoscale propeller with molecule-sized blades.



Little Annoyances Still Big Vista Issue

Little Annoyances Still Big Vista Issue from

(AP) -- Chris Pirillo leaned away from his webcam and pointed to his printer/scanner/fax machine, which stopped scanning and faxing after he installed Microsoft Corp.'s new Windows Vista operating system.



Miniature Robots Play Nano-Soccer

Miniature Robots Play Nano-Soccer from

(AP) -- Exploding from the other end of the field, a silver robot glinted under the light of the cameras and burst toward the lone defender standing between it and the goal.



Italian scientists build atomic laser

The UPI article Italian scientists build atomic laser announces the discovery by Italian scientists of a way to produce an "atom laser," which is device that generates a beam of coherent atoms (as opposed to a beam of coherent photons as generated by a classical laser.) Albert Einstein predicted in 1925 that it might be possible to produce coherent beams of atoms, but all previous attempts to actually create an atom laser failed due to an inability to prevent the atoms in the beam from colliding with each other.

Atom lasers would be particularly useful for advanced microelectronics applications.


Researchers prove existence of new type of electron wave

Researchers prove existence of new type of electron wave from

New research led by University of New Hampshire physicists has proved the existence of a new type of electron wave on metal surfaces: the acoustic surface plasmon, which will have implications for developments in nano-optics, high-temperature superconductors, and the fundamental understanding of chemical reactions on surfaces. The research, led by Bogdan Diaconescu and Karsten Pohl of UNH, is published in the July 5 issue of the journal Nature.



Remotely Controlled Nanomachines

Remotely Controlled Nanomachines from

Physicists at the University of California at Berkeley have produced images that show how light can control some of the smallest possible machines.


Teleportation method proposed by Australian scientists

Teleportation method proposed by Australian scientists from

Teleportation, a concept popularised in the original Star Trek television series, is edging closer to reality through work being conducted by theorists from The University of Queensland and Australian National University.



New method for reading DNA sheds light on basis of cell identity

New method for reading DNA sheds light on basis of cell identity from

As a fertilized egg develops into a full grown adult, mammalian cells make many crucial decisions — closing doors of opportunity as they adopt careers as liver cells, skin cells, or neurons. One of the most fundamental mysteries in biomedicine is how cells make such different career decisions despite having exactly the same DNA.


Translating form into function

Translating form into function from

In the last 40 years, scientists have perfected ways to determine the knot-like structure of enzymes, but they’ve been stumped trying to translate the structure into an understanding of function – what the enzyme actually does in the body. This puzzle has hindered drug discovery, since many of the most successful drugs work by blocking enzyme action. Now, in an expedited article in Nature, researchers show that a solution to the puzzle is finally in sight.


Researchers may have solved information loss paradox to find black holes do not form

Researchers may have solved information loss paradox to find black holes do not form from

"Nothing there," is what Case Western Reserve University physicists concluded about black holes after spending a year working on complex formulas to calculate the formation of new black holes. In nearly 13 printed pages with a host of calculations, the research may solve the information loss paradox that has perplexed physicists for the past 40 years.


What Happened Before the Big Bang?

What Happened Before the Big Bang? from

New discoveries about another universe whose collapse appears to have given birth to the one we live in today will be announced in the early on-line edition of the journal Nature Physics on 1 July 2007 and will be published in the August 2007 issue of the journal's print edition.



Bright future for nanowire light source

Bright future for nanowire light source from

A bio-friendly nano-sized light source capable of emitting coherent light across the visible spectrum, has been invented by a team of researchers with the U.S. Department of Energy’s Lawrence Berkeley National Laboratory, and the University of California at Berkeley. Among the many potential applications of this nano-sized light source, once the technology is refined, are single cell endoscopy and other forms of subwavelength bio-imaging, integrated circuitry for nanophotonic technology, and new advanced methods of cyber cryptography.



New, invisible nano-fibers conduct electricity, repel dirt

New, invisible nano-fibers conduct electricity, repel dirt from

Tiny plastic fibers could be the key to some diverse technologies in the future -- including self-cleaning surfaces, transparent electronics, and biomedical tools that manipulate strands of DNA.