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:  

2007-12-31

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 |
Transcript
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)


2007-12-25

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)
Christmas


2007-12-21

The Library of Congress in your wrist watch?


The Library of Congress in your wrist watch? from PhysOrg.com

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.

[Continued]




2007-12-20

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


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

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.

[Continued]




2007-12-19

Traffic jam mystery solved by mathematicians


Traffic jam mystery solved by mathematicians from PhysOrg.com

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.

[Continued]




2007-12-18

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


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

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.

[Continued]




2007-12-17

Fundamental discovery reveals how fat is stored in cells


Fundamental discovery reveals how fat is stored in cells from PhysOrg.com

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.

[Continued]




2007-12-13

2007-12-11

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 =
                    DecimalDigit
                    | Letter;
  10. Identifier = (Letter | "_"), {(LetterOrDigit | "_")};
  11. Reference = Identifier;
  12. ConstantReference =
                    "nil"
                    | "false"
                    | "true";
  13. PseudoVariableReference =
                    "self"
                    | "super"
                    | "thisContext";
            (* "thisContext" is not defined by the ANSI Standard, but is widely used anyway *)
  14. ReservedIdentifier =
                    PseudoVariableReference
                    | 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 =
                    DecimalIntegerLiteral
                    | 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 =
                    ObjectArrayLiteral
                    | 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 =
                    Literal
                    | 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 =
                    UnaryMethodHeader
                    | 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.)


2007-12-10

Researchers developed a quantum 'light switch'


Researchers developed a quantum 'light switch' from PhysOrg.com

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.

[Continued]




2007-12-06

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 PhysOrg.com

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.

[...]




2007-12-05

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."


2007-12-04

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


2007-12-03

Could hydrogen sulfide hold the key to a long life?


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

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.

[Continued]




Team sculpts 3D particles with light


Team sculpts 3D particles with light from PhysOrg.com

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.

[Continued]




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


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

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.

[Continued]