Showing posts with label mac. Show all posts
Showing posts with label mac. Show all posts

2012-07-25

Mac gets some optional Sandboxing

6.2: news.cyb/dev.mac/sandboxes
Apple brings sandboxing to the desktop:
. most PCs have not been into sandboxing
[because backward compatability was an issue;
smartphone platforms are more recent inventions,
so sandboxing is an obvious good .]
. to access resources within a sandbox,
apps must request “entitlements” [aka, capabilities.]
Android apps must ask the user for permissions
and then the OS constrains the app
to the allowed permissions .
[ but Android apps may be all-or-nothing:
either the user accepts all the requests,
or else the app fails to be usable at all .]
Apple’s iOS sandboxing doesn’t involve the user,
as all permissions are handled by
Apple's App Store evaluators .
[7.25:. in order to be accepted into the app store,
developers must divide their app into modules
so as to more easily explain why each part
needs a particular set of entitlements .][7.20:
Apple decides for the user,
what entitlements are appropriate,
not only for the whole app,
but more smartly, for each of its modules .]
. iOS users can still control certain entitlements:
(eg, opening a list of recent files
or saving documents elsewhere in the file system).

Concerns from Developers:

# no more AppleScript:
[7.20:
AppleScript is a programming language
meant to allow the user to reuse apps
by having scripts make calls to apps .
. if an app wants to reuse other apps,
then it too can use AppleScript
to make calls to other apps;
however, in sandboxing this can't be done,
because,
when an app is entitled to AppleScript
it's entitled to anything AppleScript can do
-- which is basically anything!
. if apps are instead designed to be
reused directly by other apps
then sandboxed apps can still be
entitled to use particular other apps
without having to give them access to
the wide world of AppleScript .]
# no more file system management: [7.20:
. Apple sandboxing asks the user
for each and every file access;
so, apps that need access to many files
or that need to work in the background
are not considered sandboxable;
nevertheless, sandboxing of the file system
could work like vmware's shared folders:
. vmware lets you run an OS in a sandbox
as a virtual machine (vm);
and then gives the vm {read, write} access
to just the folders the user requests
(Virtualbox has a similar feature).
. you can divide your file system by sensitivity levels;
eg, if the sandboxed app has access to the web,
then give it entitlements should be
read-only access to non-sensitives,
and write access to a downloads folder .
. letting sandboxes share folders
is important to generativity .]
. see Jonathan Zittrain's Chapter 7 of
The Future of the Internet and How to Stop It .

2012-07-19

Python with GUI on Mac

6.30: summary:
. after seeing David Mertz's
Text Processing in Python/SECTION 3
/Platform-Specific Operations,
I'm seeing Python has a Carbon API,
which you'll now see is deprecated,
so, I wondered if there's a Cocoa API now .

. other than extending and embedding C,
python is not really supporting cocoa:
. the latest python version does offer
platform-specific modules
but only for Windows and Unix
(unix does includes mac and any
Cocoa binaries that are runnable from the shell,
so our access core services
is by feeding text to a shell?! ).

. the best idea I found was ObjP:
-- much less complex than PyObjC --
it's a code generator that helps with both
embedding python into obj'c,
and extending python with C
from which you can use obj'c .
. if you'd still rather use PyObjC,
there is support for it in xcode 4 .
(see Xcode4CocoaPythonTemplates)

. a future idea I found from this search
was a python equivalent to Apple's MacRuby:
instead of being a bridge to cocoa,
it would have Python implemented in Cocoa
-- just like Jython is impl'd in Java . Mython ?

6.30: AppleScriptable or stay with Python?:
. mac's vision for scriptable app's
revolves around the use of AppleScriptObjC,
which expects you to write your tools in obj'c,
and then compose tools using AppleScript .
. obj'c can compile and run AppleScripts
by using NSAppleScript .
. Python can do the same with osascript
-- call AppleScripts from python --
or
NSAppleScript -- build & run it in Python .
. see Designing for Scriptability
about ensuring your interface language
fits in with AppleScript ...
and before you give up, consider this:
many of your users
might rather reuse your code with
Apple's Automater or Applescript Editor
than with python's tools .

2010-04-30

cross-platform means a deep binding

4.11: news.adda/cross-platform means a deep binding:

summary:
. Apple is disallowing the use of code
that uses an intermediary translation
or compatibility layer .
. the important thing is that when intelligently done,
intermediary translations are no different than
people translating pseudocode to the target language .
. you'll know when it's intelligent
because they won't be able to enforce it .

rationale:
. this rule is just being fair to
dev's that spend the extra time
to get their code designed for efficiency;
Apple is acknowledging how important it is
to be first to market with an idea,
and if people are creating virtual machines
this will make it easy to be first to market
but at the expense of keeping the app' efficient .
. the xcode system will generate code that follows certain rules,
and it would not be easy to quality-check the app'
unless the code is following those rules .

rationale @ daringfireball.net
. what Apple does not want
is for some other company to establish a
de facto standard software platform
on top of Cocoa Touch.
Consider a world where some other company’s
cross-platform toolkit proved wildly popular.
Then Apple releases major new features to iPhone OS,
and that other company’s toolkit is slow to adopt them.
At that point, it’s the other company
that controls when third-party apps
can make use of these features.

co.android alerts dev's to Apple's major change .

daringfireball.net 8 April 2010
. section 3.3.1 of the iPhone Developer Program License Agreement:
Applications may only use Documented APIs
in the manner prescribed by Apple
and must not use or call any private APIs.
. the 4.0 SDK beta now adds:
Applications must be originally written in
Objective-C, C, C++, or JavaScript (iPhone OS WebKit engine)
and only code written in C, C++, and Objective-C
may compile and directly link against the Documented APIs
(e.g., Applications that link to Documented APIs
through an intermediary translation
or compatibility layer or tool
are prohibited).
Steve Jobs explains:
“intermediate layers between platform and dev'
ultimately produces sub-standard app's
and hinders the progress of the platform.”
a response:
. it doesn’t make sense to limit
source-to-source conversion tools like Unity3D
--
unity3d creates a complete XCode project that just works!
. using iPhone Remote,
you can use an actual iPhone or iPod Touch device
to view and test your game live,
right from the Unity Editor. [using javascript on the web]
--
Unity3d's CEO:
. In the ancient days of the App Store (July 2008),
Apple very late changed the kernel to disallow
JIT (just-in-time) compilation.
What we did instead was spend several months
changing Mono to compile scripts
AOT (ahead of time) instead
(this is why some dynamic constructs in our JavaScript
doesn’t work on the iPhone).
my response:
. if Unity3D is disallowed,
at least they are ahead with a source-to-source tool;
now all they have to do is make it a deep binding:
convert their graphics library functions calls
directly into cocoa graphics calls .

4.29:
. the mac#iphone expects code to follow the idioms,
and this is achieved by very intelligent transforms:
adda code -> mac idioms .
. each platform needs its own adda backend;
adda's oop system should not be concerned with
having a shallow binding to various other oop systems .
. adda's front end should turn human ideas into
expression trees that can be analyzed by computer,
rather than using the idioms of a given platform;
and then,
adda's backend for the mac#iphone
should be able to translate human ideas to
iphone`particulars
-- the same way a programmer does
(this is the sort of work lisp was invented for).

4.30: my response after reviewing the issue:

Ludd·ite:
Pronunciation: \App'll\
Function: noun
Etymology: perhaps from Ned Ludd, 18th century Leicestershire workman
who destroyed a knitting frame
Date: 1811
. one of a group of early 19th century English workmen
destroying laborsaving machinery as a protest;
broadly : one who is opposed to especially technological change .
— Luddite adjective .

2010-02-28

dvcs with gui on mac for securing data

2.28: summary:
. notes of my journey deciding on Mercurial .

2.1: news.addn/dev/scm/internals of git:
. the popular $9 [Git internals] book from Peepcode.
conceptuals:
http://www.eecs.harvard.edu/~cduan/technical/git/
man page everyone should read:
http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html
...
http://www.stevestreeting.com/2009/08/06/getting-more-structured-with-my-dvcs-tests/

2.1: proj.addn/dev/scm:

. how is svn on {tortoise, mac} knowing where to check;
is there something integrated on mac?
. how do you limit growth of the time mach aspect?
be careful with your updates (don't commit a bunch
you'll only be deleting later);
export and reimport .
. make sure backup is obvious when transfering things to git .
. consider project size;
is svn smarter replacement of mac timemach?

web:
scripts instead of gui
http://svn-finder.sourceforge.net/

http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients
SmartSVN 79.00
xMerge add-on (Merging renamed/moved files) 399.00 USD
http://www.syntevo.com/smartsvn/index.html
. after that, I'm wondering if that lack of xmerge
was the reason git's inventor calls svn braindead .

http://versioncontrolblog.com/comparison/Bazaar/CVS/Git/Mercurial/Subversion/index.html
. hg might have better doc's?
and it's already installed on mac x.6 .
http://mercurial.berkwood.com/
The hg executable is now placed in /usr/local/bin for all versions of the installer.
For OS X 10.5 & 10.6
The package uses the default Python installation that comes installed.

darcs might fit my use case well

http://wiki.bazaar.canonical.com/MacOSXBundle/SnowLeopard
http://bazaar-vcs.org/WindowsDownloads

http://stackoverflow.com/questions/2105278/is-there-a-way-for-bazaar-to-automatically-detect-and-apply-changes-made-in-a-wor
Is there a way for Bazaar to be able to automatically detect changes (adds, removes, renames, etc.) made to part of the working directory and automatically apply them?
It looks like the automv plug-in will automatically detect renames and moves. This, along with bzr add * should do the trick.

http://www.stevestreeting.com/2009/09/28/early-stage-gitmercurialbazaar-evaluation-thoughts/

bzr copy doesn't work as expected
https://bugs.launchpad.net/bzr/+bug/269095

there is a rebase plugin available for Bazaar ( bazaar-vcs.org/Rebase)
and a queues one (launchpad.net/bzr-loom).

Bazaar does line-ending conversion already, since 1.14:
through a plugin (bzr-eol)..

http://doc.bazaar-vcs.org/explorer/en/visual-tour-windows.html

http://wiki.bazaar.canonical.com/BzrUsingBoundBranches
Bound branches are a way to make sure that both a local branch
and a remote branch have the same revisions.
This is particularly useful if one likes to work on two machines .
online plugins guide


pos.addn/dev/scm/for mac and pc:
. maybe I can use svn on pc side,
then use timemach on mac side?
Using Git With OS X: 6 Tools to Get You Up and Running


2.2: proj.addn/dev/scm/installs not going as expected:
. explore downloads meant for installing,
didn't I miss something about scm?
I looked at several things yesterday,
and I don't have anything in a context menu .


http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients
http://better-scm.berlios.de/comparison/comparison.html
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#User_interfaces


bzr-explorer for mac looks great
but the installers are only for pc:
https://launchpad.net/bzr-explorer/+download
download icon bzr-explorer-setup-0.11.2.exe (md5, sig)
Windows universal installer 198
download icon bzr-explorer-0.11.2.tar.gz (md5, sig)
Source code
. the visual tour of that .
however:
Standalone Installer page says it includes several gui's:
This is typically the best choice for most users and includes:
* the core Bazaar distribution
GUI clients - Bazaar Explorer, QBzr and optionally TortoiseBzr
numerous bundled plugins including BzrTools, bzr-svn, bzr-upload and bzr-xmloutput
* bundled Python (currently 2.5) interpreter with most (but not all) libraries.

for mac, there is a set of tools, no gui :
http://wiki.bazaar.canonical.com/MacOSXBundle/SnowLeopard

mac.mercurial.gui
http://www.jwwalker.com/pages/macmerc.html

mac.mercurial.gui#tortoisehg
http://tortoisehg.bitbucket.org/
http://bitbucket.org/tortoisehg/stable/wiki/ReleaseNotes


mac has tools update here
http://mercurial.selenic.com/wiki/mercurial-1.4.3_20100201-py2.6-macosx10.6
and great doc's;
http://hgbook.red-bean.com/
it also has a pkg that includes hg with tortoise for pc .
. it's the same one I got here: http://tortoisehg.bitbucket.org



textmate has scm support,
group collects why textmate is great;
http://stackoverflow.com/questions/33813/what-are-some-useful-textmate-features
note there is a clone for pc too:
http://www.e-texteditor.com/
co.dev:
http://e-texteditor.com/blog/category/tutorial


http://stackoverflow.com/questions/1598759/git-and-mercurial-compare-and-contrast


2.7:
[@] proj.addn/backup/log under hg control



2.8: bk.addn/dev/scm/patches:

. patches are files that show how 2 versions of a file differ .
. they're an alternative to journaling files
describing all changes in terms of
whole-line deletions and insertions .
. each contiguous pair of deletions and insertions
is refered to as one hunk of the patch .

. unix makes a patch with diff(txt,txt).patch,
and applies a patch with patch(patch).txt
. patch() doesn't represent folder systems exactly:
file creation doesn't show up if no lines were added;
and, file deletions don't show if the file was empty .

. patches are still being used as an alt' to
scm or version control systems
since the effect of each patch is the same as
one changeset -- the changes produced from
moving from one version to a child version .
. patches are typically used for customizing a codebase;
esp'ly when you aren't influential with that project
and can't get them to add your patches
as conditional compilation stmt's .
. in some large projects like the Linux kernel,
replacing patches with conditionals
would make the code unreadably complicated .

. combining scm with patching,
changes can be saved as a patch:
at any point where you could hg`commit,
you could instead diff() .


2.8: tips from trinitycore.org:

A tip about merging tool.
kdiff3.args=-L1 base --L2 local --L3 other $base $local $other -o $output
kdiff3.args=-L1 base --L2 local --L3 other $base $local $other -o $output --auto
sometimes you have hundreds of files to merge
but kdiff3 can solve conflicts automatically.
If you do not add "--auto"
you have to manually close the spammed kdiff3 windows.

hg serve
. the webserver option allows us to create
a great looking repo page for your local repo
on any port of your choosing.


proj.addn/dev/scm/eoln:

2.7:
. for getting eoln's done right,
-- where files checked out to a pc have pc eoln's --
my plan is to use yet another clone
on the main hard.drive,
after affecting some setting,
is this right?:
[configure repo'].window/diff/[Patch EOL]
-- default is no normalization,
so it's set to: platform?
( pc: crlf
, mac: lf
) .
you can tell when you've done this right
because agent-ransack or notepad will act right
and not ball-up the whole file on one line .
. instead of doing another clone,
I'll just add a working dir' to backup's clone
with backup`menu/tortoiseHg/update .

2.8: correction didn't take:

. after changing the hgrc file,
I cloned that to my xp's shared.folder;
but this did not work either .
. maybe I should clone without update,
then modify the new clone's hgrc,
then update .
. in any case I should do more booking:
file:///C:/Program Files/TortoiseHg/docs/hgrc.5.html

Filters for transforming files on checkout/checkin.
The most common usage is for
LF <-> CRLF translation on Windows.
For this, use the "smart" converters
which check for binary files:

[extensions]
hgext.win32text =
[encode]
** = cleverencode:
[decode]
** = cleverdecode:

Win32TextExtension short-comings:

biggest problem:
* The settings are not part of the repository
so all users must configure it for each clone.
[2.9:
. they would rather replace universal eoln's
with metadata which tells all cloners
that a given file or file`type
is supposed to use a particular eoln;
meaning that there must unversally be
tools that support a file's current eoln type .
Mark Hammond Dec 1, 2009:
. server-side hooks that force the line endings?
(ie: project/.hg/hgrc#[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf
)
. this would only apply at *push* time,
not commit time. [ie, this may help the central repo,
but the lower-level repo's will have
already had their repo' histories destroyed .]
Given the distributed nature of hg
it seems that by the time a server-side hook kicks in,
the damage has already been done .
]

tips from trinitycore.org:
some bugs related to eol:
1. your patch modifies the whole file instead of only a few lines
2. you cannot apply patches (hunk failed)
3. your whole file is modified even if you did not change it
4. you cannot open .sln files using vc++

how to solve the problem:
1: apply hgext.win32text to [user's] global config file
[... and other steps if you're applying patches]
2: re-clone your local repo (must re-clone)
3: dos2unix and unix2dos are also handy:
. a patch is usually made with Unix`eoln's
but the patch needs dos`eoln's (with unix2dos)
in order to be applied to a source
that is cloned under the win32text extension .

another mod having a similar effect:
I was having a problem with
differences in whitespace
showing up into my patch files.
This added to my .hgrc helped that:
[diff]
ignorews=True
-- also, I no longer need to run this after updates:
dos2unix `find ./ -name '*.cpp' -o -name '*.h'`

2.9: here is the eoln ext's man'l!

. the reason for the change not sticking
was that the encode or decode filter settings
should not be changed while you have files checked out
- use hg update null
to remove any working files first.
[from the gui, tortoiseHg,
it might be easier to delete and reclone]

the filters come in two variants:
A "dumb" filter which modifies
anything looking like line endings
in all files it is applied to,
and a "clever" filter which only works on
files NOT containing zero bytes.
[what does "(not work) mean ?]
The simple heuristics used by the "clever" filter
will fail in some cases,
but it often works so well
that it can just be applied to all files.

a warning about the eoln extension:

. win32text is user-specific, not repo-specific.
This was not what we wanted;
svn's svn:eol setting is really handy
and has turned out to be great to have around.
. the hgeol extension currently under development
tries to mimic svn's eol function .
http://bitbucket.org/mg/hg-eol/overview/
. the plan is to have the .hgeol file
http://mercurial.selenic.com/wiki/EOLTranslationPlan
under version control
It would specify how files should be checked out
(e.g. native for the OS, \n, \r\n, or binary)
and make sure that no checkins
are going to lead to bad line endings.
[... but for now]
seems the encoder doesn't work
during conversion as the 'crlf'
commit hook fails.
Is it currently possible to correct the EOL
style of files during repository conversion?


. I used the win32 eoln extension
without the patch option, restarted,




2.10: sci.addn/dev/scm/hg`mov:
. after adding and moving,
I did commit/add (all);
then I tried the commit/mov.button,
and got this msg:
no movables; only clean files files can be moved .


2.12:
web.addn/dev/scm/hg/TortoiseMerge:

. TortoiseMerge is the merge tool that comes with TortoiseSVN;
here is a note on using it from TortoiseHG:
http://sundae.se/2008/06/10/using-tortoisemerge-in-tortoisehg/
. there were some conflicts from commenters,
and some known caveats weren't mentioned,
so I need to check this against the doc's, and some testing .

. add the following to your mercurial.ini file:
. My TortoiseSvn installation has a space character in the path,
so I need to add quotes around the file locaters:
To use this, I have to set Global setting or repository settings
to use myTortoiseMerge as
“Visual diff command” and “3-way Merge Tool”.

merge = filemerge

[extensions]
hgext.extdiff =

[extdiff]
cmd.vdiff = "C:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe"
myTortoiseMerge = "C:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe"

[merge-tools]
filemerge.executable = "C:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe"
filemerge.args = /base:$base /theirs:$other /mine:$local /merged:$output

[tortoisehg]
vdiff = myTortoiseMerge



2.28: mis.addn/dev/scm/xpw.tortoisehg is getting complicated:

major pim change:
. log current year is part of pim.folder
. past log years are in log.folder .

trouble committing (2008 tucs)`L/2008/06 jun/System Scan - PLEASE WAIT - Scan in progress.html!
transaction abort!
rollback completed

[Errno 13] E:\pim\(2008 tucs)`L/2008/06 jun/System Scan - PLEASE WAIT - Scan in progress.html: Access is denied
[command interrupted]

. perhaps the reason for the access denial
is there is a file with nearly the same long name?
rename the other one .

(2008 tucs)`L/2008/01 jan/00.txt~: The system cannot find the path specified


. that error was a mystery as it wasn't reproducable .

google'code fully supporting mercurial repositories

2.7: proj.addn/net.g'code/getting started with hg repository:

booking

. before figuring out that I could use hg instead of svn,
I did try the [Reset This Repository] for the addx project:
"(
Did you just start this project
and do you want to 'svnsync' content
from an existing repository into this project? yes:
Warning:
Resetting the repository will delete
everything in the repository and its history.
This includes project wiki files.
Reset this project's Subversion repository
from revision 1 to revision 0.
A project owner can then use the svnsync tool to upload existing code history.
)
. Mercurial an option for all yet? yes:
"(
Convert your project from Subversion to Mercurial
http://code.google.com/p/support/wiki/ConvertingSvnToHg
1. Go to project/Administer tab/Source tab
[eg, mine is https://code.google.com/p/addx/adminSource]
2. Change the repository type to Mercurial
parameters:
* Root directory: /
* Trunk directory: /trunk
--[ change this to empty because my current repo
is empty so /trunk doesn't exist .]
)
. all projects were converted to hg repo's:
for add* in {addx, adda, adde, addm}:
https://code.google.com/p/add*/adminSource
default: https://add*.googlecode.com/hg/
wiki: https://wiki.add*.googlecode.com/hg/

. now the source page confirms I'm with hg:
get a local copy of the add* repository with this command:
hg clone https://add*.googlecode.com/hg/ add*

easy downloads
. use the Downloads tab to upload compressed files.
(eg, mine is https://code.google.com/p/addx/downloads/entry)
. choose the file names carefully
as you cannot change it later. [except by deletion]
[. the downloads could be
the easiest way for everything:
. doing doc's by wiki is ok on a netbook,
but if you have a prefered html editor,
the best way by far to distribute doc's
is to simply zip the folder structure into
one downloadable book .
. if working alone, then this is the way to
keep your source code in any repo system you want
(eg, you could migrate from hg to git);
however, the problem with monolithic downloads
is not being able to update them incrementally:
it gets expensive on bandwidth
to re-upload the entire thing for each revision .]
todo:
. predefined download labels useage
was a mystery to me for now ...
https://code.google.com/p/addx/adminDownloads
[2.28: perhaps becomes obvious during an upload .]

todo: [2.28: done] uploading to g'code with a gui
. there is a how-to for using TortoiseSVN,
it needs to be adapted for use with Tortoisehg ....
[2.28: done with the help of tortoiseHg tutorial]
"(
. find your google'code ID in your project's home page,
eg, for project addx, home is:
https://code.google.com/p/addx/
at the bottom it tells the owner's name:
-- mine's dr.addn, as seen here:
https://code.google.com/u/dr.addn/
. to find your assigned g'code password
see g'code's "Settings" tab .
. In Windows explorer, [on the mac? try vmware]
right click in your repo' directory's context menu,
and choose TortoiseHg/Repository Settings/Sync.tab/add.button
and then the dialog is obvious about filling in
your g'code hg repo contact details:
( URL: https://addx.googlecode.com/hg/ (for the addx project)
, user: dr.addn
, password: (see http://code.google.com/hosting/settings)
)
. now to do the uploading to your hg repo' at g'code,
right click n your local repo' directory's context menu,
to get TortoiseHg/Synchronize .
. the dialog will have a line that says:
[repo:][bundle:][(repo' pull-down menu)] post pull:[(pull-down menu)]

. when you pull down the [(repo' pull-down menu)]
you will see the contact details you filled in during
context`menu/TortoiseHg/Repository Settings/Sync.tab/add.button
mine looks like this:
https://dr.addn:***@addx.googlecode.com/hg/
(the *** represents the password you entered) .
. select it to make it show in the menu .
. now at the top of the dialog is the push.button;
ie, a button that launches the Push command;
pushing your local repo's state into your g'code repo .

tortoiseSVN is still there
. here's a google-authored page for
using g'code with tortoise svn instead of hg .
. it recommends an svn client for mac too .
(zigversion.com)
[2.28: I'm using tortoiseHg on the mac via vmware
which allows windows to run in a mac window .]

2009-12-26

use of git to download a project

6.28: proj.addn/mac.git/use of git to download a project:

imac:~ addn$ man git

[1]+ Stopped man git
imac:~ addn$ git git://github.com/timburks/cocoa-programming-with-nu.git
git: 'git://github.com/timburks/cocoa-programming-with-nu.git' is not a git-command. See 'git --help'.
imac:~ addn$ git --help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate|--no-pager]
[--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
add Add file contents to the index
bisect Find the change that introduced a bug by binary search
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG

See 'git help COMMAND' for more information on a specific command.
imac:~ addn$ git clone git://github.com/timburks/cocoa-programming-with-nu.git
Initialized empty Git repository in /Users/addn/cocoa-programming-with-nu/.git/
remote: Counting objects: 404, done.
remote: Compressing objects: 100% (182/182), done.
remote: Total 404 (delta 150), reused 404 (delta 150)
Receiving objects: 100% (404/404), 661.32 KiB | 197 KiB/s, done.
Resolving deltas: 100% (150/150), done.
imac:~ addn$

2009-07-12

Ada bindings to Objective-C and Mac`Cocoa

6.11:
. cocoa-gnat is google-hosted startup that is more of an ad than a project
calling for 2 levels of GNAT Ada compiler bindings
to the Objective-C run-time API
and the Mac OS X Cocoa framework:
(1) A thin, low-level Objective-C-like Cocoa binding
written in Ada that corresponds one-to-one
with the Objective-C data types and runtime functions
(2) A thick, high-level Ada-like Cocoa binding written in Ada
that uses Ada features like overloading and genericity
to raise the level of abstraction while providing the benefits of
compile- and run-time checking
--. nothing is made,
just a bug report pointing to an Ada forum
that is pointing out that the project is empty .

. when thinking about interfacing Ada to Cocoa
my first idea was to think of Ada as
just replacing the C part .
. the Objective-C part is actually implemented in C
and can be dynamically linking code by
having C call a run-time module .

. I finally thought that the most bug-proof way to bind Ada,
was the same way I had in mind for adda:
use a lang-to-lang translator that translates your language
into the language that your target platform prefers .
. well, it turns out that such an idea was already tossed out,
known as an Objective-Ada pre-processor;
and here was the response:
It'll hurt ability of manipulating source code with 3rd party utilities
It is opposed to Ada spirit.
. others also said this:

Objective-C should be dealt with
the same way as COM on Windows;
except that you're using apple`BridgeSupport XML instead of IDL.

. BridgeSupport XML files are apparently for addressing
this problem:
. binding to an OO[obj'oriented] Lib in another language
is a job without end
as all libraries are constantly extended.
While BridgeSupport sounds good - will it work with GNUStep as well?
a. Cocoa is a superset of OpenStep
b. BridgeSupport files are automatically generated from headers

. other thoughts I had:

. the whole point of a pre-processor is to change the language;
but the primary mission of Objective-C
is something that ada has already addressed:
. the idea of dynamically interchangable modules
is the essence of Objective-C,
and in Ada we can do this by re-compiling the body of a package .
. the next time we run the system, it uses that body .
. every other feature depends on a c-based run-time;
and ada interfaces to c .
7.12:
. actually, another service of Objective-C
is that run-time that lets you call a variable function;
ie, instead of calling a particular function on a variable object,
everything can be variable:
call( [pointer to my obj], [pointer to name of function I want applied]) .
. Ada users would also need to follow a Reflection protocol,
where, for every class you define,
you have to declare similar information to a database
. the full power of the Objective-C 2.0 Runtime
is detailed in the Reference

this reference is useful primarily for developing bridge layers
between Objective-C and other languages,
You typically do not need to use the Objective-C runtime library directly
when programming in Objective-C

8.29: co.adda/macada/why is xcode changing its interface to new langs?:
. why is xcode changing its interface to new langs?
. this is another reason why I'm into
compilers that convert your lang into the platform lang .