Charles Plessy: nodejs-legacy
apt install nodejs-legacy if you want npm install to work.
apt install nodejs-legacy if you want npm install to work.
U+2063 INVISIBLE SEPARATOR to prevent noreturn
statements to be misinterpreted by the blog formatter. If you copypaste the
code and encounter issues, you may want to delete the noreturn statements and
retype them)
Overview of programming languages
It has to be as fast as possible, so interpreted languages are out. You don't want to micro manage memory, so C is out. You don't want to require programmers to have a degree, so C++ is out. You want fast startup and not depend on a big runtime, so Java is out. [...] (Bram Moolenaar)C++ secret cultist protip
Do not call up what you cannot put down.C++ is a compiled language It is now possible to use the keyword
constexpr to mark functions and objects
that can be used at compile time:
/*
* constexpr tells the compiler that a variable or function can be evaluated at
* compile time.
*
* constexpr functions can also be run at run time, if they are called with
* values not known at compile time.
*
* See http://en.cppreference.com/w/cpp/language/constexpr for more nice examples
*
* It can be used to avoid using constants in code, and using instead functions
* for computing hardware bitfields or physical values, without losing in
* efficiency.
*/
#include <iostream>
using namespace std;
constexpr int factorial(int n)
return n <= 1 ? 1 : (n * factorial(n-1));
int main()
cout << "Compile time factorial of 6: " << factorial(6) << endl;
cout << "Enter a number: ";
int a;
cin >> a;
cout << "Run time factorial of " << a << ": " << factorial(a) << endl;
const char* code = R"--(
printf("foo\tbar\n");
return 0;
)--";
std::initializer_list:
#include <string>
#include <iostream>
#include <unordered_set>
using namespace std;
// std::initializer_list< >
// will have as its value all the elements inside the curly braces
string join(initializer_list<string> strings)
string res;
for (auto str: strings)
if (!res.empty())
res += ", ";
res += str;
return res;
int main()
unordered_set<string> blacklist ".", "..", ".git", ".gitignore" ;
cout << join( "antani", "blinda" ) << endl;
initializer_list
constructors with the same syntax, which looks like an interesting thing when
writing generic code in templates.
Type inference
I can now use auto instead of a type to let the compiler automatically
compute the value of something I assign to:
auto i = 3 + 2;
// See also https://github.com/esseks/monicelli
vector<string> names "antani", "blinda", "supercazzola" ;
for (auto i = names.cbegin(); i != names.cend(); ++i)
cout << i;
template<typename T>
T frobble(const T& stuff)
// This will work whatever type is returned by stuff.read()
auto i = stuff.read();
//
for (auto i: list_of_stuff)
cout << i << endl;
for (auto n: 0,1,2,3,4,5 )
cout << n << endl;
// This construct:
for (auto i: stuff)
// If stuff is an array, it becomes:
for (i = stuff, i < stuff + sizeof(stuff) / sizeof(stuff[0]); ++i)
// If stuff has .begin() and .end() methods it becomes:
for (i = stuff.begin(); i != stuff.end(); ++i)
// Otherwise it becomes:
for (i = begin(stuff); i != end(stuff); ++i)
// And you can define begin() and end() functions for any type you
// want, at any time
// JavaScript
var add = function(a, b) return a + b;
# Python
add = lambda a, b: a + b
auto add = [](int a, int b) return a + b;
// JavaScript
var a = 0;
$.each([1, 2, 3, 4], function(idx, el) a += el );
unsigned a = 0;
std::for_each( 1, 2, 3, 4 , [&a](int el) return a += el; );
std::tuple type, that like in Python can be used to implement
functions that return multiple values:
tuple<int, string, vector<string>> parse_stuff()
return make_tuple(id, name, values);
string name; vector<string> values;
// std::ignore can be used to throw away a result
tie(ignore, name, values) = parse_stuff();
// std::tie can also be used to do other kind of
// multi-operations besides assignment:
return tie(a, b, c) < tie(a1, b1, c1);
// Is the same as:
if (a != a1) return a < a1;
if (b != b1) return b < b1;
return c < c1;
std::regex re(R"((\w+)\s+(\w+))");
string s("antani blinda");
smatch res;
if (regex_match(s, res, re))
cout << "OK " << res[1] << " -- " << res[2] << endl;
std::unique_ptr to code memory ownership explicitly, and
std::shared_ptr as a reference counted pointer, and smart pointers can have
custom destructors:
unique_ptr<dirent, std::function<void(void*)>> dirbuf((dirent*)malloc(len), free);
string errno_str(int error)
char buf[256];
#if (_POSIX_C_SOURCE >= 200112L _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE
strerror_r(errno, buf, 256);
string res(buf);
#else
string res(strerror_r(errno, buf, 256));
#endif
return res;
[ [noreturn]] void throw_libc_error(int error)
throw runtime_error(errno_str(error));
unordered_set,
unordered_map,
unordered_multiset, and
unordered_multimap.
Multithreading
There is a standard threading model, with quite a bit of library support: see
here,
here,
here, and here
for atomic data structures.
Variadic templates
Templates can now take variable number of arguments, and that opens
possibilities for interesting code generation, like implementing a generic,
type-safe printf statement, or something like this:
db.query(R"(
INSERT INTO table NAMES (id, name, description)
VALUES (?, ?, ?)
)", 4, "genio", "fantasia, intuizione, decisione, e velocit di esecuzione");
-Wall on new code.
scan-build from clang is
another nice resource for catching even more potential problems at compile
time.
valgrind is a great tool for runtime code analysis:
valgrind --tool=memcheck (the default) will check your program for wrong
memory accesses and memory leaks. valgrind --tool=callgrind will trace
function calls for profiling, to be analyzed with
kcachegrind. valgrind
--tool=helgrind can check multi-threaded programs for suspicious concurrent
memory accesse patterns.
And of course
gdb: a nice
trick with C++ is to issue catch throw to get a breakpoint at the point
where an exception is being thrown. help catch provides a list of other
interesting catch examples.
Coredump tips: ulimit -c to enable core dumps, triggering a core dump with
^\, opening a core with gdb program core, and more details on man 5 core.
An extra gdb tip, which is not related to C++ but helped me considerably
recently, is that it can be attached to running python programs to get a live
Python traceback.
I recently realised that one can browse the archives of debian-private via
SSH. I find this a good compromise between subscription and ignorance. Here
is for instance the command for November.
ssh -t master.debian.org mutt -f /home/debian/archive/debian-private/debian-private.201411
In 2009 I called for a general resolution regarding membership procedures in
Debian, to block a change that, in my opinion, was going against our
values. Results, even if they satisfied the majority came with a bitter
feeling and it became questioned whether a better solution could have been
reached without using a constraining procedure. I did not think so, but not
to the point of not having doubts about it, and therefore, regrets.
This year, we are again having a vote related to a change that some people
think it goes against our values, and again the existence of this vote
makes it hard to find compromises. Bitterness will win whatever the result
is. For the avoidance of doubt, I have proposed the amendment number 3,
stating that this general resolution should not have been started.
I hope that this amendment will defeat the original proposition and will
make people think twice before pressing Debian's alarm button next time.
PS: amendment 3, that is amendment C, that is choice 4. If there was a
need for an example that the procedure is complex, here it is...
This is an update of my previous attempt at summarizing this discussion. As I proposed one of the amendments, you should not blindly trust me, of course. :-)
First, let s address two FAQ:
What is the impact on jessie?| Series: | Freyaverse #2 |
| Publisher: | Ace |
| Copyright: | July 2013 |
| ISBN: | 1-101-62453-1 |
| Format: | Kindle |
| Pages: | 325 |
I spent the bank holiday weekend mostly in Manchester with my brother and a
couple of friends, mostly to see Nine Inch Nails perform, but also to enjoy the
pleasures of the city.
We arrived on the Sunday and after checking in headed out to get some food. I'd
booked us a table at the historic Marble
Arch - the pub which gives its name
to the parent company Marble Beers - and produce
my most favourite ales. Whenever a Marble beer ends up as a guest at one of
the Newcastle real ale pubs a friend of mine (who is much more on top of this
stuff than I am) lets me know and we stop off for a few. Invariably there's a
crowd of a dozen or so Manchester expats in bar when we do. I reserved our
table over twitter, which is a bit of a novelty for me. My two friends are ale
skeptics but - due to lack of choice - we all ended up sampling the Chocolate
Marble and the Ginger 5.1, which went down a storm. They are possibly converts
now. There was an Earl Grey IPA too, which was nice but a bit on the strong
side for sessioning.
The gig was great - I prefer club gigs to arena gigs but the sound techs for
NIN know what they are doing and the mix was great. The visuals were stunning
too. Highlights for me were "The Great Destroyer" - in particular the extended,
improvised 5 minute glitch-meltdown coda; the slow build of "Eraser" and "The
Day The World Went Away" - played faithfully to the CD mix rather than the
traditional extended live arrangement. I miss the former live arrangement,
which includes a drawn out drum-backed finish, but this arrangement had a lot
of force, with all four of the band bashing guitars into a pummelling wall of
sound. I've heard that at least one person has taped the show and it turns out
recordings have just recently surfaced for the two club gigs my brother and I
attended back in 2005 and 2007 - meaning there are now
widely available, high quality ROIO copies for every NIN gig I've ever been to.
Afterwards we tried to find a decent club. Manchester is a lot larger than my
native city and there's plenty of places to go, if you know where they are. We
had originally planned to visit The Factory on Charles
Street, but we didn't believe it was open on
the Sunday. The Factory is Peter Hook's (formerly of Joy Division/New Order)
club - occupying the former office spaces of Factory records. I've chanced in
there once before as it's right across the road from the Lass O' Gowrie pub,
which is the haunt of choice for HE/tech people whenever we're in Manchester
for conferences.
Instead we gravitated towards Dry Bar on Oldham
street. By coincidence this place also has historic
ties to Factory Records. However the doormen wouldn't let us in! Finally we
landed at a place which had one name on the door and a different name on the
inside (Jack's). Like the aformentioned Lass O' Gowrie and perhaps half of all
pubs and clubs in Manchester, the place is decked out as a shrine to the former
musical giants of the City, with framed pictures of Mark E Smith, the Ha ienda
again, the Stone Roses in their boy-band-looks hay day, John Peel (champion of
many of them) and of course Tony Wilson. I can't help but wonder whether people
who live here get royally sick of that.
This place served some delicious albeit clich -titled Cocktails and played a
pretty good set - the obligatory Madchester throwback interlude was followed by
a chunk of Northern Soul and a couple of early Rap classics. Setlist wise it
was pretty much identical to that of Foundation in Newcastle, 12 years ago, no
doubt because Foundation was cribbing heavily from the Ha ienda in the first
place.
Monday was dedicated to exploring and shopping. Top of my list of places to go
was my pilgrimage venue Vinyl Exchange.
Whilst waiting for it to open we rolled around in Affleck's
Palace, which turned out to have a small record stall
within. After Vinyl Exchange we chanced across another record store right
across the road - Picadilly
Records - which happens to
be larger and focuses more on new releases. It didn't take long before we found
another small, DIY record shop, then another. We tried out the Fopp branch here
- more Vinyl; then Urban Outfitters - more; then an Oxfam branch - even more. I
actually got Vinyl snow blind at this point. I've been controlling myself
admirably and only picked up a couple of bits and pieces. My best find was Fad
Gadget's sophmore album "Incontinent".
2013 is nearly all finished up and so I thought I'd spend a little time
writing up what was noteable in the last twelve months. When I did so I
found an unfinished draft from the year before. It would be a shame for
it to go to waste, so here it is.
2012 was an interesting year in many respects with personal highs
and lows. Every year I see a lots of "round-up"-style blog posts
on the web, titled things like "2012 in music", which attempt to summarize the
highlights of the year in that particular context. Here's JWZ's
effort, for example.
Often they are prefixed with statements like "2012 was a strong year for music"
or whatever. For me, 2012 was not a particularly great year. I discovered quite
a lot of stuff that I love that was new to me, but not new in any other sense.
In Music, there were a bunch of come-back albums that made the headlines. I
picked up both of Orbital's Wonky and Brian Eno's Lux (debatably a
comeback: his first ambient record since 1983, his first solo effort since
2005, but his fourth collaborative effort on Warp in the naughties). I've
enjoyed them both, but I've already forgotten Wonky and I still haven't fully
embraced Lux (and On Land has not been knocked from the top spot when I
want to listen to ambience.) There was also Throbbing Gristle's (or X-TG)
final effort, a semi/post-TG, partly posthumous double-album swan song effort
which, even more than Lux, I still haven't fully digested. In all honesty I
think it was eclipsed by the surprise one-off release of a live recording of a
TG side project featuring Nik Void of Factory Floor: Carter Tutti Void's
Transverse, which is excellent. Ostensibly a four-track release, there's a
studio excerpt V4 studio (Slap 1) which is available from (at least)
Amazon.
There's also a much more obscure fifth "unreleased" track cruX which I managed
to "buy" from one of the web shops for zero cost.
The other big musical surprise for me last year was Beth Jeans Houghton and the
Hooves of Destiny: Yours Truly, Cellophane Nose. I knew nothing of BJH,
although it turns out I've heard some of her singles repeatedly on Radio 6, but
her band's guitarist Ed Blazey and his partner lived in the flat below me
briefly. In that time I managed to get to the pub with him just once, but he
kindly gave me a copy of their album on 12" afterwards. It reminds me a bit of
Goldfrapp circa "Seventh Tree": I really like it and I'm looking forward to
whatever they do next.
Reznor's How To Destroy Angels squeezed out An Omen EP which failed to set
my world on fire as a coherent collection, despite a few strong songs
individually.
In movies, sadly once again I'd say most of the things I recall seeing would be
"also rans". Prometheus was a disappointment, although I will probably rewatch
it in 2D at least once. The final Batman was fun although not groundbreaking to
me and it didn't surpass Ledger's efforts in The Dark Knight. Inception remains
my favourite Nolan by a long shot. Looper is perhaps the stand-out, not least
because it came from nowhere and I managed to avoid any hype.
In games, I moaned about having moaning about too many
games, most of which are much older than 2012. I started
Borderlands 2 after enjoying Borderlands (disqualified on age grounds) but
to this day haven't persued it much further. I mostly played the two similar
meta-games: The Playstation Plus download free games in a fixed time period
and the more sporadic but bountiful humble bundle whack-a-mole. More on
these another time.
In reading, as is typical I mostly read stuff that was not written in 2012.
Of that which was, Charles Stross's The Apocalypse Codex was an
improvement over The Fuller Memorandum which I did not enjoy much, but in
general I'm finding I much prefer Stross's older work to his newer; David
Byrne's How Music Works was my first (and currently last) Google Books ebook
purchase, and I read it entirely on a Nexus 7. I thoroughly enjoyed the book
but the experience has not made a convert of me away from paper. He leans
heavily on his own experiences which is inevitable but fortunately they are
wide and numerous. Iain Banks' Stonemouth was an enjoyable romp around a
fictional Scottish town (one which, I am reliably informed, is incredibly
realistical rendered). One of his "mainstream" novels, It avoided a particular
plot pattern that I've grown to dread with Banks, much to my suprise (and
pleasure). Finally, the stand-out pleasant surprise novel of the year was
Pratchett and Baxter's The Long Earth. With a plot device not unlike Banks'
Transition or Stross's Family Trade series, the pair managed to write a
journey-book capturing the sense-of-wonder that these multiverse plots are
good for. (Or perhaps I have a weakness for them). It's hard to find the lines
between Baxter and Pratchett's writing, but the debatably-reincarnated Tibetan
Monk-cum-Artificial Intelligence 'Lobsang' must surely be Pratchett's.
Pratchett managed to squeeze out another non-Discworld novel (Dodger) as well
as a long-overdue short story collection, although I haven't read either of
them yet.
On to 2013's write-up...
| Editor: | Gordon van Gelder |
| Issue: | Volume 121, No. 3 & 4 |
| ISSN: | 1095-8258 |
| Pages: | 258 |
I eventually answered to the Public Consultation on the review of the EU
copyright
rules.
As a coincidence, the radio was playing European Super State, from Killing
Joke.
One can see in the consultation the picture of an Internet shaped to better
control the diffusion and copy of non-free works, and monitor for possible
infractions. It is therefore important to answer and remind primacy of the
presumption of innocence, and the importance of the respect of privacy.
Nevertheless, I also asked for reducing exceptions of copyrights, because to
give a temporary access to non-free works at zero cost has the consequence
of reducing the incentive for creating alternatives that can be copied,
modified and redistributed freely.
#aaaaaa.Alt+Fnn to directly switch to one of the first 12 terminals, like in the
Linux console.F11 to toggle fullscreen.Alt+'+', Alt+'-', Alt+'0' to control font sizes.cd workdir; x-terminal-emulator -e vim todolist and then I
start opening new tabs.x-terminal-emulator -e cmd args...x-www-browserhttps urls with Firefox, although the preferred
browser was Chromium. There seemed to be no way to control it: I looked for
firefox or iceweasel in all gconf and dconf settings and found nothing.
The browser issue was fixed by accident when I used Xfce4's settings
application to change the browser from Chromium to Firefox and then back to
Chromium.
update, thanks to Mathieu Parent, Josh Triplett, Peter De Wachter, Julien
Cristau, and Charles Plessy:
It is also possible to restore the "new tab opened inside the same
directory of the last tab I was in" behaviour,
by enabling "run command as a login shell" so that /etc/profile.d/vte.sh is
run (thanks Mathieu Parent for the link).
That in turn spawned extra cleanup work in my
.bashrc/.bash_profile/.profile setup, which has been randomly evolving
since even before my first Debian "buzz" system. I found that it was setting
PROMPT_COMMAND to something else to set the terminal title, conflicting with
what vte.sh wants to do.
With regards to loading /etc/profile.d/vte.sh by default, Peter De Watcher
sent pointers to relevant bugs:
here,
here, and
here.
An alternative strategy is to work using the prompt rather than
PROMPT_COMMAND; an example is in Josh Triplett's .bashrc from
git://joshtriplett.org/git/home.
Josh Triplett also said:
To fix the browser launched for URLs, you either need to use a desktop environment following GNOME's mechanism for setting the default browser, or editAll my issues with gnome-terminal are now gone and I'm only too happy to go back to it. rxvt-unicode-256color~/.local/share/applications/mimeapps.listand make surex-scheme-handler/http,x-scheme-handler/https, andx-scheme-handler/ftpare set to your preferred browser's desktop file basename under[Added Associations].
urxvt took some work. This is where I got with configuration:
URxvt.font: xft:Monospace-10:antialias=true
URxvt.foreground: #aaaaaa
URxvt.background: black
URxvt.scrollBar_right: true
URxvt.cursorBlink: true
URxvt.perl-ext-common: default,matcher,tabbedex
URxvt.url-launcher: /usr/bin/x-www-browser
URxvt.matcher.button: 1
URxvt.perl-lib: /home/enrico/.urxvt/perl
URxvt.color0: black
URxvt.color1: #aa0000
URxvt.color2: #00aa00umask
URxvt.color3: #aa5500
URxvt.color4: #0000aa
URxvt.color5: #aa00aa
URxvt.color6: #00aaaa
URxvt.color7: #aaaaaa
URxvt.color8: #555555
URxvt.color9: #ff5555
URxvt.color10: #55ff55
URxvt.color11: #ffff55
URxvt.color12: #5555ff
URxvt.color13: #ff55ff
URxvt.color14: #55ffff
URxvt.color15: #ffffff
I got all of the tab behaviour that I need by
"customizing" the tab script (yuck
github
).
Missing
TERM=rxvt.config/sakura/sakura.conf and these bits help:
colorset1_fore=rgb(170,170,170)
colorset1_back=rgb(0,0,0)
colorset1_opacity=99
colorset2_fore=rgb(0,0,0)
colorset2_back=rgb(254,254,254)
colorset2_opacity=99
font=Monospace 10
show_always_first_tab=No
scrollbar=false
fullscreen_key=F11
palette=linux
Missing
Alt+Fnn to directly switch to one of the first 12 terminals, like in the
Linux console. Sakura hardcodes using numbers for switching, and only allows
to change the modifier.Alt+'+', Alt+'-', Alt+'0' to control font sizes..config/lxterminal/lxterminal.conf and this is relevant
to me:
[general]
fontname=DejaVu Sans Mono 10
fgcolor=#aaaaaaaaaaaa
disallowbold=false
cursorblinks=true
tabpos=top
hidescrollbar=false
hidemenubar=true
hideclosebutton=true
disablef10=true
disablealt=true
Also, to open a url directly you control+click it.
Missing
Alt+Fnn to directly switch to one of the first 12 terminals, like in the
Linux console.F11 to toggle fullscreen.Alt+'+', Alt+'-', Alt+'0' to control font sizes..config/terminator/config and this is relevant to me:
[global_config]
use_custom_url_handler = True
custom_url_handler = x-www-browser
inactive_color_offset = 1.0
[keybindings]
close_term = None
close_window = None
copy = None
cycle_next = None
cycle_prev = None
go_down = None
go_next = None
go_prev = None
go_up = None
group_all = None
group_tab = None
hide_window = None
move_tab_left = None
move_tab_right = None
new_tab = None
new_terminator = None
new_window = None
next_tab = None
paste = None
prev_tab = None
reset_clear = None
reset = None
resize_down = None
resize_left = None
resize_right = None
resize_up = None
rotate_ccw = None
rotate_cw = None
scaled_zoom = None
search = None
split_horiz = None
split_vert = None
switch_to_tab_1 = <Alt>F1
switch_to_tab_2 = <Alt>F2
switch_to_tab_3 = <Alt>F3
switch_to_tab_4 = <Alt>F4
switch_to_tab_5 = <Alt>F5
switch_to_tab_6 = <Alt>F6
switch_to_tab_7 = <Alt>F7
switch_to_tab_8 = <Alt>F8
switch_to_tab_9 = <Alt>F9
switch_to_tab_10 = <Alt>F10
toggle_scrollbar = None
toggle_zoom = None
ungroup_all = None
ungroup_tab = None
[profiles]
<span class="createlink">default</span>
palette = "#000000:#aa0000:#00aa00:#aa5500:#0000aa:#aa00aa:#00aaaa:#aaaaaa:#555555:#ff5555:#55ff55:#ffff55:#5555ff:#ff55ff:#55ffff:#ffffff"
copy_on_selection = True
icon_bell = False
background_image = None
show_titlebar = False
Missing
x-terminal-emulator -e cmd args....
#734655 but should
be fixed soon.config/xfce4/terminal, and this is relevant to me:
terminalrc:
[Configuration]
FontName=Monospace 10
MiscAlwaysShowTabs=FALSE
MiscBell=FALSE
MiscBordersDefault=TRUE
MiscCursorBlinks=FALSE
MiscCursorShape=TERMINAL_CURSOR_SHAPE_BLOCK
MiscDefaultGeometry=80x24
MiscInheritGeometry=FALSE
MiscMenubarDefault=FALSE
MiscMouseAutohide=FALSE
MiscToolbarDefault=FALSE
MiscConfirmClose=TRUE
MiscCycleTabs=TRUE
MiscTabCloseButtons=TRUE
MiscTabCloseMiddleClick=TRUE
MiscTabPosition=GTK_POS_TOP
MiscHighlightUrls=TRUE
ShortcutsNoMenukey=TRUE
ShortcutsNoMnemonics=TRUE
ColorForeground=#aaaaaaaaaaaa
accels.scm:
(gtk_accel_path "<Actions>/terminal-window/goto-tab-1" "<Alt>F1")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-2" "<Alt>F2")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-3" "<Alt>F3")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-4" "<Alt>F4")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-5" "<Alt>F5")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-6" "<Alt>F6")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-7" "<Alt>F7")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-8" "<Alt>F8")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-9" "<Alt>F9")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-10" "<Alt>F10")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-11" "<Alt>F11")
(gtk_accel_path "<Actions>/terminal-window/goto-tab-12" "<Alt>F12")
update: Yves-Alexis Perez points out that to disable the F1 for help in the
terminal, you need to remove the accelerator. I tried
this and
this
and didn't have success, but I confess I did not dig too much into it.
Although xfce4-terminal -e does not work as I expect, xfce4-terminal
registers a wrapper for x-terminal-emulator that does the right thing with
respect to -e (also thanks Yves-Alexis Perez).
Missing
Alt+'+', Alt+'-', Alt+'0' to control font sizes.#aaaaaa. update: Yves-Alexis Perez
found that you can add presets to .local/share/colorthemes taking examples
from /usr/share/xfce4/terminal/colorschemes; next time I consider
switching to xfce4-terminal I'll try that..config/roxterm.sourceforge.net/ split in several files
corresponding to profiles. This is a reasonable starting point for me:
Profiles/Default:
[roxterm profile]
colour_scheme=Default
disable_menu_access=1
disable_menu_shortcuts=1
disable_tab_menu_shortcuts=0
tab_close_btn=0
hide_menubar=1
always_show_tabs=0
Colours/Default:
[roxterm colour scheme]
0=#000000000000
1=#aaaa00000000
2=#0000aaaa0000
3=#aaaa55550000
4=#00000000aaaa
5=#aaaa0000aaaa
6=#0000aaaaaaaa
7=#aaaaaaaaaaaa
8=#555555555555
9=#ffff55555555
10=#5555ffff5555
11=#ffffffff5555
12=#55555555ffff
13=#ffff5555ffff
14=#5555ffffffff
15=#ffffffffffff
palette_size=16
foreground=#aaaaaaaaaaaa
background=#000000000000
cursor=#cccccccccccc
bold=
dim=
Shortcuts/Default:
[roxterm shortcuts scheme]
File/New Window=
File/New Tab=
File/Close Window=
File/Close Tab=
Tabs/Previous Tab=
Tabs/Next Tab=
Edit/Copy=
Edit/Paste=
View/Zoom In=<Control>plus
View/Zoom Out=<Control>minus
View/Normal Size=<Control>0
View/Full Screen=F11
View/Scroll Up One Line=
View/Scroll Down One Line=
Help/Help=
Edit/Copy & Paste=
Search/Find...=
Search/Find Next=
Search/Find Previous=
File/New Window With Profile/Default=
File/New Tab With Profile/Default=
Tabs/Select_Tab_0=<Alt>F1
Tabs/Select_Tab_1=<Alt>F2
Tabs/Select_Tab_2=<Alt>F3
Tabs/Select_Tab_3=<Alt>F4
Tabs/Select_Tab_4=<Alt>F5
Tabs/Select_Tab_5=<Alt>F6
Tabs/Select_Tab_6=<Alt>F7
Tabs/Select_Tab_7=<Alt>F8
Tabs/Select_Tab_8=<Alt>F9
Tabs/Select_Tab_9=<Alt>F9
Tabs/Select_Tab_10=<Alt>F10
Tabs/Select_Tab_11=<Alt>F11
Tabs/Select_Tab_12=<Alt>F12
Global:
[roxterm options]
edit_shortcuts=0
prefer_dark_theme=1
colour_scheme=Default
warn_close=1
Missing
Nothing of my initial requirements seems to be missing, really, so I'm sticking
to it for a while to see what happens.
The first itch to scratch is that when the menubar is hidden, the popup menu
becomes the entire menubar contents, which does not fit the general use case
to have a contextual menu with the most common shortcuts. I'll just declare it
useless and get myself used to some new hotkey for starting a new terminal.
update: after fixing my issues with gnome-terminal I've switched back to
gnome-terminal: its interface feels less clunky as I'm already used to it.
Other references
Guillem Jover made a similar analysis in 2009, it can be found
here.
Thomas Koch mentioned that termit should be able to do all I need, and is
scriptable in Lua. I like the sound of that, and it's definitely one I should
look next time I find myself shopping for terminal emulators.
(Posted as a comment to Charles Stross's blog post about bitcoin)
Bitcoin is a piece of software which tries to implement a particular
SFnal future. One in which the world currency is de-centralized,
deflationary, all early bitcoin adopters own their own planetoids, and
all visitors are automatically charged for the air they breath.
Thing is, the real world is more complicated than that. Assuming Bitcoin
did manage to become an important currency, countries would naturally try
to regulate it. In 30 years, by the time bitcoin mining has slowed right
down, the legal system will be fully caught up to the internet.
Bitcoin tries to make its code the law (as Lessig used to say), but the law
can certainly affect its code.
The law could, for example, require that bitcoin be changed to stop
increasing the difficulty of mining new blocks. Then bitcoin is
suddenly an inflationary currency. This would be a hard fork in the block
chain, but one enforced by financial regulators. Miners would be tracked
down and forced to comply. Some would perhaps go underground and run the
deflationary bitcoin network on TOR hidden services. Lots of possible ways
it could play out.
That's only one scenario, covering one of the many problems with Bitcoin
that make Charlie hate it. So it seems to me that Bitcoin should be a gold
mine for Science Fiction authors, if nothing else..
This morning when preparing the update of a package, and I saw a PNG file in
its documentation. Even before opening it, I felt old, tired, distressed
and unable to escape the situation. Inspecting the file confirmed that the
image was not hand made. The source file is missing. The proof: anther
image in the same directory has the same style and a SVG source. To make
things worse, there are no instructions on how to generate the PNG from the
SVG. More and more in these cases, I give up and abandon the package. I
lost time and energy make Upstream some requirements for which I personally
have no concrete interest. SVG in addition to PNG is better, but PNG alone
for the documentation of a Free software is Free enough for me. However,
the points of view expressed on debian-devel give me the impression that
it is not good enough for Debian, so I just give up
In his blog, Lars
puts words on my feelings of weariness in these situations where we are
asked much efforts to make our packages modifiable by contributors who can
not or want not to use Git.
Most of the core Debian tools, dpkg, debhelper, litnian, debian-installer
and many others are developed in Git repositories. Somebody serious about
contributing to Debian can hardly avoid Git.
It is time for our tools and methods to evolve and take advantage of Git.
This requires to say no thank you to contributions based on source
packages downloaded from our FTP server, instead of being cloned from the
Git repository where the package is actually developed, and this calls the
question of what is the real source of the binary packages, but this is a
question that is becoming unavoidable.
Next.