[squeak-dev] [ANN] Chalten 2.0

Mariano Abel Coca marianoabelcoca at gmail.com
Tue Aug 26 20:27:02 UTC 2008


Congratulations Don Maxi ;).

Good news indeed.

On Tue, Aug 26, 2008 at 5:20 PM, Maximiliano Taborda <mtaborda at gmail.com>wrote:

> Hi.
>
> We uploaded to SqueakSource (for Squeak) and to the Cincom Public
> Repository (for Visualworks) a new release of the project called
> "Chalten" (2.0) that is our implementation of the Time Domain (not
> only of the Gregorian Calendar now).
>
> This model was born as a representation of the Gregorian Calendar,
> and, in this last version, the model support the Gregorian, Julian,
> Islamic an Hebrew Calendars.
> Many refactorings was done from the original model to get this last
> version wich reifyes many concepts of the Time Domain that
> Smalltalk-80 does not; for example: day, day of month, month of year,
> month, year, calendars, time zones, filters over the timeline, etc..
>
> The main objective of this model is to easily, and in a "SDL way",
> solve problems of the Time Domain that are not easy (or impossible) to
> do with the Smalltalk-80 abstractions.
> t provides also some concepts that are useful for financial
> application, among others, like relative dates and time line filters.
>
> This model also uses the units models (Aconcagua). Because it uses the
> units model, there are some concepts that are not useful anymore, like
> Duration, because a Duration is a Measure of time.
> The model covers many concepts of the Time Domain, but lacks of some
> abstractions; for example, the representation of the leap second.
>
> It comes with more than 1600 tests (all green).
>
> Here are some examples:
>
> "Create some time entities"
>       August twentieth, 2008          -->     Creates an instance of
> the gregorian Date for 20/08/2008
>       August twentieth                -->     Creates an instance of
> the gregorian DayOfMonth for 20/08
>       August, 2008                    -->     Creates an instance of
> the gregorian MonthOfYear for August of 2008
>
> "But, not only gregorian entities"
>       Shaban seventeenth, 1429        -->     Creates an instance of
> the islamic Date for 17/08/1429
>       Shaban seventeenth              -->     Creates an instance of
> the islamic DayOfMonth for 17/08
>       Shaban, 1429                    -->     Creates an instance of
> the islamic MonthOfYear for Shaban of 1429
>
>       JulianAugust seventh, 2008      -->     Creates an instance of
> the julian Date for 07/08/2008
>       JulianAugust seventh            -->     Creates an instance of
> the julian DayOfMonth for 07/08
>       JulianAugust, 2008              -->     Creates an instance of
> the julian MonthOfYear for August of 2008
>
>       Av nineteenth, 5768             -->     Creates an instance of
> the hebrew Date for 19/05/2008
>       Av nineteenth                   -->     Creates an instance of
> the hebrew DayOfMonth for 19/05
>       Av, 5768                        -->     Creates an instance of
> the hebrew MonthOfYear for Av of 5768
>
> "Converting dates between diferents calendars"
>       (August twentieth, 2008) asIslamic      -->     Return Sha'ban 17,
> 1429
>       (August twentieth, 2008) asHebrew       -->     Return Av 19, 5768
>       (August twentieth, 2008) asJulian       -->     August 7, 2008
> (julian)
>
>       (Shaban seventeenth, 1429) asHebrew     -->     Return Av 19, 5768
>       (JulianAugust seventh, 2008) asIslamic  -->     Return Sha'ban 17,
> 1429
>       (Av nineteenth, 5768) asGregorian       -->     August 20, 2008
> (gregorian)
>
> "Measuring distances"
>       August twentieth, 2008 distanceTo: December thirtieth, 2008
> -->     Return an instance of Measure <132 days>
>       Shaban seventeenth, 1429 distanceTo: Muharram second, 1430
> -->     Return an instance of Measure <132 days>
>       Av nineteenth, 5768 distanceTo: Tevet third, 5769
> -->     Return an instance of Measure <132 days>
>
> "Also, measuring distance expressed in diferents way (calendars)"
>       August twentieth, 2008 distanceTo: Tevet third, 5769
> -->     Return an instance of Measure <132 days>
>       Shaban seventeenth, 1429 distanceTo: December thirtieth, 2008
>  -->     Return an instance of Measure <132 days>
>       Av nineteenth, 5768 distanceTo: Muharram second, 1430
> -->     Return an instance of Measure <132 days>
>
> "Collect some entities"
>        (ChaltenYear number: 2008 calendar: GregorianCalendar) months
>                collect: [:monthOfYear | monthOfYear lastDate]  -->
> Returns all
> the last dates of the 2008 months.
>        (ChaltenYear number: 2008 calendar: GregorianCalendar) dates select:
>                [:date | date is: Monday]       -->     Returns all Mondays
> of 2008
>        (ChaltenYear number: 5768 calendar: HebrewCalendar) dates select:
>                [:date | date is: YomShabbat]   -->     Returns all yom
> shabbats of 5768
>
> "Let's create a filter for all dates..."
>       nonWorkingDays := TimeLineFilter named: 'Non Working Days'
>
> "Now, we want Saturdays to be on that filter"
>       nonWorkingDays addDayRule: Saturday
>
> "Now we want Sundays from January 1st of year 1000 to the end of time..."
>       nonWorkingDays
>               addRule: (nonWorkingDays dayRule: Sunday)
>               from: (January first, 1000)
>               to: TheEndOfTime
>
> "Now we want all July 9th since 1816 because is the Independence Day
> in Argentina".
>       nonWorkingDays
>               addRule: (nonWorkingDays dayOfMonthRule: July ninth)
>               from: (July ninth, 1816)
>               to: TheEndOfTime
>
> "Testing some dates..."
>       nonWorkingDays includes: (July ninth, 2008)     -->     Returns true
>       nonWorkingDays includes: (July eighth, 2008)    -->     Returns false
>       nonWorkingDays includes: (July twelfth, 2008)   -->     Returns
> true, it is Saturday
>
> "But, how about to filter some like the hebrew new year day"
>       nonWorkingDays addDayOfMonthRule: Tishri first
>       nonWorkingDays includes: (Tishri first, 5769)           -->
> Return true, it is the next hebrew new year
>       nonWorkingDays includes: (September thirtieth, 2008)    -->
> Return true, it is the next hebrew new year (in gregorian)
>
> "21/08/2008 is a Thursday"
>       timespan := TimeSpan from: (August twentyfirst, 2008) duration:
> (48 * TimeUnits hour)
>       settleDate := RelativeDate timespan: timespan using:
> nonWorkingDays negated
>
>       nonWorkingDays includes: (August twentyfifth, 2008)     -->
> Returns false because 25/08/2008, a Monday, is a working day
>       settleDate absoluteDate                                 -->
> Returns 25/08/2008
>
> "Now a new non working day is added to the filter"
>       nonWorkingDays addDateRule: (August twentyfifth, 2008)
>
>       nonWorkingDays includes: (August twentyfifth, 2008)      -->
> Return true.
> "Now 25/08/2008, is a not working day"
>        settleDate absoluteDate                                 -->     Now
> it returns 26/08/2008 because
> the filter has changed
>
> "Working with time zones"
>       buenosAiresDateTime := TimeZonedDateTime
>               dateTime: (DateTime
>                       date: August twentieth, 2008
>                       timeOfDay: (TimeOfDay hours: 19 minutes: 35))
>               zone: TimeZones buenosAires
>
>       greenwichDateTime := TimeZonedDateTime
>               dateTime: (DateTime
>                       date: August twentieth, 2008
>                       timeOfDay: (TimeOfDay hours: 22 minutes: 35))
>               zone: TimeZones greenwich
>
>       buenosAiresDateTime = greenwichDateTime                  -->
> Return true,
> it is the same instant but measure in diferent zone
>       buenosAiresDateTime distanceTo: greenwichDateTime        -->
> Return a measure <0 days>, because it is the same instant
>
>       buenosAiresDateTime  := buenosAiresDateTime next: (TimeUnits hour *
> 3)
>
>       buenosAiresDateTime = greenwichDateTime                  -->
> Return false,
> the hour is the same but the zone is different
>       (buenosAiresDateTime distanceTo: greenwichDateTime)
>                convertTo: TimeUnits hour                       -->
> Return a measure <-3 hours>,
> just the offset between zones
>
>
>
> Regards.-
> Maximiliano
>
>


-- 
Mariano.
www.egola.com.ar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20080826/5fed2586/attachment.htm


More information about the Squeak-dev mailing list