Showing posts with label ide. Show all posts
Showing posts with label ide. Show all posts

2012-09-23

CP4E hero Bret Victor

9.8: news.adde/light table and bret victor:

. Bret Victor's video has a cp4e mission
and shows off the new tools he's built
that help us develope our creative ideas .

. amazing what he's done;
he has an IDE where you can click on any var,
and it turns into the widget needed to adjust it;
but then it's also
re-running your code after every change;
so, if your program generates a picture,
his scripts are custom GUI's for
painting particular classes of pictures
where you paint by both coding
and by adjusting code parameters
-- all by GUI! (as you do edits,
the page is sprouting widgets to help you).
. when you slide a for-loop var,
the program is re-running for every
value in the for-loop's change range
which is causing an animation effect
-- a new way to experiment with video .

. even more amazing,
this IDE creates a complete mapping
between the subpicture being drawn
and the line of code that drew it;
so clicking in the picture
causes the editor to highlight a line of code,
and conversely, selecting a line of code
highlights the subpictures it drew .

. now, speaking of animation,
the next thing needed for visualization
is to create trails for specific subpictures,
so that as you modify a parameter,
it immediately shows how that is affecting
the path of the trail .
. first he's pausing at the
end of the interesting time interval,
then he's using rewind to get to the
beginning of his time interval of interest;
and finally when he's adjusting parameters now,
for each new parameter change,
it's drawing a new trail specific to the
time interval of interest .

. why are there symbols in a schematic?
because it's the easiest way to pen them,
Victor notices ( and there's the icon effect
-- creating instant recall of the concept );
but now that schematics are in computers,
we should be using their dynamic expression:
so, in an electronics diagram,
we could replace the symbols with
little videos of the analog signals
that are generated at that symbol's node .

. likewise, computers can make coding so easy
that any one can do it;
indeed, it seems that the best coders
are just those who are best at
imagining a computer's working internals,
but we have the computer to do this for us,
so why don't we?!
. for example he shows another IDE,
this one being tuned for coding instead of drawing
in which the editor has 2 areas:
on one side is the code,
and on the other is a simulation of the code;
ie, the simulation has a list of all the locals
that are so far declared in your function,
-- and it does this in real time:
eg, as you write the function's header,
the simulation shows the parameters as undefined;
then you can modify the simulation
by instantiating any undefined variables
(so the assignment happens only in the simulation,
not your code), and then as you have code
assigning a complex expression to a var,
the simulation tries to eval that assignment;
and, this way you are testing as you code
-- every time you hit enter,
it's relaunching the build&run
for per-line-of-code testing (quick!).
. if you add a loop to your code,
then all the var's being affected by the loop
are placed in a matrix
with vars in the columns,
and iterations per row (or vice versa).

. he then gives us a history of people who
had a passion for using computers to
help people with making full use of their brains;
pointing out that this work is important because
people need these dynamic tools
to unleash their full human potential .
. he was especially impressed at
those who made computers child's play;
and reminded the audience's budding techies
that we can choose as our identity
to have a social conscience,
and not just a technical expertise .

pioneers of cp4e:
(computer programming 4 everybody)

# Larry "nomodes.com" Tesler:
. not just the developer of copy&paste
but the one realizing we could do better than
obstructive modal versions of copy&paste:
he recognized a wrong
that was unrecognized by the culture .

# Doug Engelbart -- enabling mankind:
. propent of realtime human-computer interaction
not just the inventor of the mouse:
he wanted to solve mankind's urgent problems with
computer-assisted knowledge workers .

# Alan Kay -- enabling children:
. everything he did for windows, menus, and oop,
was to enable children to be computer literate
to make them more enlightened adults!
. he studied those who studied how children think,
in order to help them use computers .
[. in 2006, Kay's Viewpoints Research Institute
was funded by USA's NSF for the proposal:
Steps Toward the Reinvention of Programming:
A compact and Practical Model of
Personal Computing as a Self-exploratorium [pdf]
(see comments of it:
. they critiqued him for bucking the trend of
taking advantage of cheaper hardware
by filling it with more features and bling;
but ironically, that attitude
still hadn't been able to provide all children
with a computer that would help them learn
-- children's computers need to be
as cheap as calculators;
but instead we insist on continuing to
code above the child's price point .]

# Richard Stallman -- freedomware:
. the king of fighting to change culture
for the good of mankind .

9.8: web: i-programmer.info`
Alex Armstrong 10 March 2012`

A Better Way To Program
This video will change the way
you think about programming.
The argument is clear and impressive
- it suggest that we really are building programs with
one hand tied behind our backs.
After you have watched the video
you will want the tools [that he has] demonstrated.

We often focus on programming languages
and think that we need a
better language to program better.
Bret Victor gave a talk that demonstrated
that this is probably only a
tiny part of the problem.
The key is probably interactivity.
Don't wait for a compile to complete
to see what effect your code has on things
- if you can see it in real time
then programming becomes much easier.
Currently we are programming with
one arm tied behind our backs
because the tools that we use
separate us from what we write and what happens.
Interactivity makes code understandable.
Moving on, the next idea is that
instead of reading code and understanding it,
seeing what the code does is understanding it.
Programmers can only understand their code by
pretending to be computers and running it in their heads.
As this video shows, this is incredibly inefficient
and, as we generally have a computer in front of us,
why not use it to help us understand the code?
...
if you watch just one video this year
make it this one.
Update:
See Light Table - a Realization of a New Way to Code
[ an implementation of Victor's idea .]
[ it was funded by a kickstarter page .]
You can now try Light Table
via the Light Table Playground!

9.8: web: Bret Victor
. Bret Victor's inspiring resume
and his many cool writings .
. Bret Victor`Inventing on Principle [vid]
from CUSEC 2012 (Canadian University
Software Engineering Conference)
-- a three-day event that brings together
undergraduate and post-graduate students
for learning, networking,
and sharing their passion for software.
9.8: web: chris-granger.com`
Light Table --a new IDE concept
Despite the dramatic shift toward
simplification in software interfaces,
the world of development tools
continues to shrink our workspace
with feature after feature
in every release.
Even with all of these things at our disposal,
we're stuck in a world of files
and forced organization
- why are we still looking all over the place
for the things we need when we're coding?
Why is everything just static text?

Bret Victor hinted at the idea that
we can do much better than we are now
- we can provide instant feedback,
we can show you how your changes affect a system.
And I discovered he was right.
...
 all of this culminates in the ability to see
 how values flow through our entire codebase.
 Here I find a bug where I wasn't passing x correctly.
 I type (greetings ["chris"])
 and immediately see all the values filled in
 not just for the current function
 but all the functions that it uses as well.

Light Table is based on a very simple idea:
we need a real work surface to code on,
not just an editor and a project explorer.
We need to be able to
move things around, keep clutter down,
and bring information to the foreground
in the places we need it most.

Light table is based on
a few guiding principles:

You should never have to look for documentation
Files are not the best representation of code,
just a convenient serialization.
Editors can be anywhere
and show you anything - not just text.
Trying is encouraged
- changes produce instantaneous results
We can shine some light on related bits of code

Docs everywhere
When you're looking at new code
it's extremely valuable to be able to
quickly see documentation left behind by the author.
Normally to do so you'd have to
navigate to the definition of the function,
but lightable ghosts this information in to the side.
Want to know what partial does?
Just put your cursor on top of it.
This makes sure you never have to worry about
forgetting things like argument order ever again.

. we should be able to search all our documentation
in place to quickly see what it is.
Don't remember what was in the noir.core namespace?
It's one ctrl-f away.

This is especially handy for finding
functions you may not even know exist
and seeing their docs right there.
No need to look at some other generated documentation.

Instant feedback
.  to try things out, we can do better
than lispers' REPL - we can do it
in place and instantaneously.
For example we can type in (3 + 4)
and immediately we are shown the result
- no ctrl-enter or anything else.

Light Table takes this idea as far as it can
and doesn't just show you variables to the side,
but actually shows you how the code is filled in.
This lets you see how values flow through
arbitrarily complex groups of functions.

This level of real-time evaluation and visualization
basically creates a real-time debugger,
allowing you to quickly try various inputs
and watch it flow through your code.
There's no faster way to catch bugs
than to watch your program work.

We built drafting tables for a reason
. desktop windows aren't a good abstraction
for what we do as software engineers .
Other engineers have large tables
where they can scatter around
drawings, tools, and other information .
A drafting table is a better abstraction:
We shouldn't need to limit ourselves
to a world where the smallest moveable unit
is a file - our code has much more
complex interactions that we can better see
when we can organize things conceptually.
. We saw an example of this with Code Bubbles,
but why can't we embed a running game ?
Then we can interrogate it,
and have our environment answer them for us.
[9.8:
. an image in the article at this point
shows a desktop where a folder full of files
is represented by a box
whose title is named after the folder
with file names inside the box .
. the right side has boxes of code;
so, for each function you inspect,
it also shows you called function`bodies .)
--
. this reminds of composite editing,
where the editor holds the entire desktop;
so, it serves as desktop layouts that can be
suspended and resumed as if a vmware .
. desktops and their windows
can be edited the same as
when an editor embeds images in text .
. the first compound docs I saw
were ms`office embedded objects:
you could mix & match Word's text columns,
Excel's spreadsheet windows, and various images .
. browsers have this feature (the embed tag);
but browsers are short on editing abilities,
and editors need to be integrated with the OS;
such that I can open a file,
and it unleashes a desktop of windows
all arranged in the way they were before .
. also, the layout editor needs to
control the border style of its windows;
eg, embedded graphics in text
should often have no border at all .
. a 1st class composite document
has everything we like about vmware,
but instead of windowing OS's
our compositing app is windowing apps .]
Code with a little illumination
There's no reason our tools can't
help us understand how things are organized .
In light mode, Light Table lets you
see what functions are called by
the one you're currently working on,
not just by highlighting ones in your code,
but by also showing you their code to the side.
We shouldn't have to constantly
navigate back and forth to see this .

Finally, all of this culminates
in the ability to see not just how
things I type into a scratch editor evaluate,
but how values flow through our entire codebase.
Here I find a bug where I wasn't passing x correctly.
I type (greetings ["chris"]) and immediately see
all the values filled in
not just for the current function
but all the functions that it uses as well.

What languages will it support?
. The first two are Javascript and Clojure,
.... we hit $300k! Python will be the
third language supported out of the gate.
. additionally,
new languages can happen through plugins.

Will it be open source?
. a firm believer in open source software
and open source technologies.
we can guarantee you that Light Table will be
built on top of the technologies that are
freely available to us today.
As such, we believe it only fair that
the core of Light Table
be open sourced once it is launched.
At some level, this is an experiment in
how open source and business can mix
- it will be educational for us all.

What's a license then?
. In order to download packaged distributions,
you'll need a license. Preliminarily,
we're thinking, for individuals,
licenses will be based on a model of:
"pay as much as you can of
what you believe it is worth".
. This gives everyone access to the tools
to help shape our future,
but also helps us stick around to
continue making the platform awesome.
We think what we build will be worth at least $50,
and so that's what we've used for our rewards.

Is it a standalone app?
. there's an instance of webkit as the UI layer
-- completely an implementation detail.
It will run locally on virtually any platform
and out of the gate will support
the big three (linux/mac/windows).

Can I script/extend it?
. It will be scriptable in Javascript
(and many other languages can be
translated into Javascript).
Ultimately the goal of the platform
is to be a highly extensible work surface
- even the initial core languages
will be written as plugins.
This allows us to build development interfaces
we haven't even imagined yet.

What about key bindings?
. by using the awesome CodeMirror editor,
this is something that is easily adapted.
If you're looking for a way to contribute,
help improve CodeMirror
and its emacs/vim plugins!
--[
CodeMirror is a JavaScript component
that provides a code editor in the browser.
When a mode is available for your language
[c, python, go, js, ...]
it will color your code,
and optionally help with indentation.
. rich programming API and a CSS theming
for customizing CodeMirror
and extending it with new functionality.
. it's used by Mergely which is a
powerful online diff and merge editor
(Browser-based differencing tool)
that highlights changes in text.
It can be embedded within your own Web application
to compare files, text, C, C++, Java,
HTML, XML, CSS, and javascript.]

How can I help in the meantime?
. The better CodeMirror is,
the better all internet editors can be!
Past that, help us spread the word.
The more money we get
the more people I can involve in the project,
the more languages we can support,
and the more powerful the entire platform.
There's tremendous potential
-- we haven't even scratched the surface yet!

About the Developer:
. helped design the future of Visual Studio,
and released numerous open source
libraries and frameworks.
. for Microsoft was the Program Manager for
the C# and VB IDE
-- countless hours behind a one way mirror
learning how people develop things.
Since then steeped in the world of
startups and OSS.
. worked with the guys at ReadyForZero
to build readyforzero.com,
created the Noir web framework,
built the SQL abstraction layer Korma,
and released a host of ClojureScript libraries
to make client side development a breeze
- many of which are now featured in
the canonical books for Clojure.
Even more recently,
built Bret Victor's live game editor
after watching his inspiring
"Inventing on Principle" presentation .
Light Table at news.ycombinator.com:
One thing Light Table could pick up / learn
is the ability to scale as function set grows,
to gain a kind of fractal navigability.
--[. I think he's refering to the call tree idea
aside from the view's detail modes
(nodes-view vs thumbnails vs fullview)]
stcredzero/"I told you so!"
Smalltalkers have been doing [LightTable]
--[the right thing]-- since the 80's
(If only we could have communicated
about this as well as Mr. Granger).
The first and the last points [under Also:]
were satisfied by lightning-fast searches of
"senders" and "implementers" .
1980's smalltalk:
- Smallest unit of code is the function.
- Able to get instant feedback on code changes.
- Multiple editors with just one function in it.
Show code in an "area of concern" not just in a file.
- The coding environment can show also
results, app windows, graphics, other tools.
- Can save the configuration of the above.
Also:
- You should never have to look for documentation
- Files are not the best representation of code,
 just a convenient serialization.
- Editors can be anywhere
and show you anything - not just text.
- changes produce instaneous results
- We can shine some light on related bits of code .
shykes:
. Dan Ingalls, the father of Smalltalk,
has picked up the baton again,
this time using Javascript.
Check out the MIT-licensed Lively Kernel
-- a new approach to Web programming
. the live demo at JSConf was jaw-dropping;
completely in line with the Smalltalk legacy .
It provides a complete platform for Web applications,
including dynamic graphics, network access,
and development tools.
Field (programming environment)
. embraces most (if not all)
of Light Table's principles.
--
As always, the multi-media programming environments
are miles ahead and nobody knows about them.
Field[by The OpenEnded Group] is amazing.
{Max/MSP, Pd, ...} are a different paradigm altogether,
but have had live editing, documentation a click away, etc
and have been in heavy use for 20+ years.

list of multi-media programming environments?
. the big names are Max/MSP, Pure Data,
vvvv, QuartzComposer, SuperCollider,
ChucK, Processing, openFrameworks,
Cinder, and Field[The OpenEnded Group].
But there are many more smaller projects
such as Lubyk, Overtone, LuaAV,
Faust, Plask, Impromptu and Fluxus.
I also want to plug NoFlo, which is a
'flow-based programming' library for node.js,
which integrates with a visual editor.
the design of design book

gfodor, vdm, nickik:
recommend some reading materials?
Victor's writings
The Design of Design (see part 4)
simplicity’s virtues over easiness’
Alan Kay`Programming and Scaling [vid]
Viewpoints Research Institute
Mindstorms: Children, Computers, And Powerful Ideas
PLATO Learning System [vid]
Mindstorms: Children, Computers, And Powerful Ideas book udacity -- cheap edu
coursera -- cheap edu
khanacadamy -- free videos

2012-03-31

installing an ide #dev.pyqt

3.6: web.cyb/dev.pyqt/finding and installing an ide:

summary:
. see comparing ide's.
Spyder is running advanced examples .

pos: not eric? check qt for suggestions:
. eric doesn't even have any doc's?
[3.31: I had pretty unlikely problem;
I just needed time think or see a newsgroup ...]
why aren't I using qt's tools?
well, for that you should check their pyside site,
and see if they have any tools ...
[all they have is a reference to a tutor book
that is going to tell you to use Idle .]

proj: PySide is installed:
. why doesn't installation work? pyside is not installed?
I just misspelled it: forgot to camelcase PySide .
I tried from both the ubuntu software center
and from instructions from the PySide page
for getting it from the terminal . one of them does work .

qt's advice:
. Qt API is implemented in C++,
and provides additional features for easier cross-platform development.
QML – introduced with Qt Quick
is a CSS and JavaScript-like declarative, language
designed to describe the user interface of a program:
both what it looks like, and how it behaves .
Qt has signals and slots [doc.qt.nokia.com]
and Guarded pointers to avoid dangling pointers .

Bindings to Qt exist for several other languages,
including Ada,
and Python (pyside and pyqt).

PyQt [riverbankcomputing.com] (GPL/commercial)
    Tutorials [diotavelli.net]
API Documentation [riverbankcomputing.com]
    Reference Guide [riverbankcomputing.com]
    Book [qtrac.eu]
    Whitepaper [riverbankcomputing.com]
. use PyQt to create widgets that can be used in Qt Designer .
    KDE Platform and py bindings (source)
. mix PyKDE widgets and other classes
with PyQt widgets and classes, just as you would in C++.

PySide: Python for Qt [pyside.org] (LGPL)
    Wiki
    Documentation (tutorials, examples, API reference)
    Downloads, pyside-docs-latest.zip
    Mailing list [lists.pyside.org]
    Bugzilla [bugs.pyside.org]

qt-project.org
the PySide project now utilizes Qt’s Jira bug tracker.
Being a Qt Add-on provides PySide a permanent home
and perfect alignment with Qt Frameworks.
Furthermore, the project gets improved visibility, as well as a simple,
carefully thought out meritocratic project structure.
source code;
dev access .
docs

. diff's between PyQt and PySide .

eric seems flakey and not well doc'd:
[3.31: but only because it expected me to have svn installed,
and I missed the main technical report (out since 2011.8.16)
that serves as the primary documentation .]
. the 2nd tutorial (intro page)(.zip)
. eric's Web Browser's Technical Report
. eric forum .

check for how to install and config eric:
trust your package manager:
* Get rid of anything you've installed
outside of the package manager
* Open Synaptic (System --> Administration
--> Synaptic Package Manager)
* Type 'Eric' into the Quick Search text box

for eric4 you should have the following installed:
    Python 2.6.0 or better
    Qt 4.6.0 or better (from Nokia)
    PyQt 4.6.0 or better (from Riverbank)
    QScintilla 2.2.0 or better (from Riverbank)

3.7: web.cyb/dev.pyqt/finding and
installing an ide/spyder:

I'm looking at spyder's doc's from its menu
(file:///usr/share/pyshared/spyderlib/doc/installation.html)
and I'm thinking it's an IDE like ipython is,
but one of its recommended modules
is ipython:
. I don't think it pre-installed
what it recommends
because I just now was able
to install ipython and matplotlib;
ie, they were not already on-board,
according to unbuntu software center .

3.9: proj.cyb/dev.pyqt/
testing an ide with tutorial's code:

. this is my own xu path:
uservv@ubuntu:~$ $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:-
/usr/bin:/sbin:/bin:/usr/games:

. spyder is an ide started from the command line:
uservv@ubuntu:~$ spyder

. the integrated console looks like this:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2

. it has the normal control-o to open a file browser,
and then with hello world loaded that way,
hitting menu/run creates this in its console:
>>> runfile(r'/home/uservv/pyqt/chap01/hello.py',-
wdir=r'/home/uservv/pyqt/chap01')
Hello World
>>>
. the file it ran was this:
#!/usr/bin/env python
from __future__ import print_function
print("Hello World")

then I had it run a .pyw file, bringing up a window
that contained an array of numbers
pyQt gui in action!

3.23: todo:[done]
page192, 0382, has gui-driven file io example;
chapt 13 code is interesting for text editor code example .

proj.cyb/dev.pyqt/
qrc_resources module not generated:

I tried to run pythoneditor2.pyw,
but it returned ImportError:
No module named qrc_resources
-- Traceback (most recent call last):
  File "/home/uservv/0pyqt/chap13/
pythoneditor.pyw", line 24, in
    import qrc_resources
I think the book said there was
a program I need to run
in order to generate that missing resource,
but I thought for the examples
that would have already been done .

3.24: proj.cyb/dev.pyqt/
get the advanced examples running:
. find someone making the same mistake
(translated from german by google)
I bought myself the book
Rapid GUI Programming with Python on QT.
Now it is show some demos
so that it equals the error.
eg Chapter 15 assetmanager.pyw line 17
Code:
import qrc_resources
results in an error:
The program examined produced
the unhandled exception ImportError
"No module named qrc_resources"
solution:
In the archives of the sample files
are located next to the folders on the individual chapters
2 scripts called makepyqt.pyw and mkpyqt.py.
The former allows you to create GUI
even with the resource files in the folders.
This procedure is not necessary, 
you can integrate the resources via files.
But it is not a bad approach,
and it does not hurt to try it
as part of the book .
So just "python makepyqt.pyw" recursive call
and let all qrc_resources generate.
[it pops up the window "[make pyqt]
with the options to
recurse? translate? dry-run?
so I set it to recurse for do-all .
. then it has 3 buttons: build, clean, quit,
and I just hit build .]
The log then showed this message:
... converted to chap[...]/resources.qrc
chap[...]/qrc_resources.py

the conversion programs were in the root
of the sample's folder system;
there was also a readme that says this:
Two helper programs are provided:
mkpyqt.py (a console application),
and makepyqt.pyw (a GUI application).
These programs both do the same thing:
They run pyuic4, pyrcc4, pylupdate4, and lrelease
with the correct command line arguments.
In some cases you may need to
set the path to pyuic4 (pyuic4.bat on Windows),
and possibly to the other programs as well.
For mkpyqt.py this means editing the file itself
(the paths are in variables near the top);
for makepyqt.pyw, click "More->Options"
and set the paths there.
The use of these programs
is described in Chapter 7.
. the way I ran it with no troubles was by
cd'ing to the folder where makepyqt.pyw was,
and then using the current-folder qualifier
on makepyqt.pyw:
here's the result of the whole session:
uservv@ubuntu:~$ cd 0pyqt
uservv@ubuntu:~/0pyqt$ ls
chap01  ...       makepyqt.pyw
... gpl-2.0.txt  mkpyqt.py
... gpl-3.0.txt  README.txt
uservv@ubuntu:~/0pyqt$ python ./makepyqt.pyw
uservv@ubuntu:~/0pyqt$

. the editor sample project is working,
and the editor's open command
lets the user browse for a file !

comparing ide's #dev.pyqt

3.31: summary:
. I got spyder working on ubuntu 11.04,
running the summerfield examples .
. everything was installed by the
ubuntu software center .

3.6: pos: ide should be idle:
. my tutor suggests using Idle
(mark summerfield`rapid gui programming with python and qt)
. he said eric would be too complicated
for a beginner -- that was back in 2008;
I wonder what he would have thought of spyder ?

2012-03-29

menu-driven coding

3.5: adde/menu-driven coding/current vars list:
. when an interactive coding session is adding vars,
the menu is updated to show what's currently defined
-- this is part of the menu-driven coding capability
for the memory impaired .

2009-12-30

gui

9.4: adde/ide/assisting while preserving:
. when building the etree
how to differentiate the user's etree
from the additions adde makes doing
autocompletion or correction?
. each subtree needing change
is replaced by a menu list:
{ the original subexpr
, the other choices that adde guessed,
"(other) --- means the user can clarify
}
. when the issue is resolved
then menu is replaced with chosen etree .

11.1: adde/logging:
. when reporting a msg,
it auto'ly includes path which hyperlink to source;
it also links to process,
so clicking log entry to an active process
will activate to front the window of that process
( the source path is nothing but link,
and then adde is adding the link's name for human use) .

11.7: adde/gui/shimmering selection points:
. if window frames had larger selection points
they might get in way of data, but if shimmering ...

11.9: adde/gui/impl'details:

. the view is a tree of rect's,
since a rect may contain rects
just as a tree contains subtrees .

. all atomic types have a rectangular image .

. convert mouse coords to window coords .
. after mouse coords to window coords,
convert again(conceptually) to obj coord;
ie, the viewing window rect will often be
much smaller than the obj rect
so the obj can be scrolled
which chg's the translation from view.point to obj point .
. this way you don't have to
chg all obj rect ranges just because of a scroll .

. each rect subtree has location ranges
and a list of subrects .

. word wrapping depends on
both the line size (column width)
and word size (character height
or prefered size of other atomic types):
. small words (having few char's)
have their own word code (they are word.atoms)
while larger words are
sequences of word.atoms (word.ules)
eg, anti-dis-establish-ment-arian-ism .

. height of atom determines height of line
but title lines are larger (or rarely smaller) .

. say most lines are 10pixels high;
then obj coord/10 gives approx line #;
so then can ask for coords of line's rect;
if coord greater than cursor coord
try prev'line etc .
. when a graphic is embedded in text
. the word wrap has to divide the current column
into 2 columns:
one for the pict,
and then the remaining space holds any text that was
between pict and the next newline .
ie, a pict placed at the eol [end of line]
means don't have any text beside the pict .
. you can see this as 3 text rec's
and one graphic rect .

. a simplifying idea (though not a surely portable one)
is that gui toolkits like the one on mac
can help you with the details if you
view text emedded with pict as
really being separate windows
that are made to stay together .

11.21: news.adde/what your doing now, only with a 2nd life added:
. The web today does not optimise for human behaviour.
When we use it we are usually alone and it is not live.
In a Second Life store you can see other people,
sit with and talk to them.
I envisage we will move a lot of what we are doing on the internet today
into these more lifelike, 3D spaces.

11.7: news.addx/portability:
. mouse-still-up is appreciated but not always available .

11.16: addx/admin vs user modes:
. admin mode is there to offer a safe user mode
for untrusted or naive users .
[12.25: it would be a filter allowing the user to do
some admin activities while also preventing
the sort of damage that would only occur accidently
or from vandals .
]