Since joining Fujitsu I am permanently running a VM (kvm/qemu) with Windows 10 (unfortunately necessary). While the usaged disk space is about 50G, the actual qcow2 file had grown to over 180G, not good.
Searching the web the very promising virt-sparsify is mentioned again and again, and the man page gives hope, but as it turns out it is broken and calls qemu-img with incorrect/not-working arguments (see this bug).
Another problem seems to be that by default the discard mode seems not to be set to unmap.
So here are the stages how I reduced the size of the qcow2 image back down to around 60G.
Turn off the VM
Make sure you are using VirtIO for the disk, select Discard mode: unmap
Boot into Windows, and from an elevated prompt run: Optimize-Volume -DriveLetter C -ReTrim -Verbose
Shut down the VM
Run a dummy conversion which sparsifies the image: qemu-img convert -O qcow2 orig.qcow2 sparse.qcow2
Rename/Backup the images and boot back into Windows.
That helped in my case, without any consequences (till now) for the Windows installation.
I am excited to announce that I have joined Fujitsu Research Labs with beginning of February.
My job will comprise, besides other things, research and development in machine learning, open source strategies, development of and representation of Fujitsu in the scikit-learn consortium. We are doing a lot of topological data analysis, so if you are interested in these kinds of topics, don t hesitate to contact me.
I am still settling into a completely new world of big and Japanese company with lots of on-boarding seminars, applications, paper work, meetings, but I am looking forward to start the actual work as soon as possible.
As a long long time Linux user, I am a bit in trouble now, since everything in Fujitsu requires Windows it seems. I will try hard to improve this situation including my dream of having Fujitsu machines with pre-installed Debian on it
Folks who acutely dig into this website might know that I have been
taking more pictures recently, as I got a new camera
since January 2018: a beautiful Fujifilm X-T2 that I really
like. Recently, I went out on a photo shoot in the rain. It was
intermittent, light rain when I left so I figured the "weather
proofing" (dpreview.com calls this "environmentally sealed") would
keep the camera secure. After an hour of walking outside, however,
rain intensified and I was just quickly becoming more and more
soaked. Still trusting the camera would function, I carried on. But
after about 90 minutes of dutiful work, the camera just turned off and
wouldn't power back on.
It had drowned.
I couldn't believe it; "but this is supposed to be waterproof! This
can't be happening!", I thought. I tried swapping out the battery for
a fresh one, which was probably a bad idea (even if I was smart enough
to do this under cover): still no luck, yet I could still not believe
it was dead, so I figured I would look at it later when I was home. I
still eventually removed the battery after a while, remembering that
it mattered.
Turns out the camera was really dead. Even at home, it wouldn't power
up, even with fresh batteries. After closer inspection, the camera was
as soaked as I was...
I was filled with despair! My precious camera! I had been waiting for
litterally decades to find the right digital camera that was as
close to the good old film cameras I was used to. I was even working
on black and white "film" to get back to basics, which turned into a
project to witness the impact of the coronavirus on city life! All
that was lost, or at least stopped: amazingly, the SD cards were just
absolutely fine and survived the flooding without problem.
A good photographer friend told me that this was actually fairly
common: "if you shoot outside, get used to this, it will happen".
So I tried "the rice trick": plunge your camera in a pile
of rice and let it rest there for a long time. It didn't work so well:
I didn't have a big enough container to hold the camera and the
rice. I was also worried about rice particles inserting themselves
into the camera holes, as I had opened all the ports to let it dry.
I could also not keep myself from inserting a battery and trying it
out again: amazingly, it powered up, only once, and died again. After
shopping in desperation for dessicators (who would have thought
you should keep those little bags from the stuff you order online!), I
ended up buying silica gel dehumidifier from Lee Valley (13$, the
small one!) which comes in a neat little metal box. But that never
arrived in time so I had to find another solution.
My partner threw the idea out in jest, but the actual solution worked,
and it was surprisingly simple!
We have a food dehydrator at home (a Sedna Express if you really
want to know) since we do a lot of backpacking and canot-camping, but
I never thought I would put electronics in there. Turns out a
food dehydrator is perfect: it has a per degree temperature control
that can go very low and a timer. I set it to 30 C for 24 hours. (I
originally set it to 40 C but it smelled like plastic after a while so
my partner turned it off thinking it was melting the camera.)
And now the camera is back! I was so happy! There is probably some
permanent damage to the delicate circuitry in the camera. And I will
probably not go back out in heavy rain again with the camera, or at
least not without a rainjacket (35$USD at B&H) on the
camera. And I am now in a position to tell other people what to do
if they suffer the same fate...
Tips for dealing with electronic liquid damage
So, lessons learned...
when you have a liquid spill over your electronics: IMMEDIATELY
REMOVE ALL ELECTRIC POWER, including the battery! (this is
another reason why all batteries should be removable)
if the spill is "sticky" (e.g. coffee, beer, maple syrup, etc)
or "salty", do try to wash it with water, yet without
flooding it any further (delicate balance, I know) some devices
are especially well adapted to this: I have washed a keyboard with
a shower head and drowned the thing completely, it worked fine
after drying.
do NOT power it back on until you are certain the equipment is
dry
let the electronics device dry for 24 to 48 hours with all
ports open in a humidity-absorbing environment: a bag of rice
works, but a food dehydrator is best. make sure the rice doesn't
get stuck inside the machine: use a small mesh bag if necessary
once you are confident the device has dried, fiddle with the
controls and see if water comes out: it might not have dried
because it was stuck inside a button or dial. if dry, try
powering it back on and watch the symptoms. if it's still weird,
try drying it for another day.
if you get tired of waiting and the machine doesn't come back up,
you will have to send it to the repair shop or open it up
yourself to see if there is soldering damage you can fix.
I hope it might help careless people who dropped their coffee or ran
out in the rain, believing the hype of waterproof cameras. Amateur
tip: waterproof cameras are not waterproof...
Confession time: I started making these posts (eons ago) because a close
friend did as well, and I enjoyed reading them. But the main reason why I
continue is because the primary way I have to keep track of the books I've
bought and avoid duplicates is, well, grep on these posts.
I should come up with a non-bullshit way of doing this, but time to do
more elegant things is in short supply, and, well, it's my blog. So I'm
boring all of you who read this in various places with my internal
bookkeeping. I do try to at least add a bit of commentary.
This one will be more tedious than most since it includes five separate
Humble Bundles, which
increases the volume a lot. (I just realized I'd forgotten to record
those purchases from the past several months.)
First, the individual books I bought directly:
Ilona Andrews Sweep in Peace (sff)
Ilona Andrews One Fell Sweep (sff)
Steven Brust Vallista (sff)
Nicky Drayden The Prey of Gods (sff)
Meg Elison The Book of the Unnamed Midwife (sff)
Pat Green Night Moves (nonfiction)
Ann Leckie Provenance (sff)
Seanan McGuire Once Broken Faith (sff)
Seanan McGuire The Brightest Fell (sff)
K. Arsenault Rivera The Tiger's Daughter (sff)
Matthew Walker Why We Sleep (nonfiction)
Some new books by favorite authors, a few new releases I heard good things
about, and two (Night Moves and Why We Sleep) from
references in on-line articles that impressed me.
The books from security bundles (this is mostly work reading, assuming
I'll get to any of it), including a blockchain bundle:
Wil Allsop Unauthorised Access (nonfiction)
Ross Anderson Security Engineering (nonfiction)
Chris Anley, et al. The Shellcoder's Handbook (nonfiction)
Conrad Barsky & Chris Wilmer Bitcoin for the Befuddled
(nonfiction)
Imran Bashir Mastering Blockchain (nonfiction)
Richard Bejtlich The Practice of Network Security
(nonfiction)
Kariappa Bheemaiah The Blockchain Alternative (nonfiction)
Violet Blue Smart Girl's Guide to Privacy (nonfiction)
Richard Caetano Learning Bitcoin (nonfiction)
Nick Cano Game Hacking (nonfiction)
Bruce Dang, et al. Practical Reverse Engineering (nonfiction)
Chris Dannen Introducing Ethereum and Solidity (nonfiction)
Daniel Drescher Blockchain Basics (nonfiction)
Chris Eagle The IDA Pro Book, 2nd Edition (nonfiction)
Nikolay Elenkov Android Security Internals (nonfiction)
Jon Erickson Hacking, 2nd Edition (nonfiction)
Pedro Franco Understanding Bitcoin (nonfiction)
Christopher Hadnagy Social Engineering (nonfiction)
Peter N.M. Hansteen The Book of PF (nonfiction)
Brian Kelly The Bitcoin Big Bang (nonfiction)
David Kennedy, et al. Metasploit (nonfiction)
Manul Laphroaig (ed.) PoC GTFO (nonfiction)
Michael Hale Ligh, et al. The Art of Memory Forensics
(nonfiction)
Michael Hale Ligh, et al. Malware Analyst's Cookbook
(nonfiction)
Michael W. Lucas Absolute OpenBSD, 2nd Edition (nonfiction)
Bruce Nikkel Practical Forensic Imaging (nonfiction)
Sean-Philip Oriyano CEHv9 (nonfiction)
Kevin D. Mitnick The Art of Deception (nonfiction)
Narayan Prusty Building Blockchain Projects (nonfiction)
Prypto Bitcoin for Dummies (nonfiction)
Chris Sanders Practical Packet Analysis, 3rd Edition
(nonfiction)
Bruce Schneier Applied Cryptography (nonfiction)
Adam Shostack Threat Modeling (nonfiction)
Craig Smith The Car Hacker's Handbook (nonfiction)
Dafydd Stuttard & Marcus Pinto The Web Application Hacker's
Handbook (nonfiction)
Albert Szmigielski Bitcoin Essentials (nonfiction)
David Thiel iOS Application Security (nonfiction)
Georgia Weidman Penetration Testing (nonfiction)
Finally, the two SF bundles:
Buzz Aldrin & John Barnes Encounter with Tiber (sff)
Poul Anderson Orion Shall Rise (sff)
Greg Bear The Forge of God (sff)
Octavia E. Butler Dawn (sff)
William C. Dietz Steelheart (sff)
J.L. Doty A Choice of Treasons (sff)
Harlan Ellison The City on the Edge of Forever (sff)
Toh Enjoe Self-Reference ENGINE (sff)
David Feintuch Midshipman's Hope (sff)
Alan Dean Foster Icerigger (sff)
Alan Dean Foster Mission to Moulokin (sff)
Alan Dean Foster The Deluge Drivers (sff)
Taiyo Fujii Orbital Cloud (sff)
Hideo Furukawa Belka, Why Don't You Bark? (sff)
Haikasoru (ed.) Saiensu Fikushon 2016 (sff anthology)
Joe Haldeman All My Sins Remembered (sff)
Jyouji Hayashi The Ouroboros Wave (sff)
Sergei Lukyanenko The Genome (sff)
Chohei Kambayashi Good Luck, Yukikaze (sff)
Chohei Kambayashi Yukikaze (sff)
Sakyo Komatsu Virus (sff)
Miyuki Miyabe The Book of Heroes (sff)
Kazuki Sakuraba Red Girls (sff)
Robert Silverberg Across a Billion Years (sff)
Allen Steele Orbital Decay (sff)
Bruce Sterling Schismatrix Plus (sff)
Michael Swanwick Vacuum Flowers (sff)
Yoshiki Tanaka Legend of the Galactic Heroes, Volume 1: Dawn
(sff)
Yoshiki Tanaka Legend of the Galactic Heroes, Volume 2: Ambition
(sff)
Yoshiki Tanaka Legend of the Galactic Heroes, Volume 3: Endurance
(sff)
Tow Ubukata Mardock Scramble (sff)
Sayuri Ueda The Cage of Zeus (sff)
Sean Williams & Shane Dix Echoes of Earth (sff)
Hiroshi Yamamoto MM9 (sff)
Timothy Zahn Blackcollar (sff)
Phew. Okay, all caught up, and hopefully won't have to dump something
like this again in the near future. Also, more books than I have any
actual time to read, but what else is new.
Last saturday the Japanese TeX User Meeting took place in Fujisawa, Kanagawa. For those who have been at the TUG 2013 in Tokyo you will remember that the Japanese TeX community is quite big and vibrant. On Saturday about 50 users and developers gathered for a set of talks on a variety of topics.
The first talk was by Keiichiro Shikano ( ) on using Markup text to generate (La)TeX and HTML. He presented a variety of markup formats, including his own tool xml2tex.
The second talk was my Masamichi Hosoda ( ) on reducing the size of PDF files using PDFmark extraction. As a contributor to many projects including Texinfo and LilyPond, Masamichi Hosoda tells us horror stories about multiple font embedding in the manual of LilyPond, the permanent need for adaption to newer Ghostscript versions, and the very recent development in Ghostscript prohibiting the merge of font definitions in PDF files.
Next up was Yusuke Terada ( ) on grading exams using TeX. Working through hundreds and hundreds of exams and do the grading is something many of us are used to and I think nobody really enjoys it. Yusuke Terada has combined various tools, including scans, pdf merging using pdfpages, to generate gradable PDF which were then checked on an iPad. On the way he did hit some limits in dvipdfmx on the number of images, but this was obviously only a small bump on the road. Now if that could be automatized as a nice application, it would be a big hit I guess!
The forth talk was by Satoshi Yamashita ( ) on the preparation of slides using KETpic. KETpic is a long running project by Setsuo Takato ( ) for the generation of graphics, in particular using Cinderella. KETpic and KETcindy integrates with lots of algebraic and statistical programs (R, Maxima, SciLab, ) and has a long history of development. Currently there are activities to incorporate it into TeX Live.
The fifth talk was by Takuto Asakura ( ) on programming TeX using expl3, the main building block of the LaTeX3 project and already adopted by many TeX developers. Takuto Asakura came to fame on this years TUG/BachoTeX 2017 when he won the W. J. Martin Prize for his presentation Implementing bioinformatics algorithms in TeX. I think we can expect great new developments from Takuto!
The last talk was by myself on fmtutil and updmap, two of the main management programs in any TeX installation, presenting the changes introduced over the last year, including the most recent release of TeX Live. Details have been posted on my blog, and a lengthy article in TUGboat 38:2, 2017 is available on this topic, too.
After the conference about half of the participants joined a social dinner in a nearby Izakaya, followed by a after-dinner beer tasting at a local craft beer place. Thanks to Tatsuyoshi Hamada for the organization.
As usual, the Japanese TeX User Meetings are a great opportunity to discuss new features and make new friends. I am always grateful to be part of this very nice community! I am looking forward to the next year s meeting.
TL;DR: With its implementation of IPv6 routing tables using radix trees,
Linux offers subpar performance (450 ns for a full view 40,000 routes)
compared to IPv4 (50 ns for a full view 500,000 routes) but fair memory usage
(20 MiB for a full view).
In a previous article, we had a look at IPv4 route lookup on Linux. Let s
see how different IPv6 is.
Lookup trie implementation
Looking up a prefix in a routing table comes down to find the most specific
entry matching the requested destination. A common structure for this task is
the trie, a tree structure where each node has its parent as prefix.
With IPv4, Linux uses a level-compressed trie (or LPC-trie), providing
good performances with low memory usage. For IPv6, Linux uses a more
classic radix tree (or Patricia trie). There are three reasons for not
sharing:
The IPv6 implementation (introduced in Linux 2.1.8, 1996) predates the IPv4
implementation based on LPC-tries (in Linux 2.6.13, commit 19baf839ff4a).
The feature set is different. Notably, IPv6 supports source-specific
routing1 (since Linux 2.1.120, 1998).
The IPv4 address space is denser than the IPv6 address
space. Level-compression is therefore quite efficient with IPv4. This may not
be the case with IPv6.
The trie in the below illustration encodes 6 prefixes:
For more in-depth explanation on the different ways to encode a routing table
into a trie and a better understanding of radix trees, see
the explanations for IPv4.
The following figure shows the in-memory representation of the previous radix
tree. Each node corresponds to a struct fib6_node. When
a node has the RTN_RTINFO flag set, it embeds a pointer to
a struct rt6_info containing information about the
next-hop.
The fib6_lookup_1() function walks the radix tree in two
steps:
walking down the tree to locate the potential candidate, and
checking the candidate and, if needed, backtracking until a match.
Here is a slightly simplified version without source-specific routing:
staticstructfib6_node*fib6_lookup_1(structfib6_node*root,structin6_addr*addr)structfib6_node*fn;__be32dir;/* Step 1: locate potential candidate */fn=root;for(;;)structfib6_node*next;dir=addr_bit_set(addr,fn->fn_bit);next=dir?fn->right:fn->left;if(next)fn=next;continue;break;/* Step 2: check prefix and backtrack if needed */while(fn)if(fn->fn_flags&RTN_RTINFO)structrt6key*key;key=fn->leaf->rt6i_dst;if(ipv6_prefix_equal(&key->addr,addr,key->plen))if(fn->fn_flags&RTN_RTINFO)returnfn;if(fn->fn_flags&RTN_ROOT)break;fn=fn->parent;returnNULL;
Caching
While IPv4 lost its route cache in Linux 3.6 (commit 5e9965c15ba8), IPv6
still has a caching mechanism. However cache entries are directly put in the
radix tree instead of a distinct structure.
Since Linux 2.1.30 (1997) and until Linux 4.2 (commit 45e4fd26683c), almost
any successful route lookup inserts a cache entry in the radix tree. For
example, a router forwarding a ping between 2001:db8:1::1 and 2001:db8:3::1
would get those two cache entries:
$ ip -6 route show cache
2001:db8:1::1 dev r2-r1 metric 0 cache2001:db8:3::1 via 2001:db8:2::2 dev r2-r3 metric 0 cache
These entries are cleaned up by the ip6_dst_gc() function
controlled by the following parameters:
The garbage collector is triggered at most every 500 ms when there are more than
1024 entries or at least every 30 seconds. The garbage collection won t run for
more than 60 seconds, except if there are more than 4096 routes. When running,
it will first delete entries older than 30 seconds. If the number of cache
entries is still greater than 4096, it will continue to delete more recent
entries (but no more recent than 512 jiffies, which is the value of
gc_elasticity) after a 500 ms pause.
Starting from Linux 4.2 (commit 45e4fd26683c), only a PMTU exception would
create a cache entry. A router doesn t have to handle those exceptions, so only
hosts would get cache entries. And they should be pretty rare. Martin KaFai
Lau explains:
Out of all IPv6 RTF_CACHE routes that are created, the percentage that has a
different MTU is very small. In one of our end-user facing proxy server, only
1k out of 80k RTF_CACHE routes have a smaller MTU. For our DC traffic, there
is no MTU exception.
Here is how a cache entry with a PMTU exception looks like:
$ ip -6 route show cache
2001:db8:1::50 via 2001:db8:1::13 dev out6 metric 0 cache expires 573sec mtu 1400 pref medium
Performance
We consider three distinct scenarios:
Excerpt of an Internet full view
In this scenario, Linux acts as an edge router attached to the default-free
zone. Currently, the size of such a routing table is a little bit
above 40,000 routes.
/48 prefixes spread linearly with different densities
Linux acts as a core router inside a datacenter. Each customer or rack gets
one or several /48 networks, which need to be routed around. With a density of
1, /48 subnets are contiguous.
/128 prefixes spread randomly in a fixed /108 subnet
Linux acts as a leaf router for a /64 subnet with hosts getting their IP using
autoconfiguration. It is assumed all hosts share the same OUI and therefore,
the first 40 bits are fixed. In this scenario, neighbor reachability
information for the /64 subnet are converted into routes by some external
process and redistributed among other routers sharing the same subnet2.
Route lookup performance
With the help of a small kernel module, we can accurately benchmark3
the ip6_route_output_flags() function and
correlate the results with the radix tree size:
Getting meaningful results is challenging due to the size of the address
space. None of the scenarios have a fallback route and we only measure time for
successful hits4. For the full view scenario, only the range from
2400::/16 to 2a06::/16 is scanned (it contains more than half of the
routes). For the /128 scenario, the whole /108 subnet is scanned. For the /48
scenario, the range from the first /48 to the last one is scanned. For each
range, 5000 addresses are picked semi-randomly. This operation is repeated until
we get 5000 hits or until 1 million tests have been executed.
The relation between the maximum depth and the lookup time is incomplete and I
can t explain the difference of performance between the different densities of
the /48 scenario.
We can extract two important performance points:
With a full view, the lookup time is 450 ns. This is almost ten times
the budget for forwarding at 10 Gbps which is about 50 ns.
With an almost empty routing table, the lookup time is 150 ns. This
is still over the time budget for forwarding at 10 Gbps.
With IPv4, the lookup time for an almost empty table was 20 ns while the lookup
time for a full view (500,000 routes) was a bit above 50 ns. How to explain such
a difference? First, the maximum depth of the IPv4 LPC-trie with 500,000 routes
was 6, while the maximum depth of the IPv6 radix tree for 40,000 routes is 40.
Second, while both IPv4 s fib_lookup() and
IPv6 s ip6_route_output_flags() functions have a
fixed cost implied by the evaluation of routing rules, IPv4 has several
optimizations when the rules are left unmodified5. Those optimizations
are removed on the first modification. If we cancel those optimizations, the
lookup time for IPv4 is impacted by about 30 ns. This still leaves a 100 ns
difference with IPv6 to be explained.
Let s compare how time is spent in each lookup function. Here is
a CPU flamegraph for IPv4 s fib_lookup():
Only 50% of the time is spent in the actual route lookup. The remaining time is
spent evaluating the routing rules (about 30 ns). This ratio is dependent on the
number of routes we inserted (only 1000 in this example). It should be noted the
fib_table_lookup() function is executed twice: once with the local routing
table and once with the main routing table.
The equivalent flamegraph for
IPv6 s ip6_route_output_flags() is depicted below:
Here is an approximate breakdown on the time spent:
50% is spent in the route lookup in the main table,
15% is spent in handling locking (IPv4 is using the more efficient RCU mechanism),
5% is spent in the route lookup of the local table,
most of the remaining is spent in routing rule evaluation (about 100 ns)6.
Why does the evaluation of routing rules is less efficient with IPv6? Again, I
don t have a definitive answer.
History
The following graph shows the performance progression of route lookups through
Linux history:
All kernels are compiled with GCC 4.9 (from Debian Jessie). This version is
able to compile older kernels as well as current ones. The kernel configuration
is the default one with CONFIG_SMP, CONFIG_IPV6,
CONFIG_IPV6_MULTIPLE_TABLES and CONFIG_IPV6_SUBTREES options enabled. Some
other unrelated options are enabled to be able to boot them in a virtual machine
and run the benchmark.
There are three notable performance changes:
In Linux 3.1, Eric Dumazet delays a bit the copy of route metrics to fix
the undesirable sharing of route-specific metrics by all cache entries
(commit 21efcfa0ff27). Each cache entry now gets its own metrics, which
explains the performance hit for the non-/128 scenarios.
In Linux 3.9, Yoshifuji Hideaki removes the reference to the neighbor
entry in struct rt6_info (commit 887c95cc1da5). This should have lead to
a performance increase. The small regression may be due to cache-related
issues.
In Linux 4.2, Martin KaFai Lau prevents the creation of cache entries for
most route lookups. The most sensible performance improvement comes
with commit 4b32b5ad31a6. The second one is from commit 45e4fd26683c,
which effectively removes creation of cache entries, except for PMTU
exceptions.
Insertion performance
Another interesting performance-related metric is the insertion time. Linux is
able to insert a full view in less than two seconds. For some reason, the
insertion time is not linear above 50,000 routes and climbs very fast to 60
seconds for 500,000 routes.
Despite its more complex insertion logic, the IPv4 subsystem is able to insert 2
million routes in less than 10 seconds.
Memory usage
Radix tree nodes (struct fib6_node) and routing information (struct
rt6_info) are allocated with the slab allocator7. It is therefore
possible to extract the information from /proc/slabinfo when the kernel is
booted with the slab_nomerge flag:
In the above example, the used memory is 76104 64+40090 384 bytes (about 20
MiB). The number of struct rt6_info matches the number of routes while the
number of nodes is roughly twice the number of routes:
The memory usage is therefore quite predictable and reasonable, as even a small
single-board computer can support several full views (20 MiB for each):
The LPC-trie used for IPv4 is more efficient: when 512 MiB of memory is needed
for IPv6 to store 1 million routes, only 128 MiB are needed for IPv4. The
difference is mainly due to the size of struct rt6_info (336 bytes) compared
to the size of IPv4 s struct fib_alias (48 bytes): IPv4 puts most information
about next-hops in struct fib_info structures that are shared with many
entries.
Conclusion
The takeaways from this article are:
upgrade to Linux 4.2 or more recent to avoid excessive caching,
route lookups are noticeably slower compared to IPv4 (by an order of magnitude),
CONFIG_IPV6_MULTIPLE_TABLES option incurs a fixed penalty of 100 ns by lookup,
memory usage is fair (20 MiB for 40,000 routes).
Compared to IPv4, IPv6 in Linux doesn t foster the same interest, notably in
term of optimizations. Hopefully, things are changing as its adoption and use
at scale are increasing.
For a given destination prefix, it s possible to attach source-specific
prefixes:
ip -6 route add 2001:db8:1::/64 \
from 2001:db8:3::/64 \
via fe80::1 \
dev eth0
Lookup is first done on the destination address, then on the source address.
This is quite different of the classic scenario where Linux acts as a
gateway for a /64 subnet. In this case, the neighbor subsystem stores the
reachability information for each host and the routing table only contains a
single /64 prefix.
The measurements are done in a virtual machine with one vCPU and no
neighbors. The host is an Intel Core i5-4670K running at 3.7 GHz during
the experiment (CPU governor set to performance). The benchmark is
single-threaded. Many lookups are performed and the result reported is the
median value. Timings of individual runs are computed from the TSC.
Most of the packets in the network are expected to be routed to a
destination. However, this also means the backtracking code path is not used
in the /128 and /48 scenarios. Having a fallback route gives far different
results and make it difficult to ensure we explore the address space
correctly.
The exact same optimizations could be applied for IPv6. Nobody did
it yet.
Compiling out table support effectively removes those last
100 ns.
There is also per-CPU pointers allocated directly (4 bytes per entry
per CPU on a 64-bit architecture). We ignore this detail.
Last weekend the yearly Craft Beer Kanazawa Festival took place in central Kanazawa. This year 14 different producers brought about 80 different kind of beers for us to taste. Compared with 6 years ago when I came to Japan and Japan was still more or less Kirin-Asahi-Sapporo country without any distinguishable taste, the situation as improved vastly, and we can now enjoy lots of excellent local beers!
Returning from a trip to Swansea and a conference in Fukuoka, I arrived at Kanazawa train station and went directly to the beer festival. A great welcome back in Kanazawa, but due to excessive sleep deprivation and the feeling of finally I want to come home , I only enjoyed 6 beers from 6 different producers.
In the gardens behind the Shinoki Cultural Center lots of small tents with beer and food were set up. Lots of tables and chairs were also available, but most people enjoyed flocking around in the grass around the tents. What a difference to last year s rainy and cold beer festival!
This year s producers were (in order from left to right, page links according to language):
With only 6 beers to my avail (due to ticket system), I choose the ones I don t have nearby. Mind that the following comments are purely personal and do not define a quality standards I just say what I like from worst to best:
Ohya Brasserie, Kitokito Hop : A desaster, I was close to throw this beer away, but then thought (what a waste!). Strange and disturbing taste.
Ushitora Brewery, Pure Street Session IPA: Ok, but nothing special. Too light and not taste a bit unclear to me.
Swanlake Brewery, some seasonal IPA: good, not so extremely bitter, nice taste.
Ise Kadoya Brewery, Pale Ale: very good, full taste
Yoho Brewery, Red Ale: my absolute favorite I don t know why, but this brewery simply produces absolutely stunning ales. Their Aooni IPA is my day-in-day-out beer, world class. Their Yona Yona Ale, less bitter than the Aooni, is already famous, and this Red Ale was a perfect addition.
A great beer festival and I am looking for next years festival to try a few more. In the mean time I will stock up beers at home, so that I have always a good Yoho Brewery beer at hand!
Enjoy
I wrote last month about buying a new laptop and I still haven t made a decision. One reason for this is because Dell doesn t seem to be shipping the E7250. Some online shops claim to be able to deliver it, but aren t clear on what configuration it has and I really don t want to end up with Dell Wifi.
Another issue has been the graphic issues with the Broadwell GPU (see the comment section of my last post). It seems unlikely that this will be fixed in time for Debian Jessie. I really want a stable OS on this machine, as it will be a work-horse and not a toy machine. I haven t made up my mind whether the graphics issue is a deal-breaker for me.
Meanwhile, a couple of more sub-1.5kg (sub-3.3lbs) Broadwell i7 s have hit the market. Some of these models were suggested in comments to my last post. I have decided that the 5500U CPU would also be acceptable to me, because some newer laptops doesn t come with the 5600U. The difference is that the 5500U is a bit slower (say 5-10%) and lacks vPro, which I have no need for and mostly consider a security risk. I m not aware of any other feature differences.
Since the last round, I have tightened my weight requirement to be sub-1.4kg (sub-3lbs), which excludes some recently introduced models, and actually excludes most of the models I looked at before (X250, X1 Carbon, HP 1040/810). Since I m leaning towards the E7250, with the X250 as a reliable fallback option, I wanted to cut down on the number of further models to consider. Weigth is a simple distinguisher. The 1.4-1.5kg (3-3.3lbs) models I am aware that of that is excluded are the Asus Zenbook UX303LN, the HP Spectre X360, and the Acer TravelMate P645.
The Acer Aspire S7-393 (1.3kg) and Toshiba Kira-107 (1.26kg) would have been options if they had RJ45 ports. They may be interesting to consider for others.
The new models I am aware of are below. I m including the E7250 and X250 for comparison, since they are my preferred choices from the first round. A column for maximum RAM is added too, since this may be a deciding factor for me. Higher weigth is with touch screens.
It appears unclear whether the E7250 is memory upgradeable, some sites say max 8GB some say max 16GB. The X250 and 820 has DisplayPort, the S935 and Z30-B has HDMI, and the E7250 has both DisplayPort/HDMI. The E7250 does not have VGA which the rest has. All of them have 3 USB 3.0 ports except for X250 that only has 2 ports. The E7250 and 820 claims NFC support, but Debian support is not given. Interestingly, all of them have a smartcard reader. All support SDXC memory cards.
The S935 has an interesting modular bay which can actually fit a CD reader or an additional battery. There is a detailed QuickSpec PDF for the HP 820 G2, haven t found similar detailed information for the other models. It mentions support for Ubuntu, which is nice.
Comparing these laptops is really just academic until I have decided what to think about the Broadwell GPU issues. It may be that I ll go back to a fourth-gen i7 laptop, and then I ll probably pick a cheap reliable machine such as the X240.
My Lenovo x220, which I've owned for almost four years now (I remember fetching
it from the supplier shortly before driving off to Banja Luka), was getting
somewhat worn out. The keyboard and the screen had both been replaced at some
point already, and the wwan interface had given up as well. The case was all
cracked, and the NIC connector wasn't doing very well anymore either; there
have been a few cases of me trying to configure the wireless network at a
customer, but this being harder than it needs to be because the NIC will only
work if I put in the network cable just so, and someone dropped a piece of
paper onto the cable.
In other words, it was time for a new one. At first I wanted to buy a Lenovo
x250, but then I noticed that the Fujitsu came with an i7 4712MQ, which I liked
(as today it is still quite exceptional for an ultrabook to have a quadcore
processor). Fujitsu also claims up to 9 hours of battery life, but it's not
clear to me whether this is supposed to be the case with the default battery
only. They also have a battery for the modular bay, which I bought as well (to
replace the optical drive whic I sometimes use, but only rarely), and on top
of that it came with a free port replicator.
Not all is well, however. In the x220, getting the WWAN interface to work
involved some creative use of chat against /dev/ttyACM0 wherein I issue a
few AT commands to put the WWAN interface into a particular mode, and from then
on the WWAN interface is just a regular Ethernet interface on which I can do
DHCP. The new laptop has a "Sierra Wireless, Inc." WWAN interface (USB id
1199:9041) which annoyingly doesn't seem to expose the ttyACM (or similar)
devices, and I'm not sure what to use instead. Just trying to do DHCP doesn't
work -- yes, I tried.
Unfortunately, the keyboard isn't very good; it's of the bubble gum type, and I
keep getting annoyed at it not picking up my keystrokes all the time. When I'm
at home or at my main customer, I have a Das Keyboard Ultimate S (3rd
(customer) and 4th (home) generation), so it's only a problem when I'm not at
home, but it's still extremely annoying. There is a "backlight" function in
that keyboard, but that's not something I think I'll ever use (hint: "das
keyboard ultimate s").
The display can't do more than 1366x768, which is completely and utterly
wrong for a computer -- but it's the same thing as my x220, so it's not
really a regression.
The "brightness" ACPI keys don't seem to work. I may have to fiddle with some
ACPI settings at some point, I suppose, but it's not a major problem.
When I plugged it in, I noticed that fdpowermon ignored the second battery. I
had originally written fdpowermon with support for such a second battery, but
as my x220 had only one, I never tested it. Apparently there was a bug, but
that's been fixed now -- at least in unstable.
On the good side of the equation, it has three USB3 ports in the laptop, and
four in the port replicator, with no USB2; this is a major leap forwards from
the one USB3 and six USB2 in the x220. A positive surprise was the CCID
smartcard reader that I somehow missed while reading the specs, but which --
given my current major customer, is very welcome,
indeed.
Update: After having used it a few days, there were a few minor
annoyances:
Audio didn't work whenever I plugged the laptop to its port replicator
and used the external screen. It took me a while to figure out that
the default ALSA card (i.e., card 0) is the HDMI output, whereas card
1 is the PCH output, and that since I'm using the DVI port and analog
audio, I hear nothing. To fix, create a .asoundrc containing:
pcm.!default
type hw
card 1
ctl.!default
type hw
card 1
Backlight didn't work. My .config/awesome/rc.lua now contains the
following lines:
The lines with "modkey" allow me to go to "brightness max" or
"brightness min" in one go, rather than have to hit fn+f6 or fn+f7
repeatedly, which is a useful extra.
It was suggested to me that ModemManager might be able to figure out
how to enable the WWAN modem. The good news is that it detects the
modem, and mmclishould have a way to enable things. The bad news
is that mmcli -m 0 -e just comes back with "error: couldn't enable
the modem: 'timed out'" (partially translated into Dutch). I haven't
had the time to look into this much yet, but it seems to be another
one of those dbus complications. To be continued, I'm sure.
The 2nd Shogi Denousen has began. This is the first cut-throat match between top-notch professional Shogi players(yes, there are such people) and the best crop of computer Shogi engines, 5 on 5.
Shogi is a distant cousin of Chess. Unlike Chess, you may re-use captured pieces anywhere on the board anytime. It brings quite lot of additional complexities, and even after the defeat of Garry Kasparov in 1997, many considered that (at least top-level) human Shogi players have a great lead on computer Shogi engines.
The situation had changed dramatically when a newcomer Shogi engine called Bonanza, developed by a Japanese chemist Kunihito Hoki, won the 16th World Computer Shogi Championship. Bonanza appeared totally out of the blue Hoki incorporated some new ideas developed in the field of computer Chess, and Bonanza beated existing engines with no mercy. Bonanza could even corner some professional Shogi players in 2007. Later Hoki released(but not strictly open-source) the source code of Bonanza, and the standard of computer Shogi has risen considerably since then. Finally, in the 1st Denousen last year, Kunio Yonenaga, long retired but possibly one of the greatest Shogi players in the history, was defeated by Bonkras, a clustered version of Bonanza developed by Eiki Itoh of Fujitsu.
The first match of Denousen this year was held yesterday between Kouru Abe, an 18-year old prodigy from Aomori, and Shueso, which finished in 5th at the 22nd World Computer Shogi Championship. I hoped a close game, but Abe could beat Shueso quite easily. Shueso somehow could not bring its ability into full play, to my great disappointment. Next weekend(Mar. 30), we will see the second match between Shinichi Sato, another young pro, and Ponanza, developed based on Bonanza by Issei Yamamoto of The University of Tokyo.
BTW, Debian already has the package of GPS Shogi, which won the 22nd World Computer Shogi Championship and considered by many the strongest Shogi engine available now (there is also gnushogi in Debian, but gnushogi is quite weak).
You may have fun with
$ xshogi -fsp gpsshogi
Unfortunately, we don t have good modern GUI for Shogi yet
The Debian package of the Linux kernel is based on Linux 3.2, but
has some additional features. This continues from parts
1,
2
and
3,
and covers new and improved hardware support.
DRM drivers from Linux 3.4 (proposed)
Some recent Intel and AMD graphics chips were not supported well or
at all by the DRM (Direct Rendering Manager) drivers in Linux 3.2.
Although many bug fixes have been included in 3.2.y stable updates,
we are considering updating them to the versions found in Linux 3.4.
(We did something similar for Debian 6.0 'squeeze'.)
Julien Cristau has been working on this and has prepared binary
packages. To install, run as root:
gpg --no-default-keyring --keyring /usr/share/keyrings/debian-keyring.gpg --export 310180050905E40C apt-key add -
echo deb http://people.debian.org/~jcristau/wheezy-drm34/ ./ > /etc/apt/sources.list.d/jcristau-wheezy-drm34.list
apt-get update
apt-get install linux-image-3.2.0-4.drm-amd64 # or -486, or -686-pae
Please test these and report your results to
bug #687442. I would
suggest testing suspend/resume (if applicable), use of internal and
external displays on laptops, and 3D accelerated graphics (games and
compositing window managers such as GNOME Shell). Remember that
AMD/ATI graphics chips require the firmware from the
firmware-linux-nonfree package for 3D acceleration and many other
features.
amilo-rfkill driver
I wrote a standard rfkill driver for the Fujitsu-Siemens Amilo A1655
and M7440, based on the out-of-tree fsaa1655g and fsam7440 drivers.
Unlike those, it should work with the rfkill command, Network
Manager, etc.
ALPS touchpads
Newer touchpads made by ALPS use different protocols for reporting
scroll and pinch gestures. Jonathan Nieder backported the changes
to support these.
Wacom tablets
Jonathan Nieder updated the wacom driver to the version in Linux
3.5, adding support for the Intuos5, Bamboo Connect, Bamboo 16FG and
various other models.
Emulex OneConnect 'Skyhawk'
Sarveshwar Bandi at Emulex contributed a backport of the be2net
driver from Linux 3.5, adding support for their 'Skyhawk' chip.
Marvell Kirkwood
Marvell's Kirkwood SoCs have been supported upstream for some time
and in Debian since release 6.0 'squeeze'. However new models and
boards generally require specific support. Arnaud Patard backported
support for the 6282 rev A1 chip found in QNAP TS-x19P II models,
and for the Marvell Dreamplug and Iomega Iconnect.
Miscellaneous
ITE IT8728F hardware monitor
Ralink RT5392, RT5390R and RF5372 wifi chips
Synaptics USB touchpad devices
JMicron JM362 SATA controller
IguanaWorks USB IR transceiver
More to come
Missing hardware support is an important bug that can be fixed by
kernel updates during a freeze and throughout the lifetime of a
stable release. If you know that new hardware isn't supported by
the Debian kernel, please open a bug report. I can't promise
that it will be fixed, but we need to know what's missing.
Hardware vendors that maintain their own drivers upstream
(not out-of-tree) are especially welcome to contribute tested
backports that add support for the latest hardware. Send mail to
debian-kernel@lists.debian.org
if you have any questions about this.
I'm still (ever) looking for the portable, somewhat lightweight photo
system but with fast AF, adequate low light capabilities system. Also,
I love prime lenses.
I have a Nikon DX format camera, but none of the zoom lenses are what
I want, and Nikon hasn't updated their wide primes. So I tried for a
while a Fuji X100, which has much better ISO/noise results than my
camera, but it focuses very badly in low light. What's the use of the
low-light capability if you can't focus? So, after also fighting with
the UI, I realised that the Fuji was not for me, and went back to my
Nikon. And the first photo I took again with a DSLR was like Yes,
this is what I expect: shutter half-press, instant focus, confirmation
beep, shutter full-press, photo taken, ready for next one . Don't get
me wrong, the Fuji X100 is a very nice camera, but it is not a DSLR;
and I realised I wanted a portable DSLR, not simply a portable camera.
What I did learn though from the Fuji is how good the 23mm (35mm FX
equivalent) lens is for general , i.e. street photography. And it was
also a prime.
So after much head-scratching, I got myself a
Nikkor 24mm f/2.8D
lens. Yes, I know, it's the old 'D' type, the optics are the same for
about 20-25 years, and it's not as sharp as the 're-issued' primes
(not even close to the famous 35mm f/1.8 G DX), and it has lots of
flare in direct sunlight (as common with wide-angle lenses). However
it's a lightweight (270g), small (64.5 46 mm) and quite nice lens. And
to be honest, I rather like the old-style distance scale (since it has
lots of numbers!), so it compensates for the lack of AF-S. The only
downside of the non-AF-S is that it wouldn't work on some of the DX
bodies.
As to the image quality actually a bit better than I expected. Here
is a picture I took in Z rich, granted in perfect light. JPEG,
straight-from-camera, just with EXIF data removed (click on the link
for the original, full-size image; note that the camera was configured
for the 'medium' size instead of 'large' you can see how careful I am
when taking pictures: not):
Near Z rich Central
Settings were:
Exposure Time: 1/500 sec
F-Number: f/8.0
ISO: 200
White balance: set to "Sunny", 'A2' setting
Focus distance: 3.55m (set by camera; I wonder why )
I think this is quite good quality for a non-processed JPEG; and given
how light the lens is, and that it can go down to f/2.8 (with more
softness, though), I think this is quite good for a travel lens.
And since I have a short trip coming up sometimes soon, I'll only take
this lens, to see how it goes as an all-around lens. If it doesn't
perform well, I can always blame my bad technique
PS: I had to learn about the 'underlay' plugin in ikiwiki, as I didn't
want to commit megabytes of basically read-only, binary data to git;
it works well, so I'll be able to post more pics in the future.
There a many, many, e-book reader devices available these days, and they're quickly becoming pretty affordable. The currently cheapest device in Germany (that I know of) is the TrekStor eBook Reader 3.0, model number EBR30-a, at 59.- Euros via Weltbild or Hugendubel.
The device has an 800x480 7" TFT (yep, no e-ink), 2100mAh battery, it can display PDFs, EPUB, and TXT files (and Adobe DRM crap, which I don't really care about), it has an accelerometer which allows for landscape/portrait switching, it can play MP3, OGG, WAV, and WMA audio files (headphone jack), it can display pictures (BMP, GIF, JPG, even PNG, though that's not mentioned in the vendor's specs), and it has 2GB internal storage for books/music/pictures. Uploading of (non-DRM) content is done by a simple file copy, it enumerates as a standard USB mass storage device with FAT filesystem. It's a relatively nice reader for the price, I've read a few PDFs (datasheets, presentations) on it in the subway/train while listening to music from the device and it's quite OK for my purposes. So much for the review part.
However, I didn't really buy it for reading books on it, I was more interested in taking it apart, of course ;-) My hope was that it would turn out to be a really cheap device running Linux/U-Boot which would be perfect for playing around with embedded Linux stuff. Unfortunately, I wasn't so lucky (it seems).
I've posted a few photos of the device and its hardware components on my flickr account and over at randomprojects.org, together with all the information I was able to find out so far. Here's a quick summary:
Main CPU/SoC: FI E200 B6077BA 26P1
RAM: MIRA P3S12D40ETP (512MBit / 64MByte DDR SDRAM, max. 200MHz)
Some accelerometer (to switch between landscape/portait mode), model unclear so far, maybe the chip labeled 605 132?
There are public datasheets for most of the hardware components (see randomprojects.org for links), but unfortunately the most important one (for the CPU) is not yet found/identified. I was told that the CPU/SoC is probably based on an ARM9 (ARM926EJ-S) core and the firmware running on it seems to be some uCos-based RTOS (not Linux, unfortunately).
So far I was not able to find out the vendor name or website of the "FI E200" CPU/SoC (let alone any datasheets), any hints would be highly appreciated. I checked arm.com: Processor Licensees, but the only two companies whose name starts with "F" having licensed an ARM9 core are Fujitsu and Freescale, which doesn't fit, I think?
I could (and probably will) check the PCB for RX/TX lines on an UART and/or JTAG pads (none are obviously labelled), and given that it's and ARM9 core there is a good chance that OpenOCD can be used and that a standard cross-gcc for ARM will work. However, that is all pretty pointless until it's clear which SoC exactly is used, and thus whether there is already Linux and/or U-Boot support for it and/or whether datasheets are available so that the respective code could be written. Without datasheets, this is going to be a pretty painful experience, not really worth investing much time, IMHO.
If anyone knows more about the vendor/device and respective datasheets, please let me know. Thanks!
I ve been lasy about the reporting lately, so this is a 3 weeks update at once !
The bug count according to udd is down to 818. I guess this is due to Kibi s triaging on input related bugs, but I helped to close a few one too !
I kept my week numbering as before, so now I know the first bugs I pinged are more that 11 weeks old. I guess if some submitter did not answer in that delay, they will probably never do it. I think the bug count will go down again !
#451708 ping & close xserver-xorg-input-synaptics: Option GuestMouseOff true not working.
#424743 ping & forwarded X11 pen driver doesn t work on tabletPC Fujitsu Stylistic 2300 (fix included).
#499664 ping, try nouveau X fails to start with xserver-xorg-video-nv 1:2.1.12-1.
So, next Saturday Luciana and I are moving back from Rio de Janeiro to Belo Horizonte after about 6 months here. It was an interesting ride. We didn t really have a good time finding a good place to live at - Rio is very expensive and it looks like demand is so high anywhere close to Luciana s work place that the only reasonable solution was to live very far away, and even there we didn t really have much success, although for other reasons I may talk about later.
Belo is how the foreign people who live there usually refer to Belo Horizonte. I think that is probably because it s a bit too hard for them to say Horizonte =D (if it helps you, you could use the Mineirish Belzonte ). I have borrowed this svg file kindly licensed in the FDL by Raphael Lorenzeto de Abreu, and generated a simple png image that you can see in this post with Belo Horizonte, and some other cities we often talk about at Collabora =):
A straight line between Recife and Belo Horizonte has about 1640km. There are 340km between BH and Rio, and 973km between BH and Florian polis.
A bit about Belo Horizonte, for those friends of mine to whom I always have a hard time explaining where it s located, and what kind of city it is: Belo Hozizonte is a nice, beautiful city, with a quite big metropolitan area. About 6 million people live in greater Belo Horizonte. It is considered one of the three most influential cities in Brazil, along with S o Paulo and Rio de Janeiro. It s surrounded by mountains, which are considered one of the defining geographical features of the Minas Gerais state, of which it is the capital.
Here s a picture that is available under the public domain in Wikipedia:
Speaking of Minas Gerais, it is, according to Wikipedia, the fourth in size among the 26 States of Brazil, being just a bit bigger than mainland-France. Minas Gerais is one of the main earth transports hubs of the country (having the largest number of federal roads), and is famous for its tasty food, the beauty of its people, its cheeses, the calm, introspective nature of its people, its interesting way of speaking portuguese, and its alcoholic beverages.
Now, going away from Rio to Belo Horizonte has a single big disadvantage associated with it: we don t get to have the Sea a few minutes away, anymore. Our solution to that is, of course, going to one of the numerous bars (the legend goes around that BH has the largest absolute number of bars of all cities in the world), and drinking instead of swimming! Quem n o tem mar, vai pro bar!
One of my awesome colleagues from Collabora, Danielle Madeley, has done various improvements to the clutter-gtk project started by the also awesome Alexander Larsson. Reading her blog I was so impressed with this post, that I decided to spend some free time to try out some crazy, experimental stuff using that.
What I did was create a very simple GTK+ widget that derives from GtkClutterEmbed, and works as a somewhat replacement for GtkNotebook, called, proving how bad I am at naming things, GkOverview. Like I said, it s not really stable or well-done, it doesn t even free its resources (in fact, it doesn t even have implementations for finalize and dispose!), it s really just an experiment.
What GkOverview does is provide a simple API for you to append widgets into it, and it is able to show you one of those widgets, or an overview of all of them. This is quite simple, and yet very powerful. With the help of my significant other, I have got a layout of the widgets in the overview that I really like.
Of course I used WebKitGTK+ to try it out, what else? And since I had effectivelly, at least in my head, created a fairly convincible replacement for GtkNotebook functionality, I decided a second challenge I could take on myself was to make my preferred browser, Epiphany, use that instead of its EphyNotebook widget. Epiphany being quite well-designed, replacing EphyNotebook was quite a breeze, and here s the result!
Before I go on, let me repeat it: this is all crappy, experimental, curiosity-induced work. It may be that in the future we can use stuff like this to make, say, improving the back/forward mechanism, history navigation, as other browsers do, replacing tabs with a better UI mechanism, and whatnot.
A couple videos, for your pleasure (I was finally able to create a nice video, using Byzanz =)):
I own two scanners: a Fujitsu ScanSnap S510 and an Epson Perfection 4180 Photo. The S510 is a sheetfed document scanner, and works great at that. It has perfect SANE support, duplex mode, excellent sheet feeder, and is a generally good document scanner. It s passable for photos, but only that. The color isn t great, and the precision of a sheetfed scanner just isn t up to a flatbed.
The Epson has never been supported by SANE directly. There was an epkowa driver, but the 4180 epkowa driver hasn t been updated in ages and isn t compatible with any modern Linux distro.
So, I m looking for a flatbed scanner for photos and documents (no need for negatives; that s the THIRD scanner on my desk.) The most important requirement is that it work well with Linux. The next most important requirement is that it have as good scanning quality as possible for an under-$200 scanner.
If it s an all-in-one (with a printer), I m fine with that, as long as it meets the above requirements. Any suggestions?
Debian meeting in University of Tokyo.
Last Saturday, the Tokyo Area Debian Meeting was held on University of Tokyo.
Hibino talked about Common lisp packaging, and
Fujisawa talked about packaging MC-MPI for Debian.
It was fun.