Emacs Multi cursor!

Some “new” shiny IDE feature smart multi line editing, for instance for easily copy-past a block of code and then modifying it “live”.
Sublime text has some feature like this…. and Emacs?

Emacs has a package for it called…Multiple cursors!

This video on “EmacsRocks” shows you some powerful use

Emacs insert series

In Excel you can easily fill in a column with a list of values.
Some times also in Emacs you my need to write down a bunch of similar code.
The dotimes function with the “elsp eval”
M-x : (Esc + : on windooze)
will solve your trouble easily.
Try out this code on scratch buffer:

(dotimes (i 15) (insert (format "Guys born on %04d will be %02d years old on 2017 \n"  (+ 1970 i) (- 2017 (+ 1970 i)) )))

and live happy

Also, in a regexp replace you can use the ‘ \, ‘ syntax to push an elisp expression:
For instance enter \,(1+ #1), where , indicates that an elisp form to substitute follows, 1+ is an increment function, and #1 is the first captured match text, interpreted as a number.

Example of camel case transformer:

M-x replace-regexp
Replace regexp: \(\w\)\(\w+\)Value(
Replace regexp with: get\,(upcase \1)\2(

Italian Accent Oracle fix

In Italian language we have accent words like àèéìòù

They are quite important because for instance “is” is spelled

è

whereas “and” is spelled

e

Accent are bad guys even today: if you copy them from MS-Word inside an Oracle sql script you can end up with different UTF-8 values.
Also the accent are likely to be destroyed if you past them in your html page without using the correct html entity (i.e. è )

Sometimes you need to export the data inserted with accent: an Oracle Virtual column can be an elegant solution….if you have at least Oracle 11g.

 

Also a magic update can fix some nasty problems….here the solution:

 

ALTER TABLE TEST_TABLE ADD( NAME_NORMALIZED generated
always
AS
( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
ACCENT_COLUMN,
'à','a'''),'è','e'''),'é','e'''),'ì','i'''),'ò','o'''),'ù','u''') ));

Atari2600: the pong machine

L’Atari2atari2600600 è stata la prima console giochi casalinga, ed è stata commercializzata nel 1977. Ha resistito al collasso del mercato dei videogiochi del 83-84 ed è rimasta in produzione fino al 1992.

Do dove viene il suo successo, intimamente legato come vedremo al c64?

La 2600 era composta da tre chip

Il microprocessore si chiamava 6507, ed era una versione modificata del 6502 inventato da
Chuck Peddle nel 1975. Chuck aveva lavorato in General Electric ed in Motorola, durante la fase finale della produzione del 6800.
Pensò quindi di produrre un micro-controllore più economico con un nome simile (6500). Inizialmente il suo target non erano i computer.

L’Atari2600 era composto da un 6507, un 6502 con meno pin che poteva indirizzare solo 8Kb di RAM e senza la possibilità di gestire interrupt. Leggiamo da wikipedia:

Smaller packaging was, and still is, an important factor in overall system cost, and since memory was very expensive at the time, the 6507’s small 8 kB of maximum external memory space was not going to be used up anyway.

Il gruppo di Peddle aveva anche realizzato un chip aggiuntivo con 128byte di RAM e un timer, il MOS Technology 6532.

Completava il terzetto un chip che gestiva la grafica ed il sonoro chiamato Television Interface Adaptor (TIA). Il TIA aveva una risoluzione di circa 160×192 pixel, e poteva gestire anche degli “sprite”.

La ROM era di 4Kb (per una limitazione del connettore della cartige) e quindi per avere più memoria si doveva usare il bank switching.

Programmazione

Come avrete notato non ci sono interrupt. E neppure tanta RAM. Non pensavo neppure potessero esistere computer basati sul 6502  con meno di 256 byte.
Il TIA andava programmato in modo “sincrono”, picchiettando nei suoi registri la grafica che doveva disegnare (sprite e sfondo di gioco).

La rilevazione degli input del joystick, le collisioni e la game logic andava fatto nei buchi di tempo tra un ridisegno e l’altro dello schermo. Per fortuna era possibile sincronizzarsi con l’inizio di una riga scrivendo in un registro chiamato WSYNC; la CPU veniva bloccata fino al ciclo successivo:

Simply writing to the WSYNC causes the microprocessor to halt until the electron beam reaches the right edge of the screen, then the microprocessor resumes operation at the beginning of the
68 color clocks for horizontal blanking. Since the TIA latches all
instructions until altered by another write operation, it could be updated
every 2 or 3 lines. The advantage is the programmer gains more time to
execute software, but at a price paid with lower vertical resolution in the
graphics

Ho visionato il codice sorgente (assembly) di alcuni giochi, e benché sia un fan del 6502, programmare l’Atari non era semplicissimo, soprattutto perché con appena 4/8Kb di ROM per la grafica e meno di 200 byte di RAM, di certo non si poteva fare molto.

Ora successe che l’Atari2600 divenne veramente economico.

In 1977, an Apple II cost $1,298, while Atari sold the VCS for $199.

http://www.slate.com/articles/technology/the_browser/2009/03/speak_atari.html

Il 6502 fu la lingua franca degli anni ’80. Il 6502 era usato dall’AppleII e dal C64. Era la “Java Virtual Machine” degli anni ’80. Inoltre il concetto di copyright era ancora molto confuso per i videogame, per cui le terze parti potevano fare dei cloni dei giochi cambiando la grafica e venderli, schivando le cause di Atari (che comunque reagì legalmente in alcuni casi).

Per cui era facile trovare team che lo potessero sviluppare conversioni di giochi e l’Atari2600 resse nonostante la crisi dell’83 e alcune pessime conversioni (come quella di PacMan).

Quando la nintendo presentò il NES ed il mercato si riprese, l’Atari2600 era ancora vivo, nonostante le console atari successive non lo fossero.
E’ come se la PS2 vendesse più della PS3 o della PS4… mettendole fuori produzione…

Per approfondire:

 

ORA-01461: can bind a LONG value only for insert into a LONG column

Disapprove with me!
Disapprove with me!

Okey, you know Oracle. A very good database, a very old database, a very solid rock. Not famous for its error messages. I have already stumbled upon a misleading error on the old rock.

This error anyway is incredible. If you try to push a very long text in a varchar2, you can end up with a

ORA-01461: can bind a LONG value only for insert into a LONG column

error.

Stack overflow promptly reported this years ago, so you can check it with your eyes.