Table of contents in Tinkerer blogposts

While upgrading the blog software used for this blog I wanted to fix a problem with table of contents (TOC) within blog posts. Activating a TOC with just this reStructuredText directive:

.. contents::

leads to a problem with the headline of the post on the home page. Because it will already become a local link to the entry in the TOC it won’t work as a link to the posts page anymore. Not even the link to the TOC does work if it is not on the home page because only the introduction part or teaser is displayed there because blog posts with TOC usually tend to be looong posts.

So I opened Issue #23 at the Github project and got the following snipped as workaround:

.. contents::
    :depth: 2
    :local:

This excludes the title from the TOC leaving it ”free” to use as link to the blog post itself. Thanks to Christian Jann for this solution.

So can you expect more long posts from me in the future? Well there is at least one in the drafts folder, but it still needs some polishing. So don’t hold your breath…

Pygments highlights CBM BASIC & ca65 assembler sources

Since version 1.6 the syntax highlighter Pygments has support for CBM BASIC V2 and assembler sources in ca65 format. ca65 is the macro assembler of the cc65 C cross compiler package.

The language list does not have entries for them, but the lexer list in the documentation knows about Ca65Lexer in the lexers for assembly languages section and CbmBasicV2Lexer in the lexers for other languages section.

Examples

Let’s see the highlighter in action. Both examples solve assignment 3 of the HP Codewars 2012. It is about interpreting a sequence of given Reversi moves and printing the resulting board state.

Example of BASIC…

 10 cp$="w":op$="b":dimb$(7,7):fori=0to7:forj=0to7:b$(i,j)=".":next:next
 20 b$(3,3)="w":b$(4,3)="b":b$(3,4)="b":b$(4,4)="w":dimtx(7),ty(7):goto140
 30 inputl$:ifl$="end"then end
 40 y=asc(left$(l$,1))-asc("a"):x=val(right$(l$,1))-1:b$(y,x)=cp$
 50 forxd=-1to1:foryd=-1to1:if(xd or yd)=0then130
 60 xt=x:yt=y:tc=0
 70 xt=xt+xd:yt=yt+yd
 80 ifxt<0orxt>7oryt<0oryt>7thentc=0:goto120
 90 t$=b$(yt,xt):ift$<>op$then110
100 tx(tc)=xt:ty(tc)=yt:tc=tc+1:goto70
110 ift$<>cp$thentc=0
120 iftc>0then fori=0totc-1:b$(ty(i),tx(i))=cp$:next
130 next:next:t$=cp$:cp$=op$:op$=t$
140 fori=0to7:forj=0to7:printb$(j,i);:next:print:next:print:goto30

Read more...

Python – Das umfassende Handbuch

Ein kleiner “rant” über Python - Das umfassende Handbuch von GalileoComputing.

Anmerkung

Dieser Text bezieht sich auf das OpenBook, also die Version zu Python 2.x. Ob sich in der aktuellen Buchauflage, die Python 3 behandelt, an den angeführten Kritikpunkten etwas geändert hat, kann ich nicht sagen.

Vielleicht ist es ein wenig unfair ein Buch nur nach einem Kapitel zu beurteilen, aber gerade das Thema objektorientierte Programmierung (OOP) bereitet vielen Einsteigern Probleme und in diesem Kapitel versagt das Buch dem Leser pythonisches Programmieren näher zu bringen. Wer Programme im Stil dieses Kapitels abfasst, schwimmt innerhalb der Python-Gemeinschaft gegen den Strom. Teilweise ist das gezeigte nicht nur kein idiomatisches Python, sondern schlicht fehlerhaft. Das Buch, oder zumindest das OOP-Kapitel 12 Objektorientierung, hinterlässt den Eindruck, dass die Autoren Peter Kaiser und Johannes Ernesti ein Thema suchten um Geld mit einem Buch zu verdienen, sich umschauten welche Sprache, zu der es noch relativ wenig deutschsprachige Bücher gibt, sich dazu eignen könnte, und einfach losgelegt haben Wissen und Stil von anderen Sprachen 1:1 auf Python zu übertragen.

Read more...