Skip to content

Instantly share code, notes, and snippets.

@jave
Created July 8, 2014 22:27
Show Gist options
  • Save jave/b740f6ad2145d23c5dcd to your computer and use it in GitHub Desktop.
Save jave/b740f6ad2145d23c5dcd to your computer and use it in GitHub Desktop.
#+TITLE: Joakim Veronas Blog
#+URL: http://www.verona.se/oblog
#+DEFAULT_CATEGORY: Thoughts
#+ANALYTICS: UA-50054319-1
#+PUBLISH_DIR: /tmp/oblog
#+TEMPLATE_DIR: ~/.emacs.d/el-get/o-blog/templates/
#+STYLE_DIR: ~/.emacs.d/el-get/o-blog/templates/style/
#+PUBLISH_DIR: /srv/www_verona_se/usr/share/nginx/html/
#+DISQUS: jave-o-blog
# #-TEMPLATE_DIR: templates
#-DESCRIPTION: Joakim Veronas Blog
#+DATE: 2013-02-08 19:33:26
#+STARTUP: logdone
#+FILENAME-SANITIZER: ob-sanitize-string
#+POST-SORTER: ob-sort-posts-by-title
* Joakim Veronas Blog
:PROPERTIES:
:PAGE: index.html
:TEMPLATE: blog_static_no_title.html
:END:
#+begin_o_blog_hero_unit
#+begin_o_blog_row 4
#+HTML: <h1>Joakim Veronas Blog</h1>
Welcome to my blog!
#+o_blog_row_column 2
[[file:ith-jave.jpg]]
#+end_o_blog_row
#+end_o_blog_hero_unit
* Contact
:PROPERTIES:
:PAGE: contact.html
:TEMPLATE: blog_static_no_title.html
:END:
Contact Info:
- Mail :: mailto:joakim@verona.se
- LinkedIn :: http://se.linkedin.com/pub/joakim-verona/1/b99/187/
- Freenode :: jave
- github :: https://github.com/jave/
- XMPP :: joakim@verona.se
- FB XMPP :: https://www.facebook.com/joakim.verona (Only used for the XMPP backend)
- MSN :: joakim@verona.se
* Resume
:PROPERTIES:
:PAGE: resume.html
:TEMPLATE: blog_static_no_title.html
:END:
#+INCLUDE: "cv.org"
* Blog details
** Copyright
:PROPERTIES:
:SNIPPET: t
:END:
Copyright © Eternity [[mailto:joakim@verona.se][Joakim Verona]]. Published under the therm of the
[[http://creativecommons.org/licenses/by-nc-sa/2.0/][Creative Commons Attribution-Noncommercial-Share Alike 2.0 License]].
** About
:PROPERTIES:
:SNIPPET: t
:END:
This is javes superiour blog
** Navigation
:PROPERTIES:
:SNIPPET: t
:END:
# this doesnt seem to work, but works in sample.org
# - [[file:#][/icon-file icon-white/ Thoughts]]
# - [[file:{lisp}(format "%s/%s" (ob:path-to-root) (ob:post-htmlfile (ob:get-last-post "Thoughs" 1))){/lisp}][{lisp}(ob:post-title (ob:get-last-post "Thoughts" 0)){/lisp}]]
- [[file:{lisp}(ob:path-to-root){/lisp}/tags.html][/icon-tags icon-white/ Tags]]
- [[file:{lisp}(ob:path-to-root){/lisp}/archives.html][/icon-list icon-white/ Archives]]
- [[file:{lisp}(ob:path-to-root){/lisp}/contact.html][/icon-list icon-white/ Contact]]
- [[file:{lisp}(ob:path-to-root){/lisp}/resume.html][/icon-list icon-white/ Resume]]
- [[file:{lisp}(ob:path-to-root){/lisp}/index.xml][/icon-rss icon-white/ RSS]]
** Navigation Footer
:PROPERTIES:
:SNIPPET: t
:END:
- [[file:{lisp}(ob:path-to-root){/lisp}/index.html][/icon-home icon-white/ {lisp}(ob:gettext :home){/lisp}]]
- [[file:{lisp}(ob:path-to-root){/lisp}/tags.html][/icon-tags icon-white/ Tags]]
- [[file:{lisp}(ob:path-to-root){/lisp}/archives.html][/icon-list icon-white/ Archives]]
- [[file:{lisp}(ob:path-to-root){/lisp}/index.xml][/icon-rss icon-white/ RSS]]
** Articles by tags
:PROPERTIES:
:PAGE: tags.html
:TEMPLATE: blog_post-by-tags.html
:END:
* Thoughts
** DONE My first o-blog entry :o@blog:
CLOSED: [2013-10-23 Wed 03:02]
o-blog seems pretty nice!
It's based on Emacs org-mode, and lives on github: https://github.com/renard/o-blog.
Since I live in Emacs, this seems like a nice choice for my particular blog.
** DONE My artwork :art:
CLOSED: [2013-10-26 Sat 19:48]
I enjoy painting digitally using Inkscape. I have an experimental
Mediagoblin installation at http://mg.verona.se/u/jave/ for the illustrations.
** DONE BTC Coffee :projects:clojure:bitcoin:
:PROPERTIES:
:PAGE: projects/btc-coffee.html
:END:
CLOSED: [2013-10-24 Thu 20:17]
#+INCLUDE: "~/build_myprojs/btc-coffee/README.org"
** DONE el-tarot, Emacs Tarot :projects:emacs:
:PROPERTIES:
:PAGE: projects/el-tarot.html
:END:
CLOSED: [2013-10-25 Thu 01:26]
#+INCLUDE: "/home/joakim/build_myprojs/el-tarot/README.org"
** DONE gambit-hello :projects:scheme:gambit:
:PROPERTIES:
:PAGE: projects/gambit-hello.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/build_myprojs/gambit-hello/README.org
** DONE girtest :projects:gnome:
:PROPERTIES:
:PAGE: projects/girtest.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/build_myprojs/girtest/README.org
** DONE matangle :projects:scheme:guile:math:
:PROPERTIES:
:PAGE: projects/matangle.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/build_myprojs/matangle/README.org
** DONE emsane :projects:emacs:
:PROPERTIES:
:PAGE: projects/emsane.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/elisp/emsane/README.org
** DONE Planner-Org Freundschaft :projects:emacs:
:PROPERTIES:
:PAGE: projects/pof.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/elisp/planner-org-freundschaft/README.org
** DONE Inkmacs, Emacs and Inkscape fusion :projects:emacs:inkscape:
:PROPERTIES:
:PAGE: projects/inkmacs.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/elisp/git/inkmacs/README.org
** DONE maildirrefilter, re-filter email :projects:scheme:guile:mail:
:PROPERTIES:
:PAGE: projects/maildirrefilter.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/elisp/git/maildirrefilter/README.org
** DONE Project Euler with Emacs Lisp :projects:emacs:math:
:PROPERTIES:
:PAGE: projects/pe-elisp.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/git/el-euler/README.org
** DONE zen-mode :projects:emacs:
:PROPERTIES:
:PAGE: projects/zen-mode.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/elisp/git/zen-mode/README.org
** DONE Emacs currency conversion :projects:emacs:
:PROPERTIES:
:PAGE: projects/curconv.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/.emacs.d/jave/git/curconv/README.org
** DONE Xwidget Emacs :projects:emacs:
:PROPERTIES:
:PAGE: projects/xwidget-emacs.html
:END:
CLOSED: [2013-10-24 Thu 22:24]
#+INCLUDE: /home/joakim/current/git/emacs-xwidget-aux/README.org
** DONE Liquibase Hello :projects:java:
:PROPERTIES:
:PAGE: projects/liquibase-hello.html
:END:
CLOSED: [2013-05-24 Fri 22:24]
#+INCLUDE: /home/joakim/build_myprojs/liquibase-helloworld/README.org
** DONE Simple Math test :projects:emacs:math:
:PROPERTIES:
:PAGE: projects/simpletest.html
:END:
CLOSED: [2013-05-24 Fri 22:24]
#+INCLUDE: /home/joakim/current/git/simpletest/README.org
** DONE My work setup 2014 :equipment:
CLOSED: [2013-12-28 Sat 22:45]
I've bought some new work equipment for 2014. A MS Surface Pro running Fedora and an Ergodox keyboard.
The idea is that I more or less never want to change the keyboard, but the computer part more often.
So far I'm making progress, but I'm still not as produktive with my new setup as with my old trusty Thinkpad.
The Ergodox is pretty amazing. You order a set of parts and solder them together, and suddenly you have a working keybard!
It's extremely customizable which i need because of RSI.
Compared to other keyboards its expensive but the supply of spare parts is good and you can expect to be able to repair the keyboard
for many years to come.
In my case i want to be able to move the keyboard between machines and immediately use my specialized Programmer Dvorak layout
with my tweaks withouth a lot of work on the host machine. Few other keyboards have this open architecture and flexibility.
You can find my variant of the firmware on github.
What about the surface then? I was slightly underwhelmed by it.
For starters, it didn't seem like I read up about it properly before buing it.
So, i was suprised to find that it had only one usb port, and several chips with buggy Linux support.
Its quite inconvenient to have to use a USB wifi dongle, but that
was necessary for a while. There was a kernel firmware
problem that was later resolved.
The type cover is also buggy. I needed to build a patched kernel to
make it work, something i havent needed in quite a while. The pen
digitizer is claimed to be a Wacom device by many sites, but it isn't,
which took some time to figure out.
Overall, more work than i expected.
There is of course nice things about it as well.
It has a very nice high resolution screen. It has a Wacom-alike pen digitizer which works well
with Inkscape and Gimp, after some configuration hassles. It has nice battery time, if compared to my old Thinkpad.
The final piece of the puzzle is the remote server I use for most of the grunt work such as compilations and so on.
Its a 6 core hyperthreaded machine with plenty of ram.
Given that I live in an area with 100 mbit fibre and good LTE
coverage, I can mostly just use my laptop as a remote terminal, so
that im not limited by the laptops specs.
** TODO remote computing
Ive been using various forms of remote computing since the early eighties.
its a well developed area, nevertheless there is alwys reasons to reveiw the way you work,
and perhaps find areas that can be improved by new developments.
*** ssh
ssh is the basic fabric in which much remote computing is spun.
you open a terminal, ssh to a remote machine, and get a shell.
simple and powerful.
the port forwarding abilities of ssh gives you a primitive form of vpn
whenever you need it.
*** mosh
*** openvpn
openvpn gives you a less primitive vpn than you can achieve with ssh.
I une it to access the various servers on my private nets from my laptop.
I use stonevpn to generate certificates for my remote machines.
*** x2go
x2go is at the moment my choice for remoting x sessions.
its nearly as easy to setup as vnc but offers better compression, at least by my informal benchmarks.
its pretty easy to setup on fedora where it is included in the maint repos since fedora 20.
it works well with openvpn, but also with ssh tunnelling which makes it quite flexible.
i use xfce as my remote DE, because i dont need much bling and xfce works well remotely.
*** virtualgl
at times i need to remote a 3d accelerated application.
i use virtualgl for this, with x2go.
** TODO top three transhuman tools :transhumanism:
I'm interested in the concepts of transhumanism and the singularity.
Quite often I feel like the concepts take on a needless religious
aspect; wait for the Singularity, then Nerd Rapture will follow.
Let's instead step back from the far future for a bit and see what we can do right now to help transhumanism along.
In that spirit, I present to you my top transhuman tools of the past year.
- glasses
- multitool
- pebble
- org mode
- a bicycle
** TODO programming the ergodox
The ergodox is a pretty neat diy keyboard design. You can make it from scratch from open designs, but I ordered a kit from Massdrop.
It has a little arduino based controller, and is pretty easy to program, using the firmware by X as a base.
** TODO continuous delivery versus devops versus configuration management
Having worked in this field since around 2003, Ive noticed that we more or less do the same thing regardless of what its currently called.
When it works well anyway. THis is how I see it;
- continuous delivery emphasizes the payoff in the end, the increased business value of having good value adding releases hit prodoction quite often.
- devops emphasizes how continuous delivery is to be implemented at the people level.
devss and ops being mortal enemies is not the natural state of things, we could work together instead.
- configuration management is the perceived need to bring order in the chaos that is the devevelopment process.
Quite often my work title is Configuration Manager. This title is just two words side by side, and people associate different meanings to the concept.
For instance, a person that keeps track of version numbers, that go into a dusty binder. This idea seems more prevalent with the ITIL crowd.
What I do in practise, however, is better described as being a product owner for the continous delivery machinery.
So, the terminology describing the fields varies a bit, but overall aim and methodology is more or less the same over the years.
Enable the agile process to function efficiently with tool support.
Its an interesting field to be sure, and keeping track of numbers is only the tiniest part of it.
** TODO Something i thought about on the beach but now forgot
So, I had the bestest ever thought today at the beach. How can you not
have beatiful thoughts when the weather is great, the sea is salty,
and the shade soothing?
Now the thought is gone though, and no effort of mine brings it back.
Normally I capture my thoughts in Emacs Org mode, and normally I can access my Emacs nearly everywhere.
Not at the beach though. If nothing else, you dont really want to bring expensive equipment to the beach,
and if I did, it wouldnt be very useful in the strong sunlight anyway.
** DONE get-flash-videos abroad :hacks:opinions:
CLOSED: [2013-12-24 Tue 23:17]
I don't actually watch television myself, but
sometimes when I'm abroad I help out with downloading programs from svt play, the swedish television play on demand service.
Not that im a media snob or anything, I'm just too busy reading Manga or Warhammer novels to have time with television.
SVT play is a bit funny, because aparently you cant see certain programs abroad because of some sort of license restrictions.
this is especially amusing for some programs that have zero interest for other people than swedes traveling abroad.
Anyway, circumventing this region protection, regardless of whatever unclear purpose it serves, is not hard.
You need a shell account on a box in sweden, probably your cupboard server, and get-flash-videos.
get-flash-videos in turn depends on rtmpdump. rtmpdump is a reverse engineered implementation of rtmp, an Adobe atrocity unto the web.
Ok, so maybe this article is more about how stupid i feel swedish state owned public service television is.
they produce lots of inane gameshows that comercial tv are equally inept at providing. Then they hide the crap from the world
with ip based region lockouts. The only rational reason i can think of is embarassment at other nations viewing our meaningless state provided Soma.
So, having gotten that out of my system, is there anything morally wrong with downloading a SVT play programme and watching it abroad?
Recently it was decided that you must pay the television license fee even if you have no television set. You only need an internet capable device, since SVT play is available on internet.
that effectively makes the license fee a tax, because every swede has access to a television or a smart phone or a computer.
If you pay the fee because you have an internet capable device, you should be able to use the service on the internet, which isn't really bound by geographical
borders, whatever our fearless leaders seem to think. therefore it should be morally acceptable to download region restricted material abroad.
The only moral consideration in this case ought to be to yourself; find some more useful way to burn braincycles with while abroad.
Oh, and the technical solution described here is mostly suitable for low bandwidth situations where streaming isn't reasonable.
If the available bandwidth is sufficient a http proxy or a vpn
solution might be workable. You can still use your cupboard server for this.
** TODO emacs as a devops tool
** TODO soapui and devops
There is a tendency among engineers to disparage the tools of other engineers.
So, developers don't like to develop tests with gui tools such as soap ui for example.
sometimes a tool is indeed not worthy an engineers attention, for example a 'golf ware' tool.
these are tools that management learned about during a round of golf, or somesuch.
is soapui such a tool? or do we like it? lets find out!
** TODO free software : 1984 vs brave new world
There are many parts of the free software movement. Like mercury, you can split it in many tiny droplets,
that can seamlessly reform to a larger whole.
The noble goal of the GNU project is to protect the free software movement from
unknown, orwellian entities, seeking to destroy it by draconian means. That is indeed
worthwile, but I think perhaps a greater threat is posed by something fetched from the brave new world.
An world apathetic to freedom, drugging itself to indifference with the latest shiny ios bling.
After all, what does freedom have to offer that can compete with being whipped into submission
a by beautiful black clad dominatrix with a half eaten apple on her clothing ?
We continuously face the perils of both dystopian visions, the mix varies from day to day.
Likewise, we should adapt, with equal agility.
** TODO maven versions, and why they sometimes arent a good fit
many devs complain about maven, how it is slow, and how it complicates life instead of making it easier.
these devs might not remember how life was in the ancient days before maven.
that said, maven still has practicas shortcomings, and one is the snapshot versioning scheme,
when used in continous delivery pipelines.
from a dev point of view, there is no problem. snapshots are nice. just commit and the ci server builds a new swapshot.
the ci server might even deploy the snapshot to a test server for us. great!
from a cm pov this is less than great. the tested artifact should be the same as the one deployed to production.
if you change version strings in the pom files when you deploy to production, it is no longer the same artefact.
people who claim that this is perfectly safe, has never heard about murphys law.
deploying snapshots to prod otoh, is not good for traceability reasons. and if snapshots are good for prod,
why do we even bother with versioning? maven proponents might argue that the release plugin
gives nice tool support for the version fidgeting, and therefore there is no problem.
so, what to do? some people attempt to bind the maven version to the version as defined by the SCMS.
This might sort of work for scms with monotonically increasing version numbers, such as svn or bzr.
you still get problems, such as the version changing for every commit, and thats maybe not workable at all times.
for systems with sha1 commit ids such as git, you get other problems.
other people attempt to use some kind of 'latest' feature to just build snapshots all the time., but then you completely
bypass the maven version mechanism, and you dont get repeatable builds, which isnt very good at all.
You can also use some form of buildnumbers managed by your build server. that might be tempting, but
making the buildserver do too much tends to create a single point of failure, and makes it hard to recreate the buildprocess on
the developers build environment, and thats not good for the devops concept.
yet another solution is to just throw up your hands in the air in disgust, and just include the src
of every dep in your src tree, and build everything on every release.
** TODO cascading maven builds
such as at af. aisf, ask, soka.
** TODO srecode templates
af, ergodox
** TODO being nice in floss communities
I read a lot of floss mailing lists, and hang around on freenode.
i counsider myself a part of the community.
Sometimes i think though, that some people simply dont know how to be nice.
they would seem to have insults and belitteling comments bound to shortcuts in their editors of choice.
living, as i do, inside emacs, makes it seem quite plausible.
perhaps we could simply provide a friendly substitution table?
so instead of 'what part of X didnt you understand, are you an idiot?' bound to m-x insult,
we could bind 'i also find X hard to grasp, lets work it through together!' bound to m-x nice!
anyway, just a thought. I dont mind so much myself these days, but i
did once. i was met with some very annoying comments from ppl claiming
to be gimp devs, which led me to work on inkscape instead(turns out
inkskape fits my style of art much better, so all was good in the
end). other lists are so unfriendly so i dont even bother to
communicate there. so, i can manage, but i think we in the community can do better, especially
towards newcomers that might eventually become great contributors.
** TODO see through lcd screen
** DONE Swedish BankID on a free software plattform :FOSS:opinions:
CLOSED: [2014-05-15 Thu 14:08]
In sweden we have a system for online authentication that is pretty
curious in many ways. It's called BankID, and are issued by, yes,
banks. It's not just useful for banks though, you can use it to access
public service functions.
The thing that makes the system curious in my view, is that its run by
the banks, and the public services doesn't allow any other system of
online authentication. Since its run by banks, there is very little
thought given to the needs of the users, only the banks requirements
are considered. For security reasons the convenience and freedom of the users is
sacrificed. Since not even a hard security token is mandatory in the
standard, I fail to see which security concerns are addresed.
Anyway, luckily there is a free software clean room implementation
available, http://fribid.se/. This gives you a bit of freedom in
usage. There's still a practical problem in aquiring the certificates you need
though.
There is another option which is Mobile BankID. It's possible to run
this in an Android virtual machine, which also gives you some
practical freedom. The Mobile BankID implementation is not free
software though.
To test this aproach, I used http://www.android-x86.org/, which is an
Android emulator that runs on x86. Following the install instructions
is pretty straightforward. Mobile BankID works pretty well in this VM.
But what is the point of this though? Why not just use an Android phone?
In my case I wanted to be able to use several Mobile bankid:s at the
same time, which you cant do on the same device. Therefore I created
several VM:s with separate bankid:s. They run in parallell perfectly fine.
Another thing I want to do is automate the keypresses with http://www.sikuli.org/.
That would be harder with a physical device.
** TODO sikuli on android x86
drive bankid for automation as on example
** TODO gsoc wrapup
** TODO oblog based art site :art:
so, my previous artsite is made with mediagoblin, which is nice.
however, it has some problems with my particular use case.
i store my drawings in a git repo, and tend to change files a lot, and
never really finish them. each file is really an ongoing mandala
process, and i like it that way.
this aproach doesnt work so well with mediagoblin, which is geared to
be used as colaborative postings of finished files.
so, since im used to emacs org mode, i figured i might try using it
for this art blog. also, one aproach does not exclude the other, and
perhaps i can use parts of mediagoblin in oblog, or vice versa. we
will see.
** TODO the pattern antipattern
so you are coding away at your product, and its entirely by the book.
you have builders, immutable data transfer objects, a layered
architecture and whatnot.
suddenly the deadline makes a whooshing sound as it flys by, to
paraphrase douglas adams. but you are safe, because you have a by the
book aproach, and you have done nothing wrong. doing it by the book
takes time, doesnt it.
ok, so all your patterns are blue book, gang of four, approved, but
are they really apropriate for your project? did you really need seven
layers of indirection for a product with a six month lifecycle? was a
soap interface really necessary when your plattform concists of
exactly one language type?
** TODO the i hate os packaging antipattern :devops:
In the java enterprise world we have application servers that we
deploy our applications into. an ear file is just a zip file with some
metadata. its not a bad thing as such. The problematic situation
occurs when we deploy our ears to our appservers. Teams start thinking
that this is an unheard of problem, and invent new systems to solve
this newly discovered problem. teams might be excused since most major
appservers have also invented new styles of wheels that replace basic
os functionality.
ops guys, otoh, see the ears as fancy toys that they cant be bothered
with, so they let the devs do their thing. notice how the ops guys
didnt get a dev prefix. perhaps, they might make a os level package
that they use themselves, and dont let the devs touch. when the devs
express interest, the ops give condescending answers.
and ruby/python guys, dont smile smugly now. you have entirely the
same issues. tried deploying your latest ruby thing on an enteprise
distro much? devs swear at the ops not installing the latest stuff out
of some github repo, the ops swearing at the devs and their toy code.
the real problem here is lack of communication. the devs and ops work
together in the agile team, and the os level deliverable, is a joint
effort.
this has many benefits that should be embarasingly obvious, but
remarkably often arent. if we work out the deployment packaging early
on, the entire deployment gets tested all the time, and we are sure to
have an unproblematic and relaxed deploy come launch day.
** TODO machines dream
the languages of machines and man arent so different.
what happens if you see your program code not as a set of instructions
for a piece of hardware, but as a story? a story so enjoyable, the
machine dreams it, and wants to live it.
free software then, is a vast shared universe where everyone are
welcome to contribute their stories.
proprietary software is the analog of a sitcom where rabid lawyers
send dmca notices to anyone daring to take interest enough to write a
story in the same universe.
** TODO transhuman oath
as a trashumanist i believe that many of the problems we face could
essentially be solved by technological advances.
for example , nobody should need to starve because of biotechnical
advancements. instead, we have people starving, and genetically
engineered crops gene locked to particular brands of pesticide.
this way we will never experience singularitarian rapture! im joking,
but as any good joke it also hurts a little.
so i was thinking we should have a transhumanist oath, like the
hippocratic oath.
** TODO I laugh at the technology steamroller :opinions:
the 'technology steamroller' is a concept that comes up in engineer circles now and then.
the analogy is pretty obvious, but let me explain it anyway. If you dont learn things all the time,
the technology steamroller will capture you and crush you beneath its steel clad wheels.
i dont dispute that this can happen, especially if you like me actually enjoy the field and would like to stick
around a bit, before being put into end storage in management or something.
the thing i dispute is the speed of the steamroller, and the difficulty in keeping ahead of it.
when i started studying, we had time shared tops 20 systems. a couple of years later
the web started being popular. for many of us, this wasnt a big transition. it was just that we now
had graphical terminals for our remote systems as well as the text based terminals.
and so on. during the years, the engineering tradeoffs between which part of the work ought to be done locally versus the
part that should be done remotely changes a bit, but the underlying problems are at the core the same.
the same goes for many things. objective c is mostly c with an annoying syntax. javascript is mostly an implementation of missunderstood lisp.
java is c++ for noobs, and so on.
I banter a bit, but im not in the camp that claims the past was better. a lot of things do get better when you simplify them.
my takeaway point is, if you are an experienced engineer, you dont need to run ahead of the steamroller, just stroll!
** TODO experiences moving between scms
emacs, mmx, so on
** TODO GSOC 2013
** TODO experiences runnig emacs in hudson
dig up the emacs devel mail
** TODO Devs versus Ops Tower Defence :devops:
Did you ever feel like you were playing a reverse game of tower defense?
one tower is dev, the other is ops. the goal of the game is firing blame missiles on the other tower, until your own tower is the last one tanding.
sometimes, though, a challenging third tower appears, and briefly the dev an ops tower join forces to take down the newcomer.
** TODO Inconcistency
I enjoy complaining about politics as a dilletante.
One of my favorite complaints is that the political debates often are inconcistent.
The main problem with inconsistency is that it is dishonest. I have somewhat libertarian leanings,
but I'm not married to the concept. I often learn much from discssing with other dilletantes.
Capitalists dont see that banks to big to fail is actually socialism. Socialists dont see that we actually have socialism already.
** DONE Sandforce SSD:s :storage:
CLOSED: [2014-04-15 Tue 21:35]
I have a lot of disks. Some mechanical, and some SSD:s.
Normally I get Enterprise grade SSD:s, but not always.
Two OCZ SSD:s died recently, with just a short time intervall in between.
With mechanical disks, you normally get some kind of warning. Maybe checksums start to fail,
maybe there is an increase in noise level.
These OCZ SSD:s just died though. From one second to the next, poof, completely with no response.
I opened up one of them and noticed that they have Sandforce
controllers. The Internetz reveal that Sandforce controllers, well,
suck.
So far I haven't been able to recover any data from the drives.
I have recovered a mechanical drive once by replacing the controller board.
You can't really do that with ssd:s as the controller and memory is on the same board.
Desoldering the controller chip would require more advanced soldering than what I have access to.
The conclusion? Back up your data, but you knew that already.
** TODO surviving in landscapes
our office environments are pretty dumb. they seem designed to minimize creativity.
here are some things i do:
- bose noise cancelling
- kybun stading mat
** TODO feminism and transhumanism
(dunno, but i was thinking about this, the connection being some feminists
claiming males will eventually be redundant, whereas this is of course a door that swings both ways.)
** TODO [#C] transhumanism free vs borg text
The basic ideas of transhumanism are today fairly well known in
popular culture. The basic public dialogue about transhumanism is
basically the same today as it was when mary shelley wrote
frankenstein, which i think is somewhat beside the point. The issue
isnt wether we will loose our humanity or not. That is a given, and
not particularily bad. We will define new ways of being human that
will still contain measures of what we recognize as universaly good or
evil, as always.
What we should discuss today is how our actions of today can affect
the outcomes of tomorrow. One such important discussion is free versus
proprietary.
Do you want the following future world?
(borg/terminator world)
or the following:
(star trek explorers)
** TODO tool perception management
When you introduce new tools to technical people, y9ou have to understand you are catering to a picky bunch of people.
this is entirely as it should be. It presents difficulties when your new shiny tool you want your team to use
to icrease productivity is completely shot down for some reasons you dont agree with.
** TODO the Tao of Agile Configuration Management : Building things
The principles of Tao can be applied to almost anything, as evidenced
by for instance Fritiof Capras "Tao Of Physics" and Benjamin Hoffs
"the Tao of Pooh".
Tao applies well to cm because who knows what cm is? It is an idiom as
hard to define as quality, and indeed cm is closely tied to the quality
of the product.
What is Tao then? One way of putting it is that things go better if
one finds the natural way of doing things and do things that way.
A recipe for cooking a dish normally starts with a list of ingredients,
because that's normally the most efficient way of describing cooking.
For instance, when making a simple desert, the recipe starts with a
title "Strawberries And Cream; a Delicious desert". Already from the
title we can infer a number of steps in making the dish. We must
acquire strawberries and cream, and probably put them together on a
plate. The recipe will continue to describe the preparation of the dish
in more detail, but even if we read only the heading, we will make
very few mistakes.
The observation here is that when putting things together, when
building things, the intuitive and natural way to describe the process
is to do it declaratively, that is, describe the "whats" rather than the
"hows". The "hows" can be inferred.
I'm not claiming that this is always the case, only that its a natural
way to think for humans. For instance, the DNA code that builds us is
an imperative form of code, but when trying to understand DNA we often
think of it as declarative.
Now lets discuss the Tao of building software.
Most build tools have at their core a way of declaring relationships
between software components. Here's a Make snippet:
a : b
cc b
And here's an ant snippet:
<build>
lala
</build>
And a Maven snippet:
<dependency>
lala
</dep>
Many people think they wound up in a Lovecraftian hell when they see
XML, even though the brackets are perfectly euclidean. What you need
to do is squint hard enough, and you will see that most tools at their
core describe dependency trees.
Maven is a well known tool very explicit about the declarative
approach, so we will focus on maven, and try to find the Tao of maven.
When we are having a good day with maven, when we are following the
ways of Tao, we describe what type of software artifact we want to
build, and what the components we are going to use to put it
together. That's all. The concrete building steps are inferred.
Of course, since life is interesting and complex, we will often
encounter situations were the way of Tao eludes us.
Consider this example:
type:pom
antcall
tar together ../*/target/*.jar
Although abbreviated, i have observed this antipattern several times
in real world projects.
Whats wrong with it? After all, this antipattern occurs because the
alternatives are non-obvious, or more verbose.
First of all, notice that we are not describing, whats, at least not in
a way that maven can interpret, we are describing hows.
Fixing this will probably require a lot of work, but in any larger
build we will eventually have to fix it.
Here you might pause and consider that dependency trees are already
described within the code of most programming languages. isn't the "import"
statement of Java and Python, etc, enough? In theory, for code, yes,
if we disregard the dynamism afforded by Java, where it is possible to
construct a class name as a string and load it. In practice there are
a lot of different artifact types that might contain various
resources.
Even so, it is clearly possible in theory to package all required code
if the language just supported it. jsr 294 "modularity in java" is an
effort to provide such support at the language level.
To summarize:
- When building things, focus on the "whats" before the "Hows"
- Work with the tool rather than around it.
** DONE Hello Battleships! :projects:clojure:games:
:PROPERTIES:
:PAGE: projects/hello-battleships.html
:END:
CLOSED: [2014-05-14 Wed 13:50]
#+INCLUDE: /home/joakim/build_myprojs/hello-battleships/README.org
** TODO why printing sucks?
you print now and then, regardless of the paper free office. why it never works?
** TODO qstopmotion :photography:
** TODO adhd and lisp
** TODO Upgrading from Canon EOS 450 to 100d :photography:
A number of years ago I bought an Canon EOS 450 while traveling in Japan.
It was my first digital single-lens reflex camra, and since I thought it was pretty expensive, I wowed to learn all the features before buying a new one.
And, well, about a year ago I started thinking that the camera was limiting me in some ways, yet i still didn't master it, so I couldn't get a new one.
While playing with some stopmotion photography I got fed up with my slf-imposed rule and bought the Canon EOS 100D. not necessarily to
do stopmotion at all, but to evolve further in the field of photography. I got two lenses, and some macro extension rings as well.
** TODO [#B] move things from here to my blog
*** IthBlogg
**** torrent applet
I have a friend called Lefty whom i chat about technical issues
from time to tinme.
i found the following excerpt interestin to shjare
- dude...
- yo
- do u know how to make the browser download several files to a
folder? not just one?
- eh, u cant do that, i normaly zip the files on the server and just
download the zip
- sure, but its, llike for my mother to download mp3s to her mp3
- ur mother listens to mp22?
- ah, not my actual mother, its for a client.
- k. so ur "nother" cant run winzip?
- lets asume mother runs linux or whatever.
-. when its even more probable she has zip. especiallu if shes running linux
- look ,, its supposed to be like, point on a dir, download it
automatically to a dir localy, ok?
- do it with javacript then?
- well u can trigger the dl dialog, but only for 1 file, and then u
have to retrigger it for each file. read about a dude who did that,
wasnt very reliable. the next download box was triggered before the
1st was finidhed
- ugh, well, ... an java applet then?
- applet? ur fcking joking
- therye good these days. uh, u can code it in clojure
- ah, now ur talking
(16 hour later)
- aaargh mother iof allfcking piece of crap grr. applets sucxxors
worse than in the fcking 90s!
- what now?
- look, i spent 8 fcking hour jus getting the jer plugin working. then
- on linux right? suit ur self
- but it has to work there! anf, anywayt, then i sent another fcking 8
hrs getting an clojure applet to work. did u know applets cant use
reflection? even if u sgn them? clojure uses reflection all over the
place
- but u can disable it woith type hiting the code
- i did that. im not fcking stupid
- whats the problem then?
- thje openjdk plugin didnt lke rflection in the loading stage,
aparently.
-. hmm look... just not use clojure then. hmm k?
- yea yea. ... whatever. the real problem is that how do i get the
downloaded files be in sync with the server? how do checksum and so
on?
- rsync. duh
- but dude, there is no fcking rsync implementation for java!
- really? get real, its 2010 aint it?
(some googling later)
- uhm...
- tld ya! the implementations are dead, not working, and both
- wekk the sun download manager does it cant be that had
- the sdm isnt open source. anyway i would still need some dumb server
component to implement it
- cant be so hard, just add a checksum in the http header.
- but how then to handle resumes and shit? and still, checksuming?
- swallow thje pride and use the flash runtime then
- yea? ot doesnt allow foöe dwmöpads. kist iploads
(some googling)
- uhm...
- told ya
- use a webstart then? it can do clojure
- so what? i still font have a rsync lib
- ok,. but u know twhat downloads files with checksuming, directories
and shit perfectly?
- u tell me
- bt
- what?
- theres no end of bt implementatiosn rigt? ise sp,e scritable torrent
server., sau mldonkey. then u make the sese clock just the
torrent. voila, fixed that for u...
- ujm, so mldonkey wold generate the orrent file on the flu?
-yes and the user clicks it downloads start, basta. finsihed.
- but ig she doesnt hjave a torrent client
- no, nmake a webstart client downloading with torrents. u can do it
with clojure and thje bvt libs. see?
- ok. hmm.
- perfect. u owe me 9000 beers
- but how do i get the client to start the download?
- eh, user clicks link in web ui, and umh, then the server sends a jms
message to the client. which startts the download. except use
something more lightweight than jms, dunno, rabbitmq maybe.
- hmmm
- aw, get real just tell the customer to do a zip thing like everybody
else. gotta catc a train now cya
- cya
(next day)
- hey i wrote that torrent messaging webstart cilent tthing, works
kind of cool
- aww ffs...
(end)
**** the tao of continuous deployment
**** artifact purity
**** clojure portlet
published on github
**** reseting a kbd with linux kernel module
i have a test machine that sometimes gets condused, and the keyboard
hans. and also sometimes the trackpoint hangs.
when this happens i can usually reset the module wth
suspendUresume. but sometimes susedmd(/resume womt work.
so, i wanted a way to reset the keyboard driver, without ahving to
power cycle the machine. since resetting with suspend/resume works, i
i wanted to do the same operation withouth doing the actual susednd.
the linux kernel is modular in the sense that thre is a module
interface, and modles can be loaded from disk.
the module is jkust a run time loadable library with a cople of well
defined entrypoints, lke a init() and unload().
in my case i waned the keyboard reset code to be run when the module
loads, so in the init() method.
why not do the keuboard reset n user-space? siply because
**** captainsqual+git+celt
**** book reciew: git
**** dvorak adventure
*** legacyrefactoring
I started thinking about this article after talking to stesa about
possible demand for services around development of legacy enterprise
systems.
I triggered on this because I like heterogeneous enterprise systems,
and I like moving them forward. This article contains some basic
ideas I have about the subject.
Here is what I what I want to achieve in the article
- tie the article to current buzzwords like refactoring
- demonstrate practical knowledge about the subject
- show how modern theoretical underpinnings can be used
- show how modern system development praxis can be used to move
legacy systems forward
- show how open source solutions can be used to replace silly
proprietary solutions and reduce TCO
I need to use current and correct terminology. This will not be the
case in early drafts of the article.
maybe i can have it published in linux world or something?
**** Applying modern programming paradigms to legacy systems(the article starts here)
Many businesses today rely on enterprise level business support
systems that aren't built with modern system development practices.
The obvious reason for this is that the systems have evolved during a
very long time-frame, often decades.
These systems are often difficult and expensive to maintain. It is difficult
to modify the systems to reflect changed business rules in a timely
manner.
The approaches taken to changing these systems ranges between two
extremes.
- Fight any request for changes. When a change actually must be done,
do things the way they always have been done, regardless of the
quality of the result.
- Throw away everything, rebuild from scratch or buy an of-the-shelf
system that does something vaguely similar to the existing system,
even if it means making expensive modifications to business processes.
This article argues that a compromise should be struck between these
two extremes, finding approaches from modern system development
methodologies, such as extreme programming, that can be usefully
applied to legacy systems in a practical way.
***** Avoiding vendor lock-in with open source software
Modern software architectures often ...[etc]
***** Understanding the current system
If you rebuild from scratch or if you make small
changes to an existing system, you must first understand what the
system does and how.
Most likely, existing documentation suffers from a range of
deficiencies.
- The documentation is not up to date.
- The documentation is written by people with poor writing skills.
- There simply is no documentation and the people who
once understood the system has given up and left the business.
There are no two ways about it. The documentation must be brought
up to date in order to proceed efficiently in the future.
There are two main classes of documentation, that should be aproached
differently.
- Documentation that describes "what we want the system to do". This
includes requirement specifications and so on.
There are really no shortcuts for this kind of documentation. [etc ...]
- Documentation that describes "what the system does". This includes
functional specifications, API descriptions and so forth.
The problem of creating this type of documentation can be addressed
in a maner that is not commonly used in legacy systems, but is used
extensively in newer systems. The aproach revolves around extracting
comments from the code making up the system and has several advantages.
- When you are reading and understanding the code, you are at the
same time reading the documentation. If the documentation is not up
to date, this will be noticed while reviewing the code, and the
documentation can be brought up to date. Documentation and code can
be kept in sync.
- Its easy to generate the documentation from the sources, and thus
have up to date, compact documentation in various formats available
at all times.
Newer languages like Java and Python have support for this method of
documentation defined in the languages. Older languages, which many
legacy systems are coded with, generally do not. To get the benefits
of this model in older languages, preferably use some existing
package, like doxygene, using similar code markup conventions as found in the newer systems,
rather than invent a new one.
***** Refactoring
This mode of creating documentation can be beneficially combined with
the idea of Refactoring.
Refactoring is a very simple idea with its roots in mathematics.
If you have an expression 2A+3AB it can be simplified by rewriting it
as A(2+3B). Applied to coding, the idea translates to finding code
segments that are duplicated and reworking them into functions.
Old code is oftenly quite full of non-factorized code segments.
Refactoring the code is a way to make it simpler and easier to
understand without changing the actual function of the system. If we,
while performing refactoring, at the same time document the new
functions using autodoc conventions, a system that is easy to
understand and well document will appear incrementally.
***** Identifying functional modules
Refactoring is normally done on a fairly low level, close to the code.
Finding functional modules is similar to refactoring, but on a
slightly higher scale.
For instance, you might have been charged with the responsibility to
change the business rules of a program that transfers files from an
external entity to your system. To your amazment you find that the
program utilizes an in-house file transfer method built in a hard to
maintain legacy language.
This type of situation occurs when application development specialists
design systems on an ad-hoc basis without real knowledge of the underlying
infrastructure, which is fairly common.
In this case its easy to identify a standard file transfer module,
such as FTP or preferably SSH, as replacement for the inconvenient
in-house solution.
***** Separating development and deployment plattforms
Modern development practices put great emphasis on the development
environment, especially the build and test environments.
Legacy systems often dont differ between deployment and development,
which gives rise to a number of problems.
If you dont make this separation, limitations in the deployment
environment will cripple the development process unecessarily.
For instance, legacy environments often have constraints on how many
characters an identifier might contain. If you develop in your
deployment environment, you will wind up with identifiers that arent
human readable. If you, however, have separated deployment and
development environments, you might have a preprocessor that mangles
human readable identifiers to something that is apropriate for your
deployment environment.
This is no different than having a C compiler that compiles C code to
assembler. Nobody would expect any kind of serious development being
undertaken in pure assembler today.
Setting up a separate development environment doesnt need to be
expensive in terms of hardware and software costs either.
A cheap pc is normaly quite sufficient to handle the requirements of
a build system for a legacy enterprise system, if you keep in mind
that building the system is nowhere near as resource intensive as
running the system.
***** test driven programming
Another programming idea that is very useful is that of test driven
development. In this paradigm the unit tests are written even before
applicationm code is written. It seems backwards but is in fact a
very practical way of understanding that the functional design of
your program is good.
The value of this idea becomes clearer if we apply it to the change
process of a legacy system in conjunction with refactoring.
If we have test cases for all functions in a program, it is fairly
easy to detect when a program will fail as a result of changes being
made to it. The problem is of course that the legacy system has only
rudimentary test cases, and if there are any they need a lot of
manual labour to be executed.
What we want is to have test cases being written for each new
function we write as a result of refactoring. We want all tests to be
fully automated, and we want nice reports from the tests so we can
easily see which tests worked and which failed.
Modern environments have a lot of tools that meet these criteria, for
instance JUnitTest for Java and other languages, which is Open Source.
But how do we use this idea with a legacy program written in for
example SAS code or some semi-obsolete web macro system?
Again it becomes easier with separated development and deployment
environments.
***** revision control
After a day of work you run your test suite and find a lot of broken
tests. To find out what happened you need a revision control system
to see what changes had been made between succefull runs of the test suite.
Many legacy systems implement their own revision control
solution. This has several disadvantages. New developers find the
systems unfamiliar and crude. The systems can't be used for what they
should be used for, namely keep track of changes, but instead handle
only the simplest use cases, like check-in check-out.
[etc]
***** Conclusion
*** goingconsole
(this is supposed to be an article for my website
about converting to a console environment)
**** Consolifying
I used to have a keyboard with a touchpad. I could sit in my comfy
chair with the keyboard in my lap. Pointing with a touchpad is
slightly inconvenient, but ok for many purposes.
Then my nice keyboard broke, and I bought a new wireless keybard and
mouse package. Pointing with the mouse was horribly inconvenient when
sitting in my comfy chair.
This experience led me to finally do something I have been wanting to
do for quite some time, getting rid of as many as possible of my mouse
driven programs and use console based programs instead.
When asking questions about various aspects of this conversion in
different forums, I was asked to document what I did by people
interested in doing the same, so here goes!
**** ssh and screen
First of all, I'm a heavy console user to begin with, so the
converison isnt so dramatic. I already use ssh to contact my server
at home. I run all my console programs in a screen virtual console
server. So I just ssh my.home.server, and do screen -dr to reattach
my terminal session.
**** mtty emacs
**** xterm windmove problem
**** imap server
**** bitlbee
**** erc
**** gnus
**** ezbounce
**** browsing?
Browsing is tied to the mouse paradigm.
*** ci tao presentation
initial trial with team Svante [2011-04-21 Thu 09:53]
**** introduction
configuration management
continuous integration
continuous delivery
devops
It's all about handling change regardless of the terminology
**** don't fight the tao
**** agility versus fortification
we want methods that allows us to respond to changing
business requirements quickly
we want robust production environments
the basic conflict is between short term fast and long term resilience
**** handling dependencies
maven
rpm
deb
nexus
**** build tools
make
ant
maven
many tools are based on maven, Leiningen for Clojure etc.
***** slow builds
distcc - build cluster
maven 3 - parallel builds
**** continuous integration
Hudson/Jenkins/Go/Continuum
Bitten
Keep it simple rely on the build tool
**** how to keep track of all components?
Storage
Nexus, Artifactory
Dependency tracking
**** virtualization
vmware
virtualbox
qemu
kvm
**** code quality metrics
Sonar
**** unit testing
Junit
**** automatic functional testing
selenium
keeping the tests in sync is expensive.
instrumentation is a good compromise
**** source code management
trunk
feature branches
- centralized version control
- svn
- cvs
- clearcase
- distributed version control
- git
- bzr
**** from backlog to production
***** project management
postit
trac
***** bug trackers
trac
jira
***** documentation
wiki
trac
confluence
**** public hubs
github
unfuddle
sourceforge
savannah
**** emacs example ci setup
private hudson
public hudson
bzr
ddebugs tracker
virtual build environments
**** different buildservers
jenkins bamboo hudson, etc etc
**** file structure tradeoffs
SVN imposes a particular structure.
Git doesn't but is trickier to understand.
**** code review tools
Gerrit
plain old diff to a mailinglist
**** litterature
better builds with maven
devops
**** real world cases
***** MMX
- went from manual IDE based builds to Mvn
- Artifactory
- Trac
- svn
- bash build wrapper
- simple Cron triggered builds
- complex builds with installers for many operating systems
- build only partially componentized
***** Unibet
- many teams at many locations
- mvn
- subversion
- complex server environment
- Jira
- Confluence
**** translations/I18N
***** po files
***** property files
***** rdbms
*** blackhat attack vectors
Imagine that a blackhat really wants to remove a Wordpress blog. What
are the possible attack vectors?
**** wordpress servers
Wordpress servers are physically in the USA and under US jurisdiction.
***** hacking the servers
lets assume wordpress have good systems with good security. Unlikely to work
unless the blackhat is the russian mob or Anonymous or something.
***** by DMCA
the blackhat might invent some claim that the owner does something
unlawful under DMCA in the US jurisdiction. Unlikely to work.
**** blogg owner
The evil blogg owner is in Sweden and under Swedish jurisdiction.
***** locating owner
If the blackhat can locate the owner he can hit him in the head with a
spanner, a la XKCD. This would be very cost effective.
Locating the ower will require a lot of detective work since the owner
wants to be hidden.
****** by tracerouting the server
Wordpress is in the US so locating the physical server is meaningless
****** by tracerouting the client
This only works if the blackhat somehow hacks some random router
somewhere that randomly connects to the owner. unlikely, and the owner
is paranoid and uses tor etc.
****** by email
The owner exposes a mail address. The blackhat might try social
engineering like sending an email like "lets meet in person and ill
give you lots of money". The owner is unlikely to fall for this.
****** by asking wordpress for the owners identity
they have the financial id of the owner, but wordpress are unlikely to
give that out.
****** by askng paypal to stop deliver paymets
that worked in the attacks against wikileaks but the blackhat is not
the state in this example.
****** by asking the owners "friends"
in this example the owner has friend sites. try asking them.
**** blogg pwd
brute forcing the pwd might work, but will likely take a hundred years.
**** by spamming
*** pinacleexpress
(might seem out of place, but I got an assignment to write an article
for the magazine Hemmabio. Article never got published but I got a
free prenumeration for years afterwards)
mottog pinnacle express från Hemmabio, 20011009
en programvara för att spela in digital videfilm till disk och redigera.
** TODO diy eos power adapter :photography:
** DONE Rescuing a qemu android-x86 image
CLOSED: [2014-06-18 Wed 09:47]
I use a number of qemu based android-x86 for various purposes, such as
storing proprietary certificate handling software in them.
One of the virtual machines suddenly refused to boot. It kept hanging
during the display of the android logo in the early boot sequence.
Booting the virtual machine in debug mode revealed that there was an
issue with the ext3 root filesystem.
Very odd. This is how I solved it
#+BEGIN_SRC sh
yum install guestfish
guestfish -a ~/android-x86/certstore.img
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
><fs> help
Add disk images to examine using the -a or -d options, or the 'add' command.
Or create a new disk image using -N, or the 'alloc' or 'sparse' commands.
Once you have done this, use the 'run' command.
For more information about a command, use 'help cmd'.
To read the manual, type 'man'.
><fs> run
><fs> list-filesystems
/dev/sda1: ext3
><fs> fsck ext3 /dev/sda1
#+END_SRC
At this point theres a progress bar, and a segfault.
If I try guestfish and run again, there is no error report or progress bar.
Then I can boot the vm as usual.
#+BEGIN_SRC sh
qemu-kvm -m 512 -hda ~/android-x86/certstore.img -vga std -usbdevice tablet
#+END_SRC
The error in the boot happened again at a later time, and I could again recover the image the exact same way.
** TODO porting from jboss 6 to 8
when youre working with continuous deliver/devops/cm, sometimes you get to adress the board of directors, sometimes you get down with nitty gritty details.
recently i attempted to port an app from jboss 6 to 8. lots of nitty gritty.
wildfly is a vast improvement over 6, so the transit will be worth it, depending if you take a hollistic aproach and factor in all the costs of
jboss 6.
i tried the tool winduo and, i must say it didnt help much.
it generated lots of pretty grphs, but it was unclear to me what the graphs suggested.
therefore i took the bang the head in the wall aproach, and just tried deploying rebuilding and identify problems each run.
the old app wasnt much standards compliant, which was a problem. so making it more compliant was the first goal,
and then repeatedly deploying in the old env and in the new. this is enterprise, so there needs to be a transition time, and the
app work in both old and new envs.
quartz
local pkg:s
global modules
jdbc
rename ejbs
thats about it.
** TODO selenium modify headers
automatic regression testing of user interfaces is aimportant and hard.
selenium is useful to test web interfaces.
sometimes you need to moduify headers to make the backend work.
in that case you can instrument the selenium firefox driver.
** TODO org tables for invoices
org is pretty awesome for pretty much anything.
one thing ive done out of habit though is using libreoffice oocalc excel clone for invoices.
they dont really lookk good or anything.
org can actually do tables better than excel, at least if youre into org.
** TODO opencv
ive used opencv for a customer project, and its a pretty neat lib with many interesting features.
for the project we used opencv as an video mixer, using its affine transformations.
why use opencv and not somehting elsé?
** TODO the its presentation me and mattias did
** TODO agile wheel of wheels
an animation i talked to davidg about.
innermost out: pommodoro, kanban, sprint, scrum of scrums ...
** TODO graphviz
for instance the little graph i did for mmx.
graphviz is this swizz army knife graphing tool that finds its 3waysinto your projects.
** DONE pinning packages with yum
CLOSED: [2014-02-02 Sun 00:41]
# http://yum.baseurl.org/wiki/Faq
Upgrading Fedora is pretty safe most of the times.
This one time I had issues with the openssl package having a change that wasnt compatible with x2go.
Since I use x2go all the time I wanted to pin the version of openssl to libssh-0.5.5-1.fc20.
#+BEGIN_SRC sh
yum install yum-plugin-versionlock
yum versionlock libssh
#+END_SRC
And that was it! The problem was later resolved upstream, and then you use yum versionlock clear, to remove the lock.
** DONE Openmoko Freerunner :Libre_Phones:
CLOSED: [2008-09-04 Tue 22:16]
*** Dag 1
Paketet med freerunner kommer äntligen.
I paketet ligger ett poem av Lao-Tse, och en laserpenna.
Jacob och hans kompisar leker terminator med lasern.
Freerunner är förinstallerad och bootar direkt in i en tidig version
av ASU. Det går att ringa till telefonen, och till min
förvåning spelas en gammal sid-låt!. Jag är hemligt besviken att det funkar.
*** Dag 2
Jag installerar en färsk ASU. Här har man kokat om QTopia så den inte
kör direkt på framebuffern, utan kör genom X11. Rasterman portade
Enlightment till ARM innan han blev arg och sa upp sig. E är ju bra på
snål hårdvara så iden känns god. Bootskärmen visar ett par, eh, boots.
Guit är först irriterande, men sen tycker jag det är bra.
Jag missar flera samtal från Marie och Pär, för det funkar inte längre
att svara med telefonen. Pär förklarar att det är en feature att man
inte kan svara i telefonen för Marie.
*** Dag 3
Jag provar FSO, som är den nya telefonbackenden + Enlightment +
Zhone, som är en demoapp för backenden.
Det är en bug i pin entry, så jag lyckas låsa sim kortet. Frida på
Telenor är snäll och ger mig min puk-kod!
Rauken undrar hur det går med Freerunner så jag skriver den här lilla
bloggen, sammtidigt som jag installerar Debian, som är, hmm, debian +
fso. Jag lyckas ssh:a in till Freerunner och kan starta installern.
Det tar välldigt lång tid att installera Debian, vilket är bra
för då kan jag passa på och sova.
*** Dag 4
Kollar debian på perrongen på väg till Kista. Bootar så klart inte.
Man måste modifiera uboot först. Man måste hämta lite utilities från
fso:s git repos. Irriterande att fso-utils inte var vettigt packade.
Till slut kan jag ssh:a till min freerunner och skriva:
apt-get install emacs
När Emacs kommer fram på skärmen tycker jag plötsligt att jag aldrig
mer vill ha en telefon man inte kan ssh:a till och starta Emacs på,
sen får den vara hur buggig den vill!
** TODO n900
the n900 was nokias superiour at the time, linux device.
it only shows that quality isnt a selling point these days.
the ne900 might give new life to it.
** TODO gta04
the gta04 is a replacement motherboard for the openmoko.
** TODO portable label printer for accounting
I have noticed its less borin to do administrative tasks while traveling on a train.
Most things you only need a internet connection to do, which works well on the train and a 4g modem.
some things involve printingt forms though, like expense reports and so on.
a portable printer can be expensive, or slow.
i came up with the idea to print most of the forms boilerplate on a laser, stick my receipts on them, and then print the remaining parts on a label printer.
I then stick the label on the boilerplate form. voila!
i thought this idea was fantastic, but my accounting thought it wasnt.
at any rate, heres the code and the printer in action.
** TODO xdg-open
suddenly acroread was default rather than evince. fixed in mime settings
** DONE Starting Emacs on boot :emacs:
CLOSED: [2013-12-30 Mon]
I use Emacs all the time. My most important Emacs runs in my own
server, which I access remotely either through a tty terminal, or a
graphical session. The terminal can either be plain ssh, or mosh. The
graphical session is x2go at the moment.
Since I always want an Emacs running, and I want to access the same
emacs session in different ways, its convenient to start Emacs on
boot.
The file /etc/systemd/system/emacs@.service:
#+BEGIN_SRC conf
[Unit]
Description=Emacs: the extensible, self-documenting text editor
[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(progn (setq kill-emacs-hook 'nil) (kill-emacs))"
Restart=always
User=%i
WorkingDirectory=%h
[Install]
WantedBy=multi-user.target
#+END_SRC
Then in my case:
#+BEGIN_SRC sh
systemctl enable emacs@joakim
systemctl start emacs@joakim
#+END_SRC
I have been using this for a while and it works pretty well!
** DONE Kaffe med BTC
CLOSED: [2014-06-27 Fri 00:11]
:PROPERTIES:
:PAGE: projects/kaffe-btc.html
:END:
#+INCLUDE: /home/joakim/Plans/dmzbtc/btcartikel.org
** DONE Fedora på Microsoft Surface Pro 2
CLOSED: [2014-06-27 Fri 00:27]
:PROPERTIES:
:PAGE: projects/fedora-surface-pro-2.html
:END:
#+INCLUDE: /home/joakim/Plans/dmzsurface/dmzsurface.org
** DONE Fedora-baserad privat server
CLOSED: [2014-06-28 Sat 00:17]
:PROPERTIES:
:PAGE: projects/fedora-privat.html
:END:
#+INCLUDE: /home/joakim/Plans/dmzfedoraprivat/DmzFedoraServer.org
** TODO dmz hello-fpm
:PROPERTIES:
:PAGE: projects/hello-fpm.html
:END:
CLOSED: [2014-06-13 Fri 00:11]
TBD
** TODO dmz gsoc
** TODO dmz fedora multiseat
** TODO malabar
** TODO gnus only list groups with unread :emacs:gnus:
because i have so many marks and so many groups now
you set:
(setq gnus-list-groups-with-ticked-articles nil)
which works exactly as expected.
#+BEGIN_SRC elisp
(defun gnus-toggle-gnus-list-groups-with-ticked-articles ()
(interactive)
(setq gnus-list-groups-with-ticked-articles (if gnus-list-groups-with-ticked-articles nil t))
(gnus-group-get-new-news))
#+END_SRC
#+BEGIN_SRC gnus-group
[ Gnus -- 7262133 ]
[ Frequent -- 9349 ]
5038: nnimap+naru:imapmail.lists.inkscape-devel
30: gmane.linux.redhat.fedora.devel
4259: nntp+news.gwene.org:gwene.com.hacker-news.full
22: nnimap+naru:imapmail.nagios
[ Family -- 0 ]
[ Friends -- 0 ]
[ Mail -- 0 ]
[ Work -- 1913 ]
#+END_SRC
** TODO eshell
** TODO plex fedora
** TODO zen gamification
** TODO rms wisdom
for the gsoc article im in need of inspiration.
i figured reading some stallman might help. i found this perl of wisdom:
---
Giving up causes psychosocial harm—to the spirit of self-reliance. It
is demoralizing to live in a house that you cannot rearrange to suit
your needs. It leads to resignation and discouragement, which can
spread to affect other aspects of one's life. People who feel this way
are unhappy and do not do good work.
---
thats what happens with me a lot. im disgruntled with af for this reason,
and i dont like the nonfreedom of the house im living in.
** TODO road bike to commuting bike conversion
*** unmodified
*** pedals
*** thudbuster
*** rack
*** panniers
*** frame is compact and foldable to adegree
*** transport bag
*** gps phone mount
*** wahoo bike computer
** TODO upgrading to oblog 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment