Lively Kernel canvas
* MIT license
*
* Includes enhancements by Scott Trenda
* and Kris Kowal
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.]]> 99 ? Math.round(L / 10) : L),
]]> 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs]]> 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
};
return mask.replace(token, function ($0) {
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
});
};
}();
// Some common format strings
dateFormat.masks = {
"default": ]]>
SqSync-Entwicklertagebuch40true
savefalsenulltruenull
sortfalsenullfalsenull
reversefalsenullfalsenull
newentryfalsenullfalsenull
2010-04-26,Mon18
-Konfliktauflösungsolleheraus"ignore+retry"bestehen-vielleichtwärefüreinigeAnnahmeneinsimplerTCP-BenchmarkmitSqueakganzsinnvoll-RobertkönnteeineMini-PräsimitCodegeben,umseineHTTP-basedWave-Impl.fürdenChatzuzeigen16
2
2010-05-03,Mon18
S4:IchmöchtealsEntwicklermeinDomänenmodellnacheinemKonfliktschnellerweiterverwendenkönnen,d.h.derClientverwirftdielokalenÄnderungenundsetztbeidemZustanddesServerswiederauf.DesweiterensollSqueak-Objektidentitäterhaltenbleibt.1
S3:IchmöchtealsEntwicklermöglicheKonfliktebeimAnwendenvonOperationenerkennenkönnen.(DMgehtpotenziellbaden-->einerderClientshatdanachundefiniertenZustand?)WirdeinKonflikterkannt,wirdeineTranscript-AusgabeerzeugtundderClient"startetneu",wobeiSqueak-Objektidentitätnichterhaltenwird.(Exceptionauchmöglich). einer der Clients hat danach undefinierten Zustand?) Wird ein Konflikt erkannt, wird eine Transcript-Ausgabe erzeugt und der Client \"startet neu\", wobei Squeak-Objektidentität nicht erhalten wird. (Exception auch möglich)."]]>2
S2:IchmöchtealsEntwicklereineodermehrereMethodeaufeinregistriertesObjektbzw.aufeine"remote"KopieausführenkönnenunddieseOperation(en)soll(en)aufalle(anderen)"remote"KopiendiesesObjektesausgeführtwerden.DabeimöchteichimnormalenProgrammablaufkeinenKontaktmitOperationenoderanderenFramework-Konzeptenzutunhaben.EssolleinoptimistischerAnsatzverfolgtwerden.(KeineParallelität!).3
S1:IchmöchteeinenServerstartenkönnen.kannnachsehen,obServerläuftundwo.ichhabeeinObjekt,z.B.einePersonmitVornameundNachname.IchmöchtediesesObjektaufdemServerregistrieren.NunmacheicheinenClientaufundzeigeaufdenServer.VondiesemClientenauskannichaufdiereplizierten(aufdemServerregistrierten)Objektenzugreifen.2
Setting:2(oderbeliebige)Clientsund1Server,wobeiClient/Server=AnwendungineinemImage;gegebenes(beliebiges)Domänenmodell
RobertmovedtheUserStories.16
2010-05-05,Wed18
WirschätzenStoriesinTagenab.UnsereVelocitywirddaherindererstenIterationmit6Tagenbeziffert.Eskönntekompliziertwerden,wennwirdiebeidenStoriesnichtschaffen,daeineAnpassungderVelocityineineÄnderungdesArbeitsaufwandesfürdasSeminarabgebildetwerdenkönnte.---IsteineAbstraktionsschichtnichtdochsinnvoll?---AlternativkönntenwiresnurauffehlerhafteAbschätzungderStoriesschiebenundnieetwasanderTeam-Velocityändern...Update:VelocityistnachStefaneinprozentualerAnteilderverfügbarenArbeitszeit.Wirhaben6Tagebzw.48StundenArbeitszeitfürdasgesamteTeaminnerhalbeinerIterationbzw.2Wochen.BeiunserererstenPlanunghabenwir5Tageverplant,d.h.83%Velocity(fürdieersteIterationgeraten).Stefanmeint,daswirddeutlichgeringer,dawirschonvielZeitmitPlanungverbrachthaben.DaherwirdunsereTatsächlicheVelocitygeringerausfallen.Vermutung:50%.EszähltamEndenichtdieursprünglicheAbschätzungderStoriesfürdieVelocity,sonderndieZeit,diemantatsächlichandenAufgabengearbeitethat.1813
2010-05-06,Thu18
Wennwir(späterdann)nurdieOperationenmitihrenArgumentenangewisseObjektereplizieren,wiekönnenwireigentlicheineneinheitlichen"Zufall"sicherstellen?Beispiel:Person>>new^selfnewuuid:UuidrandomSpontanhätteichdieIdee,dassmansowasdirektineinenParameterverpackenkönnte(Persion>>newWith:aUuid).AllerdingswürdedieseineEinschränkungandasDomänenmodellbedeuten,diewirsowahrscheinlichnichtvomProgrammiererabverlangenkönnen.Vielleichtkönntenwirirgendwiesinnvoll"verteiltenZufall"implementieren?ZumindestfürdieUuid-Klasse...oderaberdieseObjekterzeugungsgeschichtewirdspäterehgesondertabgebildet...?!!!Bastianfragen!!!->BeliebigerZufallüberhauptimDomänenmodellgewünscht?18> new\n^ self new uuid: Uuid random\n\nSpontan hätte ich die Idee, dass man sowas direkt in einen Parameter verpacken könnte (Persion >> newWith: aUuid). Allerdings würde dies eine Einschränkung an das Domänenmodell bedeuten, die wir so wahrscheinlich nicht vom Programmierer abverlangen können.\n\nVielleicht könnten wir irgendwie sinnvoll \"verteilten Zufall\" implementieren? Zumindest für die Uuid-Klasse... oder aber diese Objekterzeugungsgeschichte wird später eh gesondert abgebildet...?\n\n!!! Bastian fragen !!! -> Beliebiger Zufall überhaupt im Domänenmodell gewünscht?"]]>17
rk:Hmm,alsoals"Zufall"wuerdeichdasnichtbeschreibenwollen.Wirhabendochehgesagt,dasseinObjektvoneinerspeziellenOberklasseerbenkann.DieseKlassekannsichdochdanndochumdieUUIDGenerationkuemmernundderBenuzterbekommtdavondanngarnichtsmit.mt:Problematischistdasnur,wenndaserstaufdemClientunddannrepliziertaufdemServerunddannrepliziertaufallenanderenClientspassiert.DannhastenumberOfClients+1verschiedeneUuidsgeneriert-fürdasvermeintlich"selbe"Objekt.rk:NadasduschonunterscheidenmusstzwischenechterObjekterstellungundReplikationistschonklar.AberdarumkuemmertsichhaltdasFrameworkundnichtderBenutzer.mt:Hiergeht'sdochumdasFramework.=)DasBeispielmitdenUuidsistnureinsvonvielen.NimmdenCode"aSetanyOne",welcherirgendwoimDomänenmodellstehenkann.1816
See:UserStories16
2010-05-15,Sat18
OurdomainmodelnowconsistsofonePersonclass,whichhasfourattributes,whichallhavetobestrings.Youalsocannowregisterandunregisterobjectsfromasimpleserver,whichinternallystorestheminadictionaryunderaUUIDkeyforreferencing.165
Marcel'snotes22
2010-05-19,Wed18
Miristaufgefallen,dasswirschleichendeinpaarCoding-Guidelinesvereinbaren.Ichversuchdiemalaufzuschreiben:-Testsmit"test00*"durchnummerieren-pvt*-MethodenfürprivateMethoden-KlassenkommentareundMethodenkategorien(=Protokolle)sindPflicht-MethodenzurInitialisierungnach"initialization"-MethodenzurInstanzerzeugungnach"instancecreation"-CodeTalkimImageinstallieren!-NachderMethodenkommentarzeileeineLeerzeile.-Return-StatementsohnePunkt-NormaleStatementsmitPunkt,sofernkeinBlockende-ausgenommenMethodenblock->daauchPunkt-Tests:#assert:statt#should:16 da auch Punkt\n- Tests: #assert: statt #should:"]]>12
2010-05-26,Wed18
mt:IchwolltenochmaleinpaarWortezumletztenTreffenmitdemKundenschreiben.Dasgingganzgutlos,nurwurdedannschonderWunschnachimmermehrStorieslaut.DerKundekanngernständigStoriesindenPoolwerfen.WenndieEntwicklerallerdingssostarkmitindieFormulierungmiteinbezogenwerdenundimHinterkopfimmermehrtechnischeDetailsberücksichtigenwollen,gehtdiePlanungdanndochsehrstarkinRichtungZukunft,welchenochsehrweitwegliegt.DasFormulierenvonStoriesdurchdenEntwickleringeeignetenSchrittensuggerierteinerseitsaufbauendeAbhängigkeitdieserStories,andererseitsmangelndesProblemverständnisdurchdenKunden,wassichinzukünftigenPlanungssitzungenimmernegativerauswirkenwird.7
2010-05-31,Mon18
mt:AlsoimServerkönnenwirunsdasSynchronisierenvomDomänenmodellsparen,wennallesimSySimpleServer>>mainProcessverarbeitetwird-sowohlCommands,alsauchUpdates.AufClient-Seitekönntedasetwasschwierigerwerden,daoptimalerweisealleÄnderungenausschließlichimGUI-Prozessausgeführtwerdensollten.HierkönnteWorldStateclass>>addDeferredUIMessage:dassein,waswirbrauchen.SokönntenwireinfachinjedemWorld-CycledieeingehendenOperationenausführenunddasDomänenmodellanpassen.AlleanderenAnsätze,welcheeinenextraProzessinvolvierenwürdendemAnwendungsentwicklernureinenotwendigeSynchronisationaufzwingen.>mainProcess verarbeitet wird - sowohl Commands, als auch Updates.\n\nAuf Client-Seite könnte das etwas schwieriger werden, da optimalerweise alle Änderungen ausschließlich im GUI-Prozess ausgeführt werden sollten. Hier könnte WorldState class>>addDeferredUIMessage: das sein, was wir brauchen. So könnten wir einfach in jedem World-Cycle die eingehenden Operationen ausführen und das Domänenmodell anpassen. Alle anderen Ansätze, welche einen extra Prozess involvieren würden dem Anwendungsentwickler nur eine notwendige Synchronisation aufzwingen."]]>6
2010-06-06,Sun18
Processor>>terminateisbrokenforsuspendedprocesses,thatneverranatleastonce.Trythis:SyClient>>startConnectionThreadconnectionProcess:=[ProcessoractiveProcesspriority:35.[socketisConnected]whileTrue:[socketwaitForDataIfClosed:[selfdisconnect].(protocolProcessorprocessDataFrom:socket)ifFalse:[selfdisconnect]]]forkAt:ProcessorlowIOPriority.Processoryield.>terminate is broken for suspended processes, that never ran at least once. Try this:\n\nSyClient>>startConnectionThread\nconnectionProcess := [\n\tProcessor activeProcess priority: 35.\n\t\t[socket isConnected] whileTrue: [\n\t\t\tsocket waitForDataIfClosed: [self disconnect].\n\t\t\t(protocolProcessor processDataFrom: socket)\n\t\t\t\tifFalse: [self disconnect]]] forkAt: Processor lowIOPriority.\n\tProcessor yield.\n"]]>9
2010-06-12,Sat18
mt:WirsolltenmalnurMethodenreplizieren,dieauchdenZustandändern,oder?sr:Ja,aberwirbrauchendafüreinenWegdiesezuerkennen1
2010-06-22,Tue18
Rootchangewillnotbereplicatedtotheclients.ApplyCommandmustnotgetexpectedVersionduringinstancecreationbutjustbeforeserialization!2
2010-07-08,Thu18
DiscussionaboutVelocitiyshouldgointodocumentation2
mt:OnlyApplyCommandwillbeperformedinUIprocesswhichmeansthatothercommandswillmodify/readrepositoryinotherprocesses.Notgood.Additionally,serverdoesnotneedtouseUIprocesstoupdaterepository.sr:StorywasonlyaboutApplyCommand...weshouldscheduleanotheronefortheotherstories?ServerusingtheUIProcess...isthisaproblem?3
2010-07-10,Sat18
2010-07-15,Thu18
Paper-Prozessbeschreiben-nichtArchitekturdokumentationaberbackgroundKapitel(grobeinfuehrungindomaene)-BezugnehmenaufArtefakteunddieseaucherklearen-ReflektierenueberProzess-wievieleSeiten?12,8?-vorherArgumentationskettefuerdasgesamtePaperalsauchfuerjedesKapitel-1.SchrittFolienzusammenfassen-RelatedWorkaufarbeiten-ErstmalersteStrukturaufbauendanndrueberreden189
Wikicontroltruetrue
2010-07-21,Wed18
Abschlusspräsi-aufBegriffe,dieentstandensind,eingehen(Operation,Methodenaufruf,...)Notizenvomletztenmal:Bastian-BegriffefürbeteiligteEntitätenbesserabstimmen>konsistenterverwendern-allgemeineSystem-Strukturgenauerausbauen-konkretereFälle(Paul->senden)*konkreteDiagramme->danachabstrahieren(Folie6)-Versionierung>wiederkonkretesSzenario>erstdanachverallgemeinern-Folie9>"notsloweddown"komisch-Screencastreichtnichtaus,umkonkretesBeispielvordemabstraktenDiagrammzurverdeutlichen>konkretesBeispielerstmalexlizitineinDiagrammmappenMalte-SyCommand->alsNamenichtrichtiggeeignet*SyNetworkCommand?*SyMessage?Name-ClashmitMessage-Sends konsistenter verwendern\n- allgemeine System-Struktur genauer ausbauen\n\n- konkretere Fälle (Paul -> senden)\n * konkrete Diagramme -> danach abstrahieren (Folie 6)\n \n- Versionierung\n > wieder konkretes Szenario\n > erst danach verallgemeinern\n \n- Folie 9\n > \"not slowed down\" komisch\n \n- Screencast reicht nicht aus, um konkretes Beispiel vor dem abstrakten Diagramm zur verdeutlichen\n > konkretes Beispiel erstmal exlizit in ein Diagramm mappen\n \nMalte\n- SyCommand -> als Name nicht richtig geeignet\n * SyNetworkCommand?\n * SyMessage? Name-Clash mit Message-Sends"]]>26
dismissallfalsenulltruefalsetrue
Xfalsenulltruefalsetrue
serializing....16nulltruenull210