<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1317519969686201237</id><updated>2012-02-16T13:17:49.231-07:00</updated><category term='wo'/><category term='logging'/><category term='stackoverflow.com'/><category term='package'/><category term='multitasking'/><category term='translate'/><category term='ai'/><category term='lexicon'/><category term='soa'/><category term='vm'/><category term='hash'/><category term='privacy'/><category term='algorithms'/><category term='monkey patch'/><category term='adde'/><category term='array'/><category term='Mathematica'/><category term='audio'/><category term='set'/><category term='rom'/><category term='frames'/><category term='obj&apos;c'/><category term='git'/><category term='unicode'/><category term='precedence'/><category term='hg'/><category term='localisation'/><category term='cstr'/><category term='Defensive Publication'/><category term='distributed'/><category term='Knol'/><category term='type'/><category term='type class'/><category term='type inferencing'/><category term='deferred linking'/><category term='property'/><category term='mem&apos;mgt'/><category term='aop'/><category term='SOP'/><category term='psy'/><category term='HPC'/><category term='UPC'/><category term='concurrency'/><category term='record'/><category term='cp4e'/><category term='bundles'/><category term='patents'/><category term='mvc'/><category term='GPL'/><category term='Vala'/><category term='aggregate'/><category term='pragmatics'/><category term='mac'/><category term='adds'/><category term='tasklet'/><category term='kr'/><category term='unit testing'/><category term='eiffel'/><category term='off-side rule'/><category term='tree'/><category term='coffeescript'/><category term='dev.cocoa'/><category term='dev.qt'/><category term='svn'/><category term='label'/><category term='iConsume'/><category term='NetVM'/><category term='ruby'/><category term='dev.unix'/><category term='operator'/><category term='loop'/><category term='net'/><category term='list'/><category term='kb'/><category term='phy'/><category term='actors'/><category term='supertype'/><category term='perl'/><category term='efficiency'/><category term='Amer&apos;way'/><category term='continuations'/><category term='serialization'/><category term='journaling'/><category term='scratch'/><category term='MOP'/><category term='subheap'/><category term='polymorph'/><category term='Dalvik'/><category term='interface'/><category term='agents'/><category term='ambienttalk'/><category term='conditional'/><category term='Free Capitalist'/><category term='notifications'/><category term='frameworks'/><category term='enclosures'/><category term='tweaking'/><category term='dotNET'/><category term='iProduce'/><category term='clients'/><category term='1st-class functions'/><category term='ipc'/><category term='menu'/><category term='naming'/><category term='encapsulation'/><category term='markup'/><category term='ABC'/><category term='adda'/><category term='X10'/><category term='math'/><category term='tui'/><category term='operation'/><category term='cloud computing'/><category term='robotics'/><category term='Chrome OS'/><category term='constant'/><category term='multi-inheritance'/><category term='parse'/><category term='doc&apos;ing'/><category term='SCA'/><category term='scm'/><category term='lang'/><category term='modules'/><category term='vnc'/><category term='delegates'/><category term='preemptive'/><category term='wordcode'/><category term='tortoisehg'/><category term='kde'/><category term='PGAS'/><category term='meta'/><category term='literals'/><category term='compound doc&apos;s'/><category term='Category'/><category term='ideogram'/><category term='energy'/><category term='outliner'/><category term='HPCS'/><category term='s-expression'/><category term='unix'/><category term='type cluster'/><category term='standards'/><category term='subfiles'/><category term='ada'/><category term='Newspeak'/><category term='phi'/><category term='g&apos;code'/><category term='pypy'/><category term='keyboard shortcuts'/><category term='Promise'/><category term='addm'/><category term='C'/><category term='dimension'/><category term='gestures'/><category term='ontology'/><category term='syntax'/><category term='gear'/><category term='library'/><category term='evolver'/><category term='quantum'/><category term='prolog'/><category term='exceptions'/><category term='pointers'/><category term='dev.linux'/><category term='haskell'/><category term='function'/><category term='Qubes'/><category term='multi-dispatch'/><category term='DRM'/><category term='macro'/><category term='gemini kernel'/><category term='safe pointers'/><category term='supercomputing'/><category term='MPI'/><category term='constitution'/><category term='xml'/><category term='cap&apos;based'/><category term='wordnet'/><category term='adt'/><category term='dev.c'/><category term='os'/><category term='vmware'/><category term='security'/><category term='dsm'/><category term='capabilities'/><category term='Open Invention Network'/><category term='NUI'/><category term='literate prog&apos;ing'/><category term='lib&apos;mgt'/><category term='dev.obj&apos;c'/><category term='RPython'/><category term='value&apos;type'/><category term='DCT'/><category term='ducktype'/><category term='cyborganics'/><category term='goto'/><category term='gui'/><category term='case'/><category term='edu'/><category term='addl'/><category term='portability'/><category term='ergonomic'/><category term='xcode'/><category term='filesystem'/><category term='guest.tag'/><category term='dev.mac'/><category term='pol'/><category term='vfs(virtual file system)'/><category term='libjit'/><category term='CHaPeL'/><category term='wordule'/><category term='accessability'/><category term='singularity'/><category term='Go-CUT'/><category term='architecture'/><category term='powerset'/><category term='ide'/><category term='forks'/><category term='SML'/><category term='Fortress'/><category term='design patterns'/><category term='param&apos;s'/><category term='VHDL'/><category term='contracts'/><category term='morpheme'/><category term='addx'/><category term='hypermatrix'/><category term='journaled fs'/><category term='dev.gui'/><category term='microkernel'/><category term='Falcon'/><category term='terminology'/><category term='late binding'/><category term='general'/><category term='co.dev'/><category term='dstr'/><category term='gnome'/><category term='lui'/><category term='NUCC'/><category term='python'/><category term='ABI'/><category term='functional'/><category term='class'/><category term='llvm'/><category term='metalang'/><category term='dev.audio'/><category term='subtype'/><category term='Android'/><category term='intranet'/><category term='dev.ada'/><category term='christianity'/><category term='debug'/><category term='coroutine'/><category term='enum'/><category term='pr'/><category term='lexeme'/><category term='ling'/><category term='cad'/><category term='translation'/><category term='openware'/><category term='etree'/><category term='smartcards'/><category term='dvcs'/><category term='lisp'/><category term='GO'/><category term='oop'/><category term='dialogs'/><category term='e-lang'/><category term='relig'/><category term='c--'/><category term='nu'/><category term='Java'/><category term='class cluster'/><category term='time'/><category term='uniqueness'/><category term='key bindings'/><category term='sw.eng'/><category term='aui'/><category term='generics'/><category term='search'/><category term='superscript'/><category term='CPS'/><category term='green processes'/><category term='bitc'/><category term='chunk'/><category term='solar'/><category term='deadlock'/><category term='db'/><title type='text'>Americium Dream Documents</title><subtitle type='html'>. real opportunity starts with real documentation .</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default?start-index=101&amp;max-results=100'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>435</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4875005280512069640</id><published>2012-01-31T23:35:00.000-07:00</published><updated>2012-01-31T23:35:39.037-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>correctness vs capability constraints</title><content type='html'>&lt;i&gt;1.7: pos.&lt;b&gt;addx/security/&lt;/b&gt;correctness vs capability constraints:&lt;/i&gt;&lt;br /&gt;. I'm awed at the complexity of Ada;&lt;br /&gt;they go to great lengths to&lt;br /&gt;help you ensure program correctness;&lt;br /&gt;but I doubt it can be used by the public .&lt;br /&gt;. I think it would be sufficient to ensure only that&lt;br /&gt;module capabilities were expressable and enforceable;&lt;br /&gt;eg, any routes to implied sideaffects&lt;br /&gt;need to be declared by a module .&lt;br /&gt;. if parameters have links to caller`space,&lt;br /&gt;then lack of an out-mode declaration&lt;br /&gt;should by an assurance that the param&lt;br /&gt;has no sideaffects .&lt;br /&gt;[1.8:&lt;br /&gt;. when the users call an app,&lt;br /&gt;they expect know its capability limits,&lt;br /&gt;yet they may also expect dynamic updates,&lt;br /&gt;which could change the set of&lt;br /&gt;subprograms called by the app .&lt;br /&gt;. how does the user stay updated to&lt;br /&gt;implied changes in app capability limits,&lt;br /&gt;when the app has been linked to&lt;br /&gt;more powerful subprograms ?&lt;br /&gt;( you might assume that if you can trust a subprogram,&lt;br /&gt;then you can trust apps to use that subprogram;&lt;br /&gt;a counter example is when a worker has&lt;br /&gt;top security clearance to work with your gov,&lt;br /&gt;but you can't allow that work to be&lt;br /&gt;employed by foreign gov's) .]&lt;br /&gt;. if a subprogram has capabilities that are&lt;br /&gt;greater than the app calling it,&lt;br /&gt;then the app needs to&lt;br /&gt;declare these enabling subprograms,&lt;br /&gt;or the app's stated capabilities need to be&lt;br /&gt;a function of whatever the app links into&lt;br /&gt;dynamically .&lt;br /&gt;. if the app's capabilities changed since&lt;br /&gt;the user's last ok,&lt;br /&gt;then the ok from user or mgt&lt;br /&gt;has to happen again,&lt;br /&gt;else the app can't be allowed to run .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4875005280512069640?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4875005280512069640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/correctness-vs-capability-constraints.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4875005280512069640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4875005280512069640'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/correctness-vs-capability-constraints.html' title='correctness vs capability constraints'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-2701105142986873670</id><published>2012-01-31T23:29:00.000-07:00</published><updated>2012-01-31T23:29:00.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lui'/><category scheme='http://www.blogger.com/atom/ns#' term='addl'/><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><title type='text'>addx's text or lexical handler</title><content type='html'>&lt;i&gt;1.3: &lt;b&gt;addx/addt&lt;/b&gt; (text handler):&lt;/i&gt;&lt;br /&gt;&lt;b&gt;[1.31: update:&lt;/b&gt;&lt;br /&gt;addl is the lui = lexical user interface;&lt;br /&gt;"(addle) also means unable to think clearly&lt;br /&gt;-- just how many feel around terminals &lt;br /&gt;or any command line interface! ]&lt;br /&gt;&lt;b&gt;[1.6: summary:&lt;/b&gt;&lt;br /&gt;. my original vision of the addx system&lt;br /&gt;would avoid the use of shell,&lt;br /&gt;replacing all use of it with adde;&lt;br /&gt;but in case people would prefer access via shell,&lt;br /&gt;there should be a module specific to that need .&lt;br /&gt;. the essential feature of other shells,&lt;br /&gt;is that they use text as both the input and output,&lt;br /&gt;hence the name add`text .&lt;br /&gt;. the shell lets you pipe outputs of one command&lt;br /&gt;to the inputs of another command,&lt;br /&gt;and they all assume you are sending a text stream .&lt;br /&gt;. the addt module presents a set of commands&lt;br /&gt;that provide shell equivalents for everything in adde .&lt;br /&gt;. the addt commands are wrappers&lt;br /&gt;around addx commands that do translations&lt;br /&gt;from adda and addm word code to equivalent ascii versions .&lt;br /&gt;. if the addx equivalents need to be piped to or from&lt;br /&gt;native shell commands,&lt;br /&gt;then addt offers a translation between the native text,&lt;br /&gt;and addx binary communications:&lt;br /&gt;eg, some-unix-cmd | a2t | adda | t2a | another-unix-cmd .&lt;br /&gt;. another idea, to avoid explicit use of {a2t, t2a},&lt;br /&gt;is to have one shell within a shell like python has,&lt;br /&gt;but it would emulate the native shell's language,&lt;br /&gt;so that while you were still dealing with your favorite shell,&lt;br /&gt;you could also mix it with addx library calls,&lt;br /&gt;by having addt insert the needed conversion filters&lt;br /&gt;before passing it on to the actual shell .]&lt;br /&gt;&lt;b&gt;1.3: intro: &lt;/b&gt;&lt;br /&gt;. the c`main`argv and unix`conventions &lt;br /&gt;(esp'ly the borne shell)&lt;br /&gt;determine how the user at a command line&lt;br /&gt;can communicate with a program:&lt;br /&gt;the cli or shell determine how a command is parsed&lt;br /&gt;into the array of ascii strings that the program sees .&lt;br /&gt;&lt;b&gt;1.3: first idea:&lt;/b&gt;&lt;br /&gt;. addt is a cli tool that is first responder to &lt;br /&gt;any text inputs:&lt;br /&gt;. it converts text to ascii byte code &lt;br /&gt;which can be passed to `main's argv .&lt;br /&gt;. need to define an addx byte code that&lt;br /&gt;represents addm and etree as ascii rather than ints .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-2701105142986873670?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/2701105142986873670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/addxs-text-or-lexical-handler.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2701105142986873670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2701105142986873670'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/addxs-text-or-lexical-handler.html' title='addx&apos;s text or lexical handler'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7553809435333269931</id><published>2012-01-31T23:11:00.000-07:00</published><updated>2012-01-31T23:11:07.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>security per use case</title><content type='html'>&lt;i&gt;1.1: addx/security per use case:&lt;/i&gt;&lt;br /&gt;. know your users, &lt;a href="http://www.amazon.com/gp/product/0470525959?ie=UTF8&amp;amp;tag=americiu-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470525959"&gt;the security book&lt;/a&gt; advises?&lt;br /&gt;a corollary is:&lt;br /&gt;&amp;nbsp;make it clear in both the code's logic&lt;br /&gt;&amp;nbsp;and in the user's doc's,&lt;br /&gt;what you expect of users .&lt;br /&gt;. it was talking about the problem of&lt;br /&gt;making security a hassle for users,&lt;br /&gt;when, if you thought it out better,&lt;br /&gt;you could find just the security measures you need&lt;br /&gt;&amp;nbsp;for their use case, and then bake just that in .&lt;br /&gt;. one thing I recall hating&lt;br /&gt;is not knowing all the dead ends upfront .&lt;br /&gt;. there's all these things that can't be done,&lt;br /&gt;and you can't know about it because&lt;br /&gt;"(this app is so easy, intuitive, no thick manuals, etc ).&lt;br /&gt;...&lt;br /&gt;. sometimes you might not know what your users expect;&lt;br /&gt;so then the menu's should have a search box&lt;br /&gt;in addition to the menu hierarchy;&lt;br /&gt;and, if a search returns nothing,&lt;br /&gt;&amp;nbsp;you ask them to explain what they want that is missing .&lt;br /&gt;for touchscreen users,&lt;br /&gt;and for those not familiar with terminology,&lt;br /&gt;use a set of menus for identifying how features are&lt;br /&gt;grouped by what kinds of things they do,&lt;br /&gt;and by what the feature is called .&lt;br /&gt;. let the users pick a place in that tree,&lt;br /&gt;and optionally give a sentence for detailing&lt;br /&gt;what's missing from the tree .&lt;br /&gt;. a google app engine site could&lt;br /&gt;merge all these requests and build the tree;&lt;br /&gt;the tree will also be offline but not always uptodate .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7553809435333269931?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7553809435333269931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/security-per-use-case.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7553809435333269931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7553809435333269931'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/security-per-use-case.html' title='security per use case'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4146963150058654614</id><published>2012-01-31T22:58:00.000-07:00</published><updated>2012-01-31T22:58:10.087-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='case'/><category scheme='http://www.blogger.com/atom/ns#' term='hash'/><category scheme='http://www.blogger.com/atom/ns#' term='addm'/><title type='text'>addm's case instruction</title><content type='html'>&lt;i&gt;addm/cstr/case/&lt;b&gt;large domain space issues:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;[1.8:&lt;/i&gt;&lt;b&gt; intro:&lt;/b&gt;&lt;br /&gt;. for a classic case stmt, one ensuring that&lt;br /&gt;no more than one exec'path was activated,&lt;br /&gt;the primary purpose of the variables (and arithmetic)&lt;br /&gt;is to dynamically set the guard ranges .]&lt;br /&gt;&lt;br /&gt;if case ranges can be variable expressions,&lt;br /&gt;how does that work at the machine level?&lt;br /&gt;. the alternative execution paths are numbered: 0...n,&lt;br /&gt;so the case stmt is an array 0..n of&lt;br /&gt;pointer to subroutine .&lt;br /&gt;. the pointer could be an offset of the program counter,&lt;br /&gt;so they can be word sized or even byte sized .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[1.8: &lt;b&gt;case method depends on domain size&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. typically for each exec'path,&lt;br /&gt;there is either a list of literals,&lt;br /&gt;or else a pair of possibly variable expressions&lt;br /&gt;delimiting a range .&lt;br /&gt;. next there are 2 cases of domain space:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# small:&lt;/b&gt;&lt;br /&gt;. the expression being cased is less than a byte,&lt;br /&gt;or certainly not more than a 16bit word .&lt;br /&gt;. in this case there is a direct mapping&lt;br /&gt;from enum to exec'path number .&lt;br /&gt;. we sort the literal cases,&lt;br /&gt;thus allowing for a binary search during run-time .&lt;br /&gt;. for the case ranges, a..b, c..d, ...,&lt;br /&gt;we need the if/else if ... list:&lt;br /&gt;case =&amp;gt; a and case &amp;lt;= b ?&lt;br /&gt;&amp;nbsp; goto ...&lt;br /&gt;else case =&amp;gt; c and case &amp;lt;= d ?&lt;br /&gt;&amp;nbsp; goto ...&lt;br /&gt;else ... .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# huge: ... &lt;/b&gt;]&lt;br /&gt;large domain space issues:&lt;br /&gt;. how do the cases map to 0..n&lt;br /&gt;when not enum literals?&lt;br /&gt;that's when it loses the efficiency&lt;br /&gt;that case stmt's are known for:&lt;br /&gt;. it's eval'ing every exec'path guard expression&lt;br /&gt;as well as the expression being cased,&lt;br /&gt;then it might be reduced to crawling through&lt;br /&gt;a huge {if/else if ...} list;&lt;br /&gt;what it checks first might depend on profiling:&lt;br /&gt;in the past eval's of this case stmt,&lt;br /&gt;what percentage of time was each case chosen?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.8: hashing intro:&lt;/b&gt;&lt;br /&gt;. the expression is larger than small;&lt;br /&gt;in this case, hashing might work?&lt;br /&gt;in a hash the typical problem is&lt;br /&gt;associating a name with an id# .&lt;br /&gt;. when you find the name,&lt;br /&gt;then you need to replace it with the id#;&lt;br /&gt;you could place the string in a sorted container&lt;br /&gt;in which the insertion operation was cheap;&lt;br /&gt;and then do a binary search to find it,&lt;br /&gt;or you could use the hash method:&lt;br /&gt;. if you expect n strings,&lt;br /&gt;then use an algorithm to turn the string into&lt;br /&gt;a number that can range of n values;&lt;br /&gt;eg, if there are less than 2*^16&amp;nbsp; values,&lt;br /&gt;then your hash function should return 16bit ints .&lt;br /&gt;. if 2 strings result in the same number&lt;br /&gt;then they both go in the same bucket,&lt;br /&gt;so when your search finds a bucket,&lt;br /&gt;it has to crawl as with the binary search .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1.8: &lt;b&gt;back to the casing problem&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. if the expression being cased is a huge number or string,&lt;br /&gt;then with the literals used in the guard&lt;br /&gt;we build a hash table,&lt;br /&gt;and then hash the value being cased .&lt;br /&gt;. when we find the match,&lt;br /&gt;it's associated with the exec'path number we need .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4146963150058654614?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4146963150058654614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/addms-case-instruction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4146963150058654614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4146963150058654614'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/addms-case-instruction.html' title='addm&apos;s case instruction'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3268462162121708325</id><published>2012-01-31T22:43:00.000-07:00</published><updated>2012-01-31T22:43:33.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>integrated app tutorials</title><content type='html'>&lt;i&gt;1.22: adde/&lt;b&gt;integrated demo's&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. you can often see vid's of how to handle a gui interface;&lt;br /&gt;it would be handy to instead have&lt;br /&gt;a script that enhanced your gui:&lt;br /&gt;it shows a balloon msg at what to click next;&lt;br /&gt;and you can hit return to have it do one step at a time:&lt;br /&gt;what it says you should be doing: &lt;br /&gt;eg, it points to the menu, &lt;br /&gt;hitting return opens the menu,&lt;br /&gt;it points to a menu item,&lt;br /&gt;hitting return launches the item ... .&lt;br /&gt;. it can do this because &lt;br /&gt;every gui view is represented as data structures,&lt;br /&gt;so the demo app is reading as text&lt;br /&gt;the same thing being shown to you graphically .&lt;br /&gt;. it then finds what it expects,&lt;br /&gt;and sends a balloon launch of the expected item .&lt;br /&gt;. this way, if the app's interface changes,&lt;br /&gt;then the demo can give up gracefully &lt;br /&gt;when a search fails,&lt;br /&gt;rather than showing you views of the app&lt;br /&gt;that don't really exist .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1.24: news.adde/&lt;b&gt;Apple`Popovers&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. the feature I had for adde recently&lt;br /&gt;(integrated tutorials) [@] adde/integrated demo's&lt;br /&gt;is partially supported by apple now,&lt;br /&gt;and goes by the name &lt;a href="https://developer.apple.com/technologies/mac/whats-new.html"&gt;Popovers&lt;/a&gt; .&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;"( AppKit framework now includes popovers,&lt;br /&gt;a new unit of content that can be positioned relative to&lt;br /&gt;other content on the screen.&lt;br /&gt;Popovers automatically move whenever the&lt;br /&gt;positioning view moves.&lt;br /&gt;You can also design popovers that can be detached,&lt;br /&gt;allowing them to become a separate window. )&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3268462162121708325?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3268462162121708325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/integrated-app-tutorials.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3268462162121708325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3268462162121708325'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/integrated-app-tutorials.html' title='integrated app tutorials'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4697511464642018956</id><published>2012-01-31T22:31:00.000-07:00</published><updated>2012-01-31T22:31:32.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unicode'/><category scheme='http://www.blogger.com/atom/ns#' term='wordcode'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>which scripts are in what-size utf-8 codes</title><content type='html'>&lt;i&gt;&lt;b&gt;adde/utf-8&lt;/b&gt;/which codes are in how many bytes? &lt;/i&gt;&lt;br /&gt;&lt;b&gt;1.5: todo: [done]&lt;/b&gt;&lt;br /&gt;. in utf-8, the number of bytes per code is incremental:&lt;br /&gt;ascii uses 8bytes;&lt;br /&gt;then how is it divided between 2..4 bytes&lt;br /&gt;along what code pages? [1.31:&lt;br /&gt;11-bits in 2 bytes, -- most euro or compact langs&lt;br /&gt;16-bits in 3 bytes -- &lt;a href="http://tlt.its.psu.edu/suggestions/international/bylanguage/mathchart.html#set"&gt;math&lt;/a&gt; &amp;amp; most other lang's&lt;br /&gt;21-bits in 4 bytes -- &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/UTF-8#Codepage_layout"&gt;In November 2003&lt;/a&gt; UTF-8 was restricted to U+10FFFF,&lt;br /&gt;in order to match the constraints of the&lt;br /&gt;UTF-16 character encoding.&lt;br /&gt;This removed the 5 and 6-byte sequences,&lt;br /&gt;and about half the 4-byte sequences.]&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/UTF-8#Codepage_layout"&gt;1.6: web:&lt;/a&gt;&lt;br /&gt;Bits &amp;nbsp;&amp;nbsp;&amp;nbsp; Last code point &amp;nbsp;&amp;nbsp;&amp;nbsp; Byte 1 &amp;nbsp;&amp;nbsp;&amp;nbsp; Byte 2..4&lt;br /&gt;&amp;nbsp; 7 &amp;nbsp;&amp;nbsp;&amp;nbsp; 7F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xxxxxxx&lt;br /&gt;11 &amp;nbsp;&amp;nbsp;&amp;nbsp; 07FF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110xxxxx &amp;nbsp;&amp;nbsp;&amp;nbsp; 10xxxxxx&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;--. Latin letters with diacritics and characters from the&lt;br /&gt;-- Greek, Cyrillic, Coptic, Armenian, Hebrew, Arabic, Syriac and Tāna alphabets&lt;/span&gt;&lt;br /&gt;16 &amp;nbsp;&amp;nbsp;&amp;nbsp; FFFF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1110xxxx &amp;nbsp;&amp;nbsp;&amp;nbsp; 10xxxxxx&amp;nbsp;&amp;nbsp; *2&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;--. the rest of the Basic Multilingual Plane&lt;br /&gt;-- (which contains virtually all characters in common use). &lt;/span&gt;&lt;br /&gt;21 &amp;nbsp;&amp;nbsp;&amp;nbsp; 10,FFFF &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 11110xxx &amp;nbsp;&amp;nbsp;&amp;nbsp; 10xxxxxx &amp;nbsp;&amp;nbsp;&amp;nbsp; *3&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;--. less common CJK characters and various historic scripts.&lt;/span&gt;&lt;br /&gt;1.31: &lt;a href="http://en.wikipedia.org/wiki/Mathematical_operators_and_symbols_in_Unicode"&gt;web: where are the math symbols? in 3-bytes:&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mathematical Operators (U+2200–U+22FF)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Miscellaneous Mathematical Symbols-A (U+27C0–U+27EF)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Miscellaneous Mathematical Symbols-B (U+2980–U+29FF)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Supplemental Mathematical Operators (U+2A00–U+2AFF)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Letterlike Symbols (U+2100–U+214F)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ceilings and floors in Miscellaneous technical (U+2308–U+230B)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Geometric Shapes (U+25A0–U+25FF)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Arrows in Miscellaneous Symbols and Arrows (U+2B30–U+2B4C)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mathematical Alphanumeric Symbols (1D400–1D7FF)&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4697511464642018956?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4697511464642018956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/which-scripts-are-in-what-size-utf-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4697511464642018956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4697511464642018956'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/which-scripts-are-in-what-size-utf-8.html' title='which scripts are in what-size utf-8 codes'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-326352957242263572</id><published>2012-01-31T21:48:00.000-07:00</published><updated>2012-01-31T21:48:59.102-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='ada'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>translating Cocoa's obj'c to Ada's concurrency</title><content type='html'>&lt;i&gt;1.24: &lt;b&gt;adda/co&lt;/b&gt;/translating Cocoa's obj'c to Ada's concurrency:&lt;/i&gt;&lt;br /&gt;. &lt;a href="http://www.amazon.com/gp/product/0321774086?ie=UTF8&amp;amp;tag=americiu-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0321774086"&gt;Hillegass's mac book&lt;/a&gt; has an inspiring section on concurrency .&lt;br /&gt;summary:&lt;br /&gt;the key to no race conditions is no indirect use of&lt;br /&gt;shared modified variables;&lt;br /&gt;anything done with the Cocoa libraries&lt;br /&gt;should get exec'd as a msg sent to the main thread .&lt;br /&gt;&lt;br /&gt;. adda needs a way to know when a function is&lt;br /&gt;calling something that is not thread safe,&lt;br /&gt;ie, not only can it not be allowed to modify non-locals,&lt;br /&gt;it can't even call anyting that would modify a non-local&lt;br /&gt;-- or even read a non-local if there's a chance that&lt;br /&gt;some other thread might modify it .&lt;br /&gt;. or else,&lt;br /&gt;it can put mutexes around code doing the reading;&lt;br /&gt;or, it can put shared globals in ada's protected var,&lt;br /&gt;getting all requests by queue&lt;br /&gt;and putting all outputs on a temp pointer provided by caller:&lt;br /&gt;eg, "( this is one of the pointers on my mailbox,&lt;br /&gt;it will be reserved for your response;&lt;br /&gt;I will check it for non-nil until I find something ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-326352957242263572?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/326352957242263572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/translating-cocoas-objc-to-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/326352957242263572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/326352957242263572'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/translating-cocoas-objc-to-adas.html' title='translating Cocoa&apos;s obj&apos;c to Ada&apos;s concurrency'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1071606673668007469</id><published>2012-01-31T21:31:00.000-07:00</published><updated>2012-01-31T21:31:02.843-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='type class'/><category scheme='http://www.blogger.com/atom/ns#' term='class cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='design patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.obj&apos;c'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>alloc-init pattern's rationale</title><content type='html'>&lt;i&gt;1.23: sci,bk.&lt;b&gt;adda/lang"obj'c&lt;/b&gt;/alloc-init pattern's rationale:&lt;/i&gt;&lt;br /&gt;. in &lt;a href="http://www.amazon.com/gp/product/B002RAPB46?ie=UTF8&amp;amp;tag=americiu-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=B002RAPB46"&gt;{Buck, Yacktman}`Cocoa Design Patterns&lt;/a&gt;&lt;br /&gt;they explain the rational for separating init from alloc;&lt;br /&gt;eg, x`= NSString`alloc`init . &lt;br /&gt;. alloc can be a class function because&lt;br /&gt;the mem requirements are known from&lt;br /&gt;the interface ivars list defined by&lt;br /&gt;self and self's superclasses .&lt;br /&gt;. alloc works something like malloc,&lt;br /&gt;only it is accepting a list of types&lt;br /&gt;and converting them into the bytes count&lt;br /&gt;that the malloc needs .&lt;br /&gt;&lt;br /&gt;. my first reaction to this convention was:&lt;br /&gt;how would you know what to allocate&lt;br /&gt;until you see what there is to init?&lt;br /&gt;these functions should indeed be separate;&lt;br /&gt;but, the init should be calling the alloc,&lt;br /&gt;rather than init being handed alloc's result by parameter .&lt;br /&gt;&lt;br /&gt;. one continuing important reason for this convention&lt;br /&gt;is communicating to client who it is that should be&lt;br /&gt;doing the retains:&lt;br /&gt;. the convention is that convenience methods are&lt;br /&gt;using your autorelease pool .&lt;br /&gt;. using the alloc init is your sign that&lt;br /&gt;you own it (you need to auto/release it yourself )&lt;br /&gt;&lt;br /&gt;. other than that, I've seen no intrinsic need for it;&lt;br /&gt;... but, how does inheritance complicate things?&lt;br /&gt;&lt;br /&gt;. it looks like the main reason is legacy code:&lt;br /&gt;the Cocoa library can't maintain backward compatibility&lt;br /&gt;unless you follow this convention .&lt;br /&gt;&lt;br /&gt;. the main reason alloc was a class method,&lt;br /&gt;was that init should be an instance method&lt;br /&gt;but alloc (the source of the instance)&lt;br /&gt;would have to be from a class method&lt;br /&gt;because instance methods work on instances,&lt;br /&gt;so the alloc couldn't be an instance method .&lt;br /&gt;. I'm not sure whether {Buck, Yacktman} said that;&lt;br /&gt;however, some oop evangelist did say that,&lt;br /&gt;and I'd like to show next,&lt;br /&gt;why I don't think it's true .&lt;br /&gt;&lt;br /&gt;[1.31: 1.23:&lt;br /&gt;. the usual oop idioms very much depend on&lt;br /&gt;the root object being a pointer to heap node;&lt;br /&gt;-- where that pointer that is the same size&lt;br /&gt;across all objects --&lt;br /&gt;and that pointer exists even before alloc is called .&lt;br /&gt;&amp;nbsp;. what the object really needs in order to have&lt;br /&gt;&amp;nbsp;access to some instance var's,&lt;br /&gt;&amp;nbsp;is to belong to some specific class;&lt;br /&gt;&amp;nbsp;and,&amp;nbsp; it could get this either by&lt;br /&gt;&amp;nbsp;sending an init msg to the specific class it wants&lt;br /&gt;&amp;nbsp;or by letting the init's param decide on a class,&lt;br /&gt;&amp;nbsp;based upon the type of initial value assigned&lt;br /&gt;&amp;nbsp;(for example, when the compiler gets a value literal,&lt;br /&gt;&amp;nbsp;it can infer a type class from that:&lt;br /&gt;&amp;nbsp;"(abc) is a string&lt;br /&gt;&amp;nbsp;123 is a number&lt;br /&gt;&amp;nbsp;(1,2,3) is an array of number&lt;br /&gt;&amp;nbsp;(1, "(abc)) is a record in (number, string).&lt;br /&gt;&amp;nbsp;) . init figures out what it needs,&lt;br /&gt;&amp;nbsp;and then calls an alloc to help with that .&lt;br /&gt;&amp;nbsp;. if the client has a preference for some alloc technique&lt;br /&gt;&amp;nbsp;that could be a param&amp;nbsp; of the init,&lt;br /&gt;&amp;nbsp;initWith (source, allocWith: style ) .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1071606673668007469?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1071606673668007469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/alloc-init-patterns-rationale.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1071606673668007469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1071606673668007469'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/alloc-init-patterns-rationale.html' title='alloc-init pattern&apos;s rationale'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9160717791150686643</id><published>2012-01-31T19:44:00.000-07:00</published><updated>2012-01-31T19:44:29.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>a fraction calculator's interface without over.key</title><content type='html'>&lt;i&gt;1.22: &lt;b&gt;adde/math&lt;/b&gt;/handling fractions:&lt;/i&gt;&lt;br /&gt;. the &lt;a href="http://www.amazon.com/gp/product/0321566157?ie=UTF8&amp;amp;tag=americiu-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0321566157"&gt;Kochan`Fractions Calculator&lt;/a&gt; has an over.key,&lt;br /&gt;for allowing a fraction to be entered without eval'ing it;&lt;br /&gt;another way to handle this&lt;br /&gt;is to enter complex expressions:&lt;br /&gt;nothing is eval'd until you hit enter,&lt;br /&gt;so, expecting fractions, the only division happens when&lt;br /&gt;there is the form a/b / c/d .&lt;br /&gt;. also, the policy could be that&lt;br /&gt;div's would be eval'd only when&lt;br /&gt;they represent exact fractions:&lt;br /&gt;eg, 2/5 is 2/5, while 1/2 is 0.5 [1.31:&lt;br /&gt;that does present a problem with the base being decimal, 2*5&lt;br /&gt;but the storage's base being binary?&lt;br /&gt;you could have an exact fraction like 1/5 = 0.2 in base 10,&lt;br /&gt;but that is a irrational number in base 2 .]&lt;br /&gt;...&lt;br /&gt;. even if it did eval each operator a.s.a.p.,&lt;br /&gt;it could simply reduce and stay exact:&lt;br /&gt;14/10 = 7/5 = (1+2/5).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9160717791150686643?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9160717791150686643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/fraction-calculators-interface-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9160717791150686643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9160717791150686643'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/fraction-calculators-interface-without.html' title='a fraction calculator&apos;s interface without over.key'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3609706342850866018</id><published>2012-01-31T18:59:00.000-07:00</published><updated>2012-01-31T18:59:22.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='Category'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.obj&apos;c'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>Objective-C Categories</title><content type='html'>&lt;i&gt;1.20: &lt;b&gt;adda/type/&lt;/b&gt;obj'c categories:&lt;/i&gt;&lt;br /&gt;. Apple is using the obj'c Category for mvc separation;*&lt;br /&gt;eg, string has many uses in a command-line interface,&lt;br /&gt;so it exists in the core package&lt;br /&gt;without any methods for drawing on a gui;&lt;br /&gt;categories are then simply extending that string type,&lt;br /&gt;instead of having sublclasses reuse that string type&lt;br /&gt;in yet another type;&lt;br /&gt;so just one class can exist yet with&lt;br /&gt;relevant parts in different packages .&lt;br /&gt;* see &lt;a href="http://www.amazon.com/gp/product/B002RAPB46?ie=UTF8&amp;amp;tag=americiu-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=B002RAPB46"&gt;{ Buck, Yacktman}`Cocoa Design Patterns&lt;/a&gt;&lt;br /&gt;&lt;b&gt;todo:&lt;/b&gt;&lt;br /&gt;. isn't that use of categories needed only because&lt;br /&gt;it's assuming something demanded by the current oop model?&lt;br /&gt;&lt;br /&gt;. if your string wants to talk about gui-specific tricks&lt;br /&gt;like font, or curve following,&lt;br /&gt;that should be served by a drawing record&lt;br /&gt;which then has a string as one of it's parts .&lt;br /&gt;(ie, it's ok to have 2 diff'ing classes !)&lt;br /&gt;--&lt;br /&gt;that was a main point of the book"design patterns:&lt;br /&gt;it was a critique of oop's use of subclassing;&lt;br /&gt;and, that criticism can apply equally well to categorizing;&lt;br /&gt;but, notice it does have a good purpose:&lt;br /&gt;it allows separate compilation of extensions&lt;br /&gt;without having to recompile the original interface&lt;br /&gt;which would then require a recompile of&lt;br /&gt;all the clients of that interface .&lt;br /&gt;&lt;br /&gt;. but in this case, the category pattern is not needed,&lt;br /&gt;the pattern to follow is this:&lt;br /&gt;. the whole point of the mvc pattern is that&lt;br /&gt;nearly all programming should be doable without having to&lt;br /&gt;be aware of what your output device is .&lt;br /&gt;. the same program I write for the command-line&lt;br /&gt;should be apply without modification&lt;br /&gt;to use by the gui-interfaced user .&lt;br /&gt;. the runtime is supposed to have a default way of&lt;br /&gt;visualizing your data structures graphically .&lt;br /&gt;. the user is just another inout process&lt;br /&gt;interacting with your process;&lt;br /&gt;so, the gui should be handled by 2 generic packages:&lt;br /&gt;it communicates with a concurrent process,&lt;br /&gt;and then is also aware of 2-d or 3-d&lt;br /&gt;placement preferences of datastruct's .&lt;br /&gt;&lt;br /&gt;. so, how does adda let you define special effects&lt;br /&gt;such as those specific to one style of gui?&lt;br /&gt;eg, the curve-following text&lt;br /&gt;needs a record (string, linedata),&lt;br /&gt;and that record should have a particular name, say SL,&lt;br /&gt;so then any var assigned the type SL&lt;br /&gt;will be treated by the adda system as curve-following text&lt;br /&gt;at least when dealing with the contexts&lt;br /&gt;that are specified as customized by SL .&lt;br /&gt;. the 2 primary contexts that work like that&lt;br /&gt;are the user interface,&lt;br /&gt;and the memory usage:&lt;br /&gt;(persistent file, ram buffer, L1,2,3 cache).&lt;br /&gt;. conversely,&lt;br /&gt;when assigning an SL value to a native type,&lt;br /&gt;then all gui-specific info would be dropped .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;analysis of what it offers:&lt;/b&gt;&lt;br /&gt;. the category has 2 use cases, depending on&lt;br /&gt;whether you have the interface code,&lt;br /&gt;or just have an interface document&lt;br /&gt;that doesn't list the private ivars of the type .&lt;br /&gt;. if you don't have the interface,&lt;br /&gt;the diff' it makes seems purely syntactic:*&lt;br /&gt;native functions can be stated oopishly: x`f();&lt;br /&gt;and with categories you can start writing x`MYf() .&lt;br /&gt;. that is offering more than just&lt;br /&gt;adding a package whose input types are x`type:&lt;br /&gt;the new package is being registered with the type,&lt;br /&gt;so when I ask that type to apply a symbol named MYf,&lt;br /&gt;the run-time engine is able to say it does .&lt;br /&gt;. so, what is the equivalent to that&lt;br /&gt;in lispy procedural (vs oop) programming?&lt;br /&gt;. say the apply-operator is @,&lt;br /&gt;I can then say ('f @ 'x) to mean f(x),&lt;br /&gt;so that to apply dynamically any variable, X,&lt;br /&gt;to any function, F,&lt;br /&gt;I can write X`= 'x, F`= 'f, .... F @ X .&lt;br /&gt;. it then looks to see if there exists a function f&lt;br /&gt;that accepts x`type .&lt;br /&gt;*: [1.31:&lt;br /&gt;. even without affecting ivars,&lt;br /&gt;the diff' it makes can be quite significant;&lt;br /&gt;because, it can override methods that have&lt;br /&gt;special systemic effects on the ivars,&lt;br /&gt;and those effects will be missing .&lt;br /&gt;&lt;br /&gt;. the oop syntax allows this:&lt;br /&gt;x`f()`g()`h()&lt;br /&gt;which means that x`f() returns an object x2&lt;br /&gt;which, in turn, understands&lt;br /&gt;what to do with g(), etc .&lt;br /&gt;. so, the functional equivalent to x`f(...)`g(...)`h(...)&lt;br /&gt;is h(g(f(x, ...), ... ), ...).&lt;br /&gt;. that could mean the run-time is doing another check:&lt;br /&gt;is there an f(x`type).y,&lt;br /&gt;such that there is a function named g&lt;br /&gt;that can accept y`type ?&lt;br /&gt;. obj'c is not concerned with that though,&lt;br /&gt;because once you assign a function to a particular type,&lt;br /&gt;the run-time can quickly know to use&lt;br /&gt;the function name f that is registered with that type .&lt;br /&gt;. after that, it doesn't matter whether g can handle it;&lt;br /&gt;because the object returned by x`type according to x`f &lt;br /&gt;is offering no other choices .&lt;br /&gt;. the reason obj'c does it this way&lt;br /&gt;is for the other use case:&lt;br /&gt;where the interface is known so then the&lt;br /&gt;functions being added to x`type&lt;br /&gt;need to register with x`type because &lt;br /&gt;otherwise they won't be granted access to x`type's&lt;br /&gt;private instance var's .&lt;br /&gt;. this, then, is what obj'c categories uniquely do;&lt;br /&gt;it's something like ada's child package feature .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3609706342850866018?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3609706342850866018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/objective-c-categories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3609706342850866018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3609706342850866018'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/objective-c-categories.html' title='Objective-C Categories'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-671729624170180656</id><published>2012-01-31T18:14:00.001-07:00</published><updated>2012-01-31T19:01:37.285-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='mem&apos;mgt'/><category scheme='http://www.blogger.com/atom/ns#' term='tree'/><title type='text'>large trees composed of byte-ptr trees</title><content type='html'>&lt;i&gt;1.8: &lt;b&gt;adda/mem'mgt/&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;i&gt;large trees composed of byte-ptr trees:&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;. part of a space-saving obssession has been&lt;br /&gt;finding how to make large trees be composed of&lt;br /&gt;small trees that can use byte-sized pointers .&lt;br /&gt;. the large tree is just like the local heap space:&lt;br /&gt;a function activation record is given one segment&lt;br /&gt;in which to store local data and param's;&lt;br /&gt;after that fills up, it's turned into rib of a backbone segment:&lt;br /&gt;(an array of c pointers to other segs).&lt;br /&gt;. the way this is arranged should be such that&lt;br /&gt;we can refer to the rib segs as indexes of the base seg,&lt;br /&gt;. if all those fill up, then the last seg is the next size up:&lt;br /&gt;. say the backbone hold 10ribs of size 10,&lt;br /&gt;then the last rib is 10x10 size.&lt;br /&gt;...&lt;br /&gt;. isn't this supposed to be building the same way numbers do?&lt;br /&gt;after the backbone fills up, it needs to be extended from above;&lt;br /&gt;ie, replace the seg tree with a new backbone seg,&lt;br /&gt;and then make the full backbone seg&lt;br /&gt;a child of the new backbone seg:&lt;br /&gt;====&lt;br /&gt;|&lt;br /&gt;====&lt;br /&gt;| | | | | .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1.23: adda/type"tree/&lt;b&gt;packing smaller trees&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. you can build a tree in large array&lt;br /&gt;and if detecting under 255,&lt;br /&gt;do a straight copy to small: for 1..256: copy word to byte&lt;br /&gt;because the same links apply using the same structure&lt;br /&gt;only smaller pointers .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-671729624170180656?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/671729624170180656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/large-trees-composed-of-byte-ptr-trees.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/671729624170180656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/671729624170180656'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/large-trees-composed-of-byte-ptr-trees.html' title='large trees composed of byte-ptr trees'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4249509891307204010</id><published>2012-01-31T16:44:00.000-07:00</published><updated>2012-01-31T16:44:04.202-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='enclosures'/><category scheme='http://www.blogger.com/atom/ns#' term='goto'/><title type='text'>wild vs proper goto's vs informal looping</title><content type='html'>&lt;i&gt;1.6: &lt;b&gt;adda/cstr/goto&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. if goto's are jumping high in same the block&lt;br /&gt;the place they jump to need only be typed .loop,&lt;br /&gt;but wild jumps need to be typed .&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;br /&gt;. when used at the end to break from a nested cstr,&lt;br /&gt;the goto is a clean jump to bottom,&lt;br /&gt;these are typed .exit? [1.31:&lt;br /&gt;no:&lt;br /&gt;. this is the proper use of goto;&lt;br /&gt;so, it doesn't need a special type,&lt;br /&gt;but every thing should have a type,&lt;br /&gt;and the default type for labels could be .label .]&lt;br /&gt;&lt;br /&gt;. to enter wrapup.label&lt;br /&gt;use the syntax (enter wrapup) ? [1.31:&lt;br /&gt;yes .]&lt;br /&gt;. don't use the syntax (exit);&lt;br /&gt;because, it may not be to exit self*&lt;br /&gt;and (exit (current enclosure)) should be reserved for&lt;br /&gt;situations that actually involve&lt;br /&gt;jumping out of some enclosing container .&lt;br /&gt;*:&lt;br /&gt;. the other exits are&amp;nbsp; {main, parent, thread}&lt;br /&gt;as well as named cstr's {case, loop }.&lt;br /&gt;&lt;br /&gt;. at each cstr (any structure that may contain stmts)&lt;br /&gt;there can be a wrapup section named [on exit];&lt;br /&gt;on().proc can also concurrently check&lt;br /&gt;any number of conditions that implicitely&lt;br /&gt;call the given responder routine when the guard is true . [1.31: &lt;br /&gt;eg, on mem-out: (save work; log error) .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4249509891307204010?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4249509891307204010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/wild-vs-proper-gotos-vs-informal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4249509891307204010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4249509891307204010'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/wild-vs-proper-gotos-vs-informal.html' title='wild vs proper goto&apos;s vs informal looping'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-430863985233930751</id><published>2012-01-31T16:10:00.000-07:00</published><updated>2012-01-31T16:10:05.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='case'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><title type='text'>variable case ranges</title><content type='html'>&lt;i&gt;1.5: &lt;b&gt; adda/cstr/case&lt;/b&gt;/variable case ranges:&lt;/i&gt;&lt;br /&gt;. if the cases can be variable expressions&lt;br /&gt;how does that work? how useful is that?&lt;br /&gt;it does seem to suit a parallel case,&lt;br /&gt;which would entail this equivalence:&lt;br /&gt;e? # a: ;;; # b: ;;; # c: ;;; #; &amp;lt;=&amp;gt;&lt;br /&gt;eval'd in parallel:&lt;br /&gt;{ e= a? (;;;)&lt;br /&gt;, e= b? (;;;)&lt;br /&gt;, e= c? (;;;) &lt;br /&gt;}&lt;br /&gt;. the general characteristic required for&lt;br /&gt;a non-parallel case stmt&lt;br /&gt;is that it select no more than one of the&lt;br /&gt;alternative execution paths .&lt;br /&gt;. one useful example of variable case ranges&lt;br /&gt;is when the use of variables and simple arithmetic&lt;br /&gt;still provide a partition of the codomain,&lt;br /&gt;ie, none of the case ranges are overlapping;&lt;br /&gt;eg,&lt;br /&gt;here are examples of simply shifting&lt;br /&gt;the location of the boundaries between&lt;br /&gt;exec'path guard partitions:&lt;br /&gt;reals from a..d can vary to effect the outcome&lt;br /&gt;of the following case .&lt;br /&gt;e ?&lt;br /&gt;#[a...b): proc1;&lt;br /&gt;#[b...c): proc2;&lt;br /&gt;#[c...d]: proc3 #;&lt;br /&gt;and likewise for these variable integer ranges:&lt;br /&gt;{a..b}, {b+1..c}, {c+1..d} .&lt;br /&gt;. another use of such arithmetic&lt;br /&gt;would provide case-range restrictions,&lt;br /&gt;so that a varying set of cases are going to&lt;br /&gt;the {others, do-nothing} execution paths .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-430863985233930751?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/430863985233930751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/variable-case-ranges.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/430863985233930751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/430863985233930751'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/variable-case-ranges.html' title='variable case ranges'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-51806918906818672</id><published>2012-01-31T15:54:00.000-07:00</published><updated>2012-01-31T15:54:02.212-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='enclosures'/><category scheme='http://www.blogger.com/atom/ns#' term='parse'/><title type='text'>parsing unmatching opening characters</title><content type='html'>&lt;i&gt;1.5: &lt;b&gt;adda/parse&lt;/b&gt;/&lt;b&gt;algorithm&lt;/b&gt; for parsing &lt;b&gt;containers&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. there can be non-matching container parts,&lt;br /&gt;because they can be surounded by complete containers,&lt;br /&gt;eg, ( ... [ ...{} ),&lt;br /&gt;. the recursive way is this:&lt;br /&gt;find an opening to some container,&lt;br /&gt;and then call the function that reads that container;&lt;br /&gt;what else that function will need, though,&lt;br /&gt;is knowing whether it was sent by &lt;br /&gt;another container-reading function;&lt;br /&gt;so, in the example above, ( ... [ ...{} ),&lt;br /&gt;getParen is calling getBracket( ")" ),&lt;br /&gt;so then getBracket knows it needs to be stopping for&lt;br /&gt;both {")", "]"}, whichever come first .&lt;br /&gt;. if getBracket returns nil,&lt;br /&gt;then getParen will know that the "[" should be taken as&lt;br /&gt;a character, not the beginning of a subtree .&lt;br /&gt;. any 3rd possibility?&lt;br /&gt;no, but&amp;nbsp; it does involve recursive backtracking,&lt;br /&gt;with multiple readers on a single stream: [1.31:&lt;br /&gt;. both caller and called could&lt;br /&gt;fail to find their closing match .&lt;br /&gt;. then to not have to do work over again,&lt;br /&gt;it should have some way remembering&lt;br /&gt;whether a given opening character has a match .&lt;br /&gt;. another needed dimension is being fault tolerant:&lt;br /&gt;if the coder forgot a closing character,&lt;br /&gt;then there should be other ways of parsing&lt;br /&gt;that will be able to guess something is missing;&lt;br /&gt;eg, a line has found an new function definition&lt;br /&gt;in the middle of a function body,&lt;br /&gt;it could guess that the body above is&lt;br /&gt;missing a closing character .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-51806918906818672?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/51806918906818672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/parsing-unmatching-opening-characters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/51806918906818672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/51806918906818672'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/parsing-unmatching-opening-characters.html' title='parsing unmatching opening characters'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7112249561258530947</id><published>2012-01-31T15:28:00.000-07:00</published><updated>2012-01-31T15:28:25.194-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='1st-class functions'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>inout-mode parameters</title><content type='html'>&lt;i&gt;1.4: &lt;b&gt;adda/syntax&lt;/b&gt;/{inout, out}-mode parameters:&lt;/i&gt;&lt;br /&gt;. {inout, out}-mode parameters are special because&lt;br /&gt;they create sideaffects .&lt;br /&gt;[1.6:&lt;br /&gt;. anyone coming from any other language&lt;br /&gt;will be assuming that if you pass a pointer&lt;br /&gt;then it means you get to modify&lt;br /&gt;anything accessable by that pointer;&lt;br /&gt;-- that is the whole point of pointers,&lt;br /&gt;unless their targets are typed as being read-only mode;&lt;br /&gt;however,&lt;br /&gt;other languages have created a lot of bugs too,&lt;br /&gt;so we really should carefully reconsider &lt;br /&gt;designing our functions to be functional by default .&lt;br /&gt;1.7:&lt;br /&gt;. the usual understanding of aParam typed as&lt;br /&gt;pointer to int is read-only pointer to inout int;&lt;br /&gt;whereas, what we are assuming here is&lt;br /&gt;read-only pointer to read-only int .&lt;br /&gt;. the usual understanding of an&lt;br /&gt;inout param typed as pointer to int is&lt;br /&gt;inout pointer to inout int;&lt;br /&gt;whereas, what we are assuming here is&lt;br /&gt;inout pointer to read-only int .]&lt;br /&gt;&lt;br /&gt;. the Ada goto label was chosen as notation that alarms,&lt;br /&gt;and that's why I had chosen it for out-moding params;&lt;br /&gt;&lt;pre escaped="true" lang="xml"&gt;eg, x&amp;lt;&amp;lt;/.int&amp;gt;&amp;gt; &lt;/pre&gt;would be used for having&lt;br /&gt;the param x, a pointer to int, &lt;br /&gt;out-moding on both the pointer and the int; [1.6:&lt;br /&gt;however, something similar and easier to read is (^);&lt;br /&gt;will it be confused with the power operator?&lt;br /&gt;if it's placed at the back of the typemark,&lt;br /&gt;then it clearly gives a context to reader and parser .]&lt;br /&gt;&lt;br /&gt;. the most elegant way to define inout mode&lt;br /&gt;is to unify it with its implied activity: inititialization .&lt;br /&gt;. param's can specify default init values,&lt;br /&gt;and if that init is the param' being defined,&lt;br /&gt;that would imply inout mode&lt;br /&gt;while doing something else essential . [1.6:&lt;br /&gt;. however,&lt;br /&gt;it seems counter to the intended model,&lt;br /&gt;because defaults are supposed to tell you&lt;br /&gt;what happens when you fail to supply the actual param,&lt;br /&gt;implying that it's optional,&lt;br /&gt;by contrast, what we're trying to say is:&lt;br /&gt;not only is the param' instantiation not optional,&lt;br /&gt;but the actual param's initial value is not optional either;&lt;br /&gt;so, another idea is to precede the (out)-symbol&lt;br /&gt;with an (in)-symbol such as (&amp;amp;);&lt;br /&gt;since the default is in-mode,&lt;br /&gt;and t^ means t is out-mode,&lt;br /&gt;so t&amp;amp;^ would say t is in-mode &amp;amp; out-mode .&lt;br /&gt;. if that seems like a stretch, then how about t'^ ?&lt;br /&gt;the apostrophe seems like an arrow pointing down,&lt;br /&gt;while the caret is arrow pointing up,&lt;br /&gt;hence an iconic representation of inout;&lt;br /&gt;and being on the back side of types,&lt;br /&gt;it would fit in with the proposed typemark for&lt;br /&gt;rom (read-only mem): t! .]-1.6&lt;br /&gt;&lt;br /&gt;. when types contain types,&lt;br /&gt;as in /.int (the type"pointer to int)&lt;br /&gt;we need a notation to specify&lt;br /&gt;which of those types can be modified;&lt;br /&gt;therefore we can not&lt;br /&gt;simply apply the notation to the parameter name,&lt;br /&gt;as is done in other languages .&lt;br /&gt;[1.7:&lt;br /&gt;. we can provide that as an option though;&lt;br /&gt;eg # inout aParam/.int!&lt;br /&gt;--. this provides read-write access to&lt;br /&gt;a pointer to a read-only int&lt;br /&gt;(same as our aParam/'^.int);&lt;br /&gt;eg # inout aParam/!.int&lt;br /&gt;-- read-only access to a pointer to a read&amp;amp;writable int &lt;br /&gt;(same as aParam/.int'^).]&lt;br /&gt;[1.6:&lt;br /&gt;. notice that, among container types such as&lt;br /&gt;/.int (a pointer.type containing the int.type)&lt;br /&gt;if you don't need the value of a param&lt;br /&gt;(and are thus giving it the attribute out-mode),&lt;br /&gt;you certainly don't need the values of any type within;&lt;br /&gt;eg, /^.int'^ wouldn't make sense because&lt;br /&gt;how can there be a value to get from the int&lt;br /&gt;when there no value expected from&lt;br /&gt;the pointer that is needed to access the int?&lt;br /&gt;&lt;br /&gt;. if something like "(/^.int'^ )&lt;br /&gt;could never make sense to some users anyway,&lt;br /&gt;they should be allowed to use simple english too:&lt;br /&gt;{out, inout } -- copy is the default .&lt;br /&gt;. inout-mode could be understood to be&lt;br /&gt;a property possessed by a type,&lt;br /&gt;hence the use of the possessive operator:&lt;br /&gt;/'^.int^ becomes /`inout.int`out (read:&lt;br /&gt;pointer's inout to int's out ).&lt;br /&gt;. another idea is that&lt;br /&gt;{out, inout} would be functions over types,&lt;br /&gt;so instead of needing a possessive operator,&lt;br /&gt;you could simply use a space:&lt;br /&gt;x/'^.int^ becomes  x.inout /.out int .&lt;br /&gt;. in this case, {inout, out} need to be reserved words?&lt;br /&gt;we could allow renaming them,&lt;br /&gt;eg, {o, io} or {wo, rw} might be popular .]-1.6&lt;br /&gt;[1.6:&lt;br /&gt;. by letting {out, inout} be a function,&lt;br /&gt;it would also make sense to do it Ada's way:&lt;br /&gt;letting the inout apply to the param itself,&lt;br /&gt;instead of applying to each of the param's nested types;&lt;br /&gt;eg, &lt;br /&gt;inout x/.int -- just give me inout everything!&lt;br /&gt;&lt;br /&gt;. why do you suppose Ada doesn't facilitate&lt;br /&gt;applying {inout, out} to each of the param's&lt;br /&gt;nested types?&lt;br /&gt;[1.7: besides the fact that it's param's can&lt;br /&gt;only trivially be container types&lt;br /&gt;(you need to use a single type name&lt;br /&gt;or a pointer to typename)]&lt;br /&gt;. perhaps they are mostly concerned with&lt;br /&gt;a transaction model:&lt;br /&gt;this is where the implementation of out-mode&lt;br /&gt;has the option of either using a reference,&lt;br /&gt;or else doing a copy-in then copy-out .&lt;br /&gt;. doing it my way could save much copying,&lt;br /&gt;because suppose you have a pointer to a huge tree;&lt;br /&gt;if all you want to do is modify the pointer,&lt;br /&gt;then the copy-in©-out system&lt;br /&gt;doesn't have to copy that huge tree for you! ]-1.6&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1.7: web: &lt;b&gt;ada parameters&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. &lt;a href="http://archive.adaic.com/standards/83rat/html/ratl-08-02.html"&gt;Ada's rationale for not supporting pass-by-reference&lt;/a&gt;:&lt;br /&gt;{. parameter passing by reference for access types&lt;br /&gt;is not expected by most algorithms and will result in&lt;br /&gt;those algorithms being incorrect .}&lt;br /&gt;. access types are already unique in that the programmer is&lt;br /&gt;permitted explicitly to manipulate references and construct aliases:&lt;br /&gt;This is the purpose of access types,&lt;br /&gt;and programmers using such types are asserting that&lt;br /&gt;they wish to take control of all references and aliases.&lt;br /&gt;Accordingly, the parameter passing should not generate&lt;br /&gt;extra references and aliases of which the programmer is unaware;&lt;br /&gt;therefore, all parameter passing for access types&lt;br /&gt;should be by copy.&lt;br /&gt;A final problem with parameter passing by reference&lt;br /&gt;is that this mechanism will be almost impossible to achieve&lt;br /&gt;(or at least, very costly) on distributed systems&lt;br /&gt;and when dealing with systems having multiple address spaces.&lt;br /&gt;--&lt;br /&gt;. but the 2012 version does support them .&lt;br /&gt;ada parameters/syntax:&lt;br /&gt;&lt;a href="http://www.adaic.org/resources/add_content/standards/05aarm/html/AA-6-1.html#S0160"&gt;&lt;b&gt;2005 parameter_&lt;/b&gt;specification&lt;/a&gt; ::=&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;defining_identifier_list : mode [null_exclusion] &lt;br /&gt;subtype_mark [:= default_expression]&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;| defining_identifier_list : access_definition&lt;br /&gt;[:= default_expression]&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.ada-auth.org/standards/12aarm/html/AA-6-1.html#S0175"&gt;&lt;b&gt;2012&lt;/b&gt; parameter_specification&lt;/a&gt; ::=&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;defining_identifier_list : [aliased] mode [null_exclusion] &lt;br /&gt;subtype_mark [:= default_expression]&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;| defining_identifier_list : access_definition&lt;br /&gt;[:= default_expression]&lt;/span&gt;&lt;br /&gt;&lt;b&gt;access_definition&lt;/b&gt; ::= &lt;br /&gt;&lt;span style="font-size: x-small;"&gt;[null_exclusion] access [constant] subtype_mark&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;| [null_exclusion] access [protected] &lt;br /&gt;procedure parameter_profile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;| [null_exclusion] access [protected] &lt;br /&gt;function parameter_and_result_profile access subtype_mark&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7112249561258530947?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7112249561258530947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/inout-mode-parameters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7112249561258530947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7112249561258530947'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/inout-mode-parameters.html' title='inout-mode parameters'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1433555540230638543</id><published>2012-01-31T12:51:00.000-07:00</published><updated>2012-01-31T12:51:56.300-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><category scheme='http://www.blogger.com/atom/ns#' term='1st-class functions'/><title type='text'>generic type vs  container type</title><content type='html'>&lt;i&gt;1.4: &lt;b&gt;adda/type&lt;/b&gt;/{generic,  container}-type def's:&lt;/i&gt;&lt;br /&gt;. there is a syntax for parametric types generally,&lt;br /&gt;with multiple params that include&lt;br /&gt;both types and non-types ? yes:&lt;br /&gt;[1.6:&lt;br /&gt;. the parameterized type is a sort of generic;&lt;br /&gt;so, there are 2 points at which it is instantiated:&lt;br /&gt;once to define the concrete type,&lt;br /&gt;and then again for each use of that concrete type&lt;br /&gt;in defining an obj' instance .&lt;br /&gt;. to distinguish these,&lt;br /&gt;use the terms {generic, container}-type .&lt;br /&gt;. the {array, pointer} are really containers;&lt;br /&gt;on the way to defining more container types,&lt;br /&gt;you can use a generic type&lt;br /&gt;which then must be instantiated&lt;br /&gt;before use by container obj's .&lt;br /&gt;. a container type could accept a record type as its leaf;&lt;br /&gt;then each of those record fields&lt;br /&gt;could be instantiations of a generic-type&lt;br /&gt;that could return a container-type .&lt;br /&gt;. the generic-types should not need&lt;br /&gt;separate instantiation:&lt;br /&gt;[1.7: eg,&lt;br /&gt;( myLeafType.type: gentype(init)&lt;br /&gt;; x.myLeafType; )&lt;br /&gt;can also be done as x.gentype(init) .]&lt;br /&gt;. here's a combination of generic and container instantiations&lt;br /&gt;in one term:&lt;br /&gt;pointertype(inits for variant selection).myLeafType .&lt;br /&gt;&lt;br /&gt;. arrays, pointers, and functions are container types;&lt;br /&gt;how are new container types defined ?&lt;br /&gt;. recall that pointers and arrays are&lt;br /&gt;types of functions [expressing container types]&lt;br /&gt;but, can new [container]  types be&lt;br /&gt;defined like functions without confusion ?&lt;br /&gt;yes:&lt;br /&gt;. a function where the arg is of type .type;&lt;br /&gt;eg, pointer.type is defined as:&lt;br /&gt;/(type).type;&lt;br /&gt;this works with these rules:&lt;br /&gt;(1) function args are not required to be paren'd,&lt;br /&gt;(2) types are preceded by a dot:&lt;br /&gt;/.txt = /(.txt).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1433555540230638543?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1433555540230638543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/generic-type-vs-container-type.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1433555540230638543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1433555540230638543'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/generic-type-vs-container-type.html' title='generic type vs  container type'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6458429585475474753</id><published>2012-01-31T11:15:00.000-07:00</published><updated>2012-01-31T11:15:22.018-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='1st-class functions'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>adda minimizes paretheses</title><content type='html'>&lt;i&gt;1.3: adda/syntax/&lt;b&gt;lists of algorithm literals&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. the comma-semicolon syntax for lists&lt;br /&gt;( ,,, ; ,,,,, ; ,,, ) would be confused with&lt;br /&gt;those of an algorithm literal,&lt;br /&gt;( ,,,: ; ;;; ,,,:; ;;;  )&lt;br /&gt;unless the algorithm literal is parenthesized;&lt;br /&gt;( ,,, ; ,,( ,,,: ; ;;; ,,,:; ;;;  ), ; ,,, ) &lt;br /&gt;that should be a general requirement&lt;br /&gt;with the exception that&lt;br /&gt;a file already constitutes a parenthesis .&lt;br /&gt;[1.6: (interactive mode is a type of streamed file;&lt;br /&gt;and adding the paren's would supress execution&lt;br /&gt;until the closing paren' was added) .]&lt;br /&gt;. with that requirement in place,&lt;br /&gt;I can feel more confident designing&lt;br /&gt;subprogram calls without paren's&lt;br /&gt;[@]  adda/syntax/subprogram calls without paren's&lt;br /&gt;&lt;br /&gt;&lt;i&gt;adda/syntax/&lt;/i&gt;&lt;br /&gt;&lt;b&gt;subprogram calls without paren's&lt;/b&gt;&lt;br /&gt;. one thing I was taught by lisp counter/zealotry&lt;br /&gt;is that if a language is to have&lt;br /&gt;any chance of being popular&lt;br /&gt;it should go out of its way to&lt;br /&gt;avoid excessive parentheses!&lt;br /&gt;. any symbol that is declared as a function&lt;br /&gt;and is found in a sequence of statements,&lt;br /&gt;can use the form: f x,y,z;&lt;br /&gt;instead of f(x,y,z) .&lt;br /&gt;. if you have: f g x,y;&lt;br /&gt;that should be parsed as f(g(x,y)) ?&lt;br /&gt;at least according to the&lt;br /&gt;nested-if rule:&lt;br /&gt;(if * then if * then * else *)&lt;br /&gt;-- that would be parsed&lt;br /&gt;like so:&lt;br /&gt;if * then (if * then * else *)&lt;br /&gt;rather than:&lt;br /&gt;if * then (if * then * ) else * .&lt;br /&gt;. but what does that do for the rule about&lt;br /&gt;lists requiring paren's when nested in lists?&lt;br /&gt;[@] adda/syntax/lists of algorithm literals&lt;br /&gt;. moot: a unary arg is not a list .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6458429585475474753?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6458429585475474753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/adda-minimizes-paretheses.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6458429585475474753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6458429585475474753'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/adda-minimizes-paretheses.html' title='adda minimizes paretheses'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7436158499975660329</id><published>2012-01-31T11:04:00.001-07:00</published><updated>2012-01-31T16:11:09.475-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='case'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='conditional'/><title type='text'>adda's case stmt evolves</title><content type='html'>&lt;i&gt;1.2: adda/cstr/case/&lt;/i&gt;&lt;br /&gt;&lt;b&gt;similar to goto labels not function points list:&lt;/b&gt;&lt;br /&gt;&lt;i&gt;[1.5: &lt;b&gt;intro&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. the case stmt was seen to share the same structure as&lt;br /&gt;that of the param'list, record'literal,&lt;br /&gt;and the function points list:&lt;br /&gt;( domain-elements,,,: codomain-element&lt;br /&gt;,&amp;nbsp; d,d,d,d: cod&lt;br /&gt;) -- if a domain element is followed by a comma,&lt;br /&gt;then it's part of a list of domain elements&lt;br /&gt;all sharing the same codomain element .&lt;br /&gt;. however,&lt;br /&gt;the colon character is also used for identifying address labels:&lt;br /&gt;( label,,,: ; ;;;&lt;br /&gt;label:&lt;br /&gt;...)&lt;br /&gt;-- the c lang's fall-through case stmt has similar syntax&lt;br /&gt;in that it's reusing label syntax * .&lt;br /&gt;. the case doesn't need commas like the function points list;&lt;br /&gt;because, it can work like other labels; [1.31:&lt;br /&gt;(the case stmt does still use commas for the domain lists;&lt;br /&gt;ie, for when multiple cases having the same target ).]&lt;br /&gt;&lt;br /&gt;. the usual (;) vs (,) priority is exemplified by the matrix, eg:&lt;br /&gt;( el, el, el,&lt;br /&gt;; el, el, el,&lt;br /&gt;; el, el, el ),&lt;br /&gt;[1.31: this is contrast to the list of statement's&lt;br /&gt;in which declaration stmt's use commas in the domain list:&lt;br /&gt;( v1, v2, v3: shared-type&lt;br /&gt;; v1, v2, v3: shared-type&lt;br /&gt;; stmt; stmt; stmt&lt;br /&gt;);]&lt;br /&gt;&lt;br /&gt;. a case list (the list of control paths being offered)&lt;br /&gt;has elements that include sequences (of stmt's);&lt;br /&gt;so, we have to make sure that the context always tells us&lt;br /&gt;which situation you're going into:&lt;br /&gt;&amp;nbsp;a list of lists, (as seen in a matrix) versus&lt;br /&gt;&amp;nbsp;a list of sequences .&lt;br /&gt;. if a sequence of stmts is an element in matrix&lt;br /&gt;it creates ambiguity if unparenthesized:&lt;br /&gt;(,,,&lt;br /&gt;; ,,, ;;; , &lt;br /&gt;; ,,, &lt;br /&gt;) . &lt;br /&gt;*: [1.31:&lt;br /&gt;. actually, a key feature of c's case syntax,&lt;br /&gt;is the case-prefixing used within the body-container of&lt;br /&gt;switch ( expression ) body-container:&lt;br /&gt;switch ( expression ) &lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp; declaration stmts ;;; -- adda instead has inline decl's .&lt;br /&gt;case a:&amp;nbsp; -- the case label is like a stmt but terminated by (:);&lt;br /&gt;case b: stmt; stmt; -- a's and b's target stmts .&lt;br /&gt;default: stmt .&lt;br /&gt;} . &lt;br /&gt;. the adda case stmt differs from c's in that&lt;br /&gt;it is like its other conditional stmt (the if):&lt;br /&gt;truth ? stmt else stmt; -- the if-else;&lt;br /&gt;truth ? #true: stmt; #false: stmt; #; -- the case .&lt;br /&gt;. like c, however, adda tries to minimize syntax;&lt;br /&gt;and, towards that end,&lt;br /&gt;notice the cases wouldn't need paren's around them if&lt;br /&gt;the final case keyword was followed by the (;);&lt;br /&gt;conversely, the (#.) is not needed if&lt;br /&gt;the case stmt or its body are in paren's;&lt;br /&gt;however, always having a case-terminal at the end of case&lt;br /&gt;might help syntax errors involving enclosures;&lt;br /&gt;or else it could be thought of as a type of enclosure:&lt;br /&gt;( ,,, ; ,,, ; ,,, . ,,, ; ,,, ; ,,, ) -- for the data &lt;br /&gt;#a: s;s;s; #b: s;s;s; #; -- for the cases .&lt;br /&gt;. if preferring english over symbols, (case) = (#):&lt;br /&gt;truth ?&lt;br /&gt;case true: stmt;&lt;br /&gt;case false: stmt;&lt;br /&gt;case;&amp;nbsp; ]-1.31&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1.2: adda/cstr/case/&lt;/i&gt;&lt;br /&gt;&lt;b&gt;supporting c's fall-through style:&lt;/b&gt;&lt;br /&gt;. should the case like c's be called fallthru?&lt;br /&gt;how could it be called jmp or goto?&lt;br /&gt;it should include the usual syntax shared by&lt;br /&gt;all conditional stmt's .&lt;br /&gt;[... but that syntax is about to change:]&lt;br /&gt;[@] adda/cstr/case/similar to goto labels not function points list&lt;br /&gt;fallthru e ? (e, ,,, : s; s; s; e,,,: s;;; );&lt;br /&gt;--&lt;br /&gt;. the inside of a case stmt looks just like a stmt block .&lt;br /&gt;. fallthru is a control function of 1 arg:&lt;br /&gt;fallthru(case.stmt).stmt;&lt;br /&gt;it expects its arg to be a case stmt .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.5: inverting the default:&lt;/b&gt;&lt;br /&gt;. a more intuitive use of the fallthru keyword&lt;br /&gt;would be to have it used for&lt;br /&gt;meaning just the opposite of the c lang's break stmt:&lt;br /&gt;. when you wanted to fall-through,&lt;br /&gt;then the fallthru stmt would be used to override&lt;br /&gt;the default behavior .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.5: minimize reserved words:&lt;/b&gt;&lt;br /&gt;. instead of fallthru as a keyword&lt;br /&gt;it might be better to reuse what we have,&lt;br /&gt;such as (enter next),&lt;br /&gt;-- "(next) doesn't have to be a reserved word,&lt;br /&gt;because it's still local to the arg of function"enter --&lt;br /&gt;or generalize it like this: [1.8:&lt;br /&gt;enter case [some label within the case stmt] ].&lt;br /&gt;&lt;br /&gt;&lt;i&gt;adda/cstr/case/&lt;/i&gt;&lt;br /&gt;&lt;b&gt;only fallthru's need an exit stmt:&lt;/b&gt;&lt;br /&gt;1.2:&lt;br /&gt;. in a fallthru, the break is called exit,&lt;br /&gt;just as in the loops,&lt;br /&gt;when loops and case stmts are nested&lt;br /&gt;you can specify where you want to exit to:&lt;br /&gt;ie, "(exit loop)&amp;nbsp; vs "(exit fallthru) .&lt;br /&gt;. if it's a normal (non-fallthru) case stmt,&lt;br /&gt;then there is no need for an exit stmt&lt;br /&gt;so mentioning exit&lt;br /&gt;would apply to a surrounding loop or fallthru .&lt;br /&gt;&lt;b&gt;1.5: not true:&lt;/b&gt;&lt;br /&gt;. that's actually debatable;&lt;br /&gt;because, a case could want to bail out early?;&lt;br /&gt;conversely,&lt;br /&gt;while an exit may be useful for some,&lt;br /&gt;it could be inconvenient for many,&lt;br /&gt;as it is very common have a case within a loop,&lt;br /&gt;so if the case's use of exit could apply to itself&lt;br /&gt;instead of the surrounding loop,&lt;br /&gt;then that use of the exit stmt would have to specify&lt;br /&gt;whether it referred to the {case stmt, loop stmt},&lt;br /&gt;and the default target for an exit from a case stmt&lt;br /&gt;would intuitively be exit case,&lt;br /&gt;whereas in most cases the exit loop was desired;&lt;br /&gt;then again,&lt;br /&gt;it would be simpler, and more readable,&lt;br /&gt;to have no default,&lt;br /&gt;and then you could let coders have maximal freedom,&lt;br /&gt;exiting anything from anywhere .&lt;br /&gt;. furthermore,&lt;br /&gt;even fall-through case stmts rarely do a fall-through;&lt;br /&gt;they usually have more break stmt's than not;&lt;br /&gt;so, the default behavior at the end of a case (case.stmt`branch)&lt;br /&gt;should be (exit case) rather than (fallthru)&lt;br /&gt;and if you mean otherwise, use an (enter next case).stmt&lt;br /&gt;only at the end of the particular case&lt;br /&gt;that needs to fall through .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;1.2: adda/cstr/case/&lt;/i&gt;&lt;br /&gt;&lt;b&gt;supporting c's fall-through style:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;. should the case like c's be called fallthru?&lt;br /&gt;how could it be called jmp or goto?&lt;br /&gt;it should include the usual syntax shared by&lt;br /&gt;all conditional stmt's .&lt;br /&gt;[... but that syntax is about to change:]&lt;br /&gt;[@] adda/cstr/case/similar to goto labels not function points list&lt;br /&gt;fallthru e ? (e, ,,, : s; s; s; e,,,: s;;; );&lt;br /&gt;--&lt;br /&gt;. the inside of a case stmt looks just like a stmt block .&lt;br /&gt;. fallthru is a control function of 1 arg:&lt;br /&gt;fallthru(case.stmt).stmt;&lt;br /&gt;it expects its arg to be a case stmt .&lt;br /&gt;&lt;br /&gt;1.5: inverting the default:&lt;br /&gt;. a more intuitive use of the fallthru keyword&lt;br /&gt;would be to have it used for&lt;br /&gt;meaning just the opposite of the c lang's break stmt:&lt;br /&gt;. when you wanted to fall-through,&lt;br /&gt;then the fallthru stmt would be used to override&lt;br /&gt;the default behavior .&lt;br /&gt;&lt;br /&gt;1.5: minimize reserved words:&lt;br /&gt;. instead of fallthru as a keyword&lt;br /&gt;it might be better to reuse what we have,&lt;br /&gt;such as (enter next),&lt;br /&gt;-- "(next) doesn't have to be a reserved word,&lt;br /&gt;because it's still local to the arg of function"enter --&lt;br /&gt;or generalize it like this: [1.8:&lt;br /&gt;enter case [some label within the case stmt] ].&lt;br /&gt;&lt;br /&gt;&lt;i&gt;adda/cstr/case/&lt;/i&gt;&lt;br /&gt;&lt;b&gt;the cases need not be literals:&lt;/b&gt;&lt;br /&gt;1.2:&lt;br /&gt;. whether the labels need to be const's,&lt;br /&gt;being enums they eval to self,&lt;br /&gt;so generally the case guard can always be eval'd;&lt;br /&gt;you can also use expressions as literal cases&lt;br /&gt;by quoting them, which supresses eval;&lt;br /&gt;in that case,&lt;br /&gt;the expr being cased should eval to etree;&lt;br /&gt;because, a quoted expression is always an etree .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7436158499975660329?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7436158499975660329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/addas-case-stmt-evolves.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7436158499975660329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7436158499975660329'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2012/01/addas-case-stmt-evolves.html' title='adda&apos;s case stmt evolves'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8626234313311587388</id><published>2011-12-31T23:59:00.007-07:00</published><updated>2011-12-31T23:59:52.435-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>per-file dialect preference directive</title><content type='html'>12.28: adde/per-file dialect preference directive:&lt;br /&gt;. when opening another author's strange dialect,&lt;br /&gt;[@] adda/pre-processor/per-file dialect preference directive:&lt;br /&gt;the editor auto-translates to your dialect .&lt;br /&gt;. and when you name an object,&lt;br /&gt;the editor asks how you came up with that name,&lt;br /&gt;so that translators across country`languages&lt;br /&gt;can have some clues for a good native alternative .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8626234313311587388?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8626234313311587388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/per-file-dialect-preference-directive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8626234313311587388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8626234313311587388'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/per-file-dialect-preference-directive.html' title='per-file dialect preference directive'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-472330230123422025</id><published>2011-12-31T23:59:00.003-07:00</published><updated>2011-12-31T23:59:18.609-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>listable column view &amp; tiled work trays</title><content type='html'>12.26: co.self/dream/adde/listable column view &amp;amp; tiled work trays:&lt;br /&gt;. there are fixed layers for levels of the fs:&lt;br /&gt;file, 3..5 folders levels for various intentions&lt;br /&gt;[just like the biology has {species, genus, phylum, etc}]&lt;br /&gt;. you see things arranged as columns,&lt;br /&gt;[like mac`finder's column view,&lt;br /&gt;but combined with the mac`finder [hierarchical] list view,&lt;br /&gt;where more than one branch of the folder tree can be expanded]&lt;br /&gt;then how do you arrange the rows to&lt;br /&gt;keep files separate from folder systems ?&lt;br /&gt;. have trays on the desktop,&lt;br /&gt;corresponding to each of the columns;&lt;br /&gt;they are easy for the user to rearrange, but they stay tiled;&lt;br /&gt;and they have some way of stacking like mac has;&lt;br /&gt;what way is that ? uh .&lt;br /&gt;--[. I had done stim's just before bed;&lt;br /&gt;because I was too stressed, and didn't want to be bored&lt;br /&gt;in case there was insomnia;&lt;br /&gt;I think I was half awake for this;&lt;br /&gt;but it was dream-like in the sense of &lt;br /&gt;the thought process being more concerned with&lt;br /&gt;images of the ideas,&lt;br /&gt;and not too quick to discount an idea as trivial or useless;&lt;br /&gt;it does remind me that you can't really know&lt;br /&gt;what users will find useless,&lt;br /&gt;so the primary feature should be making it easy for&lt;br /&gt;users themselves to design desktop behaviors .]&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-472330230123422025?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/472330230123422025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/listable-column-view-tiled-work-trays.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/472330230123422025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/472330230123422025'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/listable-column-view-tiled-work-trays.html' title='listable column view &amp; tiled work trays'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3673807054136509002</id><published>2011-12-31T23:58:00.007-07:00</published><updated>2011-12-31T23:58:46.420-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>encryption with shifting code</title><content type='html'>&lt;i&gt;12.22: adde/encryption with shifting code:&lt;/i&gt;&lt;br /&gt;. you have sections prefixed with the lang id&lt;br /&gt;and the lang id is encrypted too .&lt;br /&gt;how? if the lang code is not randomized or implicit&lt;br /&gt;(eg, by a hash of the section's 1st words;&lt;br /&gt;say, along with some other rule)&lt;br /&gt;then opponents could work on common code sections&lt;br /&gt;to see which words are most freequently used .&lt;br /&gt;[and with implicit lang code, imagine that every word was encoded differently&lt;br /&gt;so a word is in a file giving it an nth word location&lt;br /&gt;and for each location's code there are 2 maps:&lt;br /&gt;the word map: words -&amp;gt; code;&lt;br /&gt;the map map: word location -&amp;gt; word map index .&lt;br /&gt;. so for each word at location L,&amp;nbsp; &lt;br /&gt;my.word.map = [array of maps](map.map(L));&lt;br /&gt;code = my.word.map (word) .]&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3673807054136509002?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3673807054136509002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/encryption-with-shifting-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3673807054136509002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3673807054136509002'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/encryption-with-shifting-code.html' title='encryption with shifting code'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5709092989550547926</id><published>2011-12-31T23:58:00.003-07:00</published><updated>2011-12-31T23:58:20.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>taming the arrogant dialog</title><content type='html'>&lt;i&gt;12.5: adde/gui/taming the arrogant dialog:&lt;/i&gt;&lt;br /&gt;. one reason some dialogs will block any other actions&lt;br /&gt;is to not lose your selection&lt;br /&gt;or anything you've already input to the dialog .&lt;br /&gt;. suppose the dialog were a separate window&lt;br /&gt;and the selection in your document window changes,&lt;br /&gt;then it needs to check selection;&lt;br /&gt;and, if it changed, the user is asked&lt;br /&gt;"(do you want to resume it?);&lt;br /&gt;if the doc is modified, user is asked:&lt;br /&gt;"(does new selection still fit your intention&lt;br /&gt;for this old dialog?).&lt;br /&gt;. sometimes the specific content of the original selection&lt;br /&gt;will have determined the dialog type&lt;br /&gt;(this is like a context menu selection by you,&lt;br /&gt;only the app is doing it implicitely;&lt;br /&gt;eg, if the selection contains both text and graphics,&lt;br /&gt;then choosing style from the menu&lt;br /&gt;should bring up dialogs for both text and graphics).&lt;br /&gt;. if the document or the selection has changed,&lt;br /&gt;then the dialog typing should be redone .&lt;br /&gt;. if the dialog must be changed,&lt;br /&gt;then the app must return the data by &lt;br /&gt;logging* the parameter values provided by user&lt;br /&gt;or also apply those changes to a&lt;br /&gt;subsequent use of the dialog .&lt;br /&gt;*: ( the entire user session is logged,&lt;br /&gt;so that user's can know in writing what they did&lt;br /&gt;that had the given effect; they can also use this writing&lt;br /&gt;as part of developing scripts to automate their chores).&lt;br /&gt;history stack traversal:&lt;br /&gt;. it could just store modifications with the dialog,&lt;br /&gt;and have a browser control with a back button&lt;br /&gt;for earlier dialog fillings .&lt;br /&gt;(warning:&lt;br /&gt;. that works only in a protected acct with one user&lt;br /&gt;otherwise that is a new behavior that could get very rude )&lt;br /&gt;. this is a very important generalization:&lt;br /&gt;html gui's can mean more service not less .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5709092989550547926?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5709092989550547926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/taming-arrogant-dialog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5709092989550547926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5709092989550547926'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/taming-arrogant-dialog.html' title='taming the arrogant dialog'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4819383010767421343</id><published>2011-12-31T23:57:00.005-07:00</published><updated>2011-12-31T23:57:48.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>dual document view for speedy use of read-only</title><content type='html'>&lt;i&gt;12.5:&lt;b&gt; adde/gui/&lt;/b&gt;dual document view for speedy use of read-only:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. in order to be quick, the typical help system is read-only;&lt;br /&gt;but friendly would be quick and annotatable .&lt;br /&gt;. an editor can be made very lightweight &lt;br /&gt;if it does only small chunks of simple text;&lt;br /&gt;summary:&lt;br /&gt;. this is possible by a windowing system that is&lt;br /&gt;combining 2 documents:&lt;br /&gt;the readonly panes load quickly despite being large;&lt;br /&gt;the mutable panes load quickly because they are small .&lt;br /&gt;. when you ok the pane, it saves that pane as a temp' file .&lt;br /&gt;. deleting part of a readonly pane simply redraws the pane&lt;br /&gt;without the part you deleted .&lt;br /&gt;. after your annotation session,&lt;br /&gt;it will merge results in the background .&lt;br /&gt;&lt;br /&gt;idea#1:&lt;br /&gt;. the annotation window is attached to the side&lt;br /&gt;at a point that starts at finding current wrapped line&lt;br /&gt;where the anchor phrase is found .&lt;br /&gt;. finally, in the background,&lt;br /&gt;the edits are merged with the doc .&lt;br /&gt;&lt;br /&gt;idea#2:&lt;br /&gt;. another view of a faster edit system&lt;br /&gt;is that old text is never modified,&lt;br /&gt;it is simply interleaved with panes of new text,&lt;br /&gt;deletions have their before&amp;amp;after's&lt;br /&gt;presented in the same read-only pane, &lt;br /&gt;but the drawing is simply skipping the deleted range;&lt;br /&gt;this may seem like a complication,&lt;br /&gt;but no more so than having to&lt;br /&gt;draw segments in separate panes .&lt;br /&gt;. if the text is not word wrapped, (has frequent newlines)&lt;br /&gt;then it should do a heuristic about whether&lt;br /&gt;the after-piece should be on a new line&lt;br /&gt;or the same line with the before-piece .&lt;br /&gt;. for transitioning from rom text to mutable text,&lt;br /&gt;there should be separate panes&lt;br /&gt;to speed up the layout engine .&lt;br /&gt;. within a read-only doc, after making selection,&lt;br /&gt;you can do 3 things:&lt;br /&gt;add your comment { above, below} it,&lt;br /&gt;or replace it .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4819383010767421343?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4819383010767421343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/dual-document-view-for-speedy-use-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4819383010767421343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4819383010767421343'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/dual-document-view-for-speedy-use-of.html' title='dual document view for speedy use of read-only'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8618900004153148701</id><published>2011-12-31T23:57:00.001-07:00</published><updated>2012-01-01T00:04:18.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vfs(virtual file system)'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>1st-class subfile renaming</title><content type='html'>12.4: news.adde/fs/1st-class subfile renaming:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.markshuttleworth.com/archives/123#comment-116912"&gt;. Brandon Casey June 20th, 2007,&lt;/a&gt;&lt;br /&gt;mentioned the idea of 1st-class subfile renamingwhich is a version tracking system that recognizes&lt;br /&gt;when file modifications consist of subfile moves:&lt;br /&gt;"( I split the file into two files in my repo.&lt;br /&gt;File is modified in source repo.&lt;br /&gt;I retrieve changes from source repo.&lt;br /&gt;Will changes be correctly applied to&lt;br /&gt;relevant sections in the two new files?&lt;br /&gt;).&lt;br /&gt;. Casey was responding to an article about&lt;br /&gt;www.markshuttleworth.com/archives/123&lt;br /&gt;tracking renames as a first class operation,&lt;br /&gt;which I would call 1st-class file renaming;&lt;br /&gt;so, Casey's idea is 1st-class subfile renaming .&lt;br /&gt;. the minimalist style of version tracking&lt;br /&gt;is to wait for a commit,&lt;br /&gt;and then respond to modifications:&lt;br /&gt;# directory changes are seen as&lt;br /&gt;file {adds, deletes};&lt;br /&gt;# file modifications are recorded with a &lt;br /&gt;line-oriented diff' file .&lt;br /&gt;. in previous notes on subfiles,&lt;br /&gt;the system recognizes structure within files:&lt;br /&gt;eg, html files have header tags, H1, H2, ... H6;&lt;br /&gt;and, each represents a hierarchical subfile,&lt;br /&gt;as do paragraphs, divisions, and other enclosing tags .&lt;br /&gt;. the file system is just a tree of pointers;&lt;br /&gt;likewise, this tree extends to subfiles;&lt;br /&gt;and files become pointers to sections of text&lt;br /&gt;which are actually in a database&lt;br /&gt;named by their creation date &amp;amp; author&lt;br /&gt;(plus an optional serial# for when&lt;br /&gt;several subfiles have the same create date;&lt;br /&gt;for example when a file is modified by&lt;br /&gt;having some paragraphs inserted,&lt;br /&gt;the paragraphs' create dates are considered to be&lt;br /&gt;at the file's modified time .&lt;br /&gt;).&lt;br /&gt;. the branch copies db names&lt;br /&gt;and each simultanious branch belings to one author;&lt;br /&gt;so, that author'name must be part of a subfile's db name .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1st-class subfile renaming:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;. the folder-subfile system is a tree:&lt;br /&gt;a collection of nodes&lt;br /&gt;(visualized as forks for representing enclosures )&lt;br /&gt;and edges&lt;br /&gt;(visualized as branches for representing&lt;br /&gt;the things they contained by an enclosure ).&lt;br /&gt;. a folder-representing node is thus remembering&lt;br /&gt;# the name of the folder,&lt;br /&gt;# edges to all nodes the folder contains;&lt;br /&gt;likewise, a file-representing node has the file's name,&lt;br /&gt;and the edges to subfiles it contains;&lt;br /&gt;but, a paragraph-representing node&lt;br /&gt;has a position number in place of a name&lt;br /&gt;( so, when a paragraph gets inserted,&lt;br /&gt;that bumps all the position numbers of paragraphs below&lt;br /&gt;(within that subfile not the entire file)).&lt;br /&gt;&lt;br /&gt;. when version-tracking for subfiles,&lt;br /&gt;the nodes that were revised&lt;br /&gt;are replaced with version-representing nodes&lt;br /&gt;(version node) with edges to&lt;br /&gt;both the replaced node,&lt;br /&gt;and to the new node created by the revision;&lt;br /&gt;in summary,&lt;br /&gt;modified nodes are presented as a menu&lt;br /&gt;of version choices;&lt;br /&gt;eg, a folder-move creates version nodes twice:&lt;br /&gt;once at both the source and destination nodes .&lt;br /&gt;12.5: &lt;br /&gt;. what if the version node is not the smartest&lt;br /&gt;way to see changes?&lt;br /&gt;the friendliest way is to show the various views:&lt;br /&gt;# toc's for each version:&lt;br /&gt;when there a high use of 2 views,&lt;br /&gt;make sure both are fully built (not defined as a script)&lt;br /&gt;the db will then be like a book with 2 toc's (table of contents).&lt;br /&gt;# index:&lt;br /&gt;. search of index finds every instance&lt;br /&gt;showing you the pathnames,&lt;br /&gt;and grouping together occurrences of&lt;br /&gt;1 object is in several locations across versions .&lt;br /&gt;# glossary:&lt;br /&gt;. the place for histories of how a name has been used,&lt;br /&gt;and why it has been changed from and to other names .&lt;br /&gt;. this would include the human view of&lt;br /&gt;why there systematic renames in certain versions .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8618900004153148701?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8618900004153148701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/1st-class-subfile-renaming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8618900004153148701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8618900004153148701'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/1st-class-subfile-renaming.html' title='1st-class subfile renaming'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7820886323175223152</id><published>2011-12-31T23:56:00.000-07:00</published><updated>2011-12-31T23:56:21.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vfs(virtual file system)'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>optimizing timemachine</title><content type='html'>&lt;i&gt;12.4: adde/fs/optimizing timemachine:&lt;/i&gt;&lt;br /&gt;. mac's timemachine can prevent corruptions;&lt;br /&gt;adde's version of that could additionally preserve memory&lt;br /&gt;(and thereby store more changes)&lt;br /&gt;by analyzing how things change,&lt;br /&gt;and asking the user why something got deleted .&lt;br /&gt;--&lt;br /&gt;. the inspiration for this idea was that&lt;br /&gt;my data had be corrupted by a fat32 sd card error;&lt;br /&gt;and although timemachine did save me,&lt;br /&gt;all I really needed was&lt;br /&gt;some automatic analyst to notice strange behavior:&lt;br /&gt;the user fills up log entries,&lt;br /&gt;but here one has been deleted ?&lt;br /&gt;a folder had many files but is now null ?&lt;br /&gt;12.5:&lt;br /&gt;. the prior, simpler idea that helps as much&lt;br /&gt;is to keep all user contributions in a read-only db,&lt;br /&gt;and saving memory by automatic duplicate removal&lt;br /&gt;(a file can saved as a script such as:&lt;br /&gt;include these 3 subfiles,&lt;br /&gt;and then replace phrase x with y ).&lt;br /&gt;. adde questions the user upon each deletion:&lt;br /&gt;why is this deleted?&lt;br /&gt;# somewhere else: deleted when verified;&lt;br /&gt;# not yours : did you want to log this? source?&lt;br /&gt;# duplication:&lt;br /&gt;adde has automatic duplicate removal .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7820886323175223152?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7820886323175223152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/optimizing-timemachine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7820886323175223152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7820886323175223152'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/optimizing-timemachine.html' title='optimizing timemachine'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4139658081483719373</id><published>2011-12-31T23:55:00.001-07:00</published><updated>2011-12-31T23:55:10.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>transaction-based software configuration mgt system</title><content type='html'>&lt;i&gt;12.4: news.&lt;b&gt;adde/&lt;/b&gt;transaction-based software configuration management system:&lt;/i&gt;&lt;br /&gt;Wheeler`Software Configuration Management (SCM) Security&lt;br /&gt;http://aegis.sourceforge.net/propaganda/security.html&lt;br /&gt;Once authenticated, users do not have write access to the&lt;br /&gt;meta-data or history files of any change set.&lt;br /&gt;The vast majority of "hooks" are in files controlled by Aegis' process;&lt;br /&gt;to maliciously change one requires a conspiracy of&lt;br /&gt;developer, reviewer and integrator.&lt;br /&gt;Aegis is a transaction-based software configuration management system.&lt;br /&gt;pdf"proj change supervisor&lt;br /&gt;http://aegis.sourceforge.net/auug93.pdf&lt;br /&gt;pd"only for software?&lt;br /&gt;http://aegis.sourceforge.net/auug96.pdf&lt;br /&gt;It provides a framework within which a team of developers&lt;br /&gt;may work on many changes to a program independently,&lt;br /&gt;and Aegis coordinates integrating these changes&lt;br /&gt;back into the master source of the program,&lt;br /&gt;with as little disruption as possible.&lt;br /&gt;. more from same author: peter miller .&lt;br /&gt;[@] news,web.adds/openware/peter miller&lt;br /&gt;--&lt;br /&gt;. that reminded me how my logging is helped by a 2-step process:&lt;br /&gt;. one process just adds stuff,&lt;br /&gt;and then another (in a sharp state)&lt;br /&gt;is doing reorganizations, and deletions .&lt;br /&gt;. adde could help by enforcing this:&lt;br /&gt;# the editor-mode user makes only requests&lt;br /&gt;that are virtually filled;&lt;br /&gt;# the reviewer-mode user can fill requests&lt;br /&gt;that do the work, and save the space taken by&lt;br /&gt;holding both the before and after states .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4139658081483719373?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4139658081483719373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/transaction-based-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4139658081483719373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4139658081483719373'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/transaction-based-software.html' title='transaction-based software configuration mgt system'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-213949692947294145</id><published>2011-12-31T23:53:00.003-07:00</published><updated>2011-12-31T23:53:59.521-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>rule of contract vs right to perfect memory</title><content type='html'>&lt;i&gt;12.1: &lt;b&gt;adde&lt;/b&gt;/rule of contract vs right to perfect memory:&lt;/i&gt;&lt;br /&gt;. the rule of contract states that the most important law&lt;br /&gt;is the games people agree to play by;&lt;br /&gt;eg, whether or not close-source is right,&lt;br /&gt;if the user and producer can both agree to it,&lt;br /&gt;then it should be supported .&lt;br /&gt;. although the rule of contract is important,&lt;br /&gt;it often concerns content use restrictions&lt;br /&gt;that conflict with an even more important right:&lt;br /&gt;pursuit of a perfect mind with a perfect memory;&lt;br /&gt;because, being able to remember every experience&lt;br /&gt;entails copying content for replay to yourself;&lt;br /&gt;but, copying content under current systems,&lt;br /&gt;always implies the ability to distribute it to others .&lt;br /&gt;. to facilitate the right to perfect memory,&lt;br /&gt;and system must be able to provide replay&lt;br /&gt;only to those who already seen the playback .&lt;br /&gt;. it must have encrypted files for such memories,&lt;br /&gt;which the own can't unencrypt .&lt;br /&gt;. this would also require a system for insuring&lt;br /&gt;that there was no copying processes&lt;br /&gt;between crypt and display .&lt;br /&gt;. the openware community has had concerns about&lt;br /&gt;something called a trusted platform chip&lt;br /&gt;that it would reduce control ?&lt;br /&gt;. can't recall the details, but we can avoid that;&lt;br /&gt;simply imagine a system where it's like it is now,&lt;br /&gt;but there's a overlayed subsytem&lt;br /&gt;where if encryption is being displayed&lt;br /&gt;only at this time is no other process&lt;br /&gt;allowed to scrape the video ram .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-213949692947294145?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/213949692947294145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/rule-of-contract-vs-right-to-perfect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/213949692947294145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/213949692947294145'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/rule-of-contract-vs-right-to-perfect.html' title='rule of contract vs right to perfect memory'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5981062281594937100</id><published>2011-12-31T23:52:00.003-07:00</published><updated>2011-12-31T23:52:56.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='pointers'/><title type='text'>short pointer</title><content type='html'>&lt;i&gt;12.22: adda/type/short pointer:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;pos: kiss:&lt;br /&gt;. build the obvious system first;&lt;br /&gt;don't worry about having to&lt;br /&gt;rebuild from scratch in order to merge an optimization;&lt;br /&gt;it's important for testing that there are&lt;br /&gt;simple, trustworthy substitutes .&lt;br /&gt;&lt;br /&gt;summary:&lt;br /&gt;. shorter pointers could save a lot of space;&lt;br /&gt;in c, pointers may be 4-bytes long&lt;br /&gt;in order to address any place on the machine .&lt;br /&gt;. addresses can be byte-sized only if needing&lt;br /&gt;less than 256 addresses; for instance,&lt;br /&gt;an array(1..256)of word can hold 256 tree nodes;&lt;br /&gt;and, each node has 2 bytes,&lt;br /&gt;each of which can point to any place in that array .&lt;br /&gt;. a larger tree would use word-sized pointers,&lt;br /&gt;which means the nodes are 4bytes long&lt;br /&gt;(2pointers * 2bytes).&lt;br /&gt;&lt;br /&gt;. the byte- and word-sized addresses&lt;br /&gt;use an array index to do the pointing;&lt;br /&gt;and, are collectively called&amp;nbsp; short pointers;&lt;br /&gt;any use of a short pointer implies a reference to&lt;br /&gt;some particular array;&lt;br /&gt;eg, the root of a tree would be a descriptor&lt;br /&gt;which identifies the tree as using short pointers&lt;br /&gt;and then provides a link to the array being referred to .&lt;br /&gt;&lt;br /&gt;. a tree descriptor would also include&lt;br /&gt;a separate array for data;&lt;br /&gt;because, arrays need to contain just one type&lt;br /&gt;(unless its items all have bulky type tags);&lt;br /&gt;and, while all internal tree nodes&lt;br /&gt;are of type (ptr, ptr),&lt;br /&gt;the leaf nodes contain data of varying sizes and types;&lt;br /&gt;so, the data array might contain system pointers;&lt;br /&gt;or, it could use a heap system,&lt;br /&gt;where the pointer refers to several items:&lt;br /&gt;the first item contains a size field&lt;br /&gt;which indicates how many subsequent items&lt;br /&gt;belong to this datum .&lt;br /&gt;&lt;br /&gt;. large trees (uses word-pointers)&lt;br /&gt;may contain small trees (uses byte-pointers);&lt;br /&gt;any subtree of a large tree containing less than 256 nodes&lt;br /&gt;could be repacked as a pointer to small tree .&lt;br /&gt;. as the list processor goes into a tree,&lt;br /&gt;it is always keeping the current base addresses&lt;br /&gt;for both the large tree and any small tree .&lt;br /&gt;&lt;br /&gt;. a large tree is chosen over a small tree type&lt;br /&gt;not only when it will always be large,&lt;br /&gt;but also when it is likely to grow .&lt;br /&gt;. often it will never approach its max size;&lt;br /&gt;therefore the array being used for the&lt;br /&gt;internal nodes of a large tree&lt;br /&gt;should have a growable size to conserve space .&lt;br /&gt;. one way of being growable is to be&lt;br /&gt;an array of pointers to segments:&lt;br /&gt;eg, suppose the segment is 10 units;&lt;br /&gt;then for item# 78,&lt;br /&gt;follow the 7th pointer to a segment,&lt;br /&gt;and use the 8th item on that segment .&lt;br /&gt;. in practice,&lt;br /&gt;the segments likely should be the size of small trees&lt;br /&gt;( 256 nodes * 2pointers * 1 byte).&lt;br /&gt;&lt;br /&gt;. while the large tree is indexing the seg'd array,&lt;br /&gt;a small subtree could index a segment therein .&lt;br /&gt;[12.23:&lt;br /&gt;. since the short pointers of a large tree are&lt;br /&gt;pointing at a seg' pointer,&lt;br /&gt;seg's could vary in type, and be type-tagged,&lt;br /&gt;that way the large tree can point directly at a small tree&lt;br /&gt;without having to redirect to a data array .&lt;br /&gt;. the large tree is an array of&lt;br /&gt;( pointer to seg&lt;br /&gt;, enum"seg nodes are {word, long}&lt;br /&gt;)].&lt;br /&gt;&lt;br /&gt;. both the large tree (word-pointers)&lt;br /&gt;and the small tree (byte-pointers) &lt;br /&gt;can have a bit per word to indicate&lt;br /&gt;whether they point to tree or data .&lt;br /&gt;. word-sized pointers use their sign bit for indicating&lt;br /&gt;whether they point to tree or data;&lt;br /&gt;byte-sized pointers exist in pairs on word-sized nodes,&lt;br /&gt;and a byte is too small to sacrifice a bit,&lt;br /&gt;so we'll divide the segment in half;*&lt;br /&gt;if the positive side is used (a byte in 0..127)&lt;br /&gt;that item is an internal node;&lt;br /&gt;else (a byte in 128..255) the item is a leaf node .&lt;br /&gt;&lt;br /&gt;*(conveniently, no matter what the shape of a tree,&lt;br /&gt;the number of internal and leaf nodes is nearly the same:&lt;br /&gt;#leaf = #internal + 1 )&lt;br /&gt;&lt;a href="http://www.mathcs.emory.edu/%7Echeung/Courses/171/Syllabus/07-trees/tree-properties.html"&gt;A binary tree with N internal nodes has exactly N+1 external (leaf) nodes &lt;/a&gt;&lt;br /&gt;Proof: by induction&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Base case:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a binary tree with 0 internal nodes has exactly 1 external (leaf) node (root) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Induction step:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; . assume a binary tree with m internal nodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; has exactly m+1 external (leaf) nodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A binary tree with N internal nodes is made up of:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A root (internal node)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A left binary trees with k internal nodes &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A right binary trees with (N - 1 - k) internal nodes &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; According to the induction assumption:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The left binary trees with k internal nodes has exactly&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k+1 external nodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The right binary trees with (N - 1 - k) internal nodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; has exactly (N - k) external nodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; So the total number of external nodes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in a binary tree with N internal nodes is:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k+1 + (N - k) = (N + 1 ) external nodes .&lt;br /&gt;&lt;br /&gt;notes:&lt;br /&gt;&lt;br /&gt;binary operation polymorphism:&lt;br /&gt;. tree polymorphism works the same way numbers do:&lt;br /&gt;if a biop has to deal with (byte, word),&lt;br /&gt;it converts byte to word for the (word, word) vm;&lt;br /&gt;ie, it makes a copy of the tree but with new pointer types .&lt;br /&gt;&lt;br /&gt;. by making small arrays part of larger ones&lt;br /&gt;you would be doing more of your own mem mgt&lt;br /&gt;instead of using c mem mgt&lt;br /&gt;which expects you to de/allocate in stack order;&lt;br /&gt;use c mem mgt for arrays whenever possible;&lt;br /&gt;but use small arrays for tree nodes&lt;br /&gt;to keep tree-pointer size down .&lt;br /&gt;&lt;br /&gt;. the segs of a seg'd array&lt;br /&gt;can either come from malloc,&lt;br /&gt;or be pointers into a reserve array&lt;br /&gt;where you're doing your own mem mgt .&lt;br /&gt;&lt;br /&gt;. the small tree needs arrays of size = word*256&lt;br /&gt;-- that may be the right size for units used by seg'd arrays .&lt;br /&gt;&lt;br /&gt;. of the pointer and its target,&lt;br /&gt;which should contain needed subtype tags?&lt;br /&gt;if the target contains the id,&lt;br /&gt;then there is efficient aliasing;&lt;br /&gt;but in some targets there would be bloat&lt;br /&gt;because targets like system pointers need the whole obj,&lt;br /&gt;and can't spare a few bits for type tagging,&lt;br /&gt;so then an additional array of byte for tagging is needed .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5981062281594937100?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5981062281594937100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/short-pointer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5981062281594937100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5981062281594937100'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/short-pointer.html' title='short pointer'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-2616891675116667613</id><published>2011-12-31T23:50:00.003-07:00</published><updated>2011-12-31T23:50:15.588-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='ABI'/><title type='text'>abi - c's definition of abi differs</title><content type='html'>&lt;i&gt;12.22: mis.adda/abi/c's definition of abi differs:&lt;/i&gt;&lt;br /&gt;. in c culture, the abi(app binary interface)&lt;br /&gt;has meant an interface between apps and&lt;br /&gt;binary library units vs source libraries .&lt;br /&gt;. &lt;a href="http://amerdreamdocs.blogspot.com/search/label/ABI"&gt;my definition of ABI&lt;/a&gt; has been a system of&lt;br /&gt;cross-app communication using a binary language&lt;br /&gt;rather than a exchanging text like unix .&lt;br /&gt;. for instance, see &lt;a href="http://amerdreamdocs.blogspot.com/2011/05/standard-abis-motivation.html"&gt;standard ABIs motivation&lt;/a&gt;:&lt;br /&gt;"( the editor and every command processor&lt;br /&gt;will all speak the system language:&lt;br /&gt;the system's language describes&lt;br /&gt;a mathematical function&lt;br /&gt;as either a set of points or a formula&lt;br /&gt;along with a type specification that includes&lt;br /&gt;a domain and codomain;&lt;br /&gt;with an optional subdomain and inverse operator ).&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-2616891675116667613?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/2616891675116667613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/abi-cs-definition-of-abi-differs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2616891675116667613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2616891675116667613'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/abi-cs-definition-of-abi-differs.html' title='abi - c&apos;s definition of abi differs'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8426853126519218451</id><published>2011-12-31T23:48:00.001-07:00</published><updated>2011-12-31T23:48:28.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>capitalization rules are out</title><content type='html'>&lt;i&gt;12.14:&amp;nbsp; &lt;b&gt;pos.adda/&lt;/b&gt;capitalization rules are out: &lt;/i&gt;&lt;br /&gt;. did you notice the capitalization on colors?&lt;br /&gt;blue is not capitalized is it?,&lt;br /&gt;but certain shades of blue might be?&lt;br /&gt;. I confused because I'm sure&lt;br /&gt;days of the week are capitalized,&lt;br /&gt;and I see no difference between&lt;br /&gt;energy bands for colors,&lt;br /&gt;and time bands across each week .&lt;br /&gt;. well, anyway, don't bother expecting&lt;br /&gt;types in adda to be capitalized;&lt;br /&gt;that would just be more confusing, not less .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;web.engl/&lt;b&gt;capitalization rules&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;concerning colors:&lt;br /&gt;. are colors supposed to be capitalized ?&lt;br /&gt;&lt;a href="http://www.colourlovers.com/forums/1,1,932/Capitalized_Names"&gt;yes,&lt;/a&gt; &lt;a href="http://wiki.answers.com/Q/Do_you_capitalize_colors"&gt;no,&lt;/a&gt; &lt;a href="http://answers.yahoo.com/question/index?qid=20101116163452AA7bh9k"&gt;no,&lt;/a&gt; and &lt;a href="http://answers.yahoo.com/question/index?qid=20080904171200AAfdnjP"&gt;no&lt;/a&gt; .&lt;br /&gt;&lt;a href="http://uk.answers.yahoo.com/question/index?qid=1006032600250"&gt;colors vs days of week:&lt;/a&gt;&lt;br /&gt;. most are named after roman or greek gods&lt;br /&gt;eg, Friday--Freyas Day,&lt;br /&gt;so they kept the capital letter.&lt;br /&gt;. time sections start with a capital letter&lt;br /&gt;in English, and German, but not in French or Spanish .&lt;br /&gt;&lt;a href="http://meta.wikimedia.org/wiki/Capitalization#Capitalization_of_day_names"&gt;. wiki has a list of international capitalization variations;&lt;/a&gt;&lt;br /&gt;eg, the english seem to have retained the rules of Latin .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8426853126519218451?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8426853126519218451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/capitalization-rules-are-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8426853126519218451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8426853126519218451'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/capitalization-rules-are-out.html' title='capitalization rules are out'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7020469869050170963</id><published>2011-12-31T23:46:00.001-07:00</published><updated>2011-12-31T23:46:08.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>(is) vs (=)</title><content type='html'>&lt;i&gt;12.14: adda/(is) vs (=):&lt;/i&gt;&lt;br /&gt;. math is a lang centered around var's,&lt;br /&gt;whereas english's (is) would have to be explicit about&lt;br /&gt;a var being involved;&lt;br /&gt;so, for math's x=c, where c is some constant,&lt;br /&gt;english might say "( x's current value is c ).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7020469869050170963?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7020469869050170963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/is-vs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7020469869050170963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7020469869050170963'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/is-vs.html' title='(is) vs (=)'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7763245331064405080</id><published>2011-12-31T23:45:00.004-07:00</published><updated>2011-12-31T23:45:25.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><title type='text'>librarians that do Make</title><content type='html'>&lt;i&gt;12.14: co.self/&lt;b&gt;dream&lt;/b&gt;/&lt;b&gt;adda/&lt;/b&gt;librarians that do Make:&lt;/i&gt;&lt;br /&gt;. in a compiler system, the info managed by the Make file,&lt;br /&gt;can instead by generated by the library;&lt;br /&gt;the info to be gathered by the linker&lt;br /&gt;includes the hashes of everything that is linked&lt;br /&gt;(so it knows when anything has been modified)&lt;br /&gt;and a database of which wares are required each other;&lt;br /&gt;it is builing a requires-list for&lt;br /&gt;each piece that got linked to anything ...&lt;br /&gt;[. upon waking,&lt;br /&gt;I started looking around for how usable that was;&lt;br /&gt;actually, a hash of each module is not the only thing you want;&lt;br /&gt;because, if an impl' has changed but its interface has not,&lt;br /&gt;then the libary should not need to recompile it .&lt;br /&gt;because it's still promising to serve the same interface as before .&lt;br /&gt;1118:&lt;br /&gt;. however, you would want to do re-apply&lt;br /&gt;any unit testing scripts,&lt;br /&gt;and then passing that would also trigger&lt;br /&gt;any related integration testing scripts .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;12.14: adda/&lt;b&gt;librarians that do Make:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. as the compiler is generating binaries from text,&lt;br /&gt;the Make file is the place for describing dependencies;&lt;br /&gt;so then, if a dependency can be checked for freshness:&lt;br /&gt;if the source text in newer than the binary,&lt;br /&gt;then it needs to be recompiled .&lt;br /&gt;. if the inteface is newer than the binary,&lt;br /&gt;then all clients need to be recompiled .&lt;br /&gt;. we routinely reuse binaries from others;&lt;br /&gt;(most people are users, not developers)&lt;br /&gt;and, so, for a compiler to be doing&lt;br /&gt;Make file duties,&lt;br /&gt;it needs to be exchanging Make info&lt;br /&gt;with other compilers .&lt;br /&gt;&lt;br /&gt;. to know if an import is serving a particular interface&lt;br /&gt;it actually needs a text or symbolic version of that interface&lt;br /&gt;&lt;br /&gt;which needs to resove to the same typenames,&lt;br /&gt;or optionally to any similar datatype,&lt;br /&gt;depending on whether the given type describes itself as&lt;br /&gt;new&lt;br /&gt;where it simply uses other types for implementing its model,&lt;br /&gt;it doesn't expect to be seen as a synonym for the type it used .&lt;br /&gt;&lt;br /&gt;. the ada lang allows both new types and reuse of types;&lt;br /&gt;ie, a new type means you have an impl reusing an old type&lt;br /&gt;but you don't want to be seen as being compatable with the old type,&lt;br /&gt;you want to be compat only to your name&lt;br /&gt;or at least only to the interface your name represents .&lt;br /&gt;. eg,&lt;br /&gt;a character string may be impl'd as a c string, or a safe string,&lt;br /&gt;but both are serving the same model, type"string;&lt;br /&gt;whereas, gasoline tank may be an integer modeling volume,&lt;br /&gt;but it doesn't want to be confused with other integers,&lt;br /&gt;nor operated on by just anything that can modify integers .&lt;br /&gt;&lt;br /&gt;. we have ideas for features addx should have,&lt;br /&gt;make sure to separate that from how features should be impl'd .&lt;br /&gt;&lt;br /&gt;. if there's a new version with a fix from an exporter,&lt;br /&gt;your librarian needs&amp;nbsp; to accept it&lt;br /&gt;but if it's accepting c or python code,&lt;br /&gt;then user needs to be informed that the system is less secure&lt;br /&gt;if they go ahead with reuse by non-adda coders .&lt;br /&gt;(the reason you're safe with adda code,&lt;br /&gt;is that it's compiled by adda, a trusted app&lt;br /&gt;-- unless your machine's os has been&lt;br /&gt;compromised by malware --&lt;br /&gt;adda code has been translated into python or c,&lt;br /&gt;which can be trusted as much python's core library,&lt;br /&gt;and your own os (that depends on&lt;br /&gt;your own security policy:&lt;br /&gt;do you run your browser in a vm?&lt;br /&gt;keep your os updated?&lt;br /&gt;know where your usb drives have been? ...)&lt;br /&gt;&lt;br /&gt;sync's:&lt;br /&gt;. the model that the librarian needs to have in order to&lt;br /&gt;accept imports,&lt;br /&gt;is to accept sync's with other librarians&lt;br /&gt;and then synchs download interfaces of sharables&lt;br /&gt;so your librarian can list them when you've asked what's available .&lt;br /&gt;. if you do use an external,&lt;br /&gt;it downloads the associated body,&lt;br /&gt;the list shows too where your names conflict .&lt;br /&gt;. it doesn't require you to rename conflicts because&lt;br /&gt;all listings are qualified by the exporting librarian's name,&lt;br /&gt;except for the entries of the local librarian .&lt;br /&gt;. the user's rename can make an export appear to be local,&lt;br /&gt;while yet being maintained by an exporter .&lt;br /&gt;. local librarian is thus a language translator,&lt;br /&gt;having a separate set of names for {user, other librarians}.&lt;br /&gt;&lt;br /&gt;12.14: todo.adda/unify sync'd librarians with version control systems:&lt;br /&gt;. the need to unify sync'd librarians&lt;br /&gt;has to do with version control systems .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7763245331064405080?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7763245331064405080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/librarians-that-do-make.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7763245331064405080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7763245331064405080'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/librarians-that-do-make.html' title='librarians that do Make'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6164669884890218763</id><published>2011-12-31T23:43:00.000-07:00</published><updated>2011-12-31T23:43:14.381-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='translate'/><title type='text'>passing destination references implicitely</title><content type='html'>&lt;i&gt;12.9:&lt;b&gt; adda/translate/&lt;/b&gt;passing destination references implicitely:&lt;/i&gt;&lt;br /&gt;. by passing destination locations as references&lt;br /&gt;instead of having functions return objects,&lt;br /&gt;we can avoid a lot of garbage generation,&lt;br /&gt;but the reason oop doesn't do this is it complicates the job of&lt;br /&gt;application programmers .&lt;br /&gt;. the reason addx does do this, is it has a translator&lt;br /&gt;that does this automatically for programmers:&lt;br /&gt;the compiler is looking for their y`= f(x)&lt;br /&gt;and converting it for them into f-proc(&amp;amp;y, x).&lt;br /&gt;. I think I had a contradictory example somewhere,&lt;br /&gt;but it only applies to when the library programmer is&lt;br /&gt;wanting to do systems programming (when it extends the compiler).&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6164669884890218763?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6164669884890218763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/passing-destination-references.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6164669884890218763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6164669884890218763'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/passing-destination-references.html' title='passing destination references implicitely'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8152278411477881158</id><published>2011-12-31T23:42:00.000-07:00</published><updated>2011-12-31T23:42:21.351-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>else-if statement's syntax</title><content type='html'>&lt;i&gt;12.10: &lt;b&gt;adda/cstr/&lt;/b&gt;else-if:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. here is the if-else syntax:&lt;br /&gt;t?&lt;br /&gt;&amp;nbsp;( c1: s1&lt;br /&gt;&amp;nbsp;, c2: s2&lt;br /&gt;&amp;nbsp;, else: s3&lt;br /&gt;&amp;nbsp;) .&lt;br /&gt;if I add an elsif to the structure, how does that fit in ?;&lt;br /&gt;actually, with the use of (?) instead of (if)&lt;br /&gt;there's maximum brevity without using a&lt;br /&gt;contraction of&amp;nbsp; [else if] .&lt;br /&gt;. using that case-style syntax, it'd look like this:&lt;br /&gt;t1 ? ( s1&lt;br /&gt;, else: t2 ? (s3&lt;br /&gt;, else: t4 ? (s5&lt;br /&gt;, else: s6 ))).&lt;br /&gt;. using truth-style syntax, it looks normal:&lt;br /&gt;t1 ? s1&lt;br /&gt;else t2 ? s3&lt;br /&gt;else t4 ? s5&lt;br /&gt;else s6 .&lt;br /&gt;-- neat, but since (if) doesn't have a terminator&lt;br /&gt;(like ada's endif,&lt;br /&gt;any nested if-else's have to be parenthesized&lt;br /&gt;as do any statement sequences:&lt;br /&gt;t1 ?&lt;br /&gt;&amp;nbsp; s1&lt;br /&gt;else t2 ?&lt;br /&gt;&amp;nbsp; (t1 ? s1 else t2 ? s3 else t4 ? s5 else s6 )&lt;br /&gt;else t4 ?&lt;br /&gt;&amp;nbsp; (s1; s2) &lt;br /&gt;else&lt;br /&gt;&amp;nbsp; s6 .&lt;br /&gt;&lt;br /&gt;[if vs ?]:&lt;br /&gt;. if you'd rather use if's, then (t?) is generally&lt;br /&gt;replaceable with (if t:); ie,&lt;br /&gt;the (:) is acting as a terminator like the (?) does .&lt;br /&gt;mis:&lt;br /&gt;. at first I was seeing it as a case stmt &lt;br /&gt;with more than one case possible&lt;br /&gt;the thing need to be ordered&lt;br /&gt;reminds of using (;) instead of (,)&lt;br /&gt;as is structuring arrays into matrices .&lt;br /&gt;even if I could make the matrix pattern fit,&lt;br /&gt;I'm not sure a tired or new programmer could&lt;br /&gt;keep a working knowledge of it .&lt;br /&gt;&lt;br /&gt;sci:&lt;br /&gt;. notice that since both of (if)'s args are required, &lt;br /&gt;then you could also separate them with a space&lt;br /&gt;like lisp does; in that case,&lt;br /&gt;you'd be detecting the condition where&lt;br /&gt;the next token in the 2nd arg has to be an infix&lt;br /&gt;but instead you found a non-infix;&lt;br /&gt;however, that wouldn't work in my current syntax,&lt;br /&gt;because infix's can also serve as prefix's;&lt;br /&gt;so the (if)'s arg's&amp;nbsp; do need a separator,&lt;br /&gt;and a natural for that situation is the colon .&lt;br /&gt;then again:&lt;br /&gt;. you could also tell that the (if)'s 2nd arg began&lt;br /&gt;because the next infix you were expecting&lt;br /&gt;would have to be a truth-operator, ie:&lt;br /&gt;{ or, and; nor, nand,&lt;br /&gt;&amp;lt;=&amp;gt;, &lt;!--=--&gt; -- x is/not equivalent to y (&lt;!--=--&gt; is also called xor, exclusive-or),&lt;br /&gt;=&amp;gt;, =/&amp;gt; -- x does/not imply y,&lt;br /&gt;&amp;lt;=, &lt;!--= -- x is/not implied by y .&lt;br--&gt;}&lt;br /&gt;another prequisite:&lt;br /&gt;. the other problem with not using the colon,&lt;br /&gt;is that you can no longer have overloading;&lt;br /&gt;you'd have to reserve the logical operators;&lt;br /&gt;and while it does add unnecessarily to bureaucracy,&lt;br /&gt;it would aid considerably to readability .&lt;br /&gt;nevertheless:&lt;br /&gt;. speaking of readability, use of the separator would&lt;br /&gt;make it easy for humans to quickly parse;&lt;br /&gt;and while adda should let writers skip the separator,&lt;br /&gt;it should provide the readers the option of viewing it;&lt;br /&gt;ie, it would be part of the&lt;br /&gt;full vs minimized punctuation theme .&lt;br /&gt;the deal breaker:&lt;br /&gt;. finally, an insurmountable problem is one of&lt;br /&gt;users adding more binary logic operators,&lt;br /&gt;or similar functions of the form:&lt;br /&gt;(truth, other-type)-&amp;gt;truth .&lt;br /&gt;. they should be able to do that,&lt;br /&gt;so, you'd also have to make a general rule about&lt;br /&gt;no overloading of such,&lt;br /&gt;and that would be too much bureacracy&lt;br /&gt;for the sake of merely simplifying (if)'s .&lt;br /&gt;&lt;br /&gt;list of truth-operators:&lt;br /&gt;. here is a table of possible combinations on 2 variables, x,y;&lt;br /&gt;and the operations that can detect those combinations .&lt;br /&gt;(~x&amp;amp;~y, ~x&amp;amp;y, x&amp;amp;~y, x&amp;amp;y) -- operation:&lt;br /&gt;------------------------------------------&lt;br /&gt;0000 -- false (regardless of inputs)&lt;br /&gt;0001 -- x&amp;amp;y -- x and y&lt;br /&gt;0010 --&amp;nbsp; x&amp;amp;~y -- not( ~x or y) -- x =/&amp;gt; y&lt;br /&gt;0011 --&amp;nbsp; x (regardless of y)&lt;br /&gt;0100 -- ~x&amp;amp;y -- not (x &amp;lt;= y)&lt;br /&gt;0101 -- y (regardless of x)&lt;br /&gt;0110 -- ~x&amp;amp;y or x&amp;amp;~y -- xor -- &lt;!--=--&gt;&lt;br /&gt;0111 -- x or y&lt;br /&gt;1000 -- ~x&amp;amp;~y -- not(x or y) -- nor&lt;br /&gt;1001 -- ~x&amp;amp;~y or x&amp;amp;y -- &amp;lt;=&amp;gt; &lt;br /&gt;1010 -- ~y (regardless of x)&lt;br /&gt;1011 -- not (~x&amp;amp;y) -- x or ~y -- x &amp;lt;= y&lt;br /&gt;1100 -- ~x (regardless of y)&lt;br /&gt;1101 -- not(x&amp;amp;~y) -- ~x or y -- x =&amp;gt; y&lt;br /&gt;1110 -- not(x&amp;amp;y) -- ~x or ~y -- nand,&lt;br /&gt;1111 -- true (regardless of inputs)&lt;br /&gt;&lt;br /&gt;the same rearranged by category:&lt;br /&gt;&lt;br /&gt;non-binary logic:&lt;br /&gt;truth values:&lt;br /&gt;0000 -- false (regardless of inputs)&lt;br /&gt;1111 -- true (regardless of inputs)&lt;br /&gt;variable values:&lt;br /&gt;0011 --&amp;nbsp; x (regardless of y)&lt;br /&gt;1100 -- ~x (regardless of y)&lt;br /&gt;0101 -- y (regardless of x)&lt;br /&gt;1010 -- ~y (regardless of x)&lt;br /&gt;&lt;br /&gt;classic binary logic:&lt;br /&gt;0001 -- x and y&lt;br /&gt;0111 -- x or y&lt;br /&gt;1101 -- not(x&amp;amp;~y) -- ~x or y -- x =&amp;gt; y&lt;br /&gt;0010 --&amp;nbsp; x&amp;amp;~y -- not( ~x or y) -- x =/&amp;gt; y&lt;br /&gt;1001 -- ~x&amp;amp;~y or x&amp;amp;y -- &amp;lt;=&amp;gt;&lt;br /&gt;0110 -- ~x&amp;amp;y or x&amp;amp;~y -- xor -- &lt;!--=--&gt;&lt;br /&gt;modern binary logic:&lt;br /&gt;1110 -- not(x&amp;amp;y) -- ~x or ~y -- nand,&lt;br /&gt;1000 -- ~x&amp;amp;~y -- not(x or y) -- nor&lt;br /&gt;english binary logic:&lt;br /&gt;1011 -- not (~x&amp;amp;y) -- x or ~y -- x &amp;lt;= y -- implied by&lt;br /&gt;0100 -- ~x&amp;amp;y -- not (x &amp;lt;= y) -- not implied by&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8152278411477881158?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8152278411477881158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/else-if-statements-syntax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8152278411477881158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8152278411477881158'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/else-if-statements-syntax.html' title='else-if statement&apos;s syntax'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3589568520539622576</id><published>2011-12-31T23:39:00.004-07:00</published><updated>2011-12-31T23:39:51.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='exceptions'/><title type='text'>exceptions - events declared in the interface</title><content type='html'>&lt;i&gt;&lt;b&gt;adda/type/exceptions/&lt;/b&gt;events declared in the interface:&lt;/i&gt;&lt;br /&gt;. the singleton pattern in the cocoa text has an example&lt;br /&gt;where some device mgt needs to know when the app is closing&lt;br /&gt;(ie, the app class provides a notification service,&lt;br /&gt;and it needs to be registered with this service).&lt;br /&gt;. generally,&lt;br /&gt;if there is an event that type mgt needs,&lt;br /&gt;declaring it in its interface should register it&lt;br /&gt;to receive notifcations of any such events .&lt;br /&gt;. notifications are interrupting the control flow&lt;br /&gt;but unlike during ada exceptions,&lt;br /&gt;the flow can return back to its routine .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3589568520539622576?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3589568520539622576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/exceptions-events-declared-in-interface.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3589568520539622576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3589568520539622576'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/exceptions-events-declared-in-interface.html' title='exceptions - events declared in the interface'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7719725332838244989</id><published>2011-12-31T23:39:00.000-07:00</published><updated>2011-12-31T23:39:06.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='exceptions'/><title type='text'>exceptions - when to use error logging instead</title><content type='html'>&lt;i&gt;&lt;b&gt;adda/cstr/exceptions/&lt;/b&gt;when to use error logging instead:&lt;/i&gt;&lt;br /&gt;. if the misuse of an interface will be caught during compilation&lt;br /&gt;then a logged warning is appropriate;&lt;br /&gt;otherwise, the bug catch will be depending on&lt;br /&gt;how much testing the client coder does,&lt;br /&gt;so if the bug gets to the user,&lt;br /&gt;there should be an exception to get some runtime backup;&lt;br /&gt;ie, the code will be responding to exceptions with&lt;br /&gt;certain fixes or apologies;&lt;br /&gt;conversely, if the coder isn't catching exceptions&lt;br /&gt;then that is some half-baked, dangerous code,&lt;br /&gt;and the user should be made aware it&lt;br /&gt;so then the denial of service implied by an uncaught exception&lt;br /&gt;is warranted .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7719725332838244989?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7719725332838244989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/exceptions-when-to-use-error-logging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7719725332838244989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7719725332838244989'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/exceptions-when-to-use-error-logging.html' title='exceptions - when to use error logging instead'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3348708866428487479</id><published>2011-12-31T23:38:00.000-07:00</published><updated>2011-12-31T23:38:06.683-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>ada`separate addressing the overloaded</title><content type='html'>&lt;i&gt;&lt;b&gt;adda/syntax/&lt;/b&gt;ada`separate/addressing the overloaded:&lt;/i&gt;&lt;br /&gt;. how is adda saying the full name of a nested subroutine,&lt;br /&gt;like ada says separate is ... ? use keyword body func`body,&lt;br /&gt;. functions can be overloaded (ie,&lt;br /&gt;different functions with the same name&lt;br /&gt;but distinguished by unique signatures),&lt;br /&gt;so then the full path name may need to include the signature:&lt;br /&gt;eg, func(t1,t2)`body/subroutine .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3348708866428487479?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3348708866428487479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/adaseparate-addressing-overloaded.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3348708866428487479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3348708866428487479'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/adaseparate-addressing-overloaded.html' title='ada`separate addressing the overloaded'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6732386610365653173</id><published>2011-12-31T23:36:00.005-07:00</published><updated>2011-12-31T23:36:59.216-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>possessive right for component selection?</title><content type='html'>&lt;i&gt;12.3: proj.&lt;b&gt;adda/syntax&lt;/b&gt;/possessive right for component selection?:&lt;/i&gt;&lt;br /&gt;. I've been overloading the possessive for use as&lt;br /&gt;both an obj`call and an obj`component,&lt;br /&gt;any complications?&lt;br /&gt;. wasn't there some new idea for record syntax,&lt;br /&gt;like obj.component? yes:&lt;br /&gt;http://amerdreamdocs.blogspot.com/2011/04/rethinking-aggregates.html&lt;br /&gt;. the consequence was,&lt;br /&gt;if a name already stands for a type,&lt;br /&gt;it can't be used as the name for any component .&lt;br /&gt;. that would be easy if there was a rule like&lt;br /&gt;(type`names must be capitalized),&lt;br /&gt;but most would rather write .int than .Z .&lt;br /&gt;. adde can help out by auto-formatting types in a bold font .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6732386610365653173?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6732386610365653173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/possessive-right-for-component.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6732386610365653173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6732386610365653173'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/possessive-right-for-component.html' title='possessive right for component selection?'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6668641555494119061</id><published>2011-12-31T23:36:00.001-07:00</published><updated>2011-12-31T23:36:17.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><title type='text'>rom vs const</title><content type='html'>&lt;i&gt;12.2:&lt;b&gt; adda/cstr/&lt;/b&gt;rom vs const:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;what did rom vs const mean?&lt;br /&gt;. the use of a "rom" designation only makes sense when sharing;&lt;br /&gt;because, const means it's rom even to self&lt;br /&gt;(ie, no writes after init) .&lt;br /&gt;. the rom and const could reuse the same symbol&lt;br /&gt;since when a param says const&lt;br /&gt;that's the same as promise to the caller that it'll be&lt;br /&gt;treated as read-only: ie, const.&lt;br /&gt;. const is like in-mode and that is the default mode;&lt;br /&gt;12.3:&lt;br /&gt;. there is still the issue of what happens to a param later;&lt;br /&gt;eg, when my formal param uses the constant specifier,&lt;br /&gt;it assures not only that it won't do any modifications&lt;br /&gt;but also that it won't pass the obj to a modifying function .&lt;br /&gt;. another issue is compatability:&lt;br /&gt;{mutable, contst} can be assigned to const;&lt;br /&gt;only mutable can assigned to mutable&lt;br /&gt;(a param is mutable when declared as inout-mode ).&lt;br /&gt;. due to obj's having access to themselves,&lt;br /&gt;whether an operation of theirs is really read-only&lt;br /&gt;is totally up to them their private implementations&lt;br /&gt;unless the system can detect when they write .&lt;br /&gt;. if the system can't detect that,&lt;br /&gt;there will have to be more copying to assure modularity .&lt;br /&gt;12.2: &lt;br /&gt;.&amp;nbsp; one efficiency trick for reducing the amount of copying,&lt;br /&gt;is to wait for an attempted write&lt;br /&gt;before doing the copy .&lt;br /&gt;12.3:&lt;br /&gt;. once the run-time mgt can detect writes to a rom,&lt;br /&gt;it needs to raise an exception,&lt;br /&gt;so, to avoid such messes,&lt;br /&gt;param providers and their compilers&lt;br /&gt;need to know what operations are modifiers .&lt;br /&gt;. the way operations are described in an interface,&lt;br /&gt;(`f) is assumed to be self-modifying&lt;br /&gt;unless it states otherwise;&lt;br /&gt;for f to be seen as non-modifying&lt;br /&gt;it should be defined as a function&lt;br /&gt;(ie, not out-mode params or side-affects)&lt;br /&gt;or be tagged as non-modifying:&lt;br /&gt;( !`f ).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6668641555494119061?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6668641555494119061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/rom-vs-const.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6668641555494119061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6668641555494119061'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/rom-vs-const.html' title='rom vs const'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6846604490829695854</id><published>2011-12-31T23:35:00.003-07:00</published><updated>2011-12-31T23:35:25.195-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><title type='text'>syntax for readonly, const, out, inout, persistent</title><content type='html'>&lt;i&gt;12.2: &lt;b&gt;adda/type/&lt;/b&gt;syntax for readonly, const, out, inout, persistent:&lt;/i&gt;&lt;br /&gt;todo:&lt;br /&gt;. need to review or finish the type syntax .&lt;br /&gt;.#./.txt&lt;br /&gt;.#./!.txt! -- array of const pointer to const text,&lt;br /&gt;A ^#.txt -- persistent array of text,&lt;br /&gt;[12.3:&lt;br /&gt;. this would be a lot more readable if the (!) was simply replacing the (.)&lt;br /&gt;#!/!txt -- the (!) would then be translated as "(return const ...)&lt;br /&gt;-- that says type is array return const pointer to return constant text .&lt;br /&gt;...&lt;br /&gt;however, it doesn't address all needs:&lt;br /&gt;for operations over self ( declared as x`f().t )&lt;br /&gt;how do you say `f is readonly? ]&lt;br /&gt;12.5: read-only operations:&lt;br /&gt;. in places where !`f might say&lt;br /&gt;(operation over obj is readonly)&lt;br /&gt;[1039: adde's english mode should apply to commands too;&lt;br /&gt;it would display footnotes of what a command does&lt;br /&gt;in a twitter sized message . the footnotes would be at each step;&lt;br /&gt;so also below any complete algebraic expression .]&lt;br /&gt;the problem with consistency is that you're not using the same syntax&lt;br /&gt;where dot is showing the obj type being returned .&lt;br /&gt;. there were 2 situations for rom or const:&lt;br /&gt;# rom for params ie sharing ,&lt;br /&gt;# const for your own obj's .&lt;br /&gt;. in the case of x`f(), you're looking to express rom on a param&lt;br /&gt;but the param is implicit, so then you need to make it explicit:&lt;br /&gt;(o!T)`f -- a read-only operation;&lt;br /&gt;(o.T)`f, `g -- mutating operations .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6846604490829695854?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6846604490829695854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/syntax-for-readonly-const-out-inout.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6846604490829695854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6846604490829695854'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/syntax-for-readonly-const-out-inout.html' title='syntax for readonly, const, out, inout, persistent'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-152392680630583186</id><published>2011-12-31T23:34:00.001-07:00</published><updated>2011-12-31T23:34:42.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><title type='text'>c's static internal vars</title><content type='html'>&lt;i&gt;12.2: &lt;b&gt;adda/cstr&lt;/b&gt;/c's static internal vars:&lt;/i&gt;&lt;br /&gt;. c's static internal vars are can applied in obj'c&lt;br /&gt;to both {class, instance} methods and functions .&lt;br /&gt;. persistence is the essence of c's static internal vars:&lt;br /&gt;they are locally scoped within a function,&lt;br /&gt;yet retain their value between calls to the function .&lt;br /&gt;. it's as if the modules that contain these functions&lt;br /&gt;are keeping these "(locals) at their top level;&lt;br /&gt;so for T.type/f.proc/x.txt&lt;br /&gt;you might see the var is actually at&lt;br /&gt;T`body/f.proc'space/x.txt .&lt;br /&gt;. for a progam, it's actually structured as a package:&lt;br /&gt;(main, subroutine, globals), so local static looks like:&lt;br /&gt;program/Subroutine'space/x.txt .&lt;br /&gt;. what does that look like in adda?&lt;br /&gt;. my first idea was asserting that&lt;br /&gt;part of simplicity is naming things after&lt;br /&gt;the way they are actually structured;&lt;br /&gt;but after seeing how verbose that was,&lt;br /&gt;I'm looking at a functional keyword:&lt;br /&gt;persistent (with brief symbol = (^)&lt;br /&gt;-- an amusing reference to christian's one-way ).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-152392680630583186?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/152392680630583186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/cs-static-internal-vars.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/152392680630583186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/152392680630583186'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/cs-static-internal-vars.html' title='c&apos;s static internal vars'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6061816218967534971</id><published>2011-12-31T23:33:00.001-07:00</published><updated>2011-12-31T23:33:23.430-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>subclassing without sideaffects</title><content type='html'>&lt;i&gt;12.22: &lt;b&gt;todo.adda/oop/&lt;/b&gt;subclassing without sideaffects&lt;/i&gt;:&lt;br /&gt;. how does the oop remain secure, and yet reusable?&lt;br /&gt;they are having a lot of fun with subclassing,&lt;br /&gt;so, is there any way to do that safely ?&lt;br /&gt;the general idea is that it creates sideaffects,&lt;br /&gt;so not only do you want to enforce capability limits on apps,&lt;br /&gt;you also want to warn users when an app uses side-affecting features .&lt;br /&gt;. you want to bar cap'grabbing features&lt;br /&gt;like the obj'c categories which allow adding slots to library classes;&lt;br /&gt;however, need to get more aquainted with&lt;br /&gt;why they feel that is needed,&lt;br /&gt;and find some alternative .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6061816218967534971?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6061816218967534971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/subclassing-without-sideaffects.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6061816218967534971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6061816218967534971'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/subclassing-without-sideaffects.html' title='subclassing without sideaffects'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7003193864165785820</id><published>2011-12-31T23:32:00.003-07:00</published><updated>2011-12-31T23:32:41.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>class methods</title><content type='html'>&lt;i&gt;12.2: &lt;b&gt;adda/oop/&lt;/b&gt;class methods:&lt;/i&gt;&lt;br /&gt;. how does adda do&amp;nbsp; an objc class method?&lt;br /&gt;. there are notes already but here's review:&lt;br /&gt;t.type: ((instance methods declared here));&lt;br /&gt;t`classmethod().proc -- a class method&lt;br /&gt;. you could also have everything in the interface,&lt;br /&gt;distingishing {class, instance} with the usual keywords:&lt;br /&gt;# self`f(x), `f(x) -- instance method (the default)&lt;br /&gt;# class`g(x) -- class method .&lt;br /&gt;[12.3:&lt;br /&gt;. this basically mirrors the way obj'c does it .]&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7003193864165785820?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7003193864165785820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/class-methods.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7003193864165785820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7003193864165785820'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/12/class-methods.html' title='class methods'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4919131407327697465</id><published>2011-11-30T23:59:00.001-07:00</published><updated>2011-12-01T00:19:32.369-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='outliner'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>link expansion options</title><content type='html'>&lt;i&gt;11.7: adde/outliner/&lt;b&gt;links whose default is&lt;/b&gt;&lt;br /&gt;&lt;b&gt; [target replaces current link instead of current page]:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. outlines are like a tree of links except that&lt;br /&gt;instead of the destination replacing the current view&lt;br /&gt;it becomes added to it .&lt;br /&gt;. notice that this is a generalizable link option:&lt;br /&gt;a link would have a default activity,&lt;br /&gt;but by using the context menu, you could select either&lt;br /&gt;{ target replaces current link instead of current page&lt;br /&gt;, target replaces current page&lt;br /&gt;, target lauches in new {window, tab, todo list}&lt;br /&gt;}.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;. if the default is to embed,&lt;br /&gt;that could have the appearance of a folder,&lt;br /&gt;ie, a folder icon precedes the link's text;&lt;br /&gt;whereas the usual link would look like a browser link, [11.25:&lt;br /&gt;or there could be an icon for various other reasons&lt;br /&gt;eg, wikipedia uses an arrow icon to show&lt;br /&gt;&lt;a href="https://wikimediafoundation.org/wiki/Support_Wikipedia/en" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img alt="Support Wikipedia" border="0" src="//upload.wikimedia.org/wikipedia/commons/4/4b/Fundraising_2009-square-treasure-en.png" /&gt;&lt;/a&gt;the link's destination is an external site;&lt;br /&gt;additionally, the icon could include these clues:&lt;br /&gt;{ 2-windows.icon: target lauches in new window&lt;br /&gt;, 2-tabs.icon: target lauches in new tab&lt;br /&gt;, todo-list.icon: target lauches in new todo&lt;br /&gt;, otherwise: target replaces current page&lt;br /&gt;}.]&lt;br /&gt;. how would you show that a folder was empty?&lt;br /&gt;. a folder appears as in the typical&lt;br /&gt;list view of a file system:&lt;br /&gt;an icon of a folder is in front of the folder's name;&lt;br /&gt;there can be various versions of folder icon&lt;br /&gt;{empty [11.25: apearing up-side down?]&lt;br /&gt;, full &lt;br /&gt;}. [11.25: the way microsoft does this is&lt;br /&gt;show a folder as being {open, closed},&lt;br /&gt;and so then you could know folder has content by&lt;br /&gt;trying to open it, and see if anything falls out&lt;br /&gt;into an indented subwindow&lt;br /&gt;(most other systems copy this behavior,&lt;br /&gt;but I find myself too often wanting to&lt;br /&gt;check what's empty).]&lt;br /&gt;. folder-icon'd links can, as usual,&lt;br /&gt;be part of word-wrapped text,&lt;br /&gt;and when these are opened, things are kept organized by&lt;br /&gt;having the contents of a folder be in parentheses&lt;br /&gt;and following the folder . [11.25:&lt;br /&gt;. or if the destination was large, the opening would result in&lt;br /&gt;putting the link on its own line,&lt;br /&gt;and then putting the contents in an indented subwindow .]&lt;br /&gt;--&lt;br /&gt;. the important thing for personal pref's&lt;br /&gt;and avoiding patent infringement,&lt;br /&gt;is that it be very easy for the users to design&lt;br /&gt;the behavior of the flavor of their gui .&lt;a href="https://wikimediafoundation.org/wiki/Support_Wikipedia/en"&gt;&lt;img alt="Support Wikipedia" border="0" src="//upload.wikimedia.org/wikipedia/commons/4/41/Fundraising_2009-horizontal-thanks-en.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4919131407327697465?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4919131407327697465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/link-expansion-options.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4919131407327697465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4919131407327697465'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/link-expansion-options.html' title='link expansion options'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-362179980912736887</id><published>2011-11-30T23:43:00.001-07:00</published><updated>2011-11-30T23:52:08.434-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='late binding'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='type inferencing'/><category scheme='http://www.blogger.com/atom/ns#' term='deferred linking'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>inferred typing</title><content type='html'>&lt;i&gt;11.12: &lt;b&gt;adda/types/&lt;/b&gt;inferred typing:&lt;/i&gt;&lt;br /&gt;(reviewing &lt;a href="http://evlan.org/documentation/typesystem/"&gt;evlan's type system draft&lt;/a&gt;)&lt;br /&gt;[@] &lt;span style="font-size: x-small;"&gt;&lt;a href="http://amerdreamdocs.blogspot.com/2011/11/evlanorg-describes-many-addx-features.html"&gt;11.10.31/news.adda/lang"evlan/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;a href="http://amerdreamdocs.blogspot.com/2011/11/evlanorg-describes-many-addx-features.html"&gt;evlan.org describes many addx features&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;. the reason you want to infer types&lt;br /&gt;is so that you can have an efficient run-time;&lt;br /&gt;if you don't care about that, as when prototyping,&lt;br /&gt;then oop can be checking everything at run-time,&lt;br /&gt;and both the coding and the compile times can be very fast .&lt;br /&gt;. perhaps another reason to infer types&lt;br /&gt;is so that you can warn users when oop might not help?&lt;br /&gt;-- see the &lt;a href="http://amerdreamduh.blogspot.com/2009/12/review-kochanprogramming-objective-c-20.html"&gt;obj'c text&lt;/a&gt;'s explanation of &lt;br /&gt;why you don't want to type everything weakly&lt;br /&gt;(as a pointer to anything);&lt;br /&gt;basically it's because obj'c offers&lt;br /&gt;so much freedom with deferred linking&lt;br /&gt;that the compiler can make only the most general&lt;br /&gt;inference:&lt;br /&gt;if you don't mention a constraint&lt;br /&gt;then the compiler has to assume you need&lt;br /&gt;an unconstrained type for the purpose of&lt;br /&gt;linking to future objects of unknown type .&lt;br /&gt;. prototype developers and even production coders&lt;br /&gt;like oop especially because it lends itself well&lt;br /&gt;to such typeless programming,&lt;br /&gt;ie, specifically avoiding type constraints by&lt;br /&gt;letting the objects themselves decide whether&lt;br /&gt;they understand a certain command .&lt;br /&gt;. when you get into binary operations though,&lt;br /&gt;(ie, pairs of objects -- and pairing is where&lt;br /&gt;the dancing gets interesting )&lt;br /&gt;then typeless programming is not so useful,&lt;br /&gt;so typing is the only way to do what I call oop&lt;br /&gt;(the classic example of oop&lt;br /&gt;is the polymorphic type"number,&lt;br /&gt;a class of subtypes including integers and floats;&lt;br /&gt;ie, integer and floats can be playing well together&lt;br /&gt;only because they are declared as subtypes of&lt;br /&gt;the same type supertype, Numbers ).&lt;br /&gt;&lt;a href="https://wikimediafoundation.org/wiki/Support_Wikipedia/en"&gt;&lt;img alt="Support Wikipedia" border="0" src="//upload.wikimedia.org/wikipedia/commons/4/41/Fundraising_2009-horizontal-thanks-en.png" /&gt;&lt;/a&gt;&lt;a href="https://wikimediafoundation.org/wiki/Support_Wikipedia/en"&gt;&lt;img alt="Support Wikipedia" border="0" src="//upload.wikimedia.org/wikipedia/commons/5/56/Fundraising_2009-horizontal-treasure-en.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-362179980912736887?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/362179980912736887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/inferred-typing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/362179980912736887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/362179980912736887'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/inferred-typing.html' title='inferred typing'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4754036892962571210</id><published>2011-11-30T22:43:00.001-07:00</published><updated>2011-11-30T23:04:00.408-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e-lang'/><category scheme='http://www.blogger.com/atom/ns#' term='cap&apos;based'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='functional'/><category scheme='http://www.blogger.com/atom/ns#' term='capabilities'/><category scheme='http://www.blogger.com/atom/ns#' term='microkernel'/><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><category scheme='http://www.blogger.com/atom/ns#' term='addm'/><title type='text'>evlan.org describes many #addx features</title><content type='html'>&lt;i&gt;10.31: news.adda/lang"evlan/&lt;br /&gt;&lt;b&gt;evlan.org describes many addx features:&lt;/b&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;. Kenton Varda's Evlan has many addx features;&lt;br /&gt;but, it "(currently has no type system);&lt;br /&gt;and, it &lt;a href="http://evlan.org/news/3"&gt;died in 2007.10.1&lt;/a&gt;, whenthe author "(got a real job)!&lt;br /&gt;&lt;br /&gt;. what first caught my was &lt;a href="http://evlan.org/concepts/capabilities/"&gt;cap-based security&lt;/a&gt;:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Most of today's computer platforms operate under&lt;br /&gt;a fundamental assumption that has proven utterly false:&lt;br /&gt;that if a user executes a program,&lt;br /&gt;the user completely trusts the program.&lt;br /&gt;This assumption has been made by just about&lt;br /&gt;every operating system since Unix&lt;br /&gt;and is made by all popular operating systems used today.&lt;br /&gt;This one assumption is arguably responsible for&lt;br /&gt;the majority of end-user security problems.&lt;br /&gt;It is the reason malware&lt;span style="font-size: x-small;"&gt; -- adware, spyware, and viruses --&lt;/span&gt;&lt;br /&gt;are even possible to write,&lt;br /&gt;and it is the reason even big-name software&lt;br /&gt;like certain web browsers&lt;br /&gt;are so hard to keep secure.&lt;br /&gt;Under the classical security model,&lt;br /&gt;when a user runs a piece of software,&lt;br /&gt;the user is granting that software the capability&lt;br /&gt;to do anything that the user can do.&lt;br /&gt;Under capability-based security,&lt;br /&gt;when a user runs a piece of software,&lt;br /&gt;the software starts out with no capabilities whatsoever.&lt;br /&gt;The user may then grant specific capabilities to the program.&lt;br /&gt;For example, the user might grant the program&lt;br /&gt;permission to read its data files.&lt;br /&gt;The user could also control whether or not&lt;br /&gt;the program may access the network, play sounds, etc.&lt;br /&gt;Most importantly,&lt;br /&gt;all of these abilities can be controlled&lt;br /&gt;independently on a per-program basis.&lt;/blockquote&gt;. the other main idea like addx&lt;br /&gt;is its being a virtual operating system&lt;br /&gt;which runs on top of any other operating system;&lt;br /&gt;via a virtual machine that is the sole access&lt;br /&gt;to the underlying platform's OS .&lt;br /&gt;. by a complete platform,&lt;br /&gt;he means it is not specialized to be&lt;br /&gt;efficiently accessing all of bloated unix,&lt;br /&gt;but to define what it needs,&lt;br /&gt;and then have the vm access what it needs&lt;br /&gt;for impl'ing the Evlan virtual platform .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;adda's &lt;i&gt;secure by language&lt;/i&gt; idea:&lt;/b&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Even better than implementing security in an operating system, &lt;br /&gt;is implementing it in a programming language:&lt;br /&gt;developers are able to control the capabilities available&lt;br /&gt;to each piece of code independently.&lt;br /&gt;Good practice, then, would be to only give each component&lt;br /&gt;the bare minimum capabilities that it needs to&lt;br /&gt;perform its desired operation.&lt;br /&gt;And, in fact, it is easier to give fewer capabilities,&lt;br /&gt;so this is what programmers will usually do.&lt;br /&gt;The result is that if a security hole exists in some part of yourprogram,&lt;br /&gt;the worst an attacker can do is&lt;br /&gt;gain access to the capabilities that were given to that component.&lt;/blockquote&gt;--[. keep in mind that this won't work without&lt;br /&gt;also implementing security at the hardware level;&lt;br /&gt;this is the level where modularity can be enforced;&lt;br /&gt;otherwise, malware could just jump to&lt;br /&gt;what ever code there is with the permissions it needs .&lt;br /&gt;(see qubes doc's) .]&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;It is often possible to restrict all "dangerous" capabilities&lt;br /&gt;to one very small piece of code within your program.&lt;br /&gt;Then, all you have to do is make sure that&lt;br /&gt;that one piece of code is secure.&lt;br /&gt;When you are only dealing with a small amount of code,&lt;br /&gt;it is often possible to prove that this is the case.&lt;br /&gt;It is, in fact, quite possible to prove&lt;br /&gt;that a program written in a capability-based language&lt;br /&gt;is secure.&lt;/blockquote&gt;[. great to know if your os and every other app&lt;br /&gt;-- that means esp'ly your browser --&lt;br /&gt;are all written in this provable language ? ]&lt;br /&gt;&lt;br /&gt;see: Capability-based Security is used in the&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Coyotos"&gt;EROS operating system&lt;/a&gt; and the &lt;a href="http://www.skyhunter.com/marcs/ewalnut.html"&gt;E programming language&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://www.skyhunter.com/marcs/capabilityIntro/"&gt;Also, MarcStiegler et al.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;addx's idea that &lt;i&gt;concurrency&lt;/i&gt; is the key&lt;/b&gt;&lt;br /&gt;&lt;b&gt; to &lt;i&gt;secure speed&lt;/i&gt;:&lt;/b&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Evlan has strong support for highly &lt;a href="http://en.wikipedia.org/wiki/Parallel_programming"&gt;concurrentprogramming&lt;/a&gt;&lt;br /&gt;being a purely functional language,&lt;br /&gt;Where automatic &lt;a href="http://evlan.org/concepts/parallelization/"&gt;parallelization&lt;/a&gt;is not possible,&lt;br /&gt;there are very lightweight threads (without stacks).&lt;/blockquote&gt;Most of today's systems use imperative languages&lt;br /&gt;meant for a single CPU; eg, [written in adda:]&lt;br /&gt;&lt;code&gt;processAll(results#t.type).proc:&lt;br /&gt;for(i.int = results`domain):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; results#i`= processItem results#i&lt;br /&gt;).&lt;/code&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;. in c, it would process each item in order,&lt;br /&gt;from first to last.&lt;br /&gt;It does not give the system any room to&lt;br /&gt;process two items in parallel&lt;br /&gt;or in some arbitrary (most-efficient) order .&lt;/blockquote&gt;&lt;b&gt;adda aspires to be &lt;a href="http://evlan.org/concepts/simple/"&gt;simple&lt;/a&gt;:&lt;/b&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;It is far easier to remember&lt;br /&gt;multiple uses for a single construct&lt;br /&gt;than to remember multiple constructs.&lt;/blockquote&gt;--[. however he has ada-itis and braggs about&lt;br /&gt;having only 19 keywords;&lt;br /&gt;one of which is "(where)&lt;br /&gt;which could have been said with a reused "(:) .]&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;interoperability done via compatibility layers:&lt;br /&gt;If and when the legacy software is no longer in use,&lt;br /&gt;the compatibility layers can be removed,&lt;br /&gt;leaving only the ultra-efficient Evlan core behind.&lt;/blockquote&gt;&lt;a href="http://evlan.org/concepts/functional/"&gt;functional:&lt;/a&gt;&lt;br /&gt;Because Evlan is &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;purely functional&lt;/a&gt;,&lt;br /&gt;no function call is allowed to have "side effects".&lt;br /&gt;&lt;br /&gt;. see&lt;span style="font-size: xx-small;"&gt;www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=225&lt;/span&gt;&lt;br /&gt;(&lt;b&gt;&lt;i&gt;dead link,&lt;/i&gt;&lt;/b&gt; is this right: &lt;a href="http://queue.acm.org/detail.cfm?id=864034"&gt;queue.acm.org/detail.cfm?id=864034&lt;/a&gt;)?&lt;br /&gt;-- ask google where else that link can be found:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://c2.com/cgi/wiki?NaturalProgrammingLanguage"&gt;Natural programming languages and environments&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;address&gt;Communications of the ACM September 2004/Vol. 47, No. 9&lt;/address&gt;by&lt;a href="http://www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=225"&gt; Brad A. Myers, John F. Pane, Andy Ko&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;This article presents findings on natural programming languages.&lt;br /&gt;(i.e. natural as in intuitive in the UserCentric way) &lt;br /&gt;It advocates features for programming languages,&lt;br /&gt;that are justified by these findings.&lt;br /&gt;Areas include:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SyntacticSugar, that causes fewer errors&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (it more intuitive/natural).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Better integrated debugging-support,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; esp. for hypotheses about bug-causes.&lt;br /&gt;which suggests that humans like to write rules of the form&lt;br /&gt;"When condition X is true, do Y".&lt;br /&gt;I am not yet sure to what extent this will&lt;br /&gt;change the current system, however.&lt;/blockquote&gt;&lt;a href="http://www.compwisdom.com/topics/Natural-language"&gt;natural programming:&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;By "natural programming" we are aiming for&lt;br /&gt;the language and environment to work the way that&lt;br /&gt;nonprogrammers expect.&lt;br /&gt;We argue that if the computer language were to&lt;br /&gt;enable people to express algorithms and data&lt;br /&gt;more like their natural expressions,&lt;br /&gt;the transformation effort would be reduced.&lt;br /&gt;Thus, the Natural Programming approach&lt;br /&gt;is an application of the standard user-centered design process&lt;br /&gt;to the specific domain of programming languages and environments.&lt;br /&gt;&lt;br /&gt;[at that link is a] good short summary of the&lt;br /&gt;&lt;a href="http://www.cs.cmu.edu/%7ENatProg/"&gt;Natural Programming project here at CMU&lt;/a&gt;. &lt;br /&gt;We're affiliated with the &lt;a href="http://eusesconsortium.org/"&gt;EUSES consortium&lt;/a&gt;,&lt;br /&gt;which is a group of universities working on&lt;br /&gt;&lt;a href="http://eusesconsortium.org/about.php"&gt;end-user software engineering&lt;/a&gt;.&lt;br /&gt;google's &lt;a href="http://video.google.com/videoplay?docid=4084979380413345181"&gt;2007 Update on the Natural Programming Project&lt;/a&gt;&lt;/blockquote&gt;&lt;b&gt;Functional Bytecode&lt;/b&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Bytecode for the Evlan virtual machine&lt;br /&gt;uses a functional representation of the code.&lt;br /&gt;In contrast, the VMs of Java and .NET&lt;br /&gt;use assembly-like imperative instructions.&lt;br /&gt;. the GNU C Compiler's "Static Single Assignment" phase&lt;br /&gt;is actually very close to being equivalent to&lt;br /&gt;a purely functional language. [no overwrites]&lt;br /&gt;If GCC does this internally just to make optimization easier,&lt;br /&gt;then it doesn't take a huge stretch to imagine a system which&lt;br /&gt;compiles imperative code to functional bytecode .&lt;/blockquote&gt;--[11.30:&lt;br /&gt;. another contrast to assembly-like imperative instructions&lt;br /&gt;is addm's idea for a high-level interpreter:&lt;br /&gt;instead of translating from an &lt;a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree"&gt;abstract syntax tree (AST)&lt;/a&gt;&lt;br /&gt;into a sequence of assembly instructions;&lt;br /&gt;addm, the vm, would try to evaluate an AST .]&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;The purpose of constraining variables to types&lt;br /&gt;is to get the compiler to check your work for bugs&lt;br /&gt;and optimize code as well .&lt;br /&gt;. if you could specify that an index to an array&lt;br /&gt;must be less than the size of the array&lt;br /&gt;-- and if the compiler could then check for that --&lt;br /&gt;then buffer overruns (one of the most common bugs&lt;br /&gt;leading to security holes in modern software)&lt;br /&gt;would be completely eliminated.&lt;br /&gt;(run-time bounds checking can prevent buffer overruns,&lt;br /&gt;but then users see your app shutting down unexpectedly).&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4754036892962571210?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4754036892962571210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/evlanorg-describes-many-addx-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4754036892962571210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4754036892962571210'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/evlanorg-describes-many-addx-features.html' title='evlan.org describes many #addx features'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9167316311954282672</id><published>2011-11-01T00:18:00.000-07:00</published><updated>2011-11-01T00:18:12.591-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bundles'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>bundles obviate folders-first policy option</title><content type='html'>&lt;i&gt;10.21: &lt;b&gt;adde/fs/&lt;/b&gt;mac's bundle idea obviates folders-first policy option:&lt;/i&gt;&lt;br /&gt;. instead of having a folders-first policy option,&lt;br /&gt;the file system should be more like&lt;br /&gt;mac's bundle system&lt;br /&gt;where each folder has the option of&lt;br /&gt;declaring itself to be either&lt;br /&gt;a folder or a bundle .&lt;br /&gt;. so then, in a file system window,&lt;br /&gt;folders can be listed before files,&lt;br /&gt;but the bundles are treated like files .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9167316311954282672?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9167316311954282672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/bundles-obviate-folders-first-policy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9167316311954282672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9167316311954282672'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/bundles-obviate-folders-first-policy.html' title='bundles obviate folders-first policy option'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6996961530687979525</id><published>2011-11-01T00:00:00.002-07:00</published><updated>2011-11-01T00:05:47.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='localisation'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>user changes can help with localization</title><content type='html'>&lt;i&gt;10.23: &lt;b&gt;adde/gui/&lt;/b&gt;user changes help with localization:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. there should be a wrench icon&lt;br /&gt;by every command&lt;br /&gt;that leads to this message:&lt;br /&gt;"(if you figured out what this does,&lt;br /&gt;and you can think of a better word in your language,&lt;br /&gt;please do tell by emailing here ...)&lt;br /&gt;even better,&lt;br /&gt;the gui should be editable so that when you figure something&lt;br /&gt;you can give it your own words or icons .&lt;br /&gt;. the program keeps a config file of this,&lt;br /&gt;and every time they change it,&lt;br /&gt;you can remind them that when they&lt;br /&gt;feel satisfied with their gui&lt;br /&gt;they can share it with others&lt;br /&gt;(at this email ...).&lt;br /&gt;. make sure they confirm that their understood language&lt;br /&gt;is in fact what they think they're targeting;&lt;br /&gt;and allow comments that include dialects or locations&lt;br /&gt;that they think it's special to ?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;-- source of that idea's inspiration:&lt;/i&gt;&lt;br /&gt;&lt;a href="http://aharoni.wordpress.com/2011/08/24/the-software-localization-paradox/"&gt;news: Software Localization Paradox:&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Like any other translation,&lt;br /&gt;software localization is best done by people who know well&lt;br /&gt;both the original language in which&lt;br /&gt;the software interface was written – usually English,&lt;br /&gt;and the target language.&lt;br /&gt;People who don’t know English strongly&lt;br /&gt;prefer to use software in a language they know.&lt;br /&gt;If the software is not available in their language,&lt;br /&gt;they will either not use it at all&lt;br /&gt;or will have to memorize lots of&lt;br /&gt;otherwise meaningless English strings&lt;br /&gt;and locations of buttons.&lt;br /&gt;People who do know English often prefer to&lt;br /&gt;use software in English&lt;br /&gt;even if it is available in their native language.&lt;br /&gt;The two most frequent explanations for that is&lt;br /&gt;that the translation is bad&lt;br /&gt;and that people who want to use computers&lt;br /&gt;should learn English anyway.&lt;br /&gt;The problem is that for various reasons&lt;br /&gt;lots of people will never learn English&lt;br /&gt;even if it would be mandatory in schools&lt;br /&gt;and useful for business.&lt;br /&gt;They will have to suffer the bad translations&lt;br /&gt;and will have no way to fix it.&lt;br /&gt;So this is the paradox&lt;br /&gt;– to fix localization bugs,&lt;br /&gt;someone must notice them,&lt;br /&gt;and to notice them, more people who know English&lt;br /&gt;must use localized software,&lt;br /&gt;but people who know English&lt;br /&gt;rarely use localized software.&lt;br /&gt;That’s why lately i’ve been evangelizing about it.&lt;br /&gt;Even people who know English well&lt;br /&gt;should use software in their language&lt;br /&gt;– not to boost their national pride,&lt;br /&gt;but to help the people who&lt;br /&gt;speak that language and don’t know English.&lt;br /&gt;They should use the software especially if it’s translated badly,&lt;br /&gt;because they are the only ones who can&lt;br /&gt;report bugs in the translation&lt;br /&gt;or fix the bugs themselves.&lt;br /&gt;(A side note: Needless to say,&lt;br /&gt;Free Software&lt;br /&gt;is much more convenient for localization,&lt;br /&gt;because proprietary software companies are usually&lt;br /&gt;too hard to even approach about this matter;&lt;br /&gt;they only pay translators if they have a reason to believe&lt;br /&gt;that it will increase sales.&lt;br /&gt;This is another often overlooked advantage&lt;br /&gt;of Free Software.)&lt;br /&gt;I am glad to say that i convinced most people to whom i spoke&lt;br /&gt;about it at Wikimania&lt;br /&gt;to at least try to use Firefox in their native language&lt;br /&gt;and taught them where to report bugs about it.&lt;br /&gt;I also challenged them to write at least&lt;br /&gt;one article in the Wikipedia&lt;br /&gt;in their own language,&lt;br /&gt;such as Hindi, Telugu or Kannada&lt;br /&gt;– as useful as the English Wikipedia is&lt;br /&gt;to the world,&lt;br /&gt;Telugu Wikipedia is much more useful&lt;br /&gt;for people who speak Telugu, but no English.&lt;br /&gt;I already saw some results.&lt;br /&gt;I am now looking for ideas and verifiable data&lt;br /&gt;to develop this concept further.&lt;br /&gt;What are the best strategies to convince people&lt;br /&gt;that they should use localized software?&lt;br /&gt;For example:&lt;br /&gt;How economically viable is software localization?&lt;br /&gt;What is cheaper for an education department of a country&lt;br /&gt;– to translate software for schools&lt;br /&gt;or to teach all the students English?&lt;br /&gt;Or: How does the absence of localized software&lt;br /&gt;affect different geographical areas&lt;br /&gt;in Africa, India, the Middle East?&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://translatewiki.org/"&gt;Translatewiki.net &lt;/a&gt;&lt;br /&gt;. a localisation platform for translation communities,&lt;br /&gt;language communities, and free and open source projects.&lt;br /&gt;-- found by &lt;a href="http://blog.geraki.gr/2011/08/software_translation/"&gt;gui translator&lt;/a&gt; who refered to&lt;br /&gt;&amp;nbsp;&lt;a href="http://aharoni.wordpress.com/2011/08/24/the-software-localization-paradox/"&gt;wikimedia's localizion paradox&lt;/a&gt; .&lt;br /&gt;from an &lt;a href="http://blog.wikimedia.org/2011/10/21/interview-with-wikimedias-amir-aharoni-2/"&gt;Interview with Wikimedia’s Amir Aharoni&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6996961530687979525?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6996961530687979525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/user-changes-can-help-with-localization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6996961530687979525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6996961530687979525'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/11/user-changes-can-help-with-localization.html' title='user changes can help with localization'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9053231143414232834</id><published>2011-10-31T23:58:00.000-07:00</published><updated>2011-10-31T23:58:08.782-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='markup'/><title type='text'>adda markup's conflicts with ini format</title><content type='html'>&lt;i&gt;10.25: &lt;b&gt;news.adda/&lt;/b&gt;markup/conflicts with ini format:&lt;/i&gt;&lt;br /&gt;. bzr (the ubuntu team's distrib'd cvs)&lt;br /&gt;uses an ini folder with the catgories of&lt;br /&gt;[/] and [groups] .&lt;br /&gt;. generally the ini format can&lt;br /&gt;conflict with the adda markup lang's syntax&lt;br /&gt;because it uses brackets as category headers,&lt;br /&gt;and the category name may consist of a single symbol character .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9053231143414232834?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9053231143414232834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/adda-markups-conflicts-with-ini-format.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9053231143414232834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9053231143414232834'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/adda-markups-conflicts-with-ini-format.html' title='adda markup&apos;s conflicts with ini format'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8771542881649116770</id><published>2011-10-31T23:55:00.000-07:00</published><updated>2011-10-31T23:55:25.533-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='lexicon'/><category scheme='http://www.blogger.com/atom/ns#' term='lexeme'/><title type='text'>double-equal to mean prolonged equality</title><content type='html'>&lt;i&gt;10.12: &lt;b&gt;adda/lexicon/==&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. the == could be like the japanese way of&lt;br /&gt;2-trees representing many trees: a forest .&lt;br /&gt;. 2 equals would say the values are&lt;br /&gt;equal for many moments,&lt;br /&gt;ie, they are pointers to the same obj; [10.13:&lt;br /&gt;or they are part of a notify&amp;amp;update pattern .&lt;br /&gt;it could also be used as a special form of&lt;br /&gt;assignment stmt:&lt;br /&gt;whatever you're getting access to,&lt;br /&gt;you have some way of maintaining synchronization,&lt;br /&gt;as would occur if using aliases .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8771542881649116770?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8771542881649116770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/double-equal-to-mean-prolonged-equality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8771542881649116770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8771542881649116770'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/double-equal-to-mean-prolonged-equality.html' title='double-equal to mean prolonged equality'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-273056668501821202</id><published>2011-10-31T23:51:00.000-07:00</published><updated>2011-10-31T23:51:04.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='metalang'/><title type='text'>meta.compiler</title><content type='html'>&lt;i&gt;10.10: &lt;b&gt;adda&lt;/b&gt;/meta.compiler:&lt;/i&gt;&lt;br /&gt;. there should be a meta.compiler&lt;br /&gt;that lets you&amp;nbsp; write a list of&lt;br /&gt;transforms from adda to target lang&lt;br /&gt;and then the meta compiler is&lt;br /&gt;generating the compiler from this list .&lt;br /&gt;. to get started, just make the usual compiler;&lt;br /&gt;and, along the way,&lt;br /&gt;be looking for how to generalize the process;&lt;br /&gt;--&lt;br /&gt;. the first step is to finalize the adda lang,&lt;br /&gt;then write a translation map from general adda&lt;br /&gt;to the simple adda that maps directly to c&lt;br /&gt;(eg, procedures can't be nested ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-273056668501821202?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/273056668501821202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/metacompiler.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/273056668501821202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/273056668501821202'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/metacompiler.html' title='meta.compiler'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1834255369922916132</id><published>2011-10-31T23:49:00.000-07:00</published><updated>2011-10-31T23:49:32.507-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='capabilities'/><title type='text'>types of access constraints</title><content type='html'>&lt;i&gt;10.5: todo.&lt;b&gt;adda/&lt;/b&gt;types of access constraints:&lt;/i&gt;&lt;br /&gt;. {rom, wom, xom, xwm} could be the keywords for the &lt;br /&gt;various types of access constraint for&lt;br /&gt;read-, write-, execute-, and write&amp;amp;execute- only-memory .&lt;br /&gt;. instead of having any combo of rwx,&lt;br /&gt;consider that an execute priv'&lt;br /&gt;implies a read priv' .&lt;br /&gt;. the original unix way had in mind&lt;br /&gt;-- in addition to the self, group, world groups --&lt;br /&gt;a sort of 4th group: executives&lt;br /&gt;those whose activities depended upon&lt;br /&gt;what file they opened .&lt;br /&gt;&lt;b&gt;other ideas:&lt;/b&gt;&lt;br /&gt;. when does the system need an exe'able permission?&lt;br /&gt;. if that app is an executive,&lt;br /&gt;then it can execute any type it recognizes as exe'able .&lt;br /&gt;&lt;b&gt;todo:&lt;/b&gt;&lt;br /&gt;. review previous ideas of&lt;br /&gt;how an obj's name can include access types;&lt;br /&gt;(just as it includes its datatype);&lt;br /&gt;eg, f.txt mean obj"f is type"txt,&lt;br /&gt;so then how does its name explain&lt;br /&gt;access constraints such as (rom vs rwm)&lt;br /&gt;and (in vs out) param types ?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;10.21: adda/types of access constraints/&lt;b&gt;intro:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. the fundamental operation of unix&lt;br /&gt;revolves around this:&lt;br /&gt;a user with privilege status of&lt;br /&gt;{owner, member of owner's group}&lt;br /&gt;is applying an app to a file,&lt;br /&gt;if the app and file permissions permit it .&lt;br /&gt;. a file may be located in&lt;br /&gt;either a private or public space:&lt;br /&gt;a private space is usable by&lt;br /&gt;whoever has the owner's key .&lt;br /&gt;. the key holder claims self belongs to a group;&lt;br /&gt;and other users can belong to the same group .&lt;br /&gt;. files can grant separate permissions for&lt;br /&gt;{ owner (what the keyholder can do)&lt;br /&gt;, in-group (what the owner's group can do)&lt;br /&gt;, in-others (what anyone can do)&lt;br /&gt;}.&lt;br /&gt;. an executive is a special type of app&lt;br /&gt;that uses its input data &lt;br /&gt;as the source of instructions it will follow&lt;br /&gt;including the decision of&lt;br /&gt;what it will affect on the computer;&lt;br /&gt;whereas non-exec's will decide their behavior&lt;br /&gt;only from their constant program code,&lt;br /&gt;along with their memory of their previous behavior,&lt;br /&gt;and changes in the machine's state .&lt;br /&gt;. most of these non-exec's are just editors,&lt;br /&gt;affecting at most the files they are given,&lt;br /&gt;some private mem, and the screen buffer .&lt;br /&gt;. files should be tagged executable {xom, xwm}&lt;br /&gt;only if their data is suitable for&lt;br /&gt;instructing some executive .&lt;br /&gt;&lt;br /&gt;. a user can be thought of as being&lt;br /&gt;a sort of executive app .&lt;br /&gt;. the user's actual executive power&lt;br /&gt;is determined by which group of app's&lt;br /&gt;the user is allowed to execute&lt;br /&gt;which in turn is determined by&lt;br /&gt;the executive apps' file permissions&lt;br /&gt;and whether the file considers the user&lt;br /&gt;to be {owner, in-group, others}.&lt;br /&gt;&lt;br /&gt;. executives can be calling other executives,&lt;br /&gt;just as the user calls them,&lt;br /&gt;so, suppose a called executive&lt;br /&gt;is considered to have the same priviledge&lt;br /&gt;as the {executive, user} that called it;&lt;br /&gt;then, a human user could run a public app,&lt;br /&gt;and when that app tries to access&lt;br /&gt;the user's private files,&lt;br /&gt;this would be allowed .&lt;br /&gt;&lt;br /&gt;. the exe'able permission is saying&lt;br /&gt;that if you are an executive&lt;br /&gt;you can read this even if&lt;br /&gt;your caller doesn't have read permission;&lt;br /&gt;likewise,&lt;br /&gt;having a read permission is saying:&lt;br /&gt;you can read this regardless of&lt;br /&gt;whether you're an executive or not .&lt;br /&gt;&lt;br /&gt;. so, all of that was the typical&lt;br /&gt;unix permissions scheme;&lt;br /&gt;an alternative is &lt;a href="http://www.skyhunter.com/marcs/capabilityIntro/"&gt;capability based security&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;. an app can only access&lt;br /&gt;the files that are within the folders that are&lt;br /&gt;listed in the app's capability descriptor .&lt;br /&gt;. file's and folders, too,&lt;br /&gt;can have a capability descriptor&lt;br /&gt;that can override any app's capabilities .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1834255369922916132?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1834255369922916132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/types-of-access-constraints.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1834255369922916132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1834255369922916132'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/types-of-access-constraints.html' title='types of access constraints'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-614526322629741806</id><published>2011-10-02T17:23:00.000-07:00</published><updated>2011-10-02T17:23:28.099-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>window config' generation and automation</title><content type='html'>&lt;i&gt;9.27: &lt;b&gt;adde/gui/&lt;/b&gt;window config' generation and automation:&lt;/i&gt;&lt;br /&gt;. once windows are arranged in an oft-used way,&lt;br /&gt;you can generate an icon representing that way,&lt;br /&gt;and have it become available by menu .&lt;br /&gt;. to customize your menu item,&lt;br /&gt;there's a pallet of icon styles:&lt;br /&gt;# a miniature of the current display,&lt;br /&gt;# an abstract view with only window frames,&lt;br /&gt;# and either of the above with&lt;br /&gt;names of chosen apps added to the icon .&lt;br /&gt;. for speedy creation of window arrangements,&lt;br /&gt;there is a window drawing mode,&lt;br /&gt;such that anything you do with mouse&lt;br /&gt;affects only the frames of the windows,&lt;br /&gt;not their content;&lt;br /&gt;so, you don't need to be a sharp shooter&lt;br /&gt;targeting scrollbars or tiny buttons .&lt;br /&gt;. also, the windows are auto'ly tiled,&lt;br /&gt;so your point selections don't have to be exact .&lt;br /&gt;. a mouse-down dragged to another point&lt;br /&gt;makes a rectangle, as usual;&lt;br /&gt;then clicking in the resulting rectangle&lt;br /&gt;brings up a list of frequently used app's and folders;&lt;br /&gt;the default is a finder window .&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/B002C7481G/ref=as_li_tf_il?ie=UTF8&amp;amp;tag=americiu-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=B002C7481G" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=B002C7481G&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=americiu-20&amp;amp;ServiceVersion=20070822" /&gt;&lt;/a&gt;-- todo:&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=americiu-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B002C7481G&amp;amp;camp=217145&amp;amp;creative=399369" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;br /&gt;that reminds how ipad&lt;br /&gt;lets you scroll with multi-touch&lt;br /&gt;maybe they have something for auto-tiling too?&lt;br /&gt;. I remember the mac plus in 1985,&lt;br /&gt;it had an easy drawing app that so inspired me .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-614526322629741806?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/614526322629741806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/window-config-generation-and-automation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/614526322629741806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/614526322629741806'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/10/window-config-generation-and-automation.html' title='window config&apos; generation and automation'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6381758445977991120</id><published>2011-08-28T15:12:00.000-07:00</published><updated>2011-08-28T15:12:50.513-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='function'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='ABI'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>function graph editing</title><content type='html'>&lt;i&gt;8.4: &lt;b&gt;adde/&lt;/b&gt;function graph editing:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. how is audio graphing done?&lt;br /&gt;how is the gui separated from the command processor?&lt;br /&gt;&lt;br /&gt;. each unit of mouse movement&lt;br /&gt;practically represents a pixel unit&lt;br /&gt;which then represents a range of data points;&lt;br /&gt;the first of those points can be chosen;&lt;br /&gt;or if there is a sharp spike&lt;br /&gt;then find the high and low&lt;br /&gt;to include every point inclusive;&lt;br /&gt;ie, graph a vertical line instead of a point .&lt;br /&gt;&lt;br /&gt;. audio graphing is like strings of words,&lt;br /&gt;but instead of the words differing in length,&lt;br /&gt;they are all on their side for differing height .&lt;br /&gt;. range selections result in a pair of numbers:&lt;br /&gt;the {begin, end} of range,&lt;br /&gt;which are then sent to the processor .&lt;br /&gt;. if the range was possibly modified,&lt;br /&gt;the editor then has to regraph that range .&lt;br /&gt;&lt;i&gt;8.28:&lt;/i&gt;&lt;br /&gt;. the editor can handle this without knowing&lt;br /&gt;the particulars of the audio graphing,&lt;br /&gt;because it will have an interface for&lt;br /&gt;generic function editing;&lt;br /&gt;or rather,&lt;br /&gt;the editor and every command processor&lt;br /&gt;will all speak the system language:&lt;br /&gt;the system's language describes&lt;br /&gt;a mathematical function&lt;br /&gt;as either a set of points or a formula&lt;br /&gt;along with a type specification that includes&lt;br /&gt;a domain and codomain;&lt;br /&gt;with an optional subdomain and inverse operator .&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6381758445977991120?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6381758445977991120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/08/function-graph-editing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6381758445977991120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6381758445977991120'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/08/function-graph-editing.html' title='function graph editing'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5347109432960972740</id><published>2011-07-30T21:34:00.001-07:00</published><updated>2011-07-30T21:38:06.658-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='constitution'/><category scheme='http://www.blogger.com/atom/ns#' term='robotics'/><category scheme='http://www.blogger.com/atom/ns#' term='adds'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>when software capitalists become dictators</title><content type='html'>&lt;b&gt;&lt;i&gt;7.4: adds/security&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;/when software capitalists become dictators:&lt;/i&gt;&lt;br /&gt;. we see what a mess engineers have made of&lt;br /&gt;the internet and computer security;&lt;br /&gt;as chips make more decisions in our appliances,&lt;br /&gt;they are like new laws imposed upon our nature;&lt;br /&gt;this is where capitalists would be legislators;&lt;br /&gt;and they must therefore submit to our constitution:&lt;br /&gt;ie, representatives are elected,&lt;br /&gt;initiatives can be brought by the people&lt;br /&gt;and laws are open to public scrutiny .&lt;br /&gt;. not only is opensource software not communism&lt;br /&gt;(&lt;a href="http://news.cnet.com/Gates-taking-a-seat-in-your-den---page-4/2100-1041_3-5514121-4.html?tag=mncol"&gt;Bill Gates was misquoted as suggesting this&lt;/a&gt;);&lt;br /&gt;but software as private capital&lt;br /&gt;is sure to present an inevitable tyranny&lt;br /&gt;just like a communism will&lt;br /&gt;without the checks and balances of&lt;br /&gt;democracy and separation of powers .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;7.15: adds/robot/&lt;b&gt;constitution with context casing:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. one way to balance private and public interests&lt;br /&gt;is by including a context chip,&lt;br /&gt;which has the ability to override other chips&lt;br /&gt;whenever it senses the robot is on public property .&lt;br /&gt;. it would also have final say over&lt;br /&gt;the use of force the public is interested in .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5347109432960972740?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5347109432960972740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/when-software-capitalists-become.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5347109432960972740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5347109432960972740'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/when-software-capitalists-become.html' title='when software capitalists become dictators'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5991683553046269277</id><published>2011-07-30T21:10:00.000-07:00</published><updated>2011-07-30T21:10:26.860-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sw.eng'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='adds'/><title type='text'>TDD (Test-Driven Development)</title><content type='html'>&lt;span style="font-style: italic;"&gt;web.adds/&lt;span style="font-weight: bold;"&gt;sw.dev.process&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/TDD (Test-Driven Development):&lt;/span&gt;&lt;br /&gt;7.1:&lt;br /&gt;"( my python web app is obs ! )&lt;br /&gt;"( you forgot your TDD unit tests, pal )&lt;br /&gt;. what is TDD?&amp;nbsp; Test-Driven Development&lt;br /&gt;&lt;a href="http://blog.urth.org/2009/02/tdd-unit-testing.html"&gt;TDD != Unit Testing Dave Rolsky 2009&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7.5: synth:&lt;/span&gt;&lt;br /&gt;. in test driven development,&lt;br /&gt;rather than ask "(how to impl this feature?),&lt;br /&gt;we ask "(how do you prove&lt;br /&gt;that a feature is impl'd?)&lt;br /&gt;-- and that drives your interface design&lt;br /&gt;(ie, the tests are designed even before&lt;br /&gt;the interfaces, not just the bodies).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;links:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Software_development_process" style="font-weight: bold;"&gt;sw.dev.process @ wiki&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#Objective-C"&gt;Xunit options for obj'c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://agilepainrelief.com/notesfromatooluser/2008/02/test-driven-dev.html"&gt;agilepainrelief.com:&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;I’ve been on projects where we tried to write&lt;br /&gt;all of our tests after the classes were written.&lt;br /&gt;Our test suite was valuable&lt;br /&gt;&amp;nbsp;and prevented many regressions.&lt;br /&gt;But it allowed many issues to slip through.&lt;br /&gt;Weaker elements in API’s were often missed&lt;br /&gt;and were changed only at a later date&lt;br /&gt;at some expense.&lt;br /&gt;Tightly coupled code was allowed to evolve&lt;br /&gt;making some elements of the application&lt;br /&gt;very difficult to test&lt;br /&gt;without having to create dozens of&lt;br /&gt;other (often unnecessary) objects.&lt;br /&gt;As a result of all this&lt;br /&gt;it became more difficult to write test cases over time.&lt;br /&gt;Would TDD have solved all of these problems?&lt;br /&gt;Perhaps not but it would have forced us to&lt;br /&gt;confront many of them sooner. &amp;nbsp; &lt;/blockquote&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;unit testing vs Test-driven_development&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;. the unit test tries to verify&lt;br /&gt;all features of a given module;&lt;br /&gt;&amp;nbsp;tdd (Test-driven development) is about&lt;br /&gt;using tests as documentation:&lt;br /&gt;. assuming you already have&lt;br /&gt;libraries of utilities and datatypes,&lt;br /&gt;you design the interface first&lt;br /&gt;then the tests, and finally the bodies&lt;br /&gt;that will make the tests pass .&lt;br /&gt;. if you are writing your documentation first;&lt;br /&gt;then you won't have any problems with also&lt;br /&gt;writing test harnesses before the app is built .&lt;br /&gt;&lt;br /&gt;. this is supposed to complement prototyping:&lt;br /&gt;the developer often needs a semi-working model&lt;br /&gt;to get ideas for a more polished model .&lt;br /&gt;. the prototype is then used as the basis&lt;br /&gt;for a high-reliability app&lt;br /&gt;that writes the final design as a set of&lt;br /&gt;user doc's, unit tests, &lt;br /&gt;maint'doc's, feature tests,&lt;br /&gt;and functional tests (having each function&lt;br /&gt;beginning with precondition testing&lt;br /&gt;and ending with postcondition testing).&lt;br /&gt;&lt;br /&gt;. reverting to the last version that passed all tests&lt;br /&gt;may often be more productive than debugging.&lt;br /&gt;&lt;br /&gt;instead of relying on platform services directly,&lt;br /&gt;they should be accessed through a wrapper,&lt;br /&gt;so that functional testing can be applied .&lt;br /&gt;--&lt;br /&gt;See &lt;a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle"&gt;dependency inversion principle&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5991683553046269277?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5991683553046269277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/tdd-test-driven-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5991683553046269277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5991683553046269277'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/tdd-test-driven-development.html' title='TDD (Test-Driven Development)'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-478652047800797900</id><published>2011-07-30T20:32:00.000-07:00</published><updated>2011-07-30T20:32:48.039-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='obj&apos;c'/><category scheme='http://www.blogger.com/atom/ns#' term='translate'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.obj&apos;c'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>including obj'c features</title><content type='html'>&lt;i&gt;7.23: &lt;b&gt;adda/oop/&lt;/b&gt;including obj'c features:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. in the expression"( a`b(x)`c ),&lt;br /&gt;the ( a`b(x) ) means&lt;br /&gt;the object"a has a procedure b(x)&lt;br /&gt;that returns an object location&lt;br /&gt;whose available functions include c .&lt;br /&gt;. the syntax"(a`b) is not necessarily&lt;br /&gt;involving self-modification;&lt;br /&gt;it simply means subprogram"b has access to (a)&lt;br /&gt;as an inout parameter&lt;br /&gt;(the subprogram's object parameter).&lt;br /&gt;&lt;br /&gt;. is there some efficient way of doing a`b`c&lt;br /&gt;without passing pointers ?&lt;br /&gt;I was thinking there was some virtual way&lt;br /&gt;that doesn't really need pointers &lt;br /&gt;(oop doesn't really need&lt;br /&gt;all the pointers it thinks it needs)...&lt;br /&gt;&lt;br /&gt;. if a subprogram's object param&lt;br /&gt;returns a reference to something other than&lt;br /&gt;the object param,&lt;br /&gt;then in the c translation of same&lt;br /&gt;this subprogram takes a destination param;&lt;br /&gt;ie, a param that inputs a destination address&lt;br /&gt;showing where the caller wants the return placed .&lt;br /&gt;&lt;br /&gt;. why wouldn't it always take a destination param&lt;br /&gt;even when returning self? ...&lt;br /&gt;because the caller is already housing that obj .&lt;br /&gt;&lt;br /&gt;7.26:&lt;br /&gt;. my original concern here&lt;br /&gt;was allowing the passing of references&lt;br /&gt;and the use of object param's,&lt;br /&gt;just like obj'c oop does,&lt;br /&gt;while still using the sort of oop system&lt;br /&gt;that did not generate garbage .&lt;br /&gt;&lt;b&gt;todo:&lt;/b&gt;&lt;br /&gt;. I think obj'c has the convention that&lt;br /&gt;even if ( a`b(x) doesn't return anything&lt;br /&gt;if an object reference is expected as a return,&lt;br /&gt;as is the case in "( a`b(x)`c ),&lt;br /&gt;then it will use a reference to (a);&lt;br /&gt;ie, ( a`b(x)`c ) would equal:&lt;br /&gt;( a`b(x); a`c ) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-478652047800797900?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/478652047800797900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/including-objc-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/478652047800797900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/478652047800797900'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/including-objc-features.html' title='including obj&apos;c features'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3397884239634437431</id><published>2011-07-30T20:21:00.000-07:00</published><updated>2011-07-30T20:21:51.137-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>protecting the stack limits</title><content type='html'>&lt;i&gt;7.22: &lt;b&gt;adda/&lt;/b&gt;protecting the stack limits:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. how can one test for stack limits per platform?&lt;br /&gt;if you test it once per platform&lt;br /&gt;could the limit become smaller later?&lt;br /&gt;it could depend on number of processes,&lt;br /&gt;and current ram count ?&lt;br /&gt;the user or an error could downgrade ram .&lt;br /&gt;&lt;b&gt;some help from addm:&lt;/b&gt;&lt;br /&gt;. one thing that helps the stack problem&lt;br /&gt;is assuming that user programs are addm code&lt;br /&gt;rather than native code;&lt;br /&gt;addm uses the c stack in a very limited way&lt;br /&gt;and puts the user's stack entirely in the heap;&lt;br /&gt;the user does call standard libraries&lt;br /&gt;that in turn are native code;&lt;br /&gt;but these can be designed to conserve stack space&lt;br /&gt;(eg, &lt;br /&gt;all recursive routines are finding some way to&lt;br /&gt;serialize the large jobs;&lt;br /&gt;eg, instead of giving gig's to quicksort,&lt;br /&gt;the sorter breaks the job into mbyte sections,&lt;br /&gt;and gives the quicksort's sections to mergesort ).&lt;br /&gt;...&lt;br /&gt;but can't the user can program natively? yes:&lt;br /&gt;(see &lt;a href="http://amerdreamdocs.blogspot.com/2011/07/natively-coded-extensions.html"&gt;adda/natively coded extensions&lt;/a&gt;)&lt;br /&gt;the user isn't restricted to addm,&lt;br /&gt;so adda must be aware of some stack limits&lt;br /&gt;and provide protections against overflow .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3397884239634437431?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3397884239634437431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/protecting-stack-limits.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3397884239634437431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3397884239634437431'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/protecting-stack-limits.html' title='protecting the stack limits'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-136236746588281816</id><published>2011-07-30T20:16:00.000-07:00</published><updated>2011-07-30T20:16:13.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='etree'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='lib&apos;mgt'/><title type='text'>symbol table linking</title><content type='html'>&lt;h2 class="date-header"&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="date-posts"&gt;          &lt;div class="post-outer"&gt; &lt;div class="post hentry"&gt; &lt;i&gt;7.14: 7.15: &lt;b&gt;adda/&lt;/b&gt;symbol table linking:&lt;/i&gt;&lt;br /&gt;&lt;div class="post-body entry-content" id="post-body-2128033929831183407"&gt; &lt;br /&gt;. etrees (expression trees)&lt;br /&gt;are tree nodes with pointers into&lt;br /&gt;global and local dictionaries of symbols&lt;br /&gt;(symbol tables).&lt;br /&gt;. every etree module&lt;br /&gt;implies access to a global symbol table,&lt;br /&gt;and must specify any needed local symbol tables .&lt;br /&gt;. there can be more than one local symbol table;&lt;br /&gt;because, a dictionary can include procedures;&lt;br /&gt;and, procedure definitions can have&lt;br /&gt;local dictionaries:&lt;br /&gt;the parent procedure becomes the&lt;br /&gt;scope of its local dictionary,&lt;br /&gt;hence the term "(nested scopes),&lt;br /&gt;involving stacks of local symbol tables .&lt;br /&gt;. each module has a tree of symbol tables .&lt;br /&gt;. a typical scope path is:&lt;br /&gt;module/subprog/nested sub/nested block/nested block .&lt;br /&gt;&lt;br /&gt;. the 3 main uses of "(library) include&lt;br /&gt;system, standard, and custom .&lt;br /&gt;. the system library of an addx installation&lt;br /&gt;is a service for organizing and linking&lt;br /&gt;the modules that are available for reuse .&lt;br /&gt;. a standard library is a module that is&lt;br /&gt;declared by the system's language .&lt;br /&gt;. a custom library is one added by the user .&lt;br /&gt;. each module has a list of imported modules,&lt;br /&gt;and a tree of symbol tables&lt;br /&gt;to match its tree of nested scopes .&lt;br /&gt;&lt;br /&gt;. when designing the pointer that is&lt;br /&gt;going from etree nodes into symbol tables,&lt;br /&gt;there must be an efficient coding,&lt;br /&gt;and it should support efficient copying&lt;br /&gt;even when it involves context changes &lt;br /&gt;&lt;a href="http://amerdreamdocs.blogspot.com/2011/07/object-copy-paste.html"&gt;(re: adde/object copy &amp;amp; paste).&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;etree node variants for library symbols:&lt;/b&gt;&lt;br /&gt;. there is first a bit to distinguish&lt;br /&gt;symbol location type in {&lt;b&gt;library, local&lt;/b&gt;}:&lt;br /&gt;# &lt;b&gt;library&lt;/b&gt; location:&lt;br /&gt;. there may be many libraries in use (15-bit),&lt;br /&gt;and many symbols per library (16-bit) .&lt;br /&gt;# &lt;b&gt;local&lt;/b&gt; location:&lt;br /&gt;. there's often no more than&lt;br /&gt;4 nested levels of locals (2bit);&lt;br /&gt;and often less than 256 symbols per local (8bit).&lt;br /&gt;but if node`size is in increments of 16bit chunks&lt;br /&gt;that division could be 4 bits for 16 nested scopes,&lt;br /&gt;and an 11-bit space for locals,&lt;br /&gt;or less if the descriminant is more than 1 bit .&lt;br /&gt;[7.30:&lt;br /&gt;... in any case, the more space you save,&lt;br /&gt;the less efficient it is to remap etree nodes&lt;br /&gt;to a new symbol table after a context change .]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;details of library location:&lt;/b&gt;&lt;br /&gt;. there could be an infinity of libraries over time,&lt;br /&gt;so the library codes in an etree node&lt;br /&gt;don't represent specific libraries,&lt;br /&gt;rather they represent a slot in the module's&lt;br /&gt;list of imported or required libraries;&lt;br /&gt;however, standard libraries can be specified,&lt;br /&gt;since there are a finite number of them;&lt;br /&gt;ie, if the code is in the range that is&lt;br /&gt;reserved for standard lib's,&lt;br /&gt;then that is the same code used by&lt;br /&gt;the system library;&lt;br /&gt;otherwise, we need to use the module's import list&lt;br /&gt;to convert the symbol table's code&lt;br /&gt;into one that the system library recognizes .&lt;br /&gt;&lt;br /&gt;. the system library creates a custom lib's code&lt;br /&gt;by taking a &lt;a href="http://en.wikipedia.org/wiki/Secure_Hash_Algorithm"&gt;Secure Hash&lt;/a&gt; of its interface&lt;br /&gt;. as long as that didn't change,&lt;br /&gt;it would be considered the same library .&amp;nbsp; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-136236746588281816?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/136236746588281816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/symbol-table-linking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/136236746588281816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/136236746588281816'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/symbol-table-linking.html' title='symbol table linking'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6338304954080295414</id><published>2011-07-30T20:12:00.000-07:00</published><updated>2011-07-30T20:12:55.405-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>natively coded extensions</title><content type='html'>&lt;i&gt;7.22: &lt;b&gt;adda/&lt;/b&gt;natively coded extensions:&lt;/i&gt;&lt;br /&gt;. the adda compiler helps turn adda code&lt;br /&gt;into obj'c code,&lt;br /&gt;and then the user plugs that into xcode&lt;br /&gt;to generate mac programs .&lt;br /&gt;. there are 2 styles of user programming:&lt;br /&gt;&lt;b&gt;# extending addm:&lt;/b&gt;&lt;br /&gt;. the user want's their library unit to be&lt;br /&gt;seen by addm,&lt;br /&gt;so that user's library unit is callable from&lt;br /&gt;user's other scripts .&lt;br /&gt;. this entails compiling the library unit,&lt;br /&gt;recompiling addm to bind with the library unit&lt;br /&gt;and relinking addm with the entire library .&lt;br /&gt;. this is known as &lt;a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29"&gt;pythonic development&lt;/a&gt;:&lt;br /&gt;a module is run as translated vm code&lt;br /&gt;until it's perfected:&lt;br /&gt;then it's promoted to native code&lt;br /&gt;and made available in the account's library .&lt;br /&gt;&lt;b&gt;# building native apps:&lt;/b&gt;&lt;br /&gt;. in building a native app,&lt;br /&gt;adda code is translated to the native lang&lt;br /&gt;(eg, mac speaks obj'c &amp;amp; cocoa).&lt;br /&gt;. the native program then imports &lt;br /&gt;the relevant adda libraries&lt;br /&gt;and includes addm as a component&lt;br /&gt;so that the program or its user&lt;br /&gt;can run arbitrary adda scripts .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6338304954080295414?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6338304954080295414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/natively-coded-extensions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6338304954080295414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6338304954080295414'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/natively-coded-extensions.html' title='natively coded extensions'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8731286604048214087</id><published>2011-07-30T19:25:00.000-07:00</published><updated>2011-07-30T19:25:18.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etree'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>object copy &amp; paste</title><content type='html'>&lt;i&gt;7.14: &lt;b&gt;adde/&lt;/b&gt;object copy &amp;amp; paste:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. the typical copy &amp;amp; paste&lt;br /&gt;is a char-string operation;&lt;br /&gt;whereas, an object selection&lt;br /&gt;is operating over etrees (expression trees)&lt;br /&gt;which are tree nodes with pointers into&lt;br /&gt;dictionaries of symbols (symbol tables).&lt;br /&gt;. there can be more than one symbol table;&lt;br /&gt;because, a dictionary can include procedures,&lt;br /&gt;and procedure definitions can have local dictionaries;&lt;br /&gt;hence, a single etree can be within&lt;br /&gt;the scope of multiple dictionaries&lt;br /&gt;represented by stacks of local symbol tables .&lt;br /&gt;&lt;br /&gt;. a copy becomes a module&lt;br /&gt;meaning it needs its own copy of&lt;br /&gt;any local symbol tables;&lt;br /&gt;however, the cost of copying&lt;br /&gt;depends on the destination:&lt;br /&gt;if the paste location is within the source's scope&lt;br /&gt;it shares all the same symbol tables .&lt;br /&gt;. when some symbol tables are&lt;br /&gt;not shared between source and destination&lt;br /&gt;those tables must be copied;&lt;br /&gt;and, affected etree nodes adjusted&lt;br /&gt;to point into the new tables .&lt;br /&gt;&lt;br /&gt;. when an arbitrary substring is selected&lt;br /&gt;it can be representing fractions of etrees,&lt;br /&gt;eg, given a+b+c, a selection can include&lt;br /&gt;all of term-b and partials of terms {a,c} .&lt;br /&gt;&lt;br /&gt;. there may be parts of the given language where&lt;br /&gt;partial terms don't have the same meaning;&lt;br /&gt;ie, there would be nothing but a&lt;br /&gt;char-string translation of the object selection .&lt;br /&gt;. in any case,&lt;br /&gt;the quickest, most general way to define a selection&lt;br /&gt;is to get links to the entire chain of symbol tables;&lt;br /&gt;and, copy the entire subtree that contains&lt;br /&gt;all the fragments of the selection;&lt;br /&gt;then include a descriptor that shows&lt;br /&gt;where the selection is beginning and ending .&lt;br /&gt;&lt;br /&gt;. when would you want fragments and still want&lt;br /&gt;the etree object rather than a char string?&lt;br /&gt;for orthogonality,&lt;br /&gt;we have to provide for the possibility&lt;br /&gt;that one of adde's plug-in app's&lt;br /&gt;can find some use for such a selection;&lt;br /&gt;ie, in many cases of user interaction&lt;br /&gt;the selection is for a function other than&lt;br /&gt;cut or copy .&lt;br /&gt;&lt;br /&gt;7.15:&lt;br /&gt;. when designing the pointer that is&lt;br /&gt;going from etree nodes into symbol tables,&lt;br /&gt;there must be an efficient coding,&lt;br /&gt;and it should support efficient copying&lt;br /&gt;even when it involves context changes .&lt;br /&gt;&lt;br /&gt;. both the source and destination of a copy&lt;br /&gt;have scope paths:&lt;br /&gt;if the scope paths aren't the same&lt;br /&gt;we have to identify any scopes not shared&lt;br /&gt;and copy their symbol tables&lt;br /&gt;for merging with the destination .&lt;br /&gt;if this is a cut instead of a copy,&lt;br /&gt;there are fewer choices,&lt;br /&gt;since the destination space is smaller .&lt;br /&gt;&lt;br /&gt;. a complication of multiple nestings of scope&lt;br /&gt;is the orphaned symbol from ancestor scopes:&lt;br /&gt;these imply some sort of communication with&lt;br /&gt;a context which no longer exists .&lt;br /&gt;. we have to remind the user&lt;br /&gt;that the orphan's place in the destination&lt;br /&gt;may need special attention:&lt;br /&gt;should it be added to the new parent scope,&lt;br /&gt;or some higher scope ?&lt;br /&gt;. the default location would be relative height,&lt;br /&gt;ie, the same number of scopes up the path&lt;br /&gt;as it was in the source location .&lt;br /&gt;. in any case, we have to assist the user&lt;br /&gt;in keeping track of these orphan relocations,&lt;br /&gt;and make sure that all affected contexts&lt;br /&gt;are adjusted to create a sensible communication&lt;br /&gt;such that, the role of the source ancestor&lt;br /&gt;is now provided by the new context's procedure .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8731286604048214087?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8731286604048214087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/object-copy-paste.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8731286604048214087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8731286604048214087'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/object-copy-paste.html' title='object copy &amp; paste'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-297168404684784583</id><published>2011-07-30T19:12:00.000-07:00</published><updated>2011-07-30T19:12:15.661-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><category scheme='http://www.blogger.com/atom/ns#' term='vfs(virtual file system)'/><category scheme='http://www.blogger.com/atom/ns#' term='pointers'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>tags, link-trees, and file-trees</title><content type='html'>&lt;i&gt;7.3: 7.30: &lt;b&gt;adde/&lt;/b&gt;tags, link-trees, and file-trees:&lt;/i&gt;&lt;br /&gt;. how to integrate tags with folder systems?&lt;br /&gt;placing a file in a folder is tagging it;&lt;br /&gt;&amp;nbsp;a hierarchy is a tag with segments;&lt;br /&gt;ie, each path name is one tag .&lt;br /&gt;. while a file can be in only one folder,&lt;br /&gt;it can be assigned to many tags .&lt;br /&gt;&lt;br /&gt;. tags can be thought of as&lt;br /&gt;a list of links to its members;&lt;br /&gt;and, equivalently, as attributes of a file:&lt;br /&gt;each file or file link can list all the tags&lt;br /&gt;to which it is a member,&lt;br /&gt;just as it can tell the folder path it's in .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;link-trees vs file-trees:&lt;/b&gt;&lt;br /&gt;. a file-tree is the usual folder tree,&lt;br /&gt;it contains actual files rather than links;&lt;br /&gt;so, a file can be a member of only one file-tree .&lt;br /&gt;. the link-tree is like a file-tree&lt;br /&gt;except it contains only links to files&lt;br /&gt;rather than actual files;&lt;br /&gt;thus, a file can belong to many link-trees,&lt;br /&gt;and may be in many places&lt;br /&gt;within the same link-tree .&lt;br /&gt;7.30:&lt;br /&gt;. the main idea for these distinctions&lt;br /&gt;is that file-trees are low-level concerns;&lt;br /&gt;the only reason they need to be accessed&lt;br /&gt;is when the space limits require&lt;br /&gt;deletions or archiving .&lt;br /&gt;. most file system operations&lt;br /&gt;are concerned only with organizing files,&lt;br /&gt;not managing limited space,&lt;br /&gt;and each activity should have its own&lt;br /&gt;customized view of the file system;&lt;br /&gt;so, most file accesses should be done&lt;br /&gt;through link-trees .&lt;br /&gt;. tags can be applied to either files or links,&lt;br /&gt;depending on the tag's scope:&lt;br /&gt;tags on files are global;&lt;br /&gt;tags on links apply only to&lt;br /&gt;a specific link-tree;&lt;br /&gt;ie, each link-tree has its own set of tags:&lt;br /&gt;both the ones induced by the global tags&lt;br /&gt;belonging to files it's linking to,&lt;br /&gt;and the tags specified by the&lt;br /&gt;user of the link-tree .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-297168404684784583?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/297168404684784583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/tags-link-trees-and-file-trees.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/297168404684784583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/297168404684784583'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/tags-link-trees-and-file-trees.html' title='tags, link-trees, and file-trees'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1081216030109413086</id><published>2011-07-30T14:14:00.000-07:00</published><updated>2011-07-30T14:14:23.304-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><title type='text'>binary operation aggregation</title><content type='html'>&lt;i&gt;7.10: &lt;b&gt;adda/cstr/&lt;/b&gt;binary operation aggregation:&lt;/i&gt;&lt;br /&gt;. biop's (binary operations)&lt;br /&gt;can be seen as aggregated&lt;br /&gt;by a rule book showing combinations of biops&lt;br /&gt;that should be considered to be&lt;br /&gt;one subprogram call&lt;br /&gt;ie, binding to a particular subprogram;&lt;br /&gt;eg, {?, else} are both biops,&lt;br /&gt;and the rule book would say that&lt;br /&gt;(?, else) is a single function:&lt;br /&gt;?-else(truth,proc,proc).proc&lt;br /&gt;or ?-else(truth,fun,fun).fun .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1081216030109413086?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1081216030109413086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/binary-operation-aggregation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1081216030109413086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1081216030109413086'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/binary-operation-aggregation.html' title='binary operation aggregation'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9158730290975025261</id><published>2011-07-30T14:10:00.000-07:00</published><updated>2011-07-30T14:10:39.418-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='pointers'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>references for security and speed</title><content type='html'>&lt;i&gt;7.9: &lt;b&gt;adda/oop/&lt;/b&gt;references for security and speed:&lt;/i&gt;&lt;br /&gt;. notice how oop would rather&lt;br /&gt;create a new object and modify a pointer&lt;br /&gt;than modify the value of a current object .&lt;br /&gt;. I call this the "(pervasive pointers).&lt;br /&gt;&lt;br /&gt;. from an encapsulation view there is no diff',&lt;br /&gt;since only the owning type&lt;br /&gt;can do these mod's .&lt;br /&gt;. what it does seem to uniquely do though,&lt;br /&gt;is encourage the sharing of objects;&lt;br /&gt;ie, if you can modify your value&lt;br /&gt;then I have no interest in sharing its object&lt;br /&gt;because it's no longer synonymous with&lt;br /&gt;the intended value at some past time .&lt;br /&gt;--&lt;br /&gt;. oop is doing for every value&lt;br /&gt;what c does only for arrays .&lt;br /&gt;7.10:&lt;br /&gt;. it does promote strong&lt;br /&gt;capability-based security;&lt;br /&gt;because if everything is through reference,&lt;br /&gt;and ref's are encryptable,&lt;br /&gt;then that is a much stronger encapsulation&lt;br /&gt;unless the system is already protected&lt;br /&gt;by allowing only system-compiled code .&lt;br /&gt;7.11:&lt;br /&gt;. another interesting property of&lt;br /&gt;pervasive pointers&lt;br /&gt;is that by comparing pointers,&lt;br /&gt;one can tell quickly whether&lt;br /&gt;even huge structures are identical;&lt;br /&gt;though if the pointers aren't equal,&lt;br /&gt;they might still represent equal values .&lt;br /&gt;. python has a speed hack where the&lt;br /&gt;first 100 ints have reserved pointers&lt;br /&gt;so in the many loops controlled by small ints,&lt;br /&gt;pointer compares are decisive .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9158730290975025261?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9158730290975025261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/references-for-security-and-speed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9158730290975025261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9158730290975025261'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/references-for-security-and-speed.html' title='references for security and speed'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3217931904838891206</id><published>2011-07-30T13:21:00.000-07:00</published><updated>2011-07-30T13:21:52.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='portability'/><title type='text'>local resource accesses and wrappers</title><content type='html'>&lt;i&gt;7.3: &lt;b&gt;adda/portability&lt;/b&gt;/local resource accesses and wrappers:&lt;/i&gt;&lt;br /&gt;. wondering how adda can provide portable features&lt;br /&gt;and yet also provide access to&lt;br /&gt;individual platform features .&lt;br /&gt;. per each platform,&lt;br /&gt;represent its features as a library,&lt;br /&gt;and then map adda's features to that .&lt;br /&gt;. users can expect portability from&lt;br /&gt;staying with the model;&lt;br /&gt;and can get more into their specific platform&lt;br /&gt;by importing the lib's it offers .&lt;br /&gt;. additionally,&lt;br /&gt;there will never be a portable model of&lt;br /&gt;what paths you can modify;&lt;br /&gt;instead, you have to list per system,&lt;br /&gt;what volumes are available,&lt;br /&gt;and whether they are writable or rom .&lt;br /&gt;7.5:&lt;br /&gt;. adda must include all the storage models,&lt;br /&gt;and must map them to diversely contstrained models:&lt;br /&gt;eg, some platform may offer nothing but a database,&lt;br /&gt;so, adda must provide a hierarchical filesystem&lt;br /&gt;that is implemented by a database .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3217931904838891206?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3217931904838891206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/local-resource-accesses-and-wrappers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3217931904838891206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3217931904838891206'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/local-resource-accesses-and-wrappers.html' title='local resource accesses and wrappers'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3086735270559990066</id><published>2011-07-30T13:13:00.000-07:00</published><updated>2011-07-30T13:13:08.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='GO'/><title type='text'>go's defer statement</title><content type='html'>&lt;i&gt; 7.1: &lt;b&gt;adda&lt;/b&gt;/go.lang/defer:&lt;/i&gt;&lt;br /&gt;. &lt;a href="http://goneat.org/doc/effective_go.html"&gt;go.lang&lt;/a&gt; has a defer&lt;br /&gt;that is like a type mgt's finalization routine&lt;br /&gt;only it's used by a function&lt;br /&gt;for things that should happen on return .&lt;br /&gt;. ideas I got from that are:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;# on return: &lt;/span&gt;... [7.30:&lt;br /&gt;. "(on *condition*) would generally mean&lt;br /&gt;rule-based vs &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_programming_paradigms"&gt;imperative programming&lt;/a&gt;;&lt;br /&gt;so (on return: s) would add (s) to&lt;br /&gt;the list of things to do before returning .]&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;# self`end`+ ...&lt;/span&gt; [7.30:&lt;br /&gt;. this is modeled after i`+ 1&lt;br /&gt;which is shorthand for i= i+1 .&lt;br /&gt;. the self is the current subprogram;&lt;br /&gt;it already has an "(end)&lt;br /&gt;listing things to do before ending;&lt;br /&gt;and a (`+) would add to that list .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3086735270559990066?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3086735270559990066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/gos-defer-statement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3086735270559990066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3086735270559990066'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/gos-defer-statement.html' title='go&apos;s defer statement'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-921042902400415062</id><published>2011-07-30T12:52:00.000-07:00</published><updated>2011-07-30T12:52:03.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RPython'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='pypy'/><title type='text'>Ousterhout's dichotomy</title><content type='html'>&lt;span style="font-style: italic;"&gt;7.1: news.&lt;span style="font-weight: bold;"&gt;adda&lt;/span&gt;/&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Ousterhout%27s_dichotomy" style="font-style: italic;"&gt;Ousterhout's dichotomy&lt;/a&gt;&lt;span style="font-style: italic;"&gt;:&lt;/span&gt;&lt;br /&gt;. John Ousterhout, designer of &lt;a href="http://en.wikipedia.org/wiki/Tcl"&gt;Tcl&lt;/a&gt;,&lt;br /&gt;noticed that high-level programming languages&lt;br /&gt;tend to fall into two groups,&lt;br /&gt;"system programming languages"&lt;br /&gt;and "scripting languages".&lt;br /&gt;[ie you can't have a language that is&lt;br /&gt;optimal for both .&lt;br /&gt;. in defence of that claim,&lt;br /&gt;&lt;a href="http://codespeak.net/pypy/dist/pypy/doc/"&gt;pypy&lt;/a&gt; tried to have a system language &lt;a href="http://code.google.com/p/rpython/"&gt;Rpython&lt;/a&gt;&lt;br /&gt;that was as much as possible like&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29"&gt;Python, the scripting lang;&lt;/a&gt;&lt;br /&gt;because they wanted&lt;br /&gt;a &lt;a href="http://en.wikipedia.org/wiki/Self-hosting"&gt;self-hosting&lt;/a&gt; python compiler&lt;br /&gt;ie, one written in python instead of c .&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[7.30: &lt;/span&gt;like adda,&lt;br /&gt;Rpython is designed to translate into c&lt;br /&gt;for the purpose of avoiding c:&lt;br /&gt;system programmers can use Rpython&lt;br /&gt;yet still take advantage of c compilers .]&lt;br /&gt;. the closest Rpython could get to python&lt;br /&gt;is a subset of it that added static typing;&lt;br /&gt;because, some features that support&lt;br /&gt;coder productivity&lt;br /&gt;are antithetical to features that support&lt;br /&gt;algorithm efficiency .&lt;br /&gt;. Ousterhout was likely pointing out that&lt;br /&gt;scripting lang efficiency was not so important;&lt;br /&gt;because, scripts are glue for&lt;br /&gt;subprograms of sufficient size,&lt;br /&gt;such that most of the run time&lt;br /&gt;is spent in the parts defined by the system lang .&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7.30: web:&lt;/span&gt;&lt;br /&gt;D. Ancona, M. Ancona, A Cuni, and N. Matsakis.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;RPython: a Step Towards Reconciling&lt;/span&gt;&lt;br style="font-style: italic;" /&gt; &lt;span style="font-style: italic;"&gt;Dynamically and Statically Typed OO Languages.&lt;/span&gt;&lt;br style="font-style: italic;" /&gt; In OOPSLA 2007 Proceedings and Companion, DLS'07:&lt;br /&gt;&lt;a href="ftp://ftp.disi.unige.it/pub/person/AnconaD/DLS08.pdf"&gt;Proceedings of the 2007 Symposium on &lt;/a&gt;&lt;br /&gt;&lt;a href="ftp://ftp.disi.unige.it/pub/person/AnconaD/DLS08.pdf"&gt;Dynamic Languages, pages 53-64. ACM, 2007&lt;/a&gt;(pdf)&lt;br /&gt;&lt;blockquote&gt; . an approach that attempts to preserve&lt;br /&gt;the flexibility of Python,&lt;br /&gt;while still allowing for efficient execution&lt;br /&gt;is limiting the use of&lt;br /&gt;the more dynamic features of Python&lt;br /&gt;to an initial, bootstrapping phase.&lt;br /&gt;This phase is used to construct&lt;br /&gt;a final RPython (Restricted Python) program&lt;br /&gt;that is actually executed.&lt;br /&gt;RPython is a proper subset of Python,&lt;br /&gt;is statically typed,&lt;br /&gt;and does not allow dynamic modification&lt;br /&gt;of class or method definitions;&lt;br /&gt;however, it can still take advantage of&lt;br /&gt;Python features such as mixins and&lt;br /&gt;first-class methods and classes.&lt;br /&gt;This paper presents an overview of RPython,&lt;br /&gt;including its design and its translation to&lt;br /&gt;both CLI and JVM bytecode.&lt;br /&gt;We show how the bootstrapping phase can be&lt;br /&gt;used to implement advanced features,&lt;br /&gt;like extensible classes and generative programming.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-921042902400415062?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/921042902400415062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/ousterhouts-dichotomy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/921042902400415062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/921042902400415062'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/07/ousterhouts-dichotomy.html' title='Ousterhout&apos;s dichotomy'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5050865385917676680</id><published>2011-06-30T22:28:00.000-07:00</published><updated>2011-06-30T22:28:31.092-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='dstr'/><title type='text'>enum.typed record domains</title><content type='html'>&lt;i&gt;6.20: &lt;b&gt;adda/dstr&lt;/b&gt;/enum.typed record domains:&lt;/i&gt;&lt;br /&gt;. in classic lang's like c,&lt;br /&gt;arrays had very different properties&lt;br /&gt;than records .&lt;br /&gt;. in a polymorphic languages however,&lt;br /&gt;records can be more like arrays;&lt;br /&gt;because, although their components vary in type,&lt;br /&gt;the various types often have the same base type;&lt;br /&gt;eg, all types can print their value, etc .&lt;br /&gt;. and any time a record has at least&lt;br /&gt;2 components of the same type,&lt;br /&gt;it could make sense to specify components with&lt;br /&gt;an expression rather than a literal name,&lt;br /&gt;just as is done for arrays .&lt;br /&gt;&lt;b&gt;today's issue is this:&lt;/b&gt;&lt;br /&gt;. in trying to unify the concepts of&lt;br /&gt;arrays and records,&lt;br /&gt;there needs to be a way for records to&lt;br /&gt;express their component names as being&lt;br /&gt;some enumeration-type's subrange;&lt;br /&gt;and then, conversely,&lt;br /&gt;any time a record r declares its components' names,&lt;br /&gt;that should induce an enumeration type:&lt;br /&gt;&lt;i&gt;r`domain&lt;/i&gt;&lt;br /&gt;-- I'm using the term "(domain) because&lt;br /&gt;arrays and records are like functions;&lt;br /&gt;and, functions in math are known to&lt;br /&gt;input values from a domain type&lt;br /&gt;and output values from a codomain type;&lt;br /&gt;ie, &lt;b&gt;f: domain -&gt; codomain;&lt;/b&gt;&lt;br /&gt;or, in adda:&lt;br /&gt;function &lt;b&gt;f(x.domain).codomain&lt;/b&gt;,&lt;br /&gt;array &lt;b&gt;A#(domain).codomain&lt;/b&gt;&lt;br /&gt;record R.(r1.co1, r2.co2, r3.co3);&lt;br /&gt;R`domain = {r1, r2, r3};&lt;br /&gt;R`codomain = {co1.type, co2.type, co3.type},&lt;br /&gt;&lt;br /&gt;. assume there's the enumeration&lt;br /&gt;e.type: {r1, r2, r3};&lt;br /&gt;how should a record say its domain = e ?&lt;br /&gt;&lt;br /&gt;R.(r1.co1, r2.co2, r3.co3);&lt;br /&gt;R`domain`= e ?&lt;br /&gt;&lt;i&gt;[6.23: yes,&lt;/i&gt;&lt;br /&gt;that lets the record be defined in the usual way,&lt;br /&gt;and then also say that the domain is&lt;br /&gt;not a new declaration,&lt;br /&gt;but rather a reuse of some existing enum.type .]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mis:&lt;/b&gt;&lt;br /&gt;. one thing that wouldn't work is this:&lt;br /&gt;R#(e).{co1.type, co2.type, co3.type} ?&lt;br /&gt;-- that would instead be saying&lt;br /&gt;R is an array of enum;&lt;br /&gt;and each var's possible values&lt;br /&gt;are in the set:&lt;br /&gt;{co1.type, co2.type, co3.type}.&lt;br /&gt;--. this could be useful for when&lt;br /&gt;writing programs that write programs:&lt;br /&gt;many of the values they're concerned about&lt;br /&gt;are parts of languages, including types .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5050865385917676680?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5050865385917676680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/enumtyped-record-domains.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5050865385917676680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5050865385917676680'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/enumtyped-record-domains.html' title='enum.typed record domains'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3270070586588663508</id><published>2011-06-30T21:20:00.000-07:00</published><updated>2011-06-30T21:20:17.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='ABI'/><title type='text'>preventing insecure inputs</title><content type='html'>&lt;i&gt;6.11: &lt;b&gt;adda/abi&lt;/b&gt;/insuring security:&lt;/i&gt;&lt;br /&gt;[6.13: &lt;b&gt;intro&lt;/b&gt;:&lt;br /&gt;. many app's are a security threat because&lt;br /&gt;they are trusted not to smash the stack or heap,&lt;br /&gt;yet will do so if given mal-formed input;&lt;br /&gt;the primary security defense provided by adda&lt;br /&gt;is that all interactions with the stack or heap&lt;br /&gt;are handled by robust system app's .]&lt;br /&gt;&lt;br /&gt;. an app may be expecting ascii&lt;br /&gt;and get unicode instead,&lt;br /&gt;but adda typetags would document what was there,&lt;br /&gt;and then the app could take steps to&lt;br /&gt;convert to the prefered type .&lt;br /&gt;[6.24:&lt;br /&gt;. non-native types can have novel structures;&lt;br /&gt;but they are always compositions of&lt;br /&gt;native elemental type;&lt;br /&gt;and, the addx system is helping app's&lt;br /&gt;to read and write the data they exchange .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3270070586588663508?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3270070586588663508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/preventing-insecure-inputs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3270070586588663508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3270070586588663508'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/preventing-insecure-inputs.html' title='preventing insecure inputs'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9068945582511108517</id><published>2011-06-30T21:10:00.000-07:00</published><updated>2011-06-30T21:10:06.702-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-dispatch'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>oop's multi-dispatch</title><content type='html'>&lt;i&gt;6.5: &lt;b&gt;adda&lt;/b&gt;/oop/multi-dispatch/ &lt;b&gt;working with obj'c&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;i&gt;[6.17: &lt;b&gt;intro&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. according to the &lt;a href="http://en.wikipedia.org/wiki/Multiple_dispatch"&gt;wiki&lt;/a&gt;,&lt;br /&gt;the term"multi-dispatch refers to&lt;br /&gt;something other than what I assumed it to be&lt;br /&gt;so, I will now explain the diff's .&lt;br /&gt;&lt;br /&gt;. everybody agrees on how polymorphism happens&lt;br /&gt;when there is only one argument:&lt;br /&gt;when you write f(x) you mean&lt;br /&gt;x can be any type as long as&lt;br /&gt;x's type defines a function f .&lt;br /&gt;. you don't really know which procedure or method&lt;br /&gt;is being used to define the function f&lt;br /&gt;until you ask x what its type is,&lt;br /&gt;then you use the f-procedure defined by that type .&lt;br /&gt;. that is called dynamic dispatch;&lt;br /&gt;the term "(dispatch) is being used in the same way&lt;br /&gt;as "(taxi dispatcher),&lt;br /&gt;whose decision of which taxi to send&lt;br /&gt;depends on which taxi is free and closest;&lt;br /&gt;likewise, a function call dispatcher&lt;br /&gt;determines which procedure to send the arg to,&lt;br /&gt;and bases its decision on&lt;br /&gt;both the function name,&lt;br /&gt;and the argument's type .&lt;br /&gt;&lt;br /&gt;. if the arg is binary,&lt;br /&gt;then a multi-dispatch system has to find&lt;br /&gt;a procedure that is typed for that particular&lt;br /&gt;combination of arg types;&lt;br /&gt;and most such systems use function overloading;&lt;br /&gt;ie, they overload a function's meaning;&lt;br /&gt;eg,&lt;br /&gt;there are many types of cars and motorcycles;&lt;br /&gt;and how a collision turns out&lt;br /&gt;depends on both types;&lt;br /&gt;so then, for each type combination,&lt;br /&gt;you have to define a new procedure&lt;br /&gt;for the car-motorcycle collision function;&lt;br /&gt;that means, for example,&lt;br /&gt;that every time you create a new type of motorcycle,&lt;br /&gt;you have to define as many new collision procedures&lt;br /&gt;as there are types of cars .&lt;br /&gt;&lt;br /&gt;. the multi-dispatch system I have in mind&lt;br /&gt;does not use overloading;&lt;br /&gt;rather it expects multiple args to share some supertype;&lt;br /&gt;so, for the cars and motorcycles example,&lt;br /&gt;they could simply share the physics type;&lt;br /&gt;which defines its members as having&lt;br /&gt;a mass and a velocity;&lt;br /&gt;the collision procedure asks both arg's&lt;br /&gt;for their mass and velocity&lt;br /&gt;and then calculates new velocities for each .&lt;br /&gt;. it then sends each arg a message&lt;br /&gt;to change itself to the new velocity,&lt;br /&gt;which each can do with its own version of&lt;br /&gt;a velocitychange(x) procedure .&lt;br /&gt;&lt;br /&gt;. that was a simple case because the multi-arg function&lt;br /&gt;could be reduced to a multiple of single-arg functions;&lt;br /&gt;a more complicated case can be found in numerics,&lt;br /&gt;where a binary operation doesn't resolve into&lt;br /&gt;2 unary operations;&lt;br /&gt;. for example, say you had a numeric supertype&lt;br /&gt;that includes only reals and ints;&lt;br /&gt;&lt;b&gt;# it can be overloading&lt;/b&gt; the addition function:&lt;br /&gt;+(int, int),&lt;br /&gt;+(real, real)&lt;br /&gt;+(real, int),&lt;br /&gt;+(int, real) .&lt;br /&gt;&lt;b&gt;# or it can use coercion:&lt;/b&gt;&lt;br /&gt;it checks to see if types differ,&lt;br /&gt;and then converts one&lt;br /&gt;so both are the same type:&lt;br /&gt;+(int,real) then means a call to &lt;br /&gt;+(real,real);&lt;br /&gt;it then checks whether the destination&lt;br /&gt;is able to accept a real,&lt;br /&gt;or if the destination has a function for&lt;br /&gt;converting a real to its own type .&lt;br /&gt;&lt;br /&gt;. now lets say another type, Rational,&lt;br /&gt;is declared to be a subtype of numerics;&lt;br /&gt;this means the supertype procedure for&lt;br /&gt;handling binary operations&lt;br /&gt;has to be updated:&lt;br /&gt;&lt;b&gt;# overloaders&lt;/b&gt; then have many more cases to deal with:&lt;br /&gt;{int,real,rational}&lt;br /&gt;x {int,real,rational}.&lt;br /&gt;= 9 cases instead of 4 .&lt;br /&gt;&lt;b&gt;# coercers&lt;/b&gt; have another rule to add:&lt;br /&gt;if types differ, then convert ... to ...:&lt;br /&gt;{int,real} to real&lt;br /&gt;{int,rational} to rational&lt;br /&gt;{real, rational} to real .&lt;br /&gt;&lt;br /&gt;. in the case of numerics there is a limit to this:&lt;br /&gt;every imaginable subtype of numeric&lt;br /&gt;can be expressed as subtypes of&lt;br /&gt;just these subtypes:&lt;br /&gt;&lt;i&gt;{int, real, rational, complex}&lt;br /&gt;x size-{1,2,4,8byte, huge};&lt;br /&gt;&lt;/i&gt;so, for example,&lt;br /&gt;we can declare rainbow to be a subtype of real,&lt;br /&gt;and then the numeric supertype can&lt;br /&gt;-- without ever knowing about rainbows --&lt;br /&gt;see from its type declaration&lt;br /&gt;that it must have a&lt;br /&gt;&lt;u&gt;convert rainbow to real&lt;/u&gt; procedure;&lt;br /&gt;and, if a destination is type rainbow,&lt;br /&gt;it again knows from the rainbow declaration&lt;br /&gt;that this destination&lt;br /&gt;has a &lt;u&gt;&lt;i&gt;real&lt;/i&gt; assignment&lt;/u&gt; procedure .&lt;br /&gt;&lt;i&gt;]-intro&lt;/i&gt;&lt;br /&gt;&lt;i&gt;[6.8: 6.17:&lt;/i&gt;&lt;br /&gt;. as part of developing for mac,&lt;br /&gt;obj'c features the usual dynamic dispatch .&lt;br /&gt;. the sort of multi-dispatch I have in mind&lt;br /&gt;would fit within mac's type-tagging system;&lt;br /&gt;so for instance,&lt;br /&gt;numerics would have 2 &lt;b&gt;type tags&lt;/b&gt;:&lt;br /&gt;# one says it's a &lt;b&gt;subtype of mac's&lt;/b&gt; NSobject,&lt;br /&gt;# another is &lt;b&gt;private&lt;/b&gt; and indicates&lt;br /&gt;which subtype of numeric it currently is .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9068945582511108517?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9068945582511108517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/oops-multi-dispatch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9068945582511108517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9068945582511108517'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/oops-multi-dispatch.html' title='oop&apos;s multi-dispatch'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9110865063162627899</id><published>2011-06-30T20:49:00.000-07:00</published><updated>2011-06-30T20:49:31.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='mem&apos;mgt'/><title type='text'>alloc'order and size</title><content type='html'>&lt;i&gt;6.2: &lt;b&gt;adda/mem'mgt&lt;/b&gt;/alloc'order and size:&lt;/i&gt;&lt;br /&gt;. when using the c lang's dynamic mem'allocator (malloc)&lt;br /&gt;the c`runtime assumes you will be&lt;br /&gt;returning mem in mostly the same order as&lt;br /&gt;when you obtained them .&lt;br /&gt;. if this is not the case,&lt;br /&gt;then there could be heap fragmentation problems .&lt;br /&gt;[6.3:&lt;br /&gt;. use of malloc order may be less complicated&lt;br /&gt;because in modern systems there is v.mem,&lt;br /&gt;so the parts of heap that are&lt;br /&gt;in the way of compacting it&lt;br /&gt;can simply be paged out .]&lt;br /&gt;&lt;br /&gt;. the less mem you use at any one time,&lt;br /&gt;the better chance buggy programs around you&lt;br /&gt;don't blow up from exceeding mem limits .&lt;br /&gt;&lt;br /&gt;. if needing to alloc mem in a way that could&lt;br /&gt;cause heap fragmentation,&lt;br /&gt;consider how much mem your program is using at once,&lt;br /&gt;and whether you can break it into pieces&lt;br /&gt;that do inout on temp files .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;6.17: &lt;b&gt;other strategies&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;b&gt;# at the app level:&lt;/b&gt;&lt;br /&gt;. it's easier to find mem even in a fragmented heap&lt;br /&gt;if you're decomposing your mem needs into smaller parts;&lt;br /&gt;eg, instead of alloc'ing 100 contiguous words&lt;br /&gt;for a 10x10 matrix,&lt;br /&gt;you could do 10 alloc's of 10 words each&lt;br /&gt;arranged as an array of pointer to arrays .&lt;br /&gt;&lt;b&gt;# at the os level:&lt;/b&gt;&lt;br /&gt;. just as logical files are strings of&lt;br /&gt;many non-contiguous physical mem blocks;&lt;br /&gt;malloc could be impl'ing large mem requests&lt;br /&gt;as strings of smaller mem blocks .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9110865063162627899?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9110865063162627899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/allocorder-and-size.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9110865063162627899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9110865063162627899'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/allocorder-and-size.html' title='alloc&apos;order and size'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9174561610344738993</id><published>2011-06-30T20:44:00.000-07:00</published><updated>2011-06-30T20:44:36.377-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>oop storage classes</title><content type='html'>&lt;i&gt;6.1: &lt;b&gt;adda/type&lt;/b&gt;/storage classes:&lt;/i&gt;&lt;br /&gt;. recently it was seen how oop's class var's&lt;br /&gt;can be modeled by having vars declared in&lt;br /&gt;the interface type mgt's body&lt;br /&gt;(the implementation module of the interface).&lt;br /&gt;&lt;br /&gt;. the same idea can apply to declaring agg' types&lt;br /&gt;(aggregates include the arrays, and records)&lt;br /&gt;which can be just like an interface type&lt;br /&gt;except that an agg's specification can't&lt;br /&gt;declare new operators; [6.20:&lt;br /&gt;ie, the definition of an interface type&lt;br /&gt;is a type that declares &lt;br /&gt;what operations and components&lt;br /&gt;can be applied to obj's of this type;&lt;br /&gt;an agg type is one that need declare only&lt;br /&gt;components .]&lt;br /&gt;&lt;br /&gt;. both the {agg', interface} type def's&lt;br /&gt;can declare these 3 &lt;b&gt;storage classes&lt;/b&gt;:&lt;br /&gt;&lt;b&gt;# public instance components:&lt;/b&gt;&lt;br /&gt;in the typedef's face .&lt;br /&gt;&lt;b&gt;# private instance var's:&lt;/b&gt;&lt;br /&gt;in the optional initialization function,&lt;br /&gt;within the typedef's body .&lt;br /&gt;&lt;b&gt;# private class var's:&lt;/b&gt;&lt;br /&gt;in the typedef's optional body .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;efficiency concerns:&lt;/b&gt;&lt;br /&gt;. if the type's face (ada`specification)&lt;br /&gt;doesn't have to declare privates,&lt;br /&gt;then the compiler can never know&lt;br /&gt;what the actual size of an object will be;&lt;br /&gt;whereas, if the face can include&lt;br /&gt;something like: '(privates:0), &lt;br /&gt;then the compiler can potentially know its size .&lt;br /&gt;. however, given the trailer idea&lt;br /&gt;(dynamically extending local mem),&lt;br /&gt;knowing the size is not important anyway:&lt;br /&gt;all act'rec's would have a discriminant bit&lt;br /&gt;indicating the primary record variant:&lt;br /&gt;the one {with, without} a pointer to trailer .&lt;br /&gt;. if with trailer, then any private instance var's&lt;br /&gt;would be on the trailer at that index .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;6.1: adda/&lt;b&gt;{begin, end} rename {init,fini}callbacks&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. what I've been calling the {init, fini} routines&lt;br /&gt;should be named {begin, end}&lt;br /&gt;since they mean the same thing in plain english .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9174561610344738993?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9174561610344738993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/oop-storage-classes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9174561610344738993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9174561610344738993'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/oop-storage-classes.html' title='oop storage classes'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9119030786033085720</id><published>2011-06-28T23:28:00.000-07:00</published><updated>2011-06-28T23:28:21.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABI'/><category scheme='http://www.blogger.com/atom/ns#' term='compound doc&apos;s'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>a brief history of compound documents</title><content type='html'>&lt;i&gt;5.7: web.&lt;b&gt;adde&lt;/b&gt;/compound doc/&lt;b&gt;problems&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. the &lt;a href="http://en.wikipedia.org/wiki/Compound_document"&gt;compound doc&lt;/a&gt; is a really simple idea;&lt;br /&gt;it works just like the way that your mac's gui&lt;br /&gt;displays a window of various apps,&lt;br /&gt;except that window arrangments can be&lt;br /&gt;saved as documents, and windows can be borderless&lt;br /&gt;as if they are part of the same document .&lt;br /&gt;. but from reading &lt;a href="http://en.wikipedia.org/wiki/OpenDoc#Problems"&gt;opendoc's history&lt;/a&gt;&lt;br /&gt;you'd think it was a plague .&lt;br /&gt;"(. compound documents are said to be&lt;br /&gt;an oversold concept:&lt;br /&gt;there just aren't that many examples&lt;br /&gt;beyond mixing graphics with text .)&lt;br /&gt;--&lt;br /&gt;. tell that to the html`object tag:&lt;br /&gt;we routinely see combinations of&lt;br /&gt;movies, photo's, text, script images,&lt;br /&gt;and anything you have an app for .&lt;br /&gt;&lt;blockquote&gt;. an amazingly bad specification or implementation&lt;br /&gt;was opendoc's biggest problem:&lt;br /&gt;it was very common to find&lt;br /&gt;apps that could not even&lt;br /&gt;open a document created by another app .&lt;br /&gt;. OpenDoc attempted to solve this problem by&lt;br /&gt;allowing developers to store multiple formats&lt;br /&gt;to represent the same document object.&lt;br /&gt;For instance, it was both possible and encouraged&lt;br /&gt;to store a common format like JPEG&lt;br /&gt;along with an editable binary format,&lt;br /&gt;but in practice few developers&lt;br /&gt;followed this recommendation.&lt;/blockquote&gt;--&lt;br /&gt;. something about the plague again:&lt;br /&gt;other compound doc specifications&lt;br /&gt;had the same problem!&lt;br /&gt;. the specification should have included&lt;br /&gt;a manifest that listed what app's you need&lt;br /&gt;in order to open a given document .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;more compound doc' technology is history:&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;Dynamic Data Exchange (DDE,  1987),&lt;br /&gt;allowed "conversations" between applications.&lt;br /&gt;OLE(1991, (Object Linking and Embedding).)&lt;br /&gt;was Microsoft's first object-based framework,&lt;br /&gt;and MS`Office's first compound doc' technology;&lt;br /&gt;it was built on top of DDE .&lt;br /&gt;. While OLE 1 was focused on compound documents,&lt;br /&gt;COM and OLE 2 (1992-93) were designed to address&lt;br /&gt;software components (oop++) in general.&lt;br /&gt;. OLE custom controls (OCXs, 1994)&lt;br /&gt;. Internet is a new use for&lt;br /&gt;OLE Custom Controls (ActiveX, 1996),&lt;br /&gt;-- gradually renamed all OLE technologies to ActiveX,&lt;br /&gt;except the compound document technology&lt;br /&gt;that was used in Microsoft Office.&lt;br /&gt;DCOM (Distributed COM, 1996)&lt;br /&gt;competed with CORBA as the model for&lt;br /&gt;code and service-reuse over the Internet.&lt;br /&gt;difficulties getting either of these &lt;br /&gt;over Internet firewalls .&lt;br /&gt;MTS run-time increased scalability, robustness,&lt;br /&gt;and simplified system management.&lt;/blockquote&gt;. ms`&lt;a href="http://en.wikipedia.org/wiki/Component_Object_Model"&gt;COM&lt;/a&gt; is often an umbrella term for&lt;br /&gt;OLE, OLE Automation, ActiveX, COM+ and DCOM .&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/viewer?a=v&amp;amp;q=cache:2lwMLYsWfywJ:www.cs.ucr.edu/%7Edberger/Documents/Presentations/com-intro.ppt"&gt;&lt;b&gt;[ com is oop++ ]&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;COM's architect"Anthony Williams:&lt;br /&gt;&lt;blockquote&gt;Object Architecture&lt;br /&gt;is concerned with Dealing With the Unknown&lt;br /&gt;and ensuring Type Safety in a&lt;br /&gt;Dynamically Extensible Class Library;&lt;br /&gt;also significant to com&lt;br /&gt;was clarifying what oop`Inheritance is,&lt;br /&gt;and knowing How To Use It .&lt;/blockquote&gt;Charlie Kindel 1997:&lt;br /&gt;&lt;blockquote&gt;(popular) oop =&lt;br /&gt;Polymorphism + (Some) Late Binding&lt;br /&gt;+ (Some) Encapsulation&lt;br /&gt;+ Inheritance&lt;br /&gt;&lt;br /&gt;Component Oriented Programming (cop) =&lt;br /&gt;Polymorphism + (Really) Late Binding&lt;br /&gt;+ (Real, Enforced) Encapsulation&lt;br /&gt;+ Interface Inheritance&lt;br /&gt;+ Binary Reuse” .&lt;/blockquote&gt;C++ supports only oop &lt;b&gt;not cop&lt;/b&gt;&lt;br /&gt;so, COM must additionally specify:&lt;br /&gt;&lt;blockquote&gt;* Execution environment options&lt;br /&gt;(so-called Apartments)&lt;br /&gt;* Inter-process Marshalling&lt;br /&gt;* Remote Object Activation mechanism and protocols&lt;br /&gt;* Threading models&lt;/blockquote&gt;&lt;blockquote&gt;. the C++ linkage model impedes&lt;br /&gt;binary distribution and reuse .&lt;br /&gt;. by using shared object linking,&lt;br /&gt;the lack of binary standardisation&lt;br /&gt;means there is an interoperability problem .&lt;br /&gt;C++ lacks binary encapsulation:&lt;br /&gt;ie, while it supports separation of&lt;br /&gt;interface and implementation,&lt;br /&gt;it's only at the syntax level&lt;br /&gt;– not at the binary level.&lt;br /&gt;implementation changes are “seen” by clients.&lt;/blockquote&gt;&lt;b&gt;com provides what c++ is missing:&lt;/b&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;A “substrate” &lt;/b&gt;for building re-usable components.&lt;br /&gt;. Interfaces are defined in COM IDL&lt;br /&gt;(IDL + COM extensions for inheritance and polymorphism)&lt;br /&gt;&lt;b&gt;OS Neutral &lt;/b&gt;and (nearly) &lt;b&gt;Language neutral:&lt;/b&gt;&lt;br /&gt;. can be used from any language that can&lt;br /&gt;generate/grok vtbl’s and vptrs.&lt;br /&gt;. a packed bit field is returned&lt;br /&gt;with every COM access .&lt;br /&gt;&lt;b&gt;categories&lt;/b&gt; define&lt;br /&gt;an implementation of a given interface&lt;br /&gt;that meets some set of constraints .&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9119030786033085720?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9119030786033085720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/brief-history-of-compound-documents.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9119030786033085720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9119030786033085720'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/brief-history-of-compound-documents.html' title='a brief history of compound documents'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-941152373256966904</id><published>2011-06-28T21:34:00.000-07:00</published><updated>2011-06-28T21:34:46.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>cross-platform task mgt survey</title><content type='html'>&lt;i&gt;5.4: &lt;b&gt;adde&lt;/b&gt;/universal view of task mgt:&lt;/i&gt;&lt;br /&gt;. compare the various ways provided by&lt;br /&gt;{mac, pc, linux} to &lt;b&gt;see what's running&lt;/b&gt;:&lt;br /&gt;&lt;b&gt;# mac:&lt;/b&gt;&lt;br /&gt;. a dock contains your favorite and active apps;&lt;br /&gt;the dock marks currently active apps;&lt;br /&gt;so, it might be called an app.bar .&lt;br /&gt;. the [all windows].key shows all windows&lt;br /&gt;in a non-overlapping arrangement;&lt;br /&gt;the [current app's windows].key shows a similar&lt;br /&gt;non-overlapping arrangement of &lt;br /&gt;just those windows owned by the current app .&lt;br /&gt;. &lt;a href="http://en.wikipedia.org/wiki/Expos%C3%A9_%28Mac_OS_X%29"&gt;mission control&lt;/a&gt; combines the&lt;br /&gt;[all windows].key with the &lt;br /&gt;[current app's windows]`function&lt;br /&gt;by not only showing all windows in a&lt;br /&gt;non-overlapping arrangement&lt;br /&gt;but also grouping windows together&lt;br /&gt;according to which app they're owned by .&lt;br /&gt;&lt;b&gt;# pc, linux:&lt;/b&gt;&lt;br /&gt;. a taskbar has icons for each window;&lt;br /&gt;press an icon to bring its window to the front .&lt;br /&gt;&lt;b&gt;# pc (group similar taskbar buttons):&lt;/b&gt;&lt;br /&gt;. the taskbar has an icon for each app&lt;br /&gt;and the effect of pressing on one&lt;br /&gt;depends on how many windows that app has open:&lt;br /&gt;if just 1 window, it brings that window to the front;&lt;br /&gt;for many windows, &lt;br /&gt;it shows a menu of that app's current windows;&lt;br /&gt;the user selects one, and that window comes forward .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tabbing:&lt;/b&gt;&lt;br /&gt;. all systems use the tab key for&lt;br /&gt;(with ctrl or command) to select a window .&lt;br /&gt;&lt;b&gt;# mac:&lt;/b&gt;&lt;br /&gt;show what's active in the dock;&lt;br /&gt;&lt;b&gt;# pc, linux:&lt;/b&gt;&lt;br /&gt;list what's in the taskbar .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;projectbar:&lt;/b&gt;&lt;br /&gt;. usually there's been one desktop&lt;br /&gt;containing all your windows;&lt;br /&gt;if there were more than one desktop&lt;br /&gt;then they could each hold&lt;br /&gt;project-specific windows .&lt;br /&gt;. for this I coined the term projectbar&lt;br /&gt;to match how taskbar is literally&lt;br /&gt;a bar of tasks .&lt;br /&gt;. mac's name for projectbar is Spaces,&lt;br /&gt;and its Dashboard involves the same idea .&lt;br /&gt;. Dashboard uses a key for popping up&lt;br /&gt;a 2nd desktop whose project is&lt;br /&gt;the use of widgets&lt;br /&gt;which are lightweight utilities&lt;br /&gt;like calculators and clocks,&lt;br /&gt;or data displays like weather,&lt;br /&gt;calender, and ticker tape .&lt;br /&gt;. another use of the Dashboard Space&lt;br /&gt;could be task mgt;&lt;br /&gt;where both {dock, taskbar}&lt;br /&gt;are kept on the 2nd desktop .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-941152373256966904?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/941152373256966904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/cross-platform-task-mgt-survey.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/941152373256966904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/941152373256966904'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/cross-platform-task-mgt-survey.html' title='cross-platform task mgt survey'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1283430988864062972</id><published>2011-06-28T20:57:00.000-07:00</published><updated>2011-06-28T20:57:10.558-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subfiles'/><category scheme='http://www.blogger.com/atom/ns#' term='journaled fs'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>documents as folder trees</title><content type='html'>&lt;i&gt;5.11: &lt;b&gt;adde&lt;/b&gt;/documents as folder trees:&lt;/i&gt;&lt;br /&gt;[4.21: &lt;br /&gt;. just as trees of folders can be merged,&lt;br /&gt;the same should apply to documents as well,&lt;br /&gt;with each subtitle being like a subfolder .]&lt;br /&gt;. that introduces a 3rd dimension of merging&lt;br /&gt;(volume, folder path, file);&lt;br /&gt;and,&lt;br /&gt;many &lt;b&gt;merge styles&lt;/b&gt;:&lt;br /&gt;&lt;b&gt;# mac style:&lt;/b&gt;&lt;br /&gt;. don't merge anything .&lt;br /&gt;&lt;b&gt;# pc style:&lt;/b&gt;&lt;br /&gt;. merge folders, replace files .&lt;br /&gt;&lt;b&gt;# versioned merge:&lt;/b&gt;&lt;br /&gt;. merge folders and avoid replacing files&lt;br /&gt;by renaming them instead&lt;br /&gt;with appended version numbers .&lt;br /&gt;. the versions numbers rotate through 0...n;&lt;br /&gt;so eventually data is lost .&lt;br /&gt;&lt;b&gt;# subfile merge:&lt;/b&gt;&lt;br /&gt;. merge folders and files;&lt;br /&gt;paragraphs are combined rather than replaced&lt;br /&gt;(default is new subsections are appended&lt;br /&gt;to older subsections).&lt;br /&gt;&lt;b&gt;# journaled merge:&lt;/b&gt;&lt;br /&gt;. this is like the subfile merge (above)&lt;br /&gt;except that there are instructions such as&lt;br /&gt;delete the nth paragraph of a subsection;&lt;br /&gt;or run a patch over it .&lt;br /&gt;[4.21: &lt;br /&gt;. the journal's files would pay attention to&lt;br /&gt;subtitle pathname&lt;br /&gt;and only then consider character position .&lt;br /&gt;. this is in contrast to the typical&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;{revision, version}* control system&lt;/a&gt;&lt;br /&gt;which measure all changes in terms of&lt;br /&gt;character position .]&lt;br /&gt;--&lt;br /&gt;. intra-document structuring is&lt;br /&gt;necessarily language-specific,&lt;br /&gt;except at the level of characters,&lt;br /&gt;whereas the unix way is tool reuse,&lt;br /&gt;and so the &lt;a href="http://en.wikipedia.org/wiki/Patch_%28Unix%29"&gt;patch tool&lt;/a&gt; must be&lt;br /&gt;language-agnostic .&lt;br /&gt;*:&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;revisions vs versions (terminology proposal):&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;# &lt;/b&gt;revisions are corrections or&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;efficiency enhancements;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;# &lt;/b&gt;versions are parameterized configurations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;for adapting to various situations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;or new design ideas .&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1283430988864062972?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1283430988864062972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/documents-as-folder-trees.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1283430988864062972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1283430988864062972'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/documents-as-folder-trees.html' title='documents as folder trees'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4451943162293108695</id><published>2011-06-28T19:42:00.000-07:00</published><updated>2011-06-28T19:42:19.808-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='translate'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>avoiding freezes with real concurrency</title><content type='html'>&lt;i&gt;5.21: 6.2: adda/translate/co&lt;/i&gt;&lt;br /&gt;there were 2 cases of &lt;b&gt;multi-tasking&lt;/b&gt;:&lt;br /&gt;&lt;b&gt;# gui reactor:&lt;/b&gt;&lt;br /&gt;. the multi-tasking done for gui response&lt;br /&gt;could really be done by&lt;br /&gt;frequent subroutine calls to the gui handler&lt;br /&gt;instead of swapping threads with it;&lt;br /&gt;because, its endless event loop is equivent to&lt;br /&gt;an endless number of brief loop body calls .&lt;br /&gt;&lt;b&gt;# time-slicing:&lt;/b&gt;&lt;br /&gt;. when a program is composed of threads (co.programs),&lt;br /&gt;it expects them to be time-sliced,&lt;br /&gt;so that, for instance,&lt;br /&gt;if there are several things to animate,&lt;br /&gt;each refresh of the screen is showing&lt;br /&gt;what appears to be concurrent activity .&lt;br /&gt;. unlike the gui-reactor case,&lt;br /&gt;there is no way to use a subroutine call for&lt;br /&gt;sharing cpu time with anonymous threads;&lt;br /&gt;because, generally they cannot be decomposed into&lt;br /&gt;an endless number of brief loop body calls .&lt;br /&gt;. a similar case is anonymous co.programming,&lt;br /&gt;where the user runs several programs at once;&lt;br /&gt;this situation is significantly unlike&lt;br /&gt;app-orchestrated co.programming because&lt;br /&gt;user-launched co.programs aren't aware of each other;&lt;br /&gt;so, even if c did support coroutines,&lt;br /&gt;they would not be of use in time-slicing here .&lt;br /&gt;5.22: &lt;br /&gt;. another place where programs can hang&lt;br /&gt;besides infinite looping and recursion,&lt;br /&gt;is waiting for devices to respond;&lt;br /&gt;the addx library designer needs to know&lt;br /&gt;where these hangups are,&lt;br /&gt;and not give tasks direct access to them .&lt;br /&gt;. instead,&lt;br /&gt;the sub is suspended until the wait is over;&lt;br /&gt;and control is given instead to gui reactions .&lt;br /&gt;[6.2:&lt;br /&gt;. it may be the case that&lt;br /&gt;&lt;b&gt;only hardware-based concurrency&lt;/b&gt; could provide&lt;br /&gt;the needed protection from &lt;b&gt;device freezes&lt;/b&gt;;&lt;br /&gt;that means the base language can't be just c,&lt;br /&gt;but involve c+posix, obj-c + gcd, or qt .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;5.29: web.adda/translate/co/&lt;b&gt;open concurrency api's&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. unix is a std open platform now,&lt;br /&gt;isn't there some concurrency api defined in posix?&lt;br /&gt;. an overview of user-level vs kernel-level&lt;br /&gt;and &lt;a href="http://www.cs.cf.ac.uk/Dave/C/node29.html#SECTION002911000000000000000"&gt;threads vs processes&lt;/a&gt;:&lt;br /&gt;. processes communicate via &lt;a href="http://www.cs.cf.ac.uk/Dave/C/node28.html"&gt;sockets&lt;/a&gt;&lt;br /&gt;&lt;b&gt;pos:&lt;/b&gt;&lt;br /&gt;. addx's primary use for threads is that&lt;br /&gt;the main thread is adde dishing up the gui,&lt;br /&gt;and it sends messages to a side thread&lt;br /&gt;for housing the apps that do the actual work .&lt;br /&gt;. while getting bogged down in posix idioms&lt;br /&gt;it occured to me that since my first target is mac,&lt;br /&gt;I should follow what they suggest&lt;br /&gt;in the way of concurrency primitives .&lt;br /&gt;...&lt;br /&gt;there's also &lt;a href="http://doc.qt.nokia.com/latest/threads-qtconcurrent.html"&gt;qt&lt;/a&gt;: &lt;br /&gt;both open, cross-platform and easier than posix .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4451943162293108695?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4451943162293108695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/avoiding-freezes-with-real-concurrency.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4451943162293108695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4451943162293108695'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/avoiding-freezes-with-real-concurrency.html' title='avoiding freezes with real concurrency'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1910904566268486658</id><published>2011-06-28T19:15:00.000-07:00</published><updated>2011-06-28T19:15:35.894-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>classification by superset decomposition</title><content type='html'>&lt;i&gt;5.15: &lt;b&gt;adda/oop/type cluster/&lt;/b&gt;&lt;br /&gt;templates for subtype association:&lt;/i&gt;&lt;br /&gt;[6.1: mis:&lt;br /&gt;&lt;blockquote&gt;"( . having types specifying which subset relations exist &lt;br /&gt;doesn't neatly show the relation of irrationals&lt;br /&gt;&lt;/blockquote&gt;)??&lt;br /&gt;irrationals are simply the reason&lt;br /&gt;why some reals are not Q's !&lt;br /&gt;. what is the purpose of knowing how they are related?&lt;br /&gt;isn't it just to know type compatibility?&lt;br /&gt;if you produce an irrational,&lt;br /&gt;you call it a real,&lt;br /&gt;and if you didn't want symbolics&lt;br /&gt;then you'd call it a float .]&lt;br /&gt;&lt;br /&gt;. the mgt for type clusters(eg numbers),&lt;br /&gt;may have some reusable code in that there are&lt;br /&gt;many type clusters in which the subtypes have&lt;br /&gt;values that are subsets of each other; eg,&lt;br /&gt;N subsets Z subsets Q subsets R subsets C .&lt;br /&gt;&lt;br /&gt;. number is also an example of there being&lt;br /&gt;&lt;i&gt;another way of describing subsets:&lt;/i&gt;&lt;br /&gt;&lt;b&gt;superset decomposition&lt;/b&gt;&lt;br /&gt;(showing how a set is composed of other sets).&lt;br /&gt;. saying which subset relations exist &lt;br /&gt;doesn't neatly show the relation of irrationals&lt;br /&gt;(ones not expressible as a ratio, and&lt;br /&gt;having an infinite and non-recurring expansion&lt;br /&gt;when expressed as a decimal).&lt;br /&gt;&lt;br /&gt;N = 0.. infinity;&lt;br /&gt;Z= {+1,-1}*N;&lt;br /&gt;Q = {Z/N, Z};&lt;br /&gt;&lt;br /&gt;irrationals = {pi, e, 2**(1/2), ...}:&lt;br /&gt;pi/4 =  +(^i=0...infinity| (-1)**i /(2i+1) )&lt;br /&gt;pi/2 =  *(^i=1...infinity| (2i)**2 /(2i)**2-1) )&lt;br /&gt;pi = 4 / (1+ 1**2 /( 3+ 2**2 /(5+ 3**2 /(...)))&lt;br /&gt;e = (1+1/infinity)**infinity .&lt;br /&gt;&lt;br /&gt;R = {Q, irrationals, repeaters}&lt;br /&gt;C =  {i*R + R, R} -- i = (-1)**(1/2)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1910904566268486658?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1910904566268486658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/classification-by-superset.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1910904566268486658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1910904566268486658'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/classification-by-superset.html' title='classification by superset decomposition'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1362529611699256939</id><published>2011-06-28T18:55:00.000-07:00</published><updated>2011-06-28T18:55:50.243-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='1st-class functions'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>1st-class functions and various environs</title><content type='html'>&lt;i&gt;&lt;b&gt;adda/oop/&lt;/b&gt;1st-class functions:&lt;/i&gt;&lt;br /&gt;5.16:&lt;br /&gt;. a function's owner is the environs in which&lt;br /&gt;the function's body is defined; [6.1:&lt;br /&gt;a top-level subprogram is owned by the library,&lt;br /&gt;and thereby has access to the standard lib' .]&lt;br /&gt;. most functions are owned by types:&lt;br /&gt;the type's body provides the environs;&lt;br /&gt;but 1st-class function support means that&lt;br /&gt;an aggregate's components may be a function,&lt;br /&gt;in which case, the agg is the owner,&lt;br /&gt;so the agg's body and its other components&lt;br /&gt;become the function's environs .&lt;br /&gt;&lt;i&gt;[5.18: clarification:&lt;/i&gt;&lt;br /&gt;. agg's can have bodies like Ada packages;&lt;br /&gt;and if the agg' body contains the function body&lt;br /&gt;only then does the agg' own the function .&lt;br /&gt;&lt;i&gt;5.31: 6.28:&lt;/i&gt;&lt;br /&gt;. the agg'component can also be&lt;br /&gt;a pointer to an external function;&lt;br /&gt;such a function then has no way to reach&lt;br /&gt;agg' components;&lt;br /&gt;conversely, Ada's stub declaration allows for&lt;br /&gt;an agg'owned function to be defined externally;&lt;br /&gt;it's still declared locally if not defined so,&lt;br /&gt;and declaration is what gives it local access,&lt;br /&gt;and a locality to call its own .]&lt;br /&gt;&lt;i&gt;[5.17:&lt;/i&gt;&lt;br /&gt;. an agg's components can be&lt;b&gt; addressed in 2 ways&lt;/b&gt;:&lt;br /&gt;&lt;i&gt;# directly:&lt;/i&gt;&lt;br /&gt;. a function it owns knows what's available&lt;br /&gt;and reaches an external x with (../x) .&lt;br /&gt;&lt;i&gt;# a filesystem approach:&lt;/i&gt;&lt;br /&gt;. the function can get a list of&lt;br /&gt;the names of surrounding components,&lt;br /&gt;just as a human asks a filesystem&lt;br /&gt;for a directory listing .&lt;br /&gt;--&lt;br /&gt;. a function's use of (self`name) could return&lt;br /&gt;the name of the component it's been assigned to ... 6.1:&lt;br /&gt;. it could be assigned to more than&lt;br /&gt;one component of its owner;&lt;br /&gt;so, that would have to be a list .]&lt;br /&gt;&lt;i&gt;5.31: deleting self:&lt;/i&gt;&lt;br /&gt;. can a function delete itself from a agg'?&lt;br /&gt;it can reach and modify other components&lt;br /&gt;from within the agg' it's a component of;&lt;br /&gt;so why not be able to delete itself?&lt;br /&gt;it could still run after such a deletion&lt;br /&gt;because it's an active process&lt;br /&gt;and each act'rec on the stack display&lt;br /&gt;is paired with a pointer to the associated code . [6.1:&lt;br /&gt;. one reason for deleting self could be&lt;br /&gt;a varying method pattern:&lt;br /&gt;it calls multiple agg'components,&lt;br /&gt;some of which may be self,&lt;br /&gt;and changes methods to meet new conditions .]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5.17: all accesses must be cap'based:&lt;/b&gt;&lt;br /&gt;[5.16:&lt;br /&gt;. how would an external function&lt;br /&gt;ask for access to the class var's?&lt;br /&gt;. it can't use ../ because it's&lt;br /&gt;local to an instance, whereas&lt;br /&gt;class var's are local to the type's body .&lt;br /&gt;. it could work like a filesystem,&lt;br /&gt;where functions can request a list&lt;br /&gt;of their owner's class var's .&lt;br /&gt;. the type's body allows access by&lt;br /&gt;populating the class's locals list&lt;br /&gt;with the addresses it wishes to share&lt;br /&gt;rather than leaving the list null ...]&lt;br /&gt;...&lt;br /&gt;. the idea of assignable functions&lt;br /&gt;having access to class var's&lt;br /&gt;must be integrated with a security model&lt;br /&gt;that considers who's asking for the access&lt;br /&gt;and who's affected by it .&lt;br /&gt;. it's not just a matter of selecting&lt;br /&gt;which locals are visible,&lt;br /&gt;but also deciding which functions &lt;br /&gt;can have that access:&lt;br /&gt;the filtering might be by function-type,&lt;br /&gt;function-authors, or function-libraries .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5.18: dimensions of environs:&lt;/b&gt;&lt;br /&gt;. a function.ptr assigned to an agg' component&lt;br /&gt;is just like when passed to a subprogram param;&lt;br /&gt;in either of these cases, &lt;br /&gt;a function body's own environ&lt;br /&gt;is not the same as caller's body .&lt;br /&gt;&lt;br /&gt;. there can also be structural environs&lt;br /&gt;(what agg'path was used for accessing&lt;br /&gt;a copy of the function's address).&lt;br /&gt;. when a call is made, the function gets a&lt;br /&gt;return address that is a shortcut to&lt;br /&gt;this scope path:&lt;br /&gt;main/sub/nth step/m-th step of sub.body(eg, a loop) .&lt;br /&gt;. that leads to the call's location&lt;br /&gt;which includes the data path needed to&lt;br /&gt;access the function:  [6.28: ...&lt;br /&gt;by looking on the stack's return address,&lt;br /&gt;and then looking at the code&lt;br /&gt;that launched that function call,&lt;br /&gt;we are finding the structural environs .]&lt;br /&gt;&lt;br /&gt;. some variants of lisp&lt;br /&gt;feature dynamic scope&lt;br /&gt;in which a called function can expect access to&lt;br /&gt;the caller's environ's .&lt;br /&gt;. is there any language that provides&lt;br /&gt;access to the structural environs?&lt;br /&gt;. lisp functions can also know&lt;br /&gt;who their caller is,&lt;br /&gt;and what their caller's code is .&lt;br /&gt;. it seems like the&lt;br /&gt;full generalization of that would be&lt;br /&gt;pointers to all related structures:&lt;br /&gt;the owner, the caller,&lt;br /&gt;the call or return point,&lt;br /&gt;and the path of caller's access to function .&lt;br /&gt;. practically though,&lt;br /&gt;the simple and safe way is&lt;br /&gt;accessing only what's available at compile time .&lt;br /&gt;. if the function wants to share the caller's locals,&lt;br /&gt;it can declare an inout param&lt;br /&gt;that callers need to fill;&lt;br /&gt;if the caller wants a function to share,&lt;br /&gt;it can take ownership of the function .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1362529611699256939?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1362529611699256939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/1st-class-functions-and-various.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1362529611699256939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1362529611699256939'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/1st-class-functions-and-various.html' title='1st-class functions and various environs'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6103845966090618068</id><published>2011-06-28T16:55:00.000-07:00</published><updated>2011-06-28T16:55:34.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>adopting oop features`round#1</title><content type='html'>&lt;i&gt;5.16: &lt;b&gt;adda/oop/&lt;/b&gt;integrating popular oop features:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. for each oop feature,&lt;br /&gt;adda has to show how it's done, &lt;br /&gt;or explain why it shouldn't be done&lt;br /&gt;(eg, insecure, ill-fitting, ...);&lt;br /&gt;eg, for oop's version of f(x), x`f, &lt;br /&gt;how is adda providing f with access to x ?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;where various oop styles differ:&lt;/b&gt;&lt;br /&gt;. popular oop assumes the use of references:&lt;br /&gt;all obj's are a ptr to a disposable heap obj;&lt;br /&gt;whereas, adda assumes direct access to value,&lt;br /&gt;ie, there's nothing to explicitely dispose of;&lt;br /&gt;and when an assignment is made,&lt;br /&gt;it happens to the value not a pointer .&lt;br /&gt;[6.1:&lt;br /&gt;. no garbage is generated because&lt;br /&gt;any function that returns an object&lt;br /&gt;does so through an inout parameter&lt;br /&gt;in which it receives from the caller&lt;br /&gt;the memory where the result will go .&lt;br /&gt;]&lt;br /&gt;. there are 4 modules used by oop:&lt;br /&gt;a type-mgt or class object&lt;br /&gt;and an instance object, &lt;br /&gt;each with a {const, var} section; [6.28:&lt;br /&gt;--&lt;br /&gt;anything known to be constant is sharable;&lt;br /&gt;it can be part of subprogram's code template&lt;br /&gt;instead of the subprogram activation record .]&lt;br /&gt;&lt;br /&gt;. functions of the form y = obj`f(x)&lt;br /&gt;are actually calling a procedure:&lt;br /&gt;f(input x,&lt;br /&gt;inout obj,&lt;br /&gt;inout y) )&lt;br /&gt;thereby giving the function 2 implicit parameters,&lt;br /&gt;represented in the method as the var's: y, and o:&lt;br /&gt;# y,&lt;br /&gt;as in y = f(x);&lt;br /&gt;. y represents the address where&lt;br /&gt;the return is being placed by f's caller .&lt;br /&gt;. the function then gets to reuse y's mem .&lt;br /&gt;# o,&lt;br /&gt;as in o`f(x);&lt;br /&gt;o is an object whose type defines f,&lt;br /&gt;and f has access to all of o's internals .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;adda's class vars:&lt;/b&gt;&lt;br /&gt;. the type's body is where methods are defined;&lt;br /&gt;this space can also declare variables&lt;br /&gt;which are then sharable by all methods,&lt;br /&gt;addressed in the usual unix way:&lt;br /&gt;../local . [5.31:&lt;br /&gt;. these var's are initialized at program startup,&lt;br /&gt;like those in an ada package body .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;where is a &lt;b&gt;local function's return&lt;/b&gt; directed?:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[6.1: intro:&lt;/i&gt;&lt;br /&gt;. oop's y = x`f means f can both modify x,&lt;br /&gt;and return things to y .&lt;br /&gt;. a local function here means&lt;br /&gt;local to an aggregate (an agg'owned function)&lt;br /&gt;where (y= x.f) or (y= x#f)&lt;br /&gt;can modify components of x, including itself,&lt;br /&gt;and then return something to y .]&lt;br /&gt;. the local function's return&lt;br /&gt;can be assumed to target y because&lt;br /&gt;if it wanted to operate on its owner,&lt;br /&gt;it would simply use ../ to access those parts; [5.16: 5.17: &lt;br /&gt;eg,&lt;br /&gt;b`= obj.f -- here, obj is an aggregate;&lt;br /&gt;and, one of its components is named f,&lt;br /&gt;which is a function with an implicit arg of&lt;br /&gt;potentially all of obj's other components;&lt;br /&gt;finally,&lt;br /&gt;f is in control of what gets assigned to (b);&lt;br /&gt;because f determines what (obj.f) eval's to;&lt;br /&gt;ie, obj itself is not what (b) is being assigned;&lt;br /&gt;obj is merely the source of the function&lt;br /&gt;which then provides the assignment's content .]&lt;br /&gt;[5.31:&lt;br /&gt;. the same reasoning applies to the usual&lt;br /&gt;type-owned functions, y`= x`f,&lt;br /&gt;they have the option of returning either the object&lt;br /&gt;or something entirely different;&lt;br /&gt;eg, x`++ -- this increments x, &lt;br /&gt;but then returns x's former value .]&lt;br /&gt;. the x`f form simply means that f has&lt;br /&gt;inout access to x .[6.1:&lt;br /&gt;(in the context of inheritance,&lt;br /&gt;f is a abstract function whose method is determined by&lt;br /&gt;the type that x belongs to,&lt;br /&gt;but this feature is not specific to the x`f form,&lt;br /&gt;it also applies to f(x)&lt;br /&gt;-- it even applies to a+b because&lt;br /&gt;both {a, b} share a common supertype&lt;br /&gt;that knows how to mix its subtypes) .]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5.18: composite messages:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;. obj'c allows for the composition of message-sends;&lt;br /&gt;eg, x`= [a g b]; [x f y]&lt;br /&gt;can be composed as [[a g b] f y]&lt;br /&gt;because sending a msg to an obj typically results in&lt;br /&gt;an obj pointer being returned;&lt;br /&gt;ie, [x g b] points at x;&lt;br /&gt;so, how does adda do that?&lt;br /&gt;&lt;br /&gt;x`g(b)`f(y) could work the same as obj'c's &lt;br /&gt;[[x g b] f y] . [5.31:&lt;br /&gt;. why wouldn't the parse be&lt;br /&gt;x`( g(b)`f(y) ) instead of&lt;br /&gt;( x`g(b) )`f(y) ?&lt;br /&gt;can the (f) in (x`f) be a variable instead a literal ?&lt;br /&gt;(f x) can be expressed as (v`=x; f@v);&lt;br /&gt;likewise, (x`f) could be (@x`@v) ?&lt;br /&gt;&lt;br /&gt;. the purpose of (x`f) was to emulate&lt;br /&gt;c's x++, and oop's x.f;&lt;br /&gt;in those cases only literals are needed,&lt;br /&gt;but obj'c has a call for variable msg's too .&lt;br /&gt;. a neater way than x`@v&lt;br /&gt;would be simply x`v,&lt;br /&gt;where v had been declared to be a pointer to symbol .&lt;br /&gt;. or use explicit parentheses:&lt;br /&gt;(expression returns pointer to obj)`(&lt;br /&gt;expression returns pointer to method symbol) .&lt;br /&gt;6.1:&lt;br /&gt;. while features should be complete&lt;br /&gt;to the point of orthogonal,&lt;br /&gt;this should not be at expense of&lt;br /&gt;unintuitive syntax;&lt;br /&gt;esp'ly for features that are used infrequently .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6103845966090618068?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6103845966090618068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/adopting-oop-featuresround1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6103845966090618068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6103845966090618068'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/06/adopting-oop-featuresround1.html' title='adopting oop features`round#1'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-2657109083334949543</id><published>2011-05-31T14:38:00.000-07:00</published><updated>2011-05-31T14:38:14.158-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><title type='text'>type constraint decl's</title><content type='html'>&lt;i&gt;5.18: &lt;b&gt;adda/&lt;/b&gt;type/constraint syntax:&lt;/i&gt;&lt;br /&gt;. the lang' needs a compact integrated way to&lt;br /&gt;indicate subrange;&lt;br /&gt;eg, i.Z(1...10) -- new Z constrained to 1..10 .&lt;br /&gt;. the parser rule could be that&lt;br /&gt;if the typemark is for a parameterized type&lt;br /&gt;then it expects a parameter;&lt;br /&gt;if it finds an unexpected parameter&lt;br /&gt;(ie, a parenthetical expression)&lt;br /&gt;then it can assume it's a subtype constraint .&lt;br /&gt;. as with functions, (@) can be used for&lt;br /&gt;indicating a symbol returning parenthetical;&lt;br /&gt;eg, i.Z@myConstraint;&lt;br /&gt;eg, i.paramizedType@arg@constraint .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-2657109083334949543?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/2657109083334949543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/type-constraint-decls.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2657109083334949543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2657109083334949543'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/type-constraint-decls.html' title='type constraint decl&apos;s'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-878120225279402157</id><published>2011-05-31T14:34:00.001-07:00</published><updated>2011-05-31T14:35:18.777-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='markup'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><title type='text'>markup and toc mirroring</title><content type='html'>&lt;i&gt;5.11: 5.31: adda/markup/&lt;b&gt;integrated markup&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. I had thought of the markup lang' as being&lt;br /&gt;part of the editor -- just as html&lt;br /&gt;is considered to be part a browser --&lt;br /&gt;but in keeping with the one-lang philosophy,&lt;br /&gt;the programming lang should include the&lt;br /&gt;markup lang' -- meta-level lang,&lt;br /&gt;as well as assembly -- low-level lang .&lt;br /&gt;. these levels can have unique syntax&lt;br /&gt;yet share as many qualities as possible .&lt;br /&gt;. by being part of the same standard,&lt;br /&gt;they are all easier to use and remember;&lt;br /&gt;and by not leaving a mode out,&lt;br /&gt;you avoid forcing people to roll their own;&lt;br /&gt;of course, if that's their interest,&lt;br /&gt;good openware should make it easier to do&lt;br /&gt;by providing a reusable kit .]&lt;br /&gt;&lt;i&gt;5.11: adda/markup/&lt;b&gt;toc mirroring&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. there are 2 ways to express nested subtitles:&lt;br /&gt;# containers:&lt;br /&gt;. the markup lang' has container tags:&lt;br /&gt;-- subtitle: [(], [)] --&lt;br /&gt;all titles within the container&lt;br /&gt;are nested within the container's title;&lt;br /&gt;nested titles shows up in the toc as being&lt;br /&gt;indented deeper than their enclosure's title .&lt;br /&gt;# toc's:&lt;br /&gt;. the table of contents (toc) is auto-generated&lt;br /&gt;from what is marked up as being subtitles;&lt;br /&gt;conversely,&lt;br /&gt;if the toc's indentation is changed;&lt;br /&gt;the documents markup will be auto-adjusted&lt;br /&gt;to actively reflect the toc's state,&lt;br /&gt;and auto-generate container markup .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-878120225279402157?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/878120225279402157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/markup-and-toc-mirroring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/878120225279402157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/878120225279402157'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/markup-and-toc-mirroring.html' title='markup and toc mirroring'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7735405944610539207</id><published>2011-05-31T14:26:00.000-07:00</published><updated>2011-05-31T14:26:37.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='enum'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><title type='text'>representing meta-values</title><content type='html'>&lt;i&gt;5.10: &lt;b&gt;adda/enums/&lt;/b&gt;the power of zero:&lt;/i&gt;&lt;br /&gt;. the system should be interested in&lt;br /&gt;reserving some values for representing&lt;br /&gt;the state of being undefined or out-of-range .&lt;br /&gt;. this though, can be done by system tagging;&lt;br /&gt;ie, every type could inherit from system&lt;br /&gt;to get a bit that indicates whether the var&lt;br /&gt;is in a well-defined state or not .&lt;br /&gt;. generally,&lt;br /&gt;there is no reservable value available:&lt;br /&gt;. most enum'value sequences start with zero&lt;br /&gt;because most value ranges have a value&lt;br /&gt;that is analogous to zero:&lt;br /&gt;you first ask if there is any value,&lt;br /&gt;if not then zero,&lt;br /&gt;else since there is a value,&lt;br /&gt;which one is it ?&lt;br /&gt;eg, {off:0, red:1, yellow:2, green:3};&lt;br /&gt;"(off) is the absence of a color,&lt;br /&gt;so "(off) would be represented by zero;&lt;br /&gt;[5.31: likewise,&lt;br /&gt;some enums have a special purpose for the last value too;&lt;br /&gt;so that can't be reserved either .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7735405944610539207?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7735405944610539207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/representing-meta-values.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7735405944610539207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7735405944610539207'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/representing-meta-values.html' title='representing meta-values'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-7965757284504161703</id><published>2011-05-31T14:12:00.000-07:00</published><updated>2011-05-31T14:12:21.517-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='serialization'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>explicitely expressable state</title><content type='html'>&lt;i&gt;5.10: adda/&lt;b&gt;images for every data value:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;5.4: 5.10: 5.30:&lt;/i&gt;&lt;br /&gt;. each value may be associated with&lt;br /&gt;&lt;b&gt;# an icon (iconic image):&lt;/b&gt;&lt;br /&gt;. optional .&lt;br /&gt;&lt;b&gt;# a symbol (linguistic image):&lt;/b&gt;&lt;br /&gt;--[5.31: ada calls this the image]&lt;br /&gt;. all types can be represented as text:&lt;br /&gt;eg, just as enum's have names for each value,&lt;br /&gt;and numbers have a sequence of digits,&lt;br /&gt;graphics have a matrix of color records,&lt;br /&gt;each of which is a list of tagged numbers:&lt;br /&gt;(red:1, green:2, blue:3).&lt;br /&gt;&lt;b&gt;# a digital value (representation);&lt;/b&gt;&lt;br /&gt;--[5.31: ada calls this the enum`value&lt;br /&gt;or the structure`representation]&lt;br /&gt;ie, some structure of bit arrays,&lt;br /&gt;where structuring can be done by&lt;br /&gt;pointers or arrays .&lt;br /&gt;[5.31: structures can be equal if they have&lt;br /&gt;the same type, and equal components;&lt;br /&gt;they can also be tested for less-than&lt;br /&gt;with components treated like string characters .]&lt;br /&gt;. a type may choose to hide its implementation;&lt;br /&gt;[@] addx/info'hiding vs blackbox binaries&lt;br /&gt;[5.31: however,&lt;br /&gt;the system can store snapshots of itself,&lt;br /&gt;with each object represented by&lt;br /&gt;a particular string of integers;&lt;br /&gt;which a private type can interpret in various ways .]&lt;br /&gt;&lt;i&gt;5.10: 5.30:&lt;/i&gt;&lt;br /&gt;. given the type streetlight.type =&lt;br /&gt;{off:0, red:1, yellow:2, green:3};&lt;br /&gt;the image of red is the text "(red);&lt;br /&gt;and its value is the integer: 1;&lt;br /&gt;. red could have an icon colored red .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-7965757284504161703?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/7965757284504161703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/explicitely-expressable-state.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7965757284504161703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/7965757284504161703'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/explicitely-expressable-state.html' title='explicitely expressable state'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-6348253946472058482</id><published>2011-05-31T14:01:00.000-07:00</published><updated>2011-05-31T14:01:17.925-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='compound doc&apos;s'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>control orientations and compound documents</title><content type='html'>&lt;i&gt;5.6: adda/oop/&lt;b&gt;the orientation space&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;--. this article explores how menus&lt;br /&gt;should work in compound documents,&lt;br /&gt;and how they relate to oop (obj'orientation) .&lt;br /&gt;5.6: 5.31: equivalent terminology systems:&lt;br /&gt;(user -- client&lt;br /&gt;, app -- server&lt;br /&gt;, menu -- type&lt;br /&gt;, document -- object&lt;br /&gt;).&lt;br /&gt;&lt;i&gt;5.6: 5.31: &lt;b&gt;control orientations&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;b&gt;# open structure:&lt;/b&gt;&lt;br /&gt;. text is an example of an open datatype:&lt;br /&gt;(it's an array of symbols encoded with ascii);&lt;br /&gt;any operation can be applied to this type&lt;br /&gt;as long as it results in the same structure .&lt;br /&gt;&lt;b&gt;# open interface:&lt;/b&gt;&lt;br /&gt;. only a particular set of operations can be applied;&lt;br /&gt;but the menu is a public standard;&lt;br /&gt;so, you can know ahead of time&lt;br /&gt;whether something is on the menu or not .&lt;br /&gt;&lt;b&gt;# proprietary:&lt;/b&gt;&lt;br /&gt;. neither the document structure nor the menus&lt;br /&gt;are public standards;&lt;br /&gt;so, only a particular app controls the object .&lt;br /&gt;&lt;i&gt;5.4: &lt;b&gt;compound documents&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. support of compound documents means that&lt;br /&gt;selecting multiple objects would result in&lt;br /&gt;a menu consisting of the intersection of&lt;br /&gt;the set of object`menus; 5.6:&lt;br /&gt;every object can tell you the menu it supports&lt;br /&gt;without having to adopt an interface .&lt;br /&gt;5.31:&lt;br /&gt;. if mac.finder were a compound document,&lt;br /&gt;file`info would link not only to the owning'app&lt;br /&gt;but also to that app's select-all menu .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-6348253946472058482?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/6348253946472058482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/control-orientations-and-compound.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6348253946472058482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/6348253946472058482'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/control-orientations-and-compound.html' title='control orientations and compound documents'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4455801910615268476</id><published>2011-05-30T17:40:00.000-07:00</published><updated>2011-05-30T17:40:32.811-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABI'/><category scheme='http://www.blogger.com/atom/ns#' term='Qubes'/><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>standard abi's motivation</title><content type='html'>&lt;i&gt;5.18: addx/&lt;b&gt;standard abi/motivation:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;background:&lt;/b&gt;&lt;br /&gt;. the typical example of mistaken expectation&lt;br /&gt;is when an url acts like a script .&lt;br /&gt;. many apps have input limitations&lt;br /&gt;such as when a browser treats certain url's like scripts .&lt;br /&gt;. a commandline could be given what you think is a filename&lt;br /&gt;but because of expectations about filename limitations&lt;br /&gt;a filename can be interpreted as a series of commands .&lt;br /&gt;. this wouldn't happen if unix had&lt;br /&gt;a common abi (app'binary interface);&lt;br /&gt;because, instead of passing the file's name as text&lt;br /&gt;(a form of screen scraping)&lt;br /&gt;it could be passing an obj type-tagged as a filename&lt;br /&gt;and then filename limitations become irrelevant .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.15?: news.cyb/sec/&lt;b&gt;qubes/Qlipper&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;Larry McCay April 15, 2011 2:52 AM`&lt;br /&gt;&lt;a href="http://theinvisiblethings.blogspot.com/2011/03/partitioning-my-digital-life-into.html"&gt;comment on [The Invisible Things Lab's blog]/&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;A Qlipper app could be introduced&lt;br /&gt;to sanitize and add the appropriate context.&lt;br /&gt;Sanitizing makes sure &lt;br /&gt;what you copied is what you expected&lt;br /&gt;and the context is used to&lt;br /&gt;direct within the target Qubes domains.&lt;/blockquote&gt;&lt;i&gt;&lt;b&gt;Joanna&lt;/b&gt; @Larry:&lt;/i&gt;&lt;br /&gt;&lt;blockquote&gt;. a "sanitizer" must know the limitations of the destination app... .&lt;/blockquote&gt;--&lt;br /&gt;. this is another example of why an abi&lt;br /&gt;is needed:&lt;br /&gt;. what qubes has to do to get vm's communicating&lt;br /&gt;is for each os to support a clipboard&lt;br /&gt;that qubes can translate to a file&lt;br /&gt;that is then sent over the intranet .&lt;br /&gt;. an os's clipboard is understood as&lt;br /&gt;supporting certain data types&lt;br /&gt;with a certain type-tagging convention .&lt;br /&gt;. if qubes has to understand all this anyway&lt;br /&gt;it already does sanitizing by matching types&lt;i&gt; [5.18:&lt;/i&gt;&lt;br /&gt;(though it could help by checking for&lt;br /&gt;malformed html and illegal unicodes); ]&lt;br /&gt;but, because os's don't provide a common abi,&lt;br /&gt;they are reduced to supporting only&lt;br /&gt;some common text-based standards&lt;br /&gt;like ascii, unicode, or html&lt;i&gt; [5.18:&lt;/i&gt;&lt;br /&gt;whereas, a common abi would also support&lt;br /&gt;a binary version of a complete programming lang',&lt;br /&gt;meaning that instead of just being text,&lt;br /&gt;the code was parsed into a syntax tree;&lt;br /&gt;and native functions were represented by codes&lt;br /&gt;that are read more quickly than text .&lt;br /&gt;. and,&lt;br /&gt;when copying abi code from the pasteboard,&lt;br /&gt;dom0 would be able to read and understand&lt;br /&gt;the implicit capabilities of that code .]&lt;br /&gt;. without an abi, qubes must have &lt;br /&gt;apps communicating via a screen scraper;&lt;br /&gt;but that's ok, because,&lt;br /&gt;the whole point of security by isolation&lt;br /&gt;is that we can never expect to&lt;br /&gt;completely protect app's from being&lt;br /&gt;hung by their own naivety;&lt;br /&gt;what we can do is protect good apps&lt;br /&gt;from being hung by bad ones .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4455801910615268476?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4455801910615268476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/standard-abis-motivation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4455801910615268476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4455801910615268476'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/standard-abis-motivation.html' title='standard abi&apos;s motivation'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-4952187551586047151</id><published>2011-05-30T17:24:00.000-07:00</published><updated>2011-05-30T17:24:17.025-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.qt'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.unix'/><title type='text'>info'hiding vs blackbox binaries</title><content type='html'>&lt;i&gt;5.10:  &lt;b&gt;addx&lt;/b&gt;/info'hiding vs blackbox binaries:&lt;/i&gt;&lt;br /&gt;. info'hiding means being able to reuse a modules&lt;br /&gt;without having access to the module`body;&lt;br /&gt;by accessing only the module`header .&lt;br /&gt;. only the linker needs the bodies of&lt;br /&gt;a program and the modules it uses .&lt;br /&gt;. the bodies are blackboxes:&lt;br /&gt;usable but unviewable,&lt;br /&gt;protecting both trade secrets&lt;br /&gt;and unintended reuse or adaptation .&lt;br /&gt;. addx's intent is simply to warn coders&lt;br /&gt;that the implementation could change;&lt;br /&gt;ie, if you rely on impl'details,&lt;br /&gt;you can't expect easy updates;&lt;br /&gt;instead,&lt;br /&gt;you'd have to rewrite your code&lt;br /&gt;in order for it to work with any new impl'details .&lt;br /&gt;&lt;br /&gt;. addx does allow code obfuscation&lt;br /&gt;since you can easily change names to nonsense;&lt;br /&gt;on the other hand,&lt;br /&gt;the user is a new co.maintainer of your code,&lt;br /&gt;and can easily rename them again&lt;br /&gt;to match ongoing understanding of their roles .&lt;br /&gt;&lt;br /&gt;. as for binary black boxes,&lt;br /&gt;adda compiles to c, and then to native binary,&lt;br /&gt;but addx should't run a binary unless&lt;br /&gt;either adda compiled it;&lt;br /&gt;or, there's some other way to trust it .&lt;br /&gt;&lt;br /&gt;. if there was some secure way to know&lt;br /&gt;that the binary on my machine&lt;br /&gt;was actually generated by&lt;br /&gt;an untampered adda on your machine&lt;br /&gt;then blackbox modules could be consistent with&lt;br /&gt;the addx security model .&lt;br /&gt;&lt;br /&gt;. another way to support blackbox binaries&lt;br /&gt;is for addx to know of a secure website&lt;br /&gt;where it could find such adda products .&lt;br /&gt;. that could, however, bring&lt;br /&gt;new complexity to the security problem:&lt;br /&gt;each time you trust a website&lt;br /&gt;that's another time you have to ask:&lt;br /&gt;"(has that site been cracked recently?)&lt;br /&gt;. by staying with the openware model,&lt;br /&gt;you need be trusting only your platform&lt;br /&gt;(the os, and other apps installed).&lt;br /&gt;&lt;br /&gt;. some mutually-trusted 3rd party&lt;br /&gt;could accept code and compile it to binaries;&lt;br /&gt;then commercial interests would be assured privacy;&lt;br /&gt;and trusting users would be assured&lt;br /&gt;that this binary was generated by adda,&lt;br /&gt;while non-trusting users&lt;br /&gt;would be free to download pure openware .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;5.10: todo.addx/&lt;b&gt;making openware usable:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. an advantage of addx being openware&lt;br /&gt;is that it minimizes trust requirements;&lt;br /&gt;eg, if you're on Apple's mac,&lt;br /&gt;the only thing you have to trust&lt;br /&gt;is Apple's xcode compiler .&lt;br /&gt;&lt;br /&gt;. if addx is built by mac's xcode&lt;br /&gt;then xcode should be easy to get;&lt;br /&gt;will it always ship with every new mac?&lt;br /&gt;... in the qt crossplatform ide doc's&lt;br /&gt;they assume xcode will always be&lt;br /&gt;right at your finger tips .&lt;br /&gt;yet, new versions require payment;&lt;br /&gt;and the code base is getting huge;&lt;br /&gt;so, if it's unused by most mac fans&lt;br /&gt;why cut another entire dvd for every unit ?&lt;br /&gt;&lt;br /&gt;addx should written in such a way that&lt;br /&gt;the code can be compiled with&lt;br /&gt;easy to get tools .&lt;br /&gt;. for those who want a completely&lt;br /&gt;native mac app,&lt;br /&gt;some of addx will need to be&lt;br /&gt;compiled with xcode .&lt;br /&gt;. therefore, &lt;br /&gt;they will need to download atleast a small binary&lt;br /&gt;or get xcode .&lt;br /&gt;&lt;br /&gt;. this small module should allow them&lt;br /&gt;to build extensions;&lt;br /&gt;so then most of their system&lt;br /&gt;is still modifiable by them&lt;br /&gt;yet is native code rather than addm .&lt;br /&gt;&lt;br /&gt;xcode's lang is obj'c,&lt;br /&gt;and that provides dynamic linking;&lt;br /&gt;but does it bind gcc binaries ?&lt;br /&gt;gcc itself has obj'c,&lt;br /&gt;but xcode is no longer using gcc;&lt;br /&gt;it uses clang . is clang free ? [..., yes .]&lt;br /&gt;[5.30: anyway,&lt;br /&gt;the plan for now is as was originally:&lt;br /&gt;the source is meant to be compiled all at once,&lt;br /&gt;and subsequent scripting is done with addm .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;5.10: pos.addx/&lt;b&gt;qt on mac decreases security:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. I'm assuming that adda can protect my code&lt;br /&gt;from abusing qt's large library;&lt;br /&gt;and, qt itself reduces bugs by being easy to use .&lt;br /&gt;. it's also a popular code base with a lot of eyes,&lt;br /&gt;but one disadvantage with being popular on Windows&lt;br /&gt;is that it will be worth more to malware writers .&lt;br /&gt;. by requiring the qt codebase,&lt;br /&gt;addx might be adding to a platform's vulnerability .&lt;br /&gt;sharing a runtime:&lt;br /&gt;. another possibility is that&lt;br /&gt;if any other qt app's are run alongside addx,&lt;br /&gt;they may be able to violate addx`privacy&lt;br /&gt;so then addx can't make any privacy claims&lt;br /&gt;to the user in this situation ?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;5.20: addx/&lt;b&gt;unix, KDE, and compon tech&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. I was recently baffled by this filename:&lt;br /&gt;"( dims of addx (unix KDE compon tech) );&lt;br /&gt;but, a review of the article put this together:&lt;br /&gt;. when saying unix was a dimension of addx,&lt;br /&gt;I was assuming linux was unix&lt;br /&gt;and unix was the future platform .&lt;br /&gt;. this article was pointing out that&lt;br /&gt;linux domination plans needed dev tools;&lt;br /&gt;and that, KDE was there for even beginners .&lt;br /&gt;. linux's support for components &lt;br /&gt;is a key to healthy competition and evolution .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-4952187551586047151?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/4952187551586047151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/infohiding-vs-blackbox-binaries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4952187551586047151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/4952187551586047151'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/infohiding-vs-blackbox-binaries.html' title='info&apos;hiding vs blackbox binaries'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8836278155920230920</id><published>2011-05-30T15:31:00.000-07:00</published><updated>2011-05-30T15:31:18.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='green processes'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>the state of scripting concurrency</title><content type='html'>&lt;i&gt;4.19: &lt;b&gt;adda/co/&lt;/b&gt;the state of scripting concurrency/intro:&lt;/i&gt;&lt;br /&gt;[5.30:&lt;br /&gt;. &lt;a href="http://stackoverflow.com/questions/280810/is-perl-worth-it"&gt;this excerpt from stackoverflow.com&lt;/a&gt;&lt;br /&gt;had me looking at concurrency again:]&lt;br /&gt;&lt;blockquote&gt;"( If you have programmed expertly in&lt;br /&gt;Perl Python and in Java for 10 years,&lt;br /&gt;then you'll probably write your program in Perl&lt;br /&gt;because you'll complete the program faster,&lt;br /&gt;the program will have fewer lines of code,&lt;br /&gt;and the language will stay more out of your way.&lt;br /&gt;If you are not an expert in Perl, Python, or Java,&lt;br /&gt;and you have to choose one of those languages,&lt;br /&gt;then I recommend that you choose Python.&lt;br /&gt;... &lt;a href="http://en.wikipedia.org/wiki/Global_Interpreter_Lock"&gt;except if&lt;/a&gt; threading is important (re: GIL)...)&lt;/blockquote&gt;&lt;b&gt;green threads and the need for GIL:&lt;/b&gt;&lt;br /&gt;[5.30:&lt;br /&gt;. processes are full programs running concurrently:&lt;br /&gt;each process has its own space for&lt;br /&gt;both variables and code;&lt;br /&gt;threads are like processes except that&lt;br /&gt;they share the locals and code&lt;br /&gt;of the process that spawned them .&lt;br /&gt;. threads and processes can be either&lt;br /&gt;native -- implemented by the os,&lt;br /&gt;or &lt;a href="http://en.wikipedia.org/wiki/Green_threads;"&gt;green&lt;/a&gt; -- impl'd by an app (eg, a scripting interpreter).&lt;br /&gt;Erlang provides a green process(vs thread),&lt;br /&gt;which is much more lightweight than a native process&lt;br /&gt;because it does share (read-only) code space .&lt;br /&gt;&lt;br /&gt;. a computer with multiple cores&lt;br /&gt;can be truly concurrent:&lt;br /&gt;doing more than one thing at the same time&lt;br /&gt;by contrast, timeslicing is virtual concurrency:&lt;br /&gt;giving each task a slice of computer time .&lt;br /&gt;. the GIL (Global Interpreter Lock)&lt;br /&gt;is a mutual exclusion lock&lt;br /&gt;that prevents true concurrency:&lt;br /&gt;insuring that app threads are timesliced,&lt;br /&gt;rathering than being mapped to multiple cores .&lt;br /&gt;. it's needed when the the interpreter,&lt;br /&gt;it's libraries, or its plugins&lt;br /&gt;are not thread-safe because of&lt;br /&gt;threads being able to share variables&lt;br /&gt;that aren't protected with atomic access:&lt;br /&gt;ie, being able to complete a read or write&lt;br /&gt;before having being interrupted by the timeslicer .&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.igvita.com/2008/11/13/concurrency-is-a-myth-in-ruby/"&gt;&lt;b&gt;Ruby's support for concurrency:&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;. IronRuby builds on top of .NET Threads,&lt;br /&gt;so they map 1-1 to OS-threads as well;&lt;br /&gt;JRuby does likewise on the JVM .&lt;/blockquote&gt;[5.30:&lt;br /&gt;. these &lt;a href="http://merbist.com/2011/02/22/concurrency-in-ruby-explained/"&gt;GIL-free variants of Ruby&lt;/a&gt; &lt;br /&gt;&lt;blockquote&gt;provide threads without any warranty:&lt;br /&gt;it's up to you to insure that&lt;br /&gt;all your dependencies are thread safe .&lt;/blockquote&gt;. &lt;a href="http://confreaks.net/videos/447-rubyconf2010-concurrency-rubies-plural"&gt;concurrency models supported by Ruby &lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;include Threads, Processes and&lt;br /&gt;Fibers (&lt;a href="http://en.wikipedia.org/wiki/Fiber_%28computer_science%29#Fibers_and_coroutines"&gt;systems-level coroutines&lt;/a&gt;).&lt;br /&gt;. other abstractions to consider include &lt;br /&gt;Coroutines, Actor Models, Petri Nets, Process Algebras&lt;br /&gt;(particularly CSP and the Pi-Calculus),&lt;br /&gt;Software Transactional Memory&lt;br /&gt;and distributed Map/Reduce algorithms&lt;br /&gt;-- see Go, Occam-Pi, Clojure and Erlang;&lt;br /&gt;&lt;a href="http://www.slideshare.net/ehuard/concurrency-rubies-plural"&gt;Ruby could impl' these&lt;/a&gt; with current libraries;&lt;br /&gt;eg, EventMachine or RevActor .&lt;/blockquote&gt;. &lt;a href="http://merbist.com/2011/02/22/concurrency-in-ruby-explained/#comment-2051"&gt;Ruby needs a standard actor/executor API&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;-- not platform-specific impl's of actors .&lt;/blockquote&gt;&lt;br /&gt;. &lt;a href="http://merbist.com/2011/02/22/concurrency-in-ruby-explained/#comment-2046"&gt;the future of high performance concurrency&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;is libdispatch/GCD;&lt;br /&gt;for the java/scala folks, there's &lt;a href="http://hawtdispatch.fusesource.org/"&gt;HawtDispatch&lt;/a&gt;:&lt;br /&gt;(&lt;a href="http://github.com/headius/jcd"&gt;JRuby's port of that is at github/jcd&lt;/a&gt;).&lt;br /&gt;. HawtDispatch is a thread pooling and&lt;br /&gt;NIO event notification framework API&lt;br /&gt;modeled after the Apple`libdispatch API&lt;br /&gt;that powers Apple's Grand Central Dispatch (GCD).&lt;br /&gt;It allows you to easily develop&lt;br /&gt;multi-threaded applications&lt;br /&gt;without the usual problems .&lt;/blockquote&gt;]-5.30&lt;br /&gt;&lt;b&gt;python's gil:&lt;/b&gt;&lt;br /&gt;Juergen Brendel &lt;a href="http://blog.snaplogic.org/?p=94"&gt;argues against the GIL&lt;/a&gt;;&lt;br /&gt;Guido maintained &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=214235"&gt;the GIL is here to stay&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;until someone can prove its removal&lt;br /&gt;doesn't slow down single-threaded Python code.&lt;br /&gt;. the language doesn't require the GIL&lt;br /&gt;but, the CPython virtual machine&lt;br /&gt;that has historically been unable to shed it.&lt;br /&gt;it was shown that even on the platform&lt;br /&gt;with the fastest locking primitive (Windows at the time)&lt;br /&gt;it slowed down single-threaded execution&lt;br /&gt;nearly two-fold .&lt;br /&gt;. removing the GIL complicates life for&lt;br /&gt;extension module writers&lt;br /&gt;by precluding the use of global mutable data .&lt;br /&gt;There might also be changes in the Python/C API&lt;br /&gt;necessitated by the need to lock certain objects&lt;br /&gt;for the duration of a sequence of calls.&lt;/blockquote&gt;&lt;a href="http://smoothspan.wordpress.com/2007/09/14/guido-is-right-to-leave-the-gil-in-python-not-for-multicore-but-for-utility-computing/"&gt;&lt;b&gt;Bob Warfield 2007`analysis of gil:&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Guido is Right to Leave the GIL in Python,&lt;br /&gt;Not for Multicore but for Utility Computing&lt;br /&gt;considering large scalability issues&lt;br /&gt;in the world of SaaS, Web 2.0,&lt;br /&gt;and utility computing fabrics;&lt;br /&gt;eg, &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt;(elastic computing).&lt;br /&gt;. a concurrency capability based on threads&lt;br /&gt;has done nothing to access multiple machines&lt;br /&gt;-- for that you need socket-connected processes .&lt;br /&gt;. furthermore,&lt;br /&gt;a simple, safe and reliable concurrency language&lt;br /&gt;should be focused on a [green]process model,&lt;br /&gt;not a thread model.&lt;/blockquote&gt;[5.29:&lt;br /&gt;. concurrent programming has a bad reputation&lt;br /&gt;for being both buggy and undebuggable,&lt;br /&gt;but it's based on work with threads .&lt;br /&gt;5.30:&lt;br /&gt;. to be efficient and safe,&lt;br /&gt;a language needs to pervasively support&lt;br /&gt;green processes:&lt;br /&gt;a unit of concurrency that does share&lt;br /&gt;read-only mem like a thread does&lt;br /&gt;but does not share variable mem .&lt;br /&gt;. pervasive support means that&lt;br /&gt;not only is the standard library thread safe,&lt;br /&gt;but all reusable modules are also .]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bartoszmilewski.wordpress.com/2008/08/24/threads-dont-scale-processes-do/"&gt;&lt;b&gt;another way threads don't scale:&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;The fundamental problem with threads&lt;br /&gt;is that sharing requires locking&lt;br /&gt;which doesn’t scale (or compose),&lt;br /&gt;and is prone to races and deadlocks .&lt;br /&gt;Erlang features [green]processes&lt;br /&gt;where isolation is enforced by the language&lt;br /&gt;rather than the operating system .&lt;br /&gt;&lt;br /&gt;. Erlang is a functional language&lt;br /&gt;with strict copy semantics&lt;br /&gt;and with no pointers or references.&lt;/blockquote&gt;[. it is merely the semantics&lt;br /&gt;that are pass-by-copy;&lt;br /&gt;the impl'details involve&lt;br /&gt;read-only pass-by-reference .]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://erlangforsceptics.com/book/"&gt;Why don’t we all switch to Erlang?&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Messages have to be copied.&lt;br /&gt;You can’t deep-copy a large data structure&lt;br /&gt;without some performance degradation,&lt;br /&gt;and not all copying can be optimized away&lt;br /&gt;(it requires behind-the-scenes alias analysis).&lt;br /&gt;so, mainstream languages don’t abandon sharing;&lt;br /&gt;instead, they rely on programmer’s discipline&lt;br /&gt;or try to control aliasing.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8836278155920230920?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8836278155920230920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/state-of-scripting-concurrency.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8836278155920230920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8836278155920230920'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/state-of-scripting-concurrency.html' title='the state of scripting concurrency'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-9103750587400708138</id><published>2011-05-22T14:35:00.000-07:00</published><updated>2011-05-22T14:35:45.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='dev.mac'/><category scheme='http://www.blogger.com/atom/ns#' term='adde'/><category scheme='http://www.blogger.com/atom/ns#' term='menu'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>menu systems for compound documents</title><content type='html'>&lt;i&gt;4.2: &lt;b&gt;adde&lt;/b&gt;/menubar`contents:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;subdesktops:&lt;/b&gt;&lt;br /&gt;. a &lt;a href="http://en.wikipedia.org/wiki/Compound_document"&gt;compound document&lt;/a&gt; is one composed of&lt;br /&gt;trees and tables of hyperlinks, text,&lt;br /&gt;graphics, numbers, and any new types&lt;br /&gt;for which there are app's to drive them .&lt;br /&gt;. it's as if there are&lt;br /&gt;many app windows in a single document&lt;br /&gt;just as there are&lt;br /&gt;many app windows on a desktop;&lt;br /&gt;therefore,&lt;br /&gt;a compound document can be thought of&lt;br /&gt;as being desktop within a desktop,&lt;br /&gt;and could thus be called a subdesktop .&lt;br /&gt;. adde can then be called&lt;br /&gt;a subdesktop editor .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;review of mac`menubar:&lt;/b&gt;&lt;br /&gt;. there are various places to put a menubar:&lt;br /&gt;&lt;b&gt;# &lt;/b&gt;the mac`menubar is at the top of the display;&lt;br /&gt;it contains a menu belonging to&lt;br /&gt;whichever app is controling the current window;&lt;br /&gt;&lt;b&gt;# &lt;/b&gt;many non-mac systems have, instead,&lt;br /&gt;window-specific menu's:&lt;br /&gt;. the app's menu would be located at&lt;br /&gt;the top bar of each window belonging to that app;&lt;br /&gt;whereas the display's menubar would contain only&lt;br /&gt;system-wide menu's (eg, admin' functions,&lt;br /&gt;app's launchers, and a file finder) .&lt;br /&gt;[5.3:&lt;br /&gt;. the mac`menubar has a list of co.menus&lt;br /&gt;(co.menus are side-by-side,&lt;br /&gt;just as submenus are nested under other menus&lt;br /&gt;).&lt;br /&gt;&lt;i&gt;&lt;b&gt;mac's standard co.menus&lt;/b&gt; include:&lt;/i&gt;&lt;br /&gt;( (&lt;i&gt;system`name&lt;/i&gt;)-- about system, param's, updates;&lt;br /&gt;, (&lt;i&gt;app`name&lt;/i&gt;) -- about this app, param's, updates;&lt;br /&gt;, file -- interactions with perm'storage;&lt;br /&gt;, edit,format -- modify the currently open file;&lt;br /&gt;, view -- customze how content is displayed&lt;br /&gt;-- (doesn't modify the content);&lt;br /&gt;, (app-specific menus, ...)&lt;br /&gt;, window -- arrange or select the app's windows;&lt;br /&gt;, help -- for both system-wide, and app-specific .&lt;br /&gt;)&lt;br /&gt;. mac'menu's are expected to be complete&lt;br /&gt;in order to represent what the app does;&lt;br /&gt;&lt;i&gt;5.4:&lt;/i&gt; eg,&lt;br /&gt;mac`finder's window has a search box,&lt;br /&gt;but it also has this menu:&lt;br /&gt;finder`menu#file/find .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mac`menu#edit:&lt;/b&gt;&lt;br /&gt;[5.8:&lt;br /&gt;. mac uses the edit.menu for&lt;br /&gt;anything related to document modifications,&lt;br /&gt;including select, as well as {copy cut, paste};&lt;br /&gt;and, any service that optionally edits:&lt;br /&gt;eg, find(and perhaps replace),&lt;br /&gt;or spellcheck(and perhaps correct) .&lt;br /&gt;. however, there may be other co.menus&lt;br /&gt;that also provide edits;&lt;br /&gt;eg, mac's textedit has menu#format&lt;br /&gt;which modifies the selection's {font,style,...} .&lt;br /&gt;. another editing co.menu is used by vmware,&lt;br /&gt;(if you think of a virtual machine as a document);&lt;br /&gt;vmware`menu#[virtual machine] is used for&lt;br /&gt;pref's that apply only to the current document .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[5.3: 5.8: &lt;b&gt;a menu#edit for subdesktops&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. mac provides 2 ways to select data:&lt;br /&gt;# edit#menu/select all&lt;br /&gt;# use the mouse to define a subrange .&lt;br /&gt;. therefore,&lt;br /&gt;because subdesktops are compound doc's,&lt;br /&gt;with a variety of datatypes combined;&lt;br /&gt;there are more ways than [select all]&lt;br /&gt;to select things by menu:&lt;br /&gt;you can also subrange by type .&lt;br /&gt;. whether for simple or compound doc's,&lt;br /&gt;there should be a [select some] item&lt;br /&gt;in which a given truth function can define&lt;br /&gt;a subrange of the {moused, typed} selection .&lt;br /&gt;. in sum, selection subrange provides,&lt;br /&gt;for each type in the current document,&lt;br /&gt;a checkbox and an optional constraint parameter;&lt;br /&gt;eg,&lt;br /&gt;[x] is .txt except [find "(todo)]&lt;br /&gt;[ ] is .jpg except [ null ] .&lt;br /&gt;&lt;br /&gt;. this can be integrated with the&lt;br /&gt;[select all] like so:&lt;br /&gt;[select all] brings up the&lt;br /&gt;[select some] dialog,&lt;br /&gt;showing you the list of types&lt;br /&gt;with all possible types selected;&lt;br /&gt;so if no subrange constraints are needed&lt;br /&gt;then just pressing enter&lt;br /&gt;works like [select all].&lt;br /&gt;. if the new user doesn't appreciate a dialog,&lt;br /&gt;the dialog can have a checkbox to&lt;br /&gt;"( map this [select some].dialog&lt;br /&gt;to command-shift-A ).&lt;br /&gt;&lt;br /&gt;. the currently moused selection&lt;br /&gt;is mirrored in the menu selection:&lt;br /&gt;if a selection is already made,&lt;br /&gt;the [select some] dialog will&lt;br /&gt;reflect that selection state&lt;br /&gt;by checkmarking only the types&lt;br /&gt;that are currently selected .&lt;br /&gt;]-5.8&lt;br /&gt;&lt;i&gt;[5.4: &lt;b&gt;the dynamic menu&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;5.4: 5.9:&lt;br /&gt;. mac`menus can have dynamic content:&lt;br /&gt;ie, they will grey-out any menu items&lt;br /&gt;that aren't applicable to the current selection .&lt;br /&gt;. fully dynamic menus can also&lt;br /&gt;add and remove submenus .&lt;br /&gt;. compound doc's have document-specific&lt;br /&gt;combinations of datatypes;&lt;br /&gt;therefore, fully dynamic menus are required&lt;br /&gt;in order to display all the type-specific menus&lt;br /&gt;of all the datatypes contained in the current doc'.&lt;br /&gt;[5.10:&lt;br /&gt;. if mac`menus weren't fully dynamic&lt;br /&gt;then adde's mac`menu could be for adde-wide operations&lt;br /&gt;and then the edit.menu would have a&lt;br /&gt;[type-specific operations ...] item&lt;br /&gt;that would open an adde-designed menu system&lt;br /&gt;which can then support full dynamism . &lt;br /&gt;&lt;br /&gt;&lt;i&gt;[5.4: 5.6: 5.8: &lt;b&gt;merging app menus&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. there are several ways in which&lt;br /&gt;the menus of a doc's datatypes&lt;br /&gt;are merged into a single menu system:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# simple:&lt;/b&gt;&lt;br /&gt;. a submenu is named by type,&lt;br /&gt;and selecting that command will then&lt;br /&gt;be applied to components of that type only;&lt;br /&gt;other types will be ignored .&lt;br /&gt;. when on the mac,&lt;br /&gt;these type-specific menus would be expected in&lt;br /&gt;menu#edit, along with [select all] .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# subtype polymorphism:&lt;/b&gt;&lt;br /&gt;. an example of this is the supertype: number;&lt;br /&gt;its menu items apply to all numeric subtypes&lt;br /&gt;(int,float, Q,Z,R,C) . [5.10:&lt;br /&gt;. the typical supertype menu&lt;br /&gt;would list any operations affecting all subtypes,&lt;br /&gt;and would then have submenus&lt;br /&gt;representing each subtype, and containing only&lt;br /&gt;subtype-specific operations .&lt;br /&gt;. subtyping is concerned with interfaces&lt;br /&gt;rather than implementations;&lt;br /&gt;so, if a float happens to have an integer value&lt;br /&gt;it retags itself as being an int;&lt;br /&gt;however, since ints are a subset of floats&lt;br /&gt;something constrained to int&lt;br /&gt;will never have a chance to&lt;br /&gt;similarly retag itself to float .]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# representational polymorphism:&lt;/b&gt;&lt;br /&gt;. representations include&lt;br /&gt;{ value implementations,&lt;br /&gt;, graphical image,&lt;br /&gt;, and programming language image&lt;br /&gt;( adda-representation text )&lt;br /&gt;} eg,&lt;br /&gt;. when numbers are selected,&lt;br /&gt;I can either bold-format a numeric's text,&lt;br /&gt;or I can add the numeric values . [5.11:&lt;br /&gt;. adde must either detect when types use text,&lt;br /&gt;or types must declare this;&lt;br /&gt;types may want to suggest a preference&lt;br /&gt;that would explain to the user&lt;br /&gt;why the preference exists;&lt;br /&gt;the user can overrule any preference&lt;br /&gt;after oking a purpose alert .]&lt;br /&gt;[5.10:&lt;br /&gt;. if an app is using text to represent its content&lt;br /&gt;then a text styling menu&lt;br /&gt;would apply to that app's datatype&lt;br /&gt;(of course, the other text-modifiers&lt;br /&gt;do not apply because&lt;br /&gt;the text represents a type state&lt;br /&gt;not just strings of characters).&lt;br /&gt;. the user may want to vary the text styling&lt;br /&gt;depending on whether the app's mode is:&lt;br /&gt;# show value's graphical image&lt;br /&gt;(might not use text)&lt;br /&gt;# show value's adda-representation&lt;br /&gt;(might be unavailable*)&lt;br /&gt;# show value's implementation .&lt;br /&gt;*:&lt;br /&gt;. while every datatype must be&lt;br /&gt;implemented in adda;&lt;br /&gt;that type's values are not required to&lt;br /&gt;have a written form (adda-representation);&lt;br /&gt;for example,&lt;br /&gt;&lt;i&gt;streetlight.type = (red, yellow, green);&lt;/i&gt;&lt;br /&gt;the intended image of the value &lt;i&gt;red&lt;/i&gt;&lt;br /&gt;is an icon that is colored red,&lt;br /&gt;the adda-representation of the value red&lt;br /&gt;is the text "(red);&lt;br /&gt;and the implementation of the value red&lt;br /&gt;is the integer: 1 (assuming the&lt;br /&gt;default encoding of enums starts with 1,&lt;br /&gt;and seeing that red is the first value).]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# generic polymorphism:&lt;/b&gt;&lt;br /&gt;. the [all types].submenu shows&lt;br /&gt;what operations of identical name&lt;br /&gt;are recognized by every type in the selection&lt;br /&gt;even if each type's authors had no idea&lt;br /&gt;that they were naming their functions the same . [5.11:&lt;br /&gt;. this would include the case of subtypes&lt;br /&gt;where a supertype's interface is shared;&lt;br /&gt;thus it involves supersets of subtype polymorphism .]&lt;br /&gt;]-5.4: 5.6: 5.8 .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[5.4: &lt;b&gt;the editable menu&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;mac`menus are not expected to be user-editable;&lt;br /&gt;but they can launch editable windows .&lt;br /&gt;. in adde's menu-editing mode,&lt;br /&gt;the user has access to 4 menu systems:&lt;br /&gt;# the original menu tree;&lt;br /&gt;# the original keymap;&lt;br /&gt;# the user's version of the menu tree,&lt;br /&gt;# the user's version of the keymap:&lt;br /&gt;. the keymap is a table representing the keyboard&lt;br /&gt;labeled to show each key's function .&lt;br /&gt;left hand . . . . right hand&lt;br /&gt;[][][][high].[] [].[high][][][]&lt;br /&gt;[][][][home].[] [].[home][][][]&lt;br /&gt;[][][][low ].[] [].[low ][][][]&lt;br /&gt;. it's colored to make it graphically obvious&lt;br /&gt;where the home key's row and columns are;&lt;br /&gt;and, users can change the graphics:&lt;br /&gt;the colors, background illustration,&lt;br /&gt;and the nested framing arrangements .&lt;br /&gt;. to stay quick, a text-version is loaded first,&lt;br /&gt;followed by the full graphics .&lt;br /&gt;. after ending adde's menu-editing mode,&lt;br /&gt;only the user's versions are shown .&lt;br /&gt;&lt;br /&gt;. in the original keymap, app`authors can show&lt;br /&gt;what they think the most popular functions are&lt;br /&gt;by placing them on the easiest-reached keys .[5.6:&lt;br /&gt;. user's can also have a library of keymaps,&lt;br /&gt;including author's map, current map,&lt;br /&gt;and any other user-designed maps .]&lt;br /&gt;&lt;br /&gt;. the style of interaction between {user, keymap}&lt;br /&gt;is user-selectable:&lt;br /&gt;# remindful interaction style:&lt;br /&gt;. when users are in command mode (vs text insert)&lt;br /&gt;typing any key brings the keymap into view,&lt;br /&gt;shows you what you just did, and waits for enter .&lt;br /&gt;# compact interaction style:&lt;br /&gt;. hitting a key fills the command box&lt;br /&gt;with the name of the function you just selected,&lt;br /&gt;and then the command box is waiting for&lt;br /&gt;either {esc, enter} to {stop,launch} the command). [5.6:&lt;br /&gt;. hitting enter on an empty command&lt;br /&gt;would show the keymap .]&lt;br /&gt;]-5.4&lt;br /&gt;. users may want both a menusystem&lt;br /&gt;and a keymap --(before now,&lt;br /&gt;I thought a keymap would be sufficient).&lt;br /&gt;. the keymap title bar has a list of&lt;br /&gt;the types of objects in the current selection; [5.8:&lt;br /&gt;but in the menubar this may be relegated to &lt;br /&gt;a submenu of menu#edit .]&lt;br /&gt;&lt;br /&gt;. users may want to place the app`menubar&lt;br /&gt;either in the display`menubar,&lt;br /&gt;or in the current window's menubar .[5.6:&lt;br /&gt;. this will be possible on any system;&lt;br /&gt;because, addx is acting as&lt;br /&gt;a system within a system:&lt;br /&gt;ie, it looks like it's being run by a vm player:&lt;br /&gt;each window into addx represents an addx desktop&lt;br /&gt;within which there are windows into adde documents .&lt;br /&gt;&lt;b&gt;summary of the window nesting:&lt;/b&gt;&lt;br /&gt;. mac display -&amp;gt;&lt;br /&gt;mac windows for a mac app named addx -&amp;gt;&lt;br /&gt;addx windows for addx app named adde -&amp;gt;&lt;br /&gt;app windows within an adde document .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[5.4: &lt;b&gt;hierarchical keymaps&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. the whole point of the keymap&lt;br /&gt;is that it flattens the menu hierarchy&lt;br /&gt;into a table of the user's choice;&lt;br /&gt;however,&lt;br /&gt;the existence of optional co.menus&lt;br /&gt;implies the need for hierarchies of tables:&lt;br /&gt;certain keys can be labeled to&lt;br /&gt;launch new co.menus;&lt;br /&gt;and then each optional co.menu item&lt;br /&gt;is mapped to a cell of the co.menu-specific table .&lt;br /&gt;. there could be room on the main table&lt;br /&gt;in which case&lt;br /&gt;optionality is expressed with grey-outs .&lt;br /&gt;. the purpose of a keymap`title.bar&lt;br /&gt;is indicate which table you selected;&lt;br /&gt;left-arrow brings you to previous one .]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-9103750587400708138?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/9103750587400708138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/menu-systems-for-compound-documents.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9103750587400708138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/9103750587400708138'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/menu-systems-for-compound-documents.html' title='menu systems for compound documents'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1890001408619055109</id><published>2011-05-22T14:33:00.000-07:00</published><updated>2011-05-22T14:33:51.445-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cap&apos;based'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>freedom from having to trust</title><content type='html'>&lt;i&gt;4.11: addx/&lt;b&gt;binary extensions&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. the system protects the user from the app coder;&lt;br /&gt;but for more freedom&lt;br /&gt;the app coders perhaps could write extensions&lt;br /&gt;(eg, for directly accessing some hardware [5.11:&lt;br /&gt;and incrementally evolving native code like Python .]&lt;br /&gt;).&lt;br /&gt;. the safety model would be the usual tho':&lt;br /&gt;the user has to ok a warning about&lt;br /&gt;modified systems having no warranty by addx;&lt;br /&gt;ie, the only reason for adding extensions&lt;br /&gt;is to sneak around addx's&lt;br /&gt;safety-minded limitations .&lt;br /&gt;. addx might also ask the user&lt;br /&gt;where they got this extension,&lt;br /&gt;and suggest how they could find&lt;br /&gt;similar functionality elsewhere .&lt;br /&gt;. the safe way to get software&lt;br /&gt;is open source code&lt;br /&gt;written specifically in adda's lang;&lt;br /&gt;which the addx system rewrites into&lt;br /&gt;code it knows is safe;&lt;br /&gt;. extensions don't allow this rewriting;&lt;br /&gt;rather, they are asking the system&lt;br /&gt;to install arbitrary code&lt;br /&gt;which can have full power over your system .&lt;br /&gt;. while such code may be&lt;br /&gt;protecting trade secrets; [5.11:&lt;br /&gt;adda code is guaranteed to protect&lt;br /&gt;your system because the permissions are&lt;br /&gt;per app', not per user (&lt;a href="http://en.wikipedia.org/wiki/Capability-based_security"&gt;capabilities&lt;/a&gt;);&lt;br /&gt;eg, your app can't write to your folders&lt;br /&gt;unless you ok a range of them .&lt;br /&gt;&lt;b&gt;mis:&lt;/b&gt;&lt;br /&gt;. this runs into the pc problem tho':&lt;br /&gt;just because we're adults here&lt;br /&gt;doesn't mean were not going to burn;&lt;br /&gt;and then people are using the addx name&lt;br /&gt;to lament how freedom is not idiot-proof;&lt;br /&gt;much better to just take the blue pill&lt;br /&gt;and keep people safe .&lt;br /&gt;. keep in mind freedom vs trust;&lt;br /&gt;the adda code can still do anything;&lt;br /&gt;but only the adda code can be trusted to&lt;br /&gt;tell you every rotten place &lt;br /&gt;it's about to take you to .&lt;br /&gt;"(can I search your folders?&lt;br /&gt;can I use the internet?&lt;br /&gt;do you want to ok what I send out? ...).]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1890001408619055109?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1890001408619055109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/freedom-from-having-to-trust.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1890001408619055109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1890001408619055109'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/freedom-from-having-to-trust.html' title='freedom from having to trust'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1013977547331840437</id><published>2011-05-22T14:28:00.000-07:00</published><updated>2011-05-22T14:28:52.881-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='addx'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>amazon-style component distribution</title><content type='html'>&lt;i&gt;4.15: news.&lt;b&gt;addx&lt;/b&gt;/alt's to the spikesource way:&lt;/i&gt;&lt;br /&gt;&lt;a href="http://itc.conversationsnetwork.org/shows/detail217.html"&gt;gillmor gang and spikesource&lt;/a&gt;:&lt;br /&gt;. &lt;a href="http://en.wikipedia.org/wiki/SpikeSource"&gt;spikesource&lt;/a&gt; is about selecting and testing&lt;br /&gt;stacks of openwares from the&lt;br /&gt;too-huge number of choices .&lt;br /&gt;. the idea of rss updates were suggested&lt;br /&gt;as a challenge to the spikesource design .&lt;br /&gt;--&lt;br /&gt;. it would take some safe architecture&lt;br /&gt;like addx or ms`.net &lt;br /&gt;for rss to be practically scalable:&lt;br /&gt;anyone could stack any combination of rss feeds&lt;br /&gt;because the architecture was designed to&lt;br /&gt;safely use and mix &lt;a href="http://en.wikipedia.org/wiki/Indie"&gt;indie&lt;/a&gt; works:&lt;br /&gt;. the architecture would auto'ly accept&lt;br /&gt;only high-level sources that it compiled itself,&lt;br /&gt;and it would auto'ly enforce modularity:&lt;br /&gt;making sure all the plugs &amp;amp; sockets fit each other .&lt;br /&gt;&lt;br /&gt;. the spikesource design has to&lt;br /&gt;hand-hold every piece it promotes,&lt;br /&gt;and is not making optimal use of user reviews .&lt;br /&gt;. it should be like amazon, but also sortable by&lt;br /&gt;reviewer reputation or expertise in field .&lt;br /&gt;(that may not be easy to do with volunteers,&lt;br /&gt;but that's where the value is ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1013977547331840437?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1013977547331840437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/amazon-style-component-distribution.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1013977547331840437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1013977547331840437'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/amazon-style-component-distribution.html' title='amazon-style component distribution'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-1118693533105953800</id><published>2011-05-02T16:36:00.000-07:00</published><updated>2011-05-02T16:36:01.564-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='llvm'/><category scheme='http://www.blogger.com/atom/ns#' term='addm'/><title type='text'>llvm's role in addx</title><content type='html'>&lt;i&gt;4.22: &lt;b&gt;addm/&lt;/b&gt;llvm's role in addx:&lt;/i&gt;&lt;br /&gt;. why can't addm just run llvm code?&lt;br /&gt;isn't elegance a dumb place to put an asm lang?&lt;br /&gt;&lt;b&gt;# c-friendly:&lt;/b&gt;&lt;br /&gt;the whole point of addm is to &lt;br /&gt;minimize dependencies;&lt;br /&gt;many systems have no llvm system&lt;br /&gt;but do have a c compiler .&lt;br /&gt;&lt;b&gt;# simplicity = involvement:&lt;/b&gt;&lt;br /&gt;. while llvm is all about efficiency,&lt;br /&gt;addx is about making computers accessible .&lt;br /&gt;. just as there can be&lt;br /&gt;cpu's designed for a language,&lt;br /&gt;addm's purpose as a virtual machine&lt;br /&gt;is to match the architecture of adda .&lt;br /&gt;. llvm does fit in as a module:&lt;br /&gt;it would be a tremendous achievement&lt;br /&gt;-- on par with Apple's llvm for obj'c --&lt;br /&gt;to have a way for directly translating&lt;br /&gt;from addm to llvm&lt;br /&gt;rather than the c link used now:&lt;br /&gt;adda -&gt; c -&gt; llvm .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-1118693533105953800?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/1118693533105953800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/llvms-role-in-addx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1118693533105953800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/1118693533105953800'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/llvms-role-in-addx.html' title='llvm&apos;s role in addx'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8760585856674980380</id><published>2011-05-02T16:31:00.000-07:00</published><updated>2011-05-02T16:31:50.155-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lang'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>perl(practical extraction &amp; report lang)</title><content type='html'>&lt;i&gt;4.19: adda/perl/&lt;b&gt;regular expressions:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. if &lt;a href="http://stackoverflow.com/questions/280810/is-perl-worth-it"&gt;Perl's syntax seems too cryptic&lt;/a&gt;&lt;br /&gt;keep in mind the built-in regular expressions .&lt;br /&gt;--&lt;br /&gt;. that degree of terseness should be optional;&lt;br /&gt;adda should have a tool that lets you&lt;br /&gt;write the expression in normal logic;&lt;br /&gt;if you do know perl regex coding,&lt;br /&gt;it should offer to expand that into adda logic&lt;br /&gt;to confirm what was written,&lt;br /&gt;and it should also convert back to regex&lt;br /&gt;for those who want to keep code compact .&lt;br /&gt;illustrations:&lt;br /&gt;-- the comments could also provide&lt;br /&gt;short and long examples of target strings .&lt;br /&gt;. that would be an intuitive but compact reminder&lt;br /&gt;of what the regex code meant .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.19: adda/lang"perl/&lt;b&gt;compared:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://therighttool.hammerprinciple.com/items/perl"&gt;hammerprinciple.com:&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Ranked highly in:&lt;/b&gt;&lt;br /&gt;# text processing&lt;br /&gt;# good library distribution mechanism.&lt;br /&gt;# too easy to write code in this language&lt;br /&gt;that looks like it does one thing&lt;br /&gt;but actually does something else;&lt;br /&gt;# tends to be terse .&lt;br /&gt;# annoying syntax,&lt;br /&gt;# many features which feel "tacked on".&lt;br /&gt;# for casual scripting of very small projects&lt;br /&gt;eg, write a command-line app&lt;br /&gt;. very flexible .&lt;br /&gt;&lt;b&gt;Ranked low in&lt;/b&gt;&lt;br /&gt;# very readable&lt;br /&gt;# built on a small core of orthogonal features&lt;br /&gt;# has a strong static type system&lt;br /&gt;# code is easy to maintain.&lt;br /&gt;# language is minimal&lt;br /&gt;# good for teaching children to write software&lt;br /&gt;# tends to be verbose&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://stackoverflow.com/questions/280810/is-perl-worth-it"&gt;guidance from stackoverflow.com:&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;Coming from C, Perl's syntax is easy;&lt;br /&gt;Perl offers more freedom to&lt;br /&gt;do the "wrong" thing,&lt;br /&gt;It's also prone to ugly code&lt;br /&gt;and "stupid programmer tricks".&lt;br /&gt;also "There's more than one way to&lt;br /&gt;muck it up" .&lt;br /&gt;As for the syntax, Larry Wall (Perl's creator)&lt;br /&gt;has described it as "diagonal"&lt;br /&gt;(in contrast to "orthogonal" languages).&lt;br /&gt;The syntax is designed to mirror the&lt;br /&gt;flexibility and expressiveness of natural language.&lt;br /&gt;. code like (next unless /foo/)&lt;br /&gt;can be slightly jarring at first&lt;br /&gt;but you quickly realize&lt;br /&gt;it flows much more smoothly.&lt;br /&gt;What looks like obscure Perl syntax&lt;br /&gt;is actually a regex pattern&lt;br /&gt;without the (programmer) overhead of&lt;br /&gt;wrapping it in a method call.&lt;br /&gt;&lt;br /&gt;But with discipline and coding standards,&lt;br /&gt;you can go far.&lt;br /&gt;(see Perl::critic on CPAN)&lt;br /&gt;. read  &lt;a href="http://www.amazon.com/Perl-Best-Practices-Damian-Conway/dp/0596001738"&gt;Conway's "Perl Best Practices"&lt;/a&gt;&lt;br /&gt;and &lt;a href="http://www.amazon.com/Perl-Testing-Developers-Ian-Langworth/dp/0596100922"&gt;Perl Testing&lt;/a&gt;&lt;br /&gt;(the Perl community has a VERY strong testing culture).&lt;br /&gt;and check your code with&lt;br /&gt;perl::tidy .&lt;br /&gt;This will help to keep everyone&lt;br /&gt;writing in a similar fashion.&lt;br /&gt;. run a smoke test with Critic on committed code;&lt;br /&gt;Test::Perl::Critic goes in your t/ directory&lt;br /&gt;with all your other tests .&lt;br /&gt;&lt;br /&gt;. see the PerlMonks site,&lt;br /&gt;your local Perl user group&lt;br /&gt;and The Perl Review magazine.&lt;br /&gt;&lt;br /&gt;. see the great tools &amp;amp; code on CPAN &lt;br /&gt;-- CPAN is the most comprehensive&lt;br /&gt;open source code repository of any language;&lt;br /&gt;most of the code you need to write&lt;br /&gt;has already been written and is available,&lt;br /&gt;searchable and easy to install, from CPAN,&lt;br /&gt;-- you will like how productive&lt;br /&gt;this lang makes you --&lt;br /&gt;Perl is an amazingly good choice when&lt;br /&gt;you are writing a lot of "glue"&lt;br /&gt;that has to talk to a bunch of&lt;br /&gt;disparate systems or work with text.&lt;br /&gt;In many ways, &lt;br /&gt;my favorite platform is CPAN.&lt;br /&gt;Perl just happens to be the language you have to use&lt;br /&gt;to pull together the modules in CPAN.&lt;br /&gt;The ability to just 'get stuff done' is dramatic&lt;br /&gt;when you compare it to even&lt;br /&gt;trying to figure out the API&lt;br /&gt;for an equivalent chunk of code&lt;br /&gt;in a more traditional high level language like Java.&lt;br /&gt;A large part of that power comes from&lt;br /&gt;Perl's initially-strange-seeming&lt;br /&gt;'do what i mean' semantics.&lt;br /&gt;. Perl is the most valuable tool&lt;br /&gt;in any programmer's toolbox.&lt;br /&gt;&lt;br /&gt;. "state of the art" modules:&lt;br /&gt;# Moose - a meta object protocol for Perl&lt;br /&gt;it means much of Perl6 OO is available now .&lt;br /&gt;# DBIx::Class&lt;br /&gt;&lt;br /&gt;* learning Perl5 now prepares you for &lt;a href="http://pugscode.org/"&gt;Perl6&lt;/a&gt;.&lt;br /&gt;- designed to become the lingua franca&lt;br /&gt;of computer languages&lt;br /&gt;Larry Wall has synthesised the best features of&lt;br /&gt;all other programming paradigms&lt;br /&gt;(functional, OO, logic, static, dynamic, concurrency etc)&lt;br /&gt;into one language.&lt;br /&gt;I predict in the next couple of years&lt;br /&gt;Parrot (the Perl6 virtual machine)&lt;br /&gt;and other Perl6 implementations will be released -&lt;br /&gt;&lt;br /&gt;. a &lt;a href="http://whatwouldpicarddo.blogspot.com/2009/08/why-progamming-language-you-use-should.html"&gt;real Perl programmer&lt;/a&gt; has an&lt;br /&gt;understandable, well-documented code base&lt;br /&gt;that is easy to maintain.&lt;br /&gt;. use of Perl as the main development language&lt;br /&gt;has always been a successful business decision&lt;br /&gt;due to the extremely high productivity of a Perl expert&lt;br /&gt;compared to that of a C/C++/Java/C#/Etc expert.&lt;br /&gt;&lt;br /&gt;There are IDEs available for Perl.&lt;br /&gt;For Eclipse there is the EPIC plugin.&lt;br /&gt;ActiveState has Komodo.&lt;br /&gt;-- most Perl programmers seem to use&lt;br /&gt;vi or emacs [they are showing their age ?]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8760585856674980380?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8760585856674980380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/perlpractical-extraction-report-lang.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8760585856674980380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8760585856674980380'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/perlpractical-extraction-report-lang.html' title='perl(practical extraction &amp; report lang)'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8405505693355380123</id><published>2011-05-02T16:03:00.000-07:00</published><updated>2011-05-02T16:03:14.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>integrating concurrency with oop</title><content type='html'>&lt;i&gt;4.19: &lt;b&gt;adda/oop/co/&lt;/b&gt;integrating concurrency with oop:&lt;/i&gt;&lt;br /&gt;. &lt;a href="http://bartoszmilewski.wordpress.com/2010/08/02/beyond-locks-and-messages-the-future-of-concurrent-programming/"&gt;oop was described as msg passing&lt;/a&gt;&lt;br /&gt;and then there was said to be a complication&lt;br /&gt;-- inversion of control -- &lt;br /&gt;because if you sent a msg&lt;br /&gt;and also expected a response,&lt;br /&gt;then you'd be waiting for a reply to your msg,&lt;br /&gt;meaning that instead of&lt;br /&gt;simply writing a function call,&lt;br /&gt;you were now writing reply handlers for&lt;br /&gt;every use of that function .&lt;br /&gt;. the reason for the handler would be&lt;br /&gt;&lt;b&gt;efficiency:&lt;/b&gt;&lt;br /&gt;if your object was getting a lot of requests,&lt;br /&gt;you could be just waiting around&lt;br /&gt;when you could be making more calls&lt;br /&gt;or checking on other replies .&lt;br /&gt;&lt;i&gt;[4.20:&lt;/i&gt;&lt;br /&gt;. but, what is there to wait about?&lt;br /&gt;just have the compiler clear a flag&lt;br /&gt;before a remote assignment;&lt;br /&gt;then set it after the remote assignment;&lt;br /&gt;and finally check for the flag&lt;br /&gt;before continuing to use that var .]&lt;br /&gt;&lt;br /&gt;. I've long assumed that oop naturally defined&lt;br /&gt;a per-object granularity of concurrency&lt;br /&gt;but now I'm wondering whether that assumption&lt;br /&gt;really holds for my style of oop .&lt;br /&gt;. I like the value-oriented paradigm&lt;br /&gt;(vs the popular address-orientation);&lt;br /&gt;. with value-orientation,&lt;br /&gt;there are still the usual polymorphic functions;&lt;br /&gt;but instead of asking an obj to operate on itself,&lt;br /&gt;the functions can act like they do in&lt;br /&gt;that classic example of polymorphism,&lt;br /&gt;number.type: where {*,/,+,-} are&lt;br /&gt;binary operations over the {N,C,Q,R,Z} subtypes .&lt;br /&gt;&lt;br /&gt;. after a var holds a value,&lt;br /&gt;new values seem to come from function assignments;&lt;br /&gt;but, here's what I like about this style:&lt;br /&gt;the functions don't generate garbage;&lt;br /&gt;because,&lt;br /&gt;they use an implicit out-mode parameter, y,&lt;br /&gt;which points at whatever address&lt;br /&gt;the function's result was assigned to .&lt;br /&gt;. all polymorphic vars have expandable&lt;br /&gt;-- but nevertheless localized -- memory&lt;br /&gt;that is dealloc'd in the usual way,&lt;br /&gt;whenever the owning scope retires .&lt;br /&gt;. conversely,&lt;br /&gt;what seems like a self-mutating procedure&lt;br /&gt;is really a like the cooperation between&lt;br /&gt;a function and an assignment stmt .&lt;br /&gt;. the way to view self-mutators like i`+1;&lt;br /&gt;is that they are simply shorthand for i`= i+1;&lt;br /&gt;generally,&lt;br /&gt;y`*(x) means y`= (y)*(x)&lt;br /&gt;and y`f means y`= f(y); each implicitely has&lt;br /&gt;an inout-mode y parameter&lt;br /&gt;rather than the usual implicit out-mode y;&lt;br /&gt;likewise,&lt;br /&gt;to model math's use of y= f(x)&lt;br /&gt;in teaching about functions,&lt;br /&gt;x is the name of a function's&lt;br /&gt;initial activation record,&lt;br /&gt;so the full name of a formal param p,&lt;br /&gt;in a function f, is f`x`p;&lt;br /&gt;or just x`p means self`x`p&lt;br /&gt;where self is the current function&lt;br /&gt;when referring to itself anonymously .&lt;br /&gt;. the interface declares y`f(x) like this:&lt;br /&gt;`f(x.t).proc:&lt;br /&gt;the body implements it as:&lt;br /&gt;f(x.t).proc: ( y`= routine(y, x) ) .&lt;br /&gt;&lt;br /&gt;. I also wondered how sequences are preserved;&lt;br /&gt;and, from this brief survey&lt;br /&gt;I discovered the need for a contiguous&lt;br /&gt;(read, Quick-modify, write) critical zone;&lt;br /&gt;now my job is to have it done auto'ly&lt;br /&gt;without involving app developers .&lt;br /&gt;&lt;br /&gt;. when concurrent subprograms (cosub's)&lt;br /&gt;are sharing inout access to a var,&lt;br /&gt;the generally required minimal cooperation&lt;br /&gt;is that only one writer has access at a time,&lt;br /&gt;and no reading should be allowed during a write .&lt;br /&gt;. if the compiler can't prove a var is not shared&lt;br /&gt;then it must assume it is,&lt;br /&gt;and provide it with some cooperation scheme .&lt;br /&gt;. oop's message's can serialize concurrent accesses;&lt;br /&gt;but value-oriented oop doesn't require msg-passing .&lt;br /&gt;. the efficient and safe way is a&lt;br /&gt;compiler-administered lock system;&lt;br /&gt;it raises the lock just long eno' to complete&lt;br /&gt;an entire read or write .&lt;br /&gt;. the use must be minimal to protect against&lt;br /&gt;deadlocks and unnecessary waiting .&lt;br /&gt;. another safe use is for an atomic&lt;br /&gt;(read, Qmodify, write) cycle&lt;br /&gt;where Qmodify represents a certain class of procedures&lt;br /&gt;that are guaranteed to be free of deadlock,&lt;br /&gt;because either no dependencies are required&lt;br /&gt;or they have already been procured&lt;br /&gt;before initiating the lock attempt;&lt;br /&gt;and the procedure's loops are proven to terminate .&lt;br /&gt;&lt;br /&gt;. when is the (read,Qmodify,write)cycle really needed?&lt;br /&gt;at least for the lock itself:&lt;br /&gt;ie,&lt;br /&gt;redo.loop:(is lock free?&lt;br /&gt;lockit else redo).&lt;br /&gt;-- the generalization of that exists&lt;br /&gt;whenever an externally-aliased object is&lt;br /&gt;# accessed by&lt;br /&gt;both parts of the same conditional&lt;br /&gt;(ie, being read by the guarding expression&lt;br /&gt;# modified by the guarded stmt).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8405505693355380123?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8405505693355380123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/integrating-concurrency-with-oop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8405505693355380123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8405505693355380123'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/integrating-concurrency-with-oop.html' title='integrating concurrency with oop'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5193029412926981348</id><published>2011-05-02T00:33:00.000-07:00</published><updated>2011-05-02T00:33:50.723-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='1st-class functions'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>function notation classes</title><content type='html'>&lt;i&gt;4.12: &lt;b&gt;adda/cstr&lt;/b&gt;/function notation classes:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. how does the type mgt express&lt;br /&gt;parsing particulars?&lt;br /&gt;eg, some infixes can be combined:&lt;br /&gt;a*b*c = *(a,b,c),&lt;br /&gt;whereas, a /b /c = *(a, /b, /c) .&lt;br /&gt;so then (/) is not listable ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;types of declarations:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;# unary:&lt;/b&gt;&lt;br /&gt;eg, sin(a);&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# infix listable:&lt;/b&gt;&lt;br /&gt;*(a, ...) -- = a * b * c * ....&lt;br /&gt;--. implies associativity;&lt;br /&gt;ie, (a*b)*c = a*(b*c) = *(a,b,c).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# infix binary:&lt;/b&gt;&lt;br /&gt;^(a,b) -- a^b^c = a^(b^c)&lt;br /&gt;-- implies non-associativity;&lt;br /&gt;ie, (a^b)^c =/= a^(b^c);&lt;br /&gt;and, the given rule specifies which way to parse .&lt;br /&gt;--. precedence is indicated by&lt;br /&gt;the order in which operators are declared .&lt;br /&gt;. can also be a prefix .&lt;br /&gt;-- undeclared are assumed to be 2 args of the same type&lt;br /&gt;(ie, the same supertype).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# infix or unary:&lt;/b&gt;&lt;br /&gt;/(a=1,b) -- = 1 * /b;&lt;br /&gt;-(a=0,b) -- = 0 + -b&lt;br /&gt;-- /a = 1/a;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# nofix:&lt;/b&gt; no arg expected;&lt;br /&gt;eg, pi, e, dimensions, &lt;br /&gt;marks an EOterm&lt;br /&gt;(is also trivially a prefix)&lt;br /&gt;-- declared as having no args: x.t .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# postfix:&lt;/b&gt;&lt;br /&gt;(x)!, -- factorial's declaration,&lt;br /&gt;(having multiple parameters but of various types&lt;br /&gt;counts as 1 arg of type record ):&lt;br /&gt;(x.t, x.u)!.v .&lt;br /&gt;[4.30: {postfix, prefix} are treated as separate functions,&lt;br /&gt;like so:&lt;br /&gt;()!, -- postfix&lt;br /&gt;!, !() -- prefix .]&lt;br /&gt;&lt;br /&gt;. each type class can overload an operator&lt;br /&gt;as either {unary#prefix, unary#post}&lt;br /&gt;or -- as in the case of Number.type --&lt;br /&gt;{ infix (2 args)&lt;br /&gt;, prefix (other numbers of args)&lt;br /&gt;} . a symbol can be designated as&lt;br /&gt;both pre- and post-fix&lt;br /&gt;but cannot be both post- and in-fix .&lt;br /&gt;. the one place math has a postfix is (x!).&lt;br /&gt;in that case,&lt;br /&gt;it's at the end of a term just like an infix&lt;br /&gt;so the only way to be certain that a postfix&lt;br /&gt;is not the infix found between terms&lt;br /&gt;is by disallowing operators from being&lt;br /&gt;both infix's and postfix's .&lt;br /&gt;. postfix's can, however,&lt;br /&gt;double as prefix's,&lt;br /&gt;as can the infix's;&lt;br /&gt;so, expecting a term and finding (!)&lt;br /&gt;means the (!) is a prefix to that term;&lt;br /&gt;whereas, expecting an infix or EOse&lt;br /&gt;(end of subexpression) and finding (!)&lt;br /&gt;means the (!) is a postfix .&lt;br /&gt;&lt;br /&gt;. a subexpression can have multiple terms&lt;br /&gt;separated by infix's;&lt;br /&gt;terms are defined as being either:&lt;br /&gt;nofix's: symbols accepting no args;&lt;br /&gt;or a prefix followed by an arg .&lt;br /&gt;. a subexpression is anything terminated by&lt;br /&gt;an enclosure`end:&lt;br /&gt;ie,&lt;br /&gt;, . ; ) } .&amp;gt; end-of-file ] .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5193029412926981348?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5193029412926981348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/function-notation-classes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5193029412926981348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5193029412926981348'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/function-notation-classes.html' title='function notation classes'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-175551297028080289</id><published>2011-05-01T21:28:00.000-07:00</published><updated>2011-05-01T21:28:01.434-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cstr'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='label'/><title type='text'>label as comment and method signature keywords</title><content type='html'>&lt;i&gt;4.27: adda/&lt;b&gt;obj'c&lt;/b&gt;/param'labels:&lt;/i&gt;&lt;br /&gt;. obj'c has non-ada formal param's:&lt;br /&gt;[perform selector](SEL, withObject: x1.ID, withObject: x2.ID)&lt;br /&gt;. in ada the param names must be unique&lt;br /&gt;but not in obj'c .&lt;br /&gt;. in ada there is both named and&lt;br /&gt;positional param association;&lt;br /&gt;but in obj'c there is only positional;&lt;br /&gt;so it doesn't matter if the&lt;br /&gt;method signature keywords aren't unique .&lt;br /&gt;. adda can mirror what obj'c is doing by&lt;br /&gt;using label declarations:&lt;br /&gt;. if the label has no type specified,&lt;br /&gt;then it's a comment,&lt;br /&gt;and doesn't have to be unique; ...&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.29: adda/obj'c/&lt;b&gt;method signature keywords vs param'names:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;mis&lt;/b&gt;:&lt;br /&gt;. if obj'c param'names&lt;br /&gt;don't have to be unique,&lt;br /&gt;then how is the body distinguishing them?&lt;br /&gt;&lt;b&gt;web&lt;/b&gt;:&lt;br /&gt;for each param,&lt;br /&gt;it has both a param'name,&lt;br /&gt;and a method signature keyword .&lt;br /&gt;. the first keyword, of course,&lt;br /&gt;includes the function's verb .&lt;br /&gt;. the name of the function includes&lt;br /&gt;all of the method signature keywords:&lt;br /&gt;( my.SEL`= @selector(setWidth:height:);&lt;br /&gt;str.nsString`= "(setWidth:height:);&lt;br /&gt;my`= NSSelectorFromString(str)&lt;br /&gt;).&lt;br /&gt;&lt;b&gt;basically just a signature id:&lt;/b&gt;&lt;br /&gt;. the fact that the msk's&lt;br /&gt;(method signature keywords)&lt;br /&gt;can seemingly be used for named association&lt;br /&gt;is completely secondary to their function as&lt;br /&gt;uniquely stating the function's name;&lt;br /&gt;ie, if the function is instantiated,&lt;br /&gt;then the identification occurs through the&lt;br /&gt;arg`record`type;&lt;br /&gt;but if the arg's aren't mentioned&lt;br /&gt;then the identification can still occur&lt;br /&gt;through the (now not optional)&lt;br /&gt;method signature keywords .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.22: adda/cstr/&lt;b&gt;labels need no type declaration&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. the colon operator's meaning is the same as&lt;br /&gt;its most frequent use in english and c:&lt;br /&gt;labeling things . in that capacity,&lt;br /&gt;it's not only declaring constants&lt;br /&gt;(eg, x.t: value -- initializing a constant, &lt;br /&gt;vs: x.t`= value -- initializing a variable .&lt;br /&gt;); but also,&lt;br /&gt;&lt;i&gt;defining points in &lt;b&gt;maps&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# a case stmt:&lt;/b&gt;&lt;br /&gt;-- var? # val1: act1, # ...; --&lt;br /&gt;a map from var`values to actions;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# named associations:&lt;/b&gt;&lt;br /&gt;-- (param1: val1, ...) ---&lt;br /&gt;-- (component1: val1, ...) --&lt;br /&gt;a map from agg'components to instantiations .[4.28:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# method signature keywords:&lt;/b&gt;&lt;br /&gt;. in order to mirror what obj'c is doing, 4.29:&lt;br /&gt;each param has a 2nd label consisting of&lt;br /&gt;its method signature keyword;&lt;br /&gt;like so:&lt;br /&gt;f(x1.t, &lt;b&gt;my2ndarg:&lt;/b&gt; x2.t, &lt;b&gt;my3rdarg:&lt;/b&gt; x3.t)&lt;br /&gt;so,&lt;br /&gt;the params and function have the usual names;&lt;br /&gt;but then there is labeling for expressing&lt;br /&gt;the entire signature:&lt;br /&gt;(f:my2ndarg:my3rdarg:)&lt;br /&gt;. if this is a unique form of overloading&lt;br /&gt;then it may need a unique type id:&lt;br /&gt;perhaps .sig (signature keyword)&lt;br /&gt;used like this:&lt;br /&gt;f( x1.t&lt;br /&gt;, my2ndarg.&lt;b&gt;sig&lt;/b&gt;: x2.t&lt;br /&gt;, my3rdarg.&lt;b&gt;sig&lt;/b&gt;: x3.t) .]&lt;br /&gt;&lt;br /&gt;. in situations where labels can be&lt;br /&gt;both declared for use as a comment&lt;br /&gt;(with no declared type)&lt;br /&gt;and also used for named association,&lt;br /&gt;there needs to be some way of&lt;br /&gt;distinguishing between the two;&lt;br /&gt;because, any unexpected label should be&lt;br /&gt;interpreted as either a spelling error&lt;br /&gt;or a shortcut for declaring a label .&lt;br /&gt;&lt;br /&gt;. an unambiguous way to declare a label&lt;br /&gt;is to use the type`dot without mentioning the type:&lt;br /&gt;(label.: );&lt;br /&gt;the label is then local to the current scope block;&lt;br /&gt;and, the label renames a following symbol;&lt;br /&gt;or, the label names a following control structure .&lt;br /&gt;[5.1:&lt;br /&gt;if there's no use of a declared label,&lt;br /&gt;that tells the compiler it's simply a comment ...&lt;br /&gt;unless some use involved a misspelling .]&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.19: adda/type/&lt;b&gt;generics&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. if you write just (var. )&lt;br /&gt;ie, without a specific type&lt;br /&gt;adde will complete it with an interface literal&lt;br /&gt;and the interface is determined by&lt;br /&gt;whatever is applied locally&lt;br /&gt;(ie, it's a generic;&lt;br /&gt;the system won't know until run-time testing&lt;br /&gt;whether the object handles those functions .)&lt;br /&gt;&lt;br /&gt;. notice that aggregates (arrays and records)&lt;br /&gt;are using labels like a map does,&lt;br /&gt;but are not sets like maps are . [ 4.29:&lt;br /&gt;. mapping usually refers to a set of points;&lt;br /&gt;but here, "(map) includes ada's named&lt;br /&gt;associations for agg'components and parameters.&lt;br /&gt;(param'lists are a form of agg':&lt;br /&gt;call instantiation records).]&lt;br /&gt;&lt;br /&gt;. you might be able to identify an agg'literal&lt;br /&gt;by the thing it's being assigned to;&lt;br /&gt;but you also want to support&lt;br /&gt;generic agg' literals;&lt;br /&gt;[5.1: that would be something like lisp&lt;br /&gt;where you can send trees of symbols&lt;br /&gt;which then represents a situation .]&lt;br /&gt;&lt;br /&gt;. labels for goto's need to&lt;br /&gt;define themselves as loops or exits,&lt;br /&gt;eg,&lt;br /&gt;&lt;blockquote&gt;myway.loop:&lt;br /&gt;b?? myway&lt;br /&gt;else thedoor;&lt;br /&gt;thedoor.exit .&lt;/blockquote&gt;otherwise,&lt;br /&gt;they are assumed to be part of&lt;br /&gt;some pre-existing map`domain .&lt;br /&gt;&lt;br /&gt;. if there is no dot with the label,&lt;br /&gt;and the label doesn't match an expected map point&lt;br /&gt;then adde might ask beginners&lt;br /&gt;what they meant:&lt;br /&gt;# a full-featured &lt;b&gt;goto address&lt;/b&gt;?&lt;br /&gt;&lt;pre escaped="true" lang="xml"&gt;(eg, spaghetti4.&amp;lt;&amp;lt;&amp;gt;&amp;gt;: ...) &lt;/pre&gt;# a &lt;b&gt;loop name&lt;/b&gt; (enterable only from within loop)?&lt;br /&gt;# an &lt;b&gt;exit&lt;/b&gt; (a special non-looping goto address)? .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;other ideas about labels:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.22: adda/naming/&lt;b&gt;freedom and efficiency:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. one reason for not allowing&lt;br /&gt;special characters in names&lt;br /&gt;`~!@#$%^&amp;amp;*()_+-={|\}[],./:;'"&lt;br /&gt;-- besides the unreadability of it -- &lt;br /&gt;is that the compiler would be slowed down&lt;br /&gt;by every other use of a special char:&lt;br /&gt;having to stop and ask:&lt;br /&gt;is that in one of the current names?&lt;br /&gt;or is that the start of a new symbol ??&lt;br /&gt;. by optionally enclosing a name in brackets,&lt;br /&gt;[`~!@#$%^&amp;amp;*()_+-={|\}[],./:;'"]&lt;br /&gt;one can have nearly complete naming freedom&lt;br /&gt;(barring only the use of&lt;br /&gt;unbalanced brackets within a name)&lt;br /&gt;while also keeping the compiler efficient:&lt;br /&gt;the compiler just looks for the end of enclosure&lt;br /&gt;without having to check through current names&lt;br /&gt;just to know whether a name&lt;br /&gt;continues past a special char .&lt;br /&gt;. as for readability,&lt;br /&gt;the adde editor allows for smart name replacements,&lt;br /&gt;taking your renaming suggestions&lt;br /&gt;by showing all the names in the current scope block&lt;br /&gt;so it's easy to tell what will be a unique name .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;other uses for the colon operator:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.24: web.adda/&lt;b&gt;standard ml's [::]-operator:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. part of pattern matching&lt;br /&gt;http://en.wikipedia.org/wiki/Standard_ML&lt;br /&gt;an arg with formal name of (a::b)&lt;br /&gt;has declared that input will be divided in 2&lt;br /&gt;and given names {a(for the first part)&lt;br /&gt;b (for the 2nd part)}.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.9: news.adda/&lt;b&gt;operator-::/context definition&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. some at bigresource.com&lt;br /&gt;http://mac.bigresource.com/OS-X-Leopard-Leopard-bug-that-can-cause-data-loss-hqic9R96w.html&lt;br /&gt;are using :: for the context operator:&lt;br /&gt;eg, (in the case of hardware version x, y is happening;)&lt;br /&gt;would be stated as x :: y .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.27: &lt;b&gt;mis&lt;/b&gt;.adda/&lt;b&gt;double colon as comment:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. the problem of confusing comments&lt;br /&gt;[@] adda/obj'c/param'labels&lt;br /&gt;with a map's expected keys&lt;br /&gt;gave me the idea of using a [comment]:: syntax&lt;br /&gt;to unambiguously use labels as comments .&lt;br /&gt;. it would be similar to the other styles of comment:&lt;br /&gt;--[], and ##[] .&lt;br /&gt;4.28:&lt;br /&gt;. however,&lt;br /&gt;this use has no precident,&lt;br /&gt;and would be unintuitive;&lt;br /&gt;furthermore, there is no ambiguity problem;&lt;br /&gt;[@] adda/cstr/labels need no type declaration&lt;br /&gt;therefore any label with the usual syntax&lt;br /&gt;can already serve as a comment .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-175551297028080289?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/175551297028080289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/label-as-comment-and-method-signature.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/175551297028080289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/175551297028080289'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/05/label-as-comment-and-method-signature.html' title='label as comment and method signature keywords'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3719186877650295502</id><published>2011-04-30T20:08:00.002-07:00</published><updated>2011-05-02T00:21:00.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='aggregate'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>rethinking aggregates</title><content type='html'>&lt;i&gt;4.28: adda/dstr/&lt;b&gt;agg's in literal mode:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. the expression (www.the.com)&lt;br /&gt;is same as (www#the#com)&lt;br /&gt;except that with (www.the.com) &lt;br /&gt;you know the component selectors are literals,&lt;br /&gt;whereas with (www#the#com),&lt;br /&gt;(the) and (com) are likely variables .&lt;br /&gt;&lt;br /&gt;. a record field works like a &lt;a href="http://en.wikipedia.org/wiki/Pointer_%28computing%29#Based_pointer"&gt;based pointer&lt;/a&gt;,&lt;br /&gt;just as an array index does,&lt;br /&gt;except that the distance between components&lt;br /&gt;is not constant .&lt;br /&gt;. records (and even arrays)&lt;br /&gt;can have their components reached literally&lt;br /&gt;via something other than (#)&lt;br /&gt;and the example of (www.the.com)&lt;br /&gt;suggests the dot should be reused for that .&lt;br /&gt;. this way it works like numbers, too:&lt;br /&gt;they have 2 literal parts {frac, int} &lt;br /&gt;connected by a dot&lt;br /&gt;-- a model even more common than url's .&lt;br /&gt;. the use of dots is well-understood,&lt;br /&gt;it looks neat,&lt;br /&gt;and it's easy to reach on the kybd&lt;br /&gt;-- much more so than (`)&lt;br /&gt;(the possessive operator).&lt;br /&gt;&lt;br /&gt;. how can reuse of the dot then avoid&lt;br /&gt;confusion with types decl's?&lt;br /&gt;-- eg, A.1 vs A.anArrayType --&lt;br /&gt;it requires that the entire type`name`space&lt;br /&gt;is barred from being reused as a component`name;&lt;br /&gt;ie, if a name already stands for a type,&lt;br /&gt;it can't be used as the name for any component .&lt;br /&gt;. that would be easy if there was a rule like&lt;br /&gt;(type`names must be capitalized),&lt;br /&gt;-- as it is in math --&lt;br /&gt;but most would rather write .int than .Z .&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Pointer_%28computing%29#Based_pointer"&gt;4.29: web.adda/terminology/based pointer:&lt;/a&gt;&lt;br /&gt;. what is term for what I like to call&lt;br /&gt;offset pointer? based pointer&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.28: adda/dstr/&lt;b&gt;array-record equivalence:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. wondering why records and arrays&lt;br /&gt;should vary their syntax from each other:&lt;br /&gt;an array is simply a record where&lt;br /&gt;all components are the same type,&lt;br /&gt;yet array#field&lt;br /&gt;vs record`field ?&lt;br /&gt;. but, in database design -- a fundamental --&lt;br /&gt;there's the idea of the multiples (arrays)&lt;br /&gt;vs the units (records);&lt;br /&gt;just as both fractions and integers&lt;br /&gt;may have the same use of digits&lt;br /&gt;but nevertheless very different roles .&lt;br /&gt;&lt;br /&gt;. look at the entire lifetime of their use,&lt;br /&gt;including decl's, and the other use of (`), &lt;br /&gt;is it complementary ?&lt;br /&gt;&lt;pre escaped="true" lang="xml"&gt;. t.type: &amp;lt;. `f, `+, + .&amp;gt;&lt;br /&gt;; a#.t -- a#.&amp;lt;. `f, `+, + .&amp;gt;&lt;br /&gt;; r.(x.t, y.s) --. a record .&lt;br /&gt;; p/.(x.t, y.s) --. pointer to same .&lt;br /&gt;; b.t --. declares { b`f, b`+, b+... }.&lt;br /&gt;; a#1, r#x, p/x, b`x .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;. where did I get the idea that &lt;br /&gt;the operator(`) could be reserved for&lt;br /&gt;self-modifiers?&lt;br /&gt;. can't an aggregate component be a function?&lt;br /&gt;then it works just like in a type def':&lt;br /&gt;when a function is part of an agg'&lt;br /&gt;it has access to every other component of that agg' .&lt;br /&gt;b`++, b#f(x) &lt;br /&gt;. the agg' declarations themselves&lt;br /&gt;don't have hidden locals;&lt;br /&gt;but, if a type def includes an agg' def,&lt;br /&gt;then it defines an agg whose&lt;br /&gt;component functions could be accessing hidden locals .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.19: adda/cstr/&lt;b&gt;rom-address-mode params&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. [pass by ref] (aka address-mode)&lt;br /&gt;is often more efficient &lt;br /&gt;but in some lang's [pass by copy] (aka value-mode)&lt;br /&gt;is the only sure way to know inputs aren't modified .&lt;br /&gt;. the interface should make clear to the compiler&lt;br /&gt;whether a certain operation is modifying or not;&lt;br /&gt;only then can the compiler be efficiently helpful .&lt;br /&gt;4.20:&lt;br /&gt;functionals have an interface like this:&lt;br /&gt;f(x), f(l,r),&lt;br /&gt;whereas mutators appear like this:&lt;br /&gt;`f, `++, `*(x), `+(x) .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;more 2nd-thoughts for use of dot notation:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.22: todo.adda/&lt;b&gt;type/filter-class generic types:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. studying c++'s generic types, eg atomic:&lt;br /&gt;http://bartoszmilewski.wordpress.com/2008/12/01/c-atomics-and-memory-ordering/&lt;br /&gt;adda's syntax for the parameterized type would be:&lt;br /&gt;atomic(your.type).type: ...&lt;br /&gt;. a generic is normally used like this:&lt;br /&gt;i.atomic(int)&lt;br /&gt;-- i is a version of atomic.type --&lt;br /&gt;but why not i.atomic.int ?&lt;br /&gt;atomic is an important example&lt;br /&gt;of a special class of generic type&lt;br /&gt;in which it offers as output&lt;br /&gt;the same type as was input&lt;br /&gt;providing a modified but nevertheless compatible semantics .&lt;br /&gt;. they would be modeled after arrays,&lt;br /&gt;a#.int&lt;br /&gt;which has so far escaped definition&lt;br /&gt;due to its being a primitive type .&lt;br /&gt;&lt;b&gt;todo&lt;/b&gt;:&lt;br /&gt;review how #(x).t, (x).t, /.t&lt;br /&gt;are similar and different,&lt;br /&gt;and how there can be a syntax&lt;br /&gt;for defining a generic array type&lt;br /&gt;had the system not already done it .&lt;br /&gt;. review the named pointer theory&lt;br /&gt;since it has the most in common with that .&lt;br /&gt;&lt;br /&gt;4.20: adda/type/more use of multiple dots:&lt;br /&gt;. here's another place where double typing is needed:&lt;br /&gt;msg.Channel.String;&lt;br /&gt;. the var"msg represents a channel&lt;br /&gt;through which is passed obj's of type"string .&lt;br /&gt;. it's like the array, msg#.String,&lt;br /&gt;being a sort of container of strings&lt;br /&gt;but numerous in the time domain&lt;br /&gt;vs space domain .&lt;br /&gt;&lt;br /&gt;&lt;b&gt;other lexical change ideas:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.22:  adda/operators/&lt;b&gt;ancestor scope:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. my current system defines a local as&lt;br /&gt;a symbol that includes a type specification;&lt;br /&gt;but, aren't there times when you'd like to&lt;br /&gt;rename or otherwise access an external&lt;br /&gt;as something like:&lt;br /&gt;"( give me the x from however many levels above&lt;br /&gt;that has this particular type) ?&lt;br /&gt;. one way to do that is with a new symbol:&lt;br /&gt;just as the current system allows&lt;br /&gt;../x.t to mean parent scope's object of type x.t,&lt;br /&gt;.../x.t could mean the same but&lt;br /&gt;for any ancestor scope .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.20: adda/&lt;b&gt;numeric base syntax&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. hex could folow both dimensional syntax and subscript syntax&lt;br /&gt;by treating (space)#(integer) as dimension;&lt;br /&gt;eg, 7FFF #16 or (ART)#32 .&lt;br /&gt;-- using either the space or the parenthetical&lt;br /&gt;is needed to avoid confusing A#16&lt;br /&gt;with the 16th item an array named A .&lt;br /&gt;. an array would allow spacing the other way:&lt;br /&gt;A# 16 -- rather than:&lt;br /&gt;A #16 .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.12: adda/cstr/&lt;b&gt;pointer arithmetic&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. my first idea for distinguishing between&lt;br /&gt;arithmetic on a pointer vs their targets&lt;br /&gt;was to use an explicit dereference operator;&lt;br /&gt;but ambiguity happens rarely&lt;br /&gt;-- only when the target is a numeric type&lt;br /&gt;and the operation is one that applies to pointers --&lt;br /&gt;so, another idea is to use attribute syntax&lt;br /&gt;to indicate when the operation is on the address .&lt;br /&gt;. my first idea was ptr`addr + i,&lt;br /&gt;but `addr should take the addr of the symbol;&lt;br /&gt;my subsequent idea was to use array notation,&lt;br /&gt;since that is what pointer arithmetic is doing:&lt;br /&gt;ptr#i = ptr + i .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3719186877650295502?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3719186877650295502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/rethinking-aggregates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3719186877650295502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3719186877650295502'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/rethinking-aggregates.html' title='rethinking aggregates'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-3470127052677336791</id><published>2011-04-30T19:28:00.000-07:00</published><updated>2011-04-30T19:28:57.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='syntax'/><title type='text'>avoiding parentheticals for the lisp-allergic</title><content type='html'>&lt;i&gt;4.9: mis.&lt;b&gt;adda/&lt;/b&gt;syntax/semicolon-comma combination:&lt;/i&gt;&lt;br /&gt;. (f x) can be extended with comma&lt;br /&gt;if the semicolon is required for&lt;br /&gt;terminating a function call;&lt;br /&gt;this is good for avoiding paren's .&lt;br /&gt;...&lt;br /&gt; but then you can't tell whether&lt;br /&gt;the ,,,; is for the fx&lt;br /&gt;or for the list that contains the fx .&lt;br /&gt;...&lt;br /&gt;. in places that expect (;)&lt;br /&gt;an optional comma-separated list is also possible;&lt;br /&gt;conversely, in places where a commas delimit,&lt;br /&gt;such as a list, or vector,&lt;br /&gt;a semicolon provides a shortcut to lists of lists&lt;br /&gt;(,,,;,,,) = ((,,,), (,,,)).&lt;br /&gt;with semicolons as param terminators,&lt;br /&gt;(f(,,,), g(,,,)) = (f,,,; g ,,,)&lt;br /&gt;but that is confused with (f(); g())?&lt;br /&gt;speaking of confusion,&lt;br /&gt;if (,,,;,,,) = ((,,,), (,,,))&lt;br /&gt;then you can't have sequences in param's?&lt;br /&gt;you have to parenthesize them:&lt;br /&gt;(,,,; ,,,) means a matrix;&lt;br /&gt;(,,,(;),,,) means a list containing a sequence .&lt;br /&gt;(,;&lt;br /&gt;,,,;&lt;br /&gt;,,) -- ragged array .&lt;br /&gt;&lt;b&gt;4.30: another way:&lt;/b&gt;&lt;br /&gt;. after a symbol (whether a function or not)&lt;br /&gt;if it's followed by a colon:&lt;br /&gt;f:,,,; -- then it can terminated by a (;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-3470127052677336791?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/3470127052677336791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/avoiding-parentheticals-for-lisp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3470127052677336791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/3470127052677336791'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/avoiding-parentheticals-for-lisp.html' title='avoiding parentheticals for the lisp-allergic'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-8265394028022784070</id><published>2011-04-30T19:16:00.000-07:00</published><updated>2011-04-30T19:16:36.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='encapsulation'/><category scheme='http://www.blogger.com/atom/ns#' term='contracts'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>hybrid of efficiency and encapsulation for oop</title><content type='html'>&lt;i&gt;4.8: &lt;b&gt;adda/&lt;/b&gt;oop/hybrid of efficiency and encapsulation:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. oop's inheritance is notorious for&lt;br /&gt;sharing instance var's (ivar's);&lt;br /&gt;but, why can't direct access still be&lt;br /&gt;more controlled, like ada param's are ?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.10: review:&lt;/i&gt;&lt;br /&gt;. in typical (popular) oop`inheritance,&lt;br /&gt;efficiency is gained when the interface&lt;br /&gt;commits to a particular list of ivar's;&lt;br /&gt;the inheritor's ivar's get tacked on to&lt;br /&gt;the ivar record being inherited (super's) .&lt;br /&gt;. encapsulation can be maintained anyway&lt;br /&gt;despite the lack of privacy,&lt;br /&gt;because the super can opt to mandate&lt;br /&gt;that only the super's methods&lt;br /&gt;can operate on the super's ivar's .&lt;br /&gt;. if opting instead to share ivar's with inheritors,&lt;br /&gt;then their accesses can be done quickly&lt;br /&gt;since they bypass calling a function;&lt;br /&gt;but, everyone in the inheritance chain&lt;br /&gt;is communicating via shared var's;&lt;br /&gt;and in this way, new bugs can be caused whenever&lt;br /&gt;any party of the inheritance chain gets modified .&lt;br /&gt;4.10:&lt;br /&gt;. one way to allow direct but controlled access&lt;br /&gt;is by having optional watch functions:&lt;br /&gt;. inheritors have direct access&lt;br /&gt;but it's confined to reads and writes;&lt;br /&gt;ie, rather than having continuous access,&lt;br /&gt;it's like the ada`parameter model&lt;br /&gt;where the inout param's are modeled by&lt;br /&gt;copying the initial value,&lt;br /&gt;working on one's own copy,&lt;br /&gt;and then overwriting the param`target&lt;br /&gt;when the function is returning .&lt;br /&gt;. if the super wants more control over&lt;br /&gt;its own ivar's,&lt;br /&gt;it can put a watch on them:&lt;br /&gt;after a write, it can do range testing&lt;br /&gt;or check for internal consistency;&lt;br /&gt;if it raises an error,&lt;br /&gt;the system can know who did that last write .&lt;br /&gt;&lt;br /&gt;. the interface shouldn't have to list ivar's;&lt;br /&gt;the ivar's that are listed are simply&lt;br /&gt;those meant for sharing with inheritors .&lt;br /&gt;. the ivar's that actually model object state&lt;br /&gt;are known only to the init functions .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-8265394028022784070?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/8265394028022784070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/hybrid-of-efficiency-and-encapsulation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8265394028022784070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/8265394028022784070'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/hybrid-of-efficiency-and-encapsulation.html' title='hybrid of efficiency and encapsulation for oop'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-2911893231743672879</id><published>2011-04-30T18:35:00.001-07:00</published><updated>2011-04-30T18:37:53.074-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SML'/><category scheme='http://www.blogger.com/atom/ns#' term='lang'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='coffeescript'/><category scheme='http://www.blogger.com/atom/ns#' term='ABC'/><category scheme='http://www.blogger.com/atom/ns#' term='off-side rule'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>SML (standard metalanguage)</title><content type='html'>&lt;i&gt;4.24: news.adda/&lt;b&gt;lang"sml (standard metalanguage):&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. standard ml is influenced by&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/ISWIM"&gt;ISWIM (I see what it means)&lt;/a&gt;&lt;br /&gt;which influenced not only ML,&lt;br /&gt;but also many other functional languages&lt;br /&gt;such as SASL, Miranda, and Haskell .&lt;br /&gt;Landin's SECD machine used call-by-value;&lt;br /&gt;if the imperative features are stripped out &lt;br /&gt;(assignment and the J operator)&lt;br /&gt;leaving a purely functional language,&lt;br /&gt;it then becomes possible to switch to&lt;br /&gt;lazy evaluation (vs eager evaluation);&lt;br /&gt;that was the path of SASL,&lt;br /&gt;KRC (Kent Recursive Calculator),&lt;br /&gt;Hope, Miranda, Haskell, and Clean.&lt;br /&gt;. A goal of ISWIM was to look more like&lt;br /&gt;mathematical notation,&lt;br /&gt;so it replaced ALGOL's ways with&lt;br /&gt;the pythonic &lt;a href="http://en.wikipedia.org/wiki/Off-side_rule"&gt;off-side rule&lt;/a&gt;&lt;br /&gt;(newlines take the place of semicolons;&lt;br /&gt;indentation represents parentheticals or begin-end pairs )&lt;br /&gt;. abc and python are hardly the only off-siders:&lt;br /&gt;* Boo    * BuddyScript     * Cobra     * CoffeeScript&lt;br /&gt;* Curry    * F# (if #light "off" is not specified)&lt;br /&gt;* Genie     * Miranda     * Nemerle    * Occam&lt;br /&gt;* PROMAL    * Spin    * XL    * YAML .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;news.adda/lang"CoffeeScript/&lt;b&gt;a hll-to-hll translator:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;. &lt;a href="http://en.wikipedia.org/wiki/CoffeeScript"&gt;CoffeeScript&lt;/a&gt; compiles to JavaScript&lt;br /&gt;adding syntactic sugar inspired by Ruby and Python&lt;br /&gt;to enhance JavaScript's brevity and readability,&lt;br /&gt;as well as adding more sophisticated features like&lt;br /&gt;array comprehension and pattern matching.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-2911893231743672879?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/2911893231743672879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/sml-standard-metalanguage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2911893231743672879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/2911893231743672879'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/sml-standard-metalanguage.html' title='SML (standard metalanguage)'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1317519969686201237.post-5716875378719405075</id><published>2011-04-30T18:25:00.000-07:00</published><updated>2011-04-30T18:25:04.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='constant'/><category scheme='http://www.blogger.com/atom/ns#' term='adda'/><category scheme='http://www.blogger.com/atom/ns#' term='type'/><category scheme='http://www.blogger.com/atom/ns#' term='uniqueness'/><category scheme='http://www.blogger.com/atom/ns#' term='rom'/><title type='text'>read-only, constance, and uniqueness</title><content type='html'>&lt;i&gt;4.22: adda/&lt;b&gt;type/const/for shared-link parameters:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;. what is the diff'tween {const, rom}?&lt;br /&gt;and did you notice that in formal params,&lt;br /&gt;where rom is needed,&lt;br /&gt;this const syntax is not very applicable ?&lt;br /&gt;&lt;br /&gt;. the reason for being concerned with rom&lt;br /&gt;is that people would like to know&lt;br /&gt;whether they can safely pass a reference .&lt;br /&gt;. this should be handled as it is in Ada:&lt;br /&gt;it is safe unless the parameter is&lt;br /&gt;specifically marked as out-mode .&lt;br /&gt;. so the question then becomes,&lt;br /&gt;what is an intuitive symbol for out-mode?&lt;br /&gt;. ada's goto enclosure has been written about before;&lt;br /&gt;and out-mode mode param's are like goto's;&lt;br /&gt;because, they are transfering control to&lt;br /&gt;some surprising places .&lt;br /&gt;&lt;b&gt;todo&lt;/b&gt;:&lt;br /&gt;. how was it shown&lt;br /&gt;where the out-mode is happening?&lt;br /&gt;eg, for an array of pointers to strings,&lt;br /&gt;is the array being modified (dangling pointer risk)&lt;br /&gt;or are the strings being modified ?&lt;br /&gt;the out-mode syntax needs to&lt;br /&gt;make this distinction easy to express .&lt;br /&gt;&lt;br /&gt;. what if the caller provides a shared link;&lt;br /&gt;and, while the caller meant for the ref'&lt;br /&gt;to provide the value it represented&lt;br /&gt;at the time of the call,&lt;br /&gt;in fact it will be changing dynamically,&lt;br /&gt;because even though the caller is suspended&lt;br /&gt;the caller's co.programs are still modifying the link;&lt;br /&gt;&lt;i&gt;therefore:&lt;/i&gt;&lt;br /&gt;when a link represents a value&lt;br /&gt;then the shared value needs a soft-locking system:&lt;br /&gt;it doesn't prevent co.programs from writing&lt;br /&gt;but requires the first writer&lt;br /&gt;to ask the system for a lock-removal service;&lt;br /&gt;in doing that,&lt;br /&gt;the system sees who the lock belongs to&lt;br /&gt;and copies the current value .&lt;br /&gt;. if it knows the lock owner is going to be quick&lt;br /&gt;it can just high-prioritize that call,&lt;br /&gt;and suspend the unlocker until then .&lt;br /&gt;. this is a lot efficiency glue&lt;br /&gt;so the system needs to know at call time&lt;br /&gt;whether an input is large eno' to link to,&lt;br /&gt;since copying makes life much simpler .&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.22: mis.adda/&lt;b&gt;type/const/for non-parameters&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. while const's for param's are not an issue&lt;br /&gt;(see notes about rom above)&lt;br /&gt;[@] adda/type/const/for shared-link parameters&lt;br /&gt;const's for symbol declarations are very useful .&lt;br /&gt;. I've had problems finding a const operator&lt;br /&gt;(below) [@] mis.adda/uniqueness operator &lt;br /&gt;but, having the need restricted to non-parameters&lt;br /&gt;makes the search moot, I thought,&lt;br /&gt;as const's can be initialized with a label&lt;br /&gt;rather than an assignment operator;&lt;br /&gt;nevertheless,&lt;br /&gt;what if uninitialized, but&lt;br /&gt;intending to assign later only once?&lt;br /&gt;then a const symbol would enforce&lt;br /&gt;only one assignment .&lt;br /&gt;. just as math uses (someone!)&lt;br /&gt;to mean (exactly one),&lt;br /&gt;the type system could use (type!)&lt;br /&gt;to mean not just (some&lt;br /&gt;of the values from this type)&lt;br /&gt;but instead (exactly one&lt;br /&gt;of the values from this type&lt;br /&gt;will be used here).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;4.22: mis.adda/&lt;b&gt;uniqueness operator&lt;/b&gt;:&lt;/i&gt;&lt;br /&gt;. a convenient symbol for rom&lt;br /&gt;is the same as for unique,&lt;br /&gt;since rom maintains a unique value across times .&lt;br /&gt;. notice though, that&lt;br /&gt;when I chose (!) for unique&lt;br /&gt;it was because math uses it for the&lt;br /&gt;unique existence quantifier;&lt;br /&gt;but when (!) is used alone, without (some),&lt;br /&gt;math defines it as factorial;&lt;br /&gt;and what does that have to do with unique?&lt;br /&gt;( recall factorial:&lt;br /&gt;x! = *(^i: i= 1..x) -- very multiplicative!&lt;br /&gt;) . in both of these math cases, &lt;br /&gt;it matches the usual english meaning:&lt;br /&gt;(very *) .&lt;br /&gt;. in the case of (some!),&lt;br /&gt;(exactly one) is a very useful version of &lt;br /&gt;(some one) because,&lt;br /&gt;(mapping to exactly one)&lt;br /&gt;is an essential characteristic of functions&lt;br /&gt;-- one of math's foundations .&lt;br /&gt;. intuitively the name could come from&lt;br /&gt;feeling very responsible:&lt;br /&gt;ie, if "(some one) did it&lt;br /&gt;then there is a degree of anonymity,&lt;br /&gt;but if exactly (!) one member is responsible&lt;br /&gt;then that one member is&lt;br /&gt;very much the reason for the season .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1317519969686201237-5716875378719405075?l=amerdreamdocs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amerdreamdocs.blogspot.com/feeds/5716875378719405075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/read-only-constance-and-uniqueness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5716875378719405075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1317519969686201237/posts/default/5716875378719405075'/><link rel='alternate' type='text/html' href='http://amerdreamdocs.blogspot.com/2011/04/read-only-constance-and-uniqueness.html' title='read-only, constance, and uniqueness'/><author><name>dr.addn</name><uri>http://www.blogger.com/profile/13133625113916983486</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_v2G-__eT7bA/S5RhrrJWvRI/AAAAAAAABMQ/vvHRZyETxC4/s1600-R/AIbEiAIAAABDCOeys-CP47aTNSILdmNhcmRfcGhvdG8qKDdlOTMwNGRiOWQzNWFmM2M3ODNmMWY2YjFkZTAwNDhiMDVhZWRhMjkwAbjgLgG3jdB__TfNkxwQSDBdUnTn'/></author><thr:total>0</thr:total></entry></feed>
