<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

    <title>Birch Street Computing (Atom Feed)</title>
    <link href="http://asynchrono.us"></link>
    <link rel="self" href="http://asynchrono.us/atom.xml"></link>
    <updated>2022-01-12T21:01:08Z</updated>

    <author>
        <name>John Mulligan</name>
    </author>

    <id>tag:asynchrono.us,2006-01-02:birch-street-computing</id>

    
    <entry>
        <title>Samba in Kubernetes - Status Update 2</title>
        <link href="http://asynchrono.us/samba-in-kubernetes-status-update-2.html"></link>
        <updated>2022-01-12T21:01:08Z</updated>
        <published>2022-01-12T20:55:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;I had hoped to update the wider Samba community with another status report
in December but I missed that boat. So January will have to do. This message
is part of an ongoing effort to summarize what we&#39;ve been up to as we
work on integration for Samba in containers and Kubernetes &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-2-id1&#34; href=&#34;#samba-in-kubernetes-status-update-2-id7&#34;&gt;1&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As a reminder: our focus is to enable Samba based services running within
Kubernetes clusters, however our container work should be completely
independent of the orchestration layer, so you can use docker, podman, or other
OCI container based orchestration systems.&lt;/p&gt;&lt;h3&gt;Clustering/CTDB&lt;/h3&gt;&lt;p&gt;We have continued working on making clustered smbd instances with CTDB a viable
option for users. The low level work has not been changing a lot recently, and
we&#39;ve focused on improving the operator and how we create and manage clustered
instances. The feature is still experimental but the workflow should not be
changing much in the near future. Largely, you just need to create &#34;SmbShare&#34;
resources that indicate they should be clustered and the minimum size of the
cluster. We&#39;ve improved our testing coverage but need to improve our
infrastructure before we can stabilize the feature. We also have some plans to
revisit how we configure the CTDB cluster as the nodes file is a bit of a
challenge.&lt;/p&gt;&lt;p&gt;Like I mentioned in my previous message, we want to look into improving
behavior with regards to node and container failover. We have not been able to
spend much time on this yet, so we are unclear if we can combine CTDB&#39;s native
IP failover with Kubernetes networking.&lt;/p&gt;&lt;p&gt;We&#39;re nearly done adding support for the vfs fileid module to the operator.
Sachin Prabhu has a PR open on this topic &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-2-id2&#34; href=&#34;#samba-in-kubernetes-status-update-2-id8&#34;&gt;2&lt;/a&gt;. This change will ensure that the
file system we&#39;re targeting (cephfs) will not depend on external factors like
what order file systems were mounted by the kernel. For now, this is always
enabled but we can make it configurable in the future.&lt;/p&gt;&lt;h3&gt;ACL Xattr&lt;/h3&gt;&lt;p&gt;We still want to run our containers without privileges and therefore being able
to store NTACLs outside of &#34;security.NTACL&#34; continues to be a goal. In order to
get this functionality, Günther Deschner is continuing work on the open Samba
project merge request &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-2-id3&#34; href=&#34;#samba-in-kubernetes-status-update-2-id9&#34;&gt;3&lt;/a&gt;. Günther is working to improve the hooks into the VFS
layer to handle performance and layering concerns raised in that PR.&lt;/p&gt;&lt;h3&gt;CI and Testing Infrastructure&lt;/h3&gt;&lt;p&gt;Currently, all our projects rely entirely on the github actions CI. However,
we&#39;ve hit some limitations with this infrastructure, especially with the ability
to run integration tests on multi-node clusters for CTDB Clustered instances.
Anoop C S has been working on arranging a new testing infrastructure using the
CentOS CI &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-2-id4&#34; href=&#34;#samba-in-kubernetes-status-update-2-id10&#34;&gt;4&lt;/a&gt;. This system will allow us to run VMs in our tests and support
virtual multi-node clusters. In addition to setting up this infrastructure for
our Samba-in-Containers work, the plan is to also use this for the
gluster/samba integration tests, and perhaps other samba integration tests in
the future.&lt;/p&gt;&lt;h3&gt;AD DC Containers&lt;/h3&gt;&lt;p&gt;The samba-containers project generates images for client, server, and AD (DC)
servers.  However, the AD DC server images today produce containers that can
only act as a single DC in a hard-coded domain with hard-coded users and
groups. This has been working fine for our team for a while because our needs
for the Samba AD is limited: we use it as part of our integration tests and not
much else. As part of a general effort to make the samba-containers project
more generally useful, I spent some time over the holidays working on making
the AD DC container image work with custom settings &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-2-id5&#34; href=&#34;#samba-in-kubernetes-status-update-2-id11&#34;&gt;5&lt;/a&gt;. The new image will be
based on the sambacc project, just like the file server image has been for a
while. Soon, the image will be configurable, support provisioning a new domain,
as well as joining a new DC to an existing domain.&lt;/p&gt;&lt;p&gt;Running an AD DC container continues to require executing the container with
SYS_ADMIN capabilities.&lt;/p&gt;&lt;h3&gt;Wrap Up&lt;/h3&gt;&lt;p&gt;Work continues on many of the projects living under the samba-in-kubernetes
umbrella.  We&#39;re hoping that these (semi-)regular updates help create some
additional interest in these efforts. Feel free to reply with
questions/comments/concerns. We&#39;d also love it if you drop by our github
projects as well. Even feature requests are welcome. :-)&lt;/p&gt;&lt;p&gt;Thanks for reading!&lt;/p&gt;&lt;p&gt;PS. This is a reformatted version of what I sent to the samba mailing lists
&lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-2-id6&#34; href=&#34;#samba-in-kubernetes-status-update-2-id12&#34;&gt;6&lt;/a&gt;. I&#39;m &#34;blogging&#34; these for easy reference and discoverability.&lt;/p&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-2-id7&#34; href=&#34;#samba-in-kubernetes-status-update-2-id1&#34;&gt;1&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://github.com/samba-in-kubernetes&#34;&gt;https://github.com/samba-in-kubernetes&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-2-id8&#34; href=&#34;#samba-in-kubernetes-status-update-2-id2&#34;&gt;2&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://github.com/samba-in-kubernetes/samba-operator/pull/129&#34;&gt;https://github.com/samba-in-kubernetes/samba-operator/pull/129&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-2-id9&#34; href=&#34;#samba-in-kubernetes-status-update-2-id3&#34;&gt;3&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://gitlab.com/samba-team/samba/-/merge_requests/1908&#34;&gt;https://gitlab.com/samba-team/samba/-/merge_requests/1908&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-2-id10&#34; href=&#34;#samba-in-kubernetes-status-update-2-id4&#34;&gt;4&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://jenkins-samba.apps.ocp.ci.centos.org/&#34;&gt;https://jenkins-samba.apps.ocp.ci.centos.org/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-2-id11&#34; href=&#34;#samba-in-kubernetes-status-update-2-id5&#34;&gt;5&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://github.com/samba-in-kubernetes/sambacc/pull/28&#34;&gt;https://github.com/samba-in-kubernetes/sambacc/pull/28&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-2-id12&#34; href=&#34;#samba-in-kubernetes-status-update-2-id6&#34;&gt;6&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://lists.samba.org/archive/samba-technical/2022-January/137072.html&#34;&gt;https://lists.samba.org/archive/samba-technical/2022-January/137072.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2022-01-12:samba-in-kubernetes-status-update-2</id>
    </entry>
    
    <entry>
        <title>Samba in Kubernetes - Status Update 1</title>
        <link href="http://asynchrono.us/samba-in-kubernetes-status-update-1.html"></link>
        <updated>2021-10-18T18:45:05Z</updated>
        <published>2021-10-18T18:00:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;As some of you may remember, I&#39;ve been working on an effort to include SMB, via
Samba, in the container ecosystem &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id1&#34; href=&#34;#samba-in-kubernetes-status-update-1-id9&#34;&gt;1&lt;/a&gt; and Kubernetes. It&#39;s been a while since I
wrote anything about these projects. I want to give an update on our work to
keep others informed, and possibly get others interested in what we&#39;ve been
doing. I hope to make this a regular thing (unless you get annoyed and tell
me to stop ;-) ).&lt;/p&gt;&lt;p&gt;We gave a presentation on these projects at sambaXP &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id2&#34; href=&#34;#samba-in-kubernetes-status-update-1-id10&#34;&gt;2&lt;/a&gt; and also have had a few
posts on the samba mailing list about them. Since then we&#39;ve been doing a lot
of varied work and below is a small slice of it.&lt;/p&gt;&lt;h3&gt;CTDB&lt;/h3&gt;&lt;p&gt;I took on the task of trying to &#34;containerize&#34; CTDB-enabled Samba over this
summer. With assistance of the samba-technical mailing list we successfully
started running CTDB in a containerized environment. I proceeded to automate
parts of the CTDB configuration in our sambacc library &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id3&#34; href=&#34;#samba-in-kubernetes-status-update-1-id11&#34;&gt;3&lt;/a&gt;. Finally, we
created new example YAML files in samba-containers &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id4&#34; href=&#34;#samba-in-kubernetes-status-update-1-id12&#34;&gt;4&lt;/a&gt; that demonstrate a
clustered instance of Samba running under Kubernetes orchestration.&lt;/p&gt;&lt;p&gt;There were a lot of challenges getting CTDB working automatically in a
container and there&#39;s still a lot to do. For example, the code I wrote to help
manage the CTDB nodes file isn&#39;t as robust as I&#39;d like it to be and is still
generally immature. We&#39;d like to discuss ways we might update CTDB to make the
nodes easier to manage through automation (in our environment) and hope such
discussions could improve things for other use cases as well.&lt;/p&gt;&lt;p&gt;At the moment, we&#39;ve been using a Kubernetes based mechanism &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id5&#34; href=&#34;#samba-in-kubernetes-status-update-1-id13&#34;&gt;5&lt;/a&gt; for getting
clients running outside of the cluster access to the shares. Without plunging
deep into the particulars of Kubernetes networking; the method works well
enough but does not use the CTDB public address mechanism. As such, we feel the
failover behavior we have right now may not be as nice at getting clients to
quickly fail-over when compared to CTDB&#39;s tickle-ack. This is an area we&#39;re
going to be actively investigating and would like to hear additional feedback
on this topic.&lt;/p&gt;&lt;p&gt;We&#39;re also adding support for the CTDB enabled Samba instances to the
Kubernetes operator code. The plan is to continue to use the single SMB
instance by default but add an experimental mode for running a StatefulSet of
Pods that include CTDB for clustering across multiple nodes.&lt;/p&gt;&lt;p&gt;We are also discussing the need for using the fileid vfs module on top the
clustered file system we intend to use (cephfs). However, we don&#39;t want to
require a PVC to be any particular file system and so we have been discussing
ways to enable the fileid module, and how to configure it, only in cases that
we need it in an easy-to-use manner.&lt;/p&gt;&lt;h3&gt;ACL Xattr&lt;/h3&gt;&lt;p&gt;We are very interested in being able to use NTACLs on the shares that we host
in containerized Samba servers. Today, the acl_xattr module stores the NTACL
metadata in an xattr named &#34;security.NTACL&#34;. The &#34;security&#34; namespaces on Linux
requires the use of the CAP_SYS_ADMIN capability - basically the &#34;root user&#34; of
Linux capabilities. This would require running the containers with escalated
privileges; something we would prefer not to do.  So, Günther Deschner, with
feedback from Ralph Böhme and Michael Adam and others, has been working on the
patches in MR#1908 &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id6&#34; href=&#34;#samba-in-kubernetes-status-update-1-id14&#34;&gt;6&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;With these changes in place, we&#39;d be able to configure Samba with a custom
xattr for our containerized Samba instances and thus avoid needing to run a
privileged container while still supporting NTACLs.&lt;/p&gt;&lt;h3&gt;Nightly Builds&lt;/h3&gt;&lt;p&gt;We&#39;ve been looking in an easy way to try out the latest code in Samba and are
planning on adding support for building container images based on nightly
package builds. Anoop C S has already added support to the sambacc layer in
order to support the newer CLI options present in Samba 4.15. Next we plan to
add new build rules to the samba-containers project that will create new build
tags in our container registry repo(s).  Soon we should be able to more easily
test and experiment with the latest versions Samba has to offer!&lt;/p&gt;&lt;h3&gt;Metrics&lt;/h3&gt;&lt;p&gt;In the slightly longer term, we would like to add metrics support to our
pods running in Kubernetes. Our plan is to follow the de-facto standard
in this space and export Prometheus metrics. In order to do this we need
to get the data out of our Samba stack and rather than try and directly
scrape the output of a tool like smbstatus we are very interested in the
effort to add JSON output support to samba tools. In our case, we want JSON
output from smbstatus. As such we&#39;re very interested in MR#1269 &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id7&#34; href=&#34;#samba-in-kubernetes-status-update-1-id15&#34;&gt;7&lt;/a&gt;.
We&#39;ll probably be getting more involved here in the near future.&lt;/p&gt;&lt;h3&gt;Offline Domain Join&lt;/h3&gt;&lt;p&gt;One new feature that landed in Samba 4.15 is the new Offline Domain Join (ODJ)
support. Currently, to connect our containers with Active Directory we&#39;re
asking users to store a username/password in a Kubernetes secret &lt;a class=&#34;footnoteref&#34; id=&#34;samba-in-kubernetes-status-update-1-id8&#34; href=&#34;#samba-in-kubernetes-status-update-1-id16&#34;&gt;8&lt;/a&gt;. We are
aware that storing a password (even within a secret) isn&#39;t the best thing
to do, so we&#39;re looking forward to trying to integrate the ODJ feature
into our projects so that users never have to store a password.
Watch this space! :-)&lt;/p&gt;&lt;h3&gt;Wrap Up&lt;/h3&gt;&lt;p&gt;If you have any questions or comments feel free to ask! I&#39;m hoping this
update both serves to inform you of what we&#39;re up to as well as serving as
a prompt for you to give us feedback.&lt;/p&gt;&lt;p&gt;Thanks for reading!&lt;/p&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id9&#34; href=&#34;#samba-in-kubernetes-status-update-1-id1&#34;&gt;1&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;Specifically OCI/Docker style containers.&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id10&#34; href=&#34;#samba-in-kubernetes-status-update-1-id2&#34;&gt;2&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://sambaxp.org/fileadmin/user_upload/sambaxp2021-slides/Mulligan_Adam_samba_operator.pdf&#34;&gt;https://sambaxp.org/fileadmin/user_upload/sambaxp2021-slides/Mulligan_Adam_samba_operator.pdf&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id11&#34; href=&#34;#samba-in-kubernetes-status-update-1-id3&#34;&gt;3&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://github.com/samba-in-kubernetes/sambacc/&#34;&gt;https://github.com/samba-in-kubernetes/sambacc/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id12&#34; href=&#34;#samba-in-kubernetes-status-update-1-id4&#34;&gt;4&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://github.com/samba-in-kubernetes/samba-container/&#34;&gt;https://github.com/samba-in-kubernetes/samba-container/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id13&#34; href=&#34;#samba-in-kubernetes-status-update-1-id5&#34;&gt;5&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/&#34;&gt;https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id14&#34; href=&#34;#samba-in-kubernetes-status-update-1-id6&#34;&gt;6&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://gitlab.com/samba-team/samba/-/merge_requests/1908&#34;&gt;https://gitlab.com/samba-team/samba/-/merge_requests/1908&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id15&#34; href=&#34;#samba-in-kubernetes-status-update-1-id7&#34;&gt;7&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;&lt;a href=&#34;https://gitlab.com/samba-team/samba/-/merge_requests/1269&#34;&gt;https://gitlab.com/samba-team/samba/-/merge_requests/1269&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;samba-in-kubernetes-status-update-1-id16&#34; href=&#34;#samba-in-kubernetes-status-update-1-id8&#34;&gt;8&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;Not strictly true, as you can leave out the secret and then run
a command in the container to complete the join. However, this
runs counter to the level of automation we&#39;d like to provide, but
is an option.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2021-10-18:samba-in-kubernetes-status-update-1</id>
    </entry>
    
    <entry>
        <title>Hello Operator</title>
        <link href="http://asynchrono.us/hello-operator.html"></link>
        <updated>2021-10-18T18:45:06Z</updated>
        <published>2021-03-11T14:40:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Recently, I have been working &lt;a class=&#34;footnoteref&#34; id=&#34;hello-operator-id1&#34; href=&#34;#hello-operator-id2&#34;&gt;*&lt;/a&gt; on a new project. As the title indicates,
this is an operator. Specifically, this is an operator for managing Samba.
If you are not familiar with operators, the idea is basically software
that runs in Kubernetes that in turn manages Kubernetes resources, typically
taking custom resource (CR) types as input. Samba, is of course, the well
known Open Source implementation of SMB protocols and the software to
serve, manage, interoperate with SMB, Active Directory, and other Windows
oriented things.&lt;/p&gt;&lt;p&gt;The project was started by Michael Adam, a Samba team member, and I started
helping out around October last year. It was slow going at first, but we&#39;ve
picked up steam recently and is becoming one of my biggest areas of focus.&lt;/p&gt;&lt;p&gt;I hope to write more about this subject, so I am not planning to be very
comprehensive in this post. I do want to make few links and make a few
remarks on what I have been doing in these projects.&lt;/p&gt;&lt;p&gt;First, we&#39;ve got three code repos that make up most of the unique
code and files:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Samba Operator: &lt;a href=&#34;https://github.com/samba-in-kubernetes/samba-operator/&#34;&gt;https://github.com/samba-in-kubernetes/samba-operator/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Samba Container: &lt;a href=&#34;https://github.com/samba-in-kubernetes/samba-container/&#34;&gt;https://github.com/samba-in-kubernetes/samba-container/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;sambacc: &lt;a href=&#34;https://github.com/samba-in-kubernetes/sambacc/&#34;&gt;https://github.com/samba-in-kubernetes/sambacc/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The Samba Operator repo contains the code for the operator itself. This is a Go
language operator. It defines Custom Resources, via Kubernetes Custom Resource
Definitions (CRDs), implements the &#34;business logic&#34; of interpreting those
resources and turning them into Pods and other things that produce Shares for
people to use. I want to come back to the subject of the design behind the CRs
and the recent work we&#39;ve put into that area in a subsequent post.&lt;/p&gt;&lt;p&gt;The Samba Container repo contains files that help build &#34;generic&#34; samba
containers - basically OCI/Docker-style images containing various samba
components. Currently, it produces images for a client (smbclient), a server
(file-server: smbd, winbind, etc.), and work is in progress to add a Samba AD
image.  These are meant to work with the operator but are not specific to it.
These can work locally with podman or docker or in any other compatible
container system.&lt;/p&gt;&lt;p&gt;Because the file server has many interactions with the system it runs on, and
there are various tools to configure aspects of both smbd and winbind, I
started the sambacc project to try to create a layer that eases the user-facing
steps needed to get the samba subsystems working in the container environment.
It is a Python library and a command line tool. The CLI is somewhat
unimaginatively called &#34;samba-container&#34;. The sambacc package is meant to act
as a &#34;glue&#34; layer between samba and the container environment. It also aims to
provide a single, declarative, configuration that is (relatively) easy for both
humans and code to work with.&lt;/p&gt;&lt;p&gt;I started sambacc late last year and after a few weeks of intense development,
and some subsequent discussion with Michael Adam, we made the server image
built by Samba Container based on sambacc. Currently, sambacc can configure
samba (via smb.conf style parameters in the internal registry), it can set up
users and groups (locally to the running container), it helps bring up the smbd
and winbdind processes, and it has support for assisting with AD domain join.&lt;/p&gt;&lt;p&gt;Development on sambacc itself has slowed down a bit in the past few weeks as it
is largely meeting my needs for enabling development on the operator itself.
However, there&#39;s still lots and lots to do in all of these areas. I expect to
do a bit of &#34;see-sawing&#34; as certain areas of the code mature and then I move
onto other topics and find a need that would be better served by changes or
additions in sambacc rather than the operator code itself. For example, I
expect to soon add subcommands to samba-container to help create liveness and
readiness checks for Kubernetes pods.&lt;/p&gt;&lt;p&gt;I&#39;ll close this out by suggesting anyone interested in these topics feel free
to join in the conversation by making use of the github repos and post issues
or use the discussions feature, or whatever floats your boat. :-) I hope this
was a useful summary of the three main areas that make up our recent efforts -
with a little emphasis on sambacc, because its very new, probably a bit less
self explanatory and a project I started. :-)&lt;/p&gt;&lt;div class=&#34;footnote&#34;&gt;&lt;strong&gt;&lt;a id=&#34;hello-operator-id2&#34; href=&#34;#hello-operator-id1&#34;&gt;*&lt;/a&gt;&lt;/strong&gt;&lt;span&gt;Standard disclaimer that while this is something I work on as part of $DAYJOB
all the opinions here are my own and so forth.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2021-03-11:hello-operator</id>
    </entry>
    
    <entry>
        <title>Some Books of 2020</title>
        <link href="http://asynchrono.us/some-books-of-2020.html"></link>
        <updated>2021-01-01T12:27:27Z</updated>
        <published>2020-12-31T21:37:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;I wanted to keep a bit of a record of some books I read in 2020. This isn&#39;t
a complete list. This only covers books I completed and only those that
were a first read. I didn&#39;t keep track over the course of the year, I just
looked over what&#39;s on the shelf and I clearly remember completing it.&lt;/p&gt;&lt;p&gt;This isn&#39;t a brag list or anything, but I am happy with the fact that I
read much more long-form books this year than the past few.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;A Think Tank for Liberty - Poole&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Bad Blood - Carreyrou&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Bottleneckers - Mellor, Carpenter&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Grant - Chernow&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;How Innovation Works - Ridley&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;How to Have Impossible Conversations - Boghossian, Lindsay&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;John Goblikon&#39;s Guide to Living Your Best Life - Goblikon, Dermer, Rispoli&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Lord of Emperors - Kay&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Lost in Math - Hossenfelder&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Seeing Like a State - Scott&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Skin in the Game - Taleb&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Book of Legendary Lands - Eco&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Founder&#39;s Mentality - Zook, Allen&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Guarded Gate - Okrent&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Infidel and the Professor - Rasmussen&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The Storm Before The Storm - Duncan&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Thinking as a Science - Hazlitt&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;What If? / How To / Thing Explainer - Munroe&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2020-12-31:some-books-of-2020</id>
    </entry>
    
    <entry>
        <title>Disabling systemd-resolved on Fedora CoreOS 33</title>
        <link href="http://asynchrono.us/disabling-systemd-resolved-on-fedora-coreos-33.html"></link>
        <updated>2020-11-01T14:22:53Z</updated>
        <published>2020-11-01T13:54:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;I was recently working on a side-task for $DAYJOB and decided, rightly or
wrongly, that I needed to run a container image that hosts a DNS server,
among other components, on a FCOS (Fedora CoreOS) VM image. I chose to use
FCOS 33 because Fedora 33 has recently been released and I wanted my stuff
to be a bit more forward looking than I usually do.&lt;/p&gt;&lt;p&gt;However, I ran into difficulties due to systemd-resolved listening on port
53.  To turn off systemd-resolved completely I needed to do a few things that
I&#39;ve captured in the FCC sample below. If you want to do something similar, you
can add the relevant parts of this example FCC to yours. Beneath the sample, I
will touch on what the various subsections accomplished.&lt;/p&gt;&lt;pre class=&#34;literal&#34;&gt;variant: fcos
version: 1.1.0
# (skipping passwd section)
storage:
  files:
    # Set network manager to use default dns
    - path: /etc/NetworkManager/NetworkManager.conf
      overwrite: true
      contents:
        inline: |
          [main]
          dns=default

          [logging]
      mode: 0644
      user:
        id: 0
      group:
        id: 0
    # Ensure resolv.conf is a real file, not a symlink
    - path: /etc/resolv.conf
      overwrite: true
      contents:
        inline: &#34;&#34;
      mode: 0644
      user:
        id: 0
      group:
        id: 0
systemd:
  units:
    - name: coreos-migrate-to-systemd-resolved.service
      enabled: false
      mask: true
    - name: systemd-resolved.service
      enabled: false
      mask: true&lt;/pre&gt;&lt;p&gt;The simplest steps involve stopping the systemd-resolved and a &#34;helper&#34;
migration service that is FCOS specific. That got me to the point where
port 53 was not longer being used by anything else.&lt;/p&gt;&lt;p&gt;After that it was a matter of getting &#34;normal&#34; DNS working again. Configuring
Network Manager should have been enough according to the Network Manager docs I
read, but because /etc/resolv.conf was already a symlink it was apparently
unable to write the typical contents to the file and silently (?) failing. To
work around this, I determined that adding an empty file to the storage/files
section of the FCC was sufficient to get Network Manager writing resolv.conf in
the ye-olde way and I could move on with my life.&lt;/p&gt;&lt;p&gt;Perhaps there are better ways to handle this situation than turning off
systemd-resolved to get the port free. But this is the route I chose. Feel
free to shoot me an email if you think there&#39;s a better approach.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2020-11-01:disabling-systemd-resolved-on-fedora-coreos-33</id>
    </entry>
    
    <entry>
        <title>How I work on go-ceph</title>
        <link href="http://asynchrono.us/how-i-work-on-go-ceph.html"></link>
        <updated>2020-08-27T15:16:24Z</updated>
        <published>2020-08-26T18:57:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Or, how I &lt;a href=&#34;https://github.com/ceph/go-ceph&#34;&gt;go-ceph&lt;/a&gt; myself.&lt;/p&gt;&lt;p&gt;This write-up is something I promised a coworker and I thought that I might
as well make it public. I didn&#39;t make it part of go-ceph&#39;s documentation or
anything because I feel this is a little to specific to how I work. I do hope
that anyone reading this can make use of parts of this, or be inspired by it,
or perhaps just laugh at it. I just don&#39;t want to put it on go-ceph and make
it sound like this is the way you are &lt;em&gt;supposed&lt;/em&gt; to work on go-ceph.&lt;/p&gt;&lt;p&gt;First off, I tend toward a somewhat minimal setup. For most projects I use vim
with very few plugins and mostly just some vimscript stuff I hacked together
myself. Vim is my editor and bash is my IDE. :-) So I don&#39;t do much more fancy
than using ctags and grep for code navigation.&lt;/p&gt;&lt;p&gt;On the average go-ceph PR we&#39;re adding either one or some small number of
function calls to go-ceph. I will often open my local copy of the ceph library
headers for reference. We have a project standard to copy the C function
declaration under a &#34;Implements:&#34; line in our doc comments. So, keeping the
file open makes it easy to copy that over too.&lt;/p&gt;&lt;p&gt;The more interesting parts are the build and test workflow. The repo includes a
Makefile that can build and run test containers. These containers are used by
our CI but are pretty easily to run locally. The makefile will automatically
select between podman or docker CLI commands. I prefer podman of course.  The
&lt;tt class=&#34;literal&#34;&gt;make ci-image&lt;/tt&gt; command will create a new container image, based on a
ceph-containers image. You can choose what version of ceph by setting
&lt;tt class=&#34;literal&#34;&gt;CEPH_VERSION&lt;/tt&gt; to something like &#34;nautilus&#34; or &#34;octopus&#34;. I made it possible
to use different images in parallel. This didn&#39;t matter in our CI but is
helpful when running locally.&lt;/p&gt;&lt;p&gt;Now, if you want to run the entire test suite you can run &lt;tt class=&#34;literal&#34;&gt;make
test-container&lt;/tt&gt; and run all the test suites for rados, rbd, and cephfs, as
well as our internal helper packages. It also runs a minimalistic ceph cluster
before executing the tests. This is convenient as you can basically do exactly
as the CI locally, but it&#39;s a bit slow if you&#39;re iterating on a certain subset
of things.&lt;/p&gt;&lt;p&gt;I&#39;ve adapted my workflow to do a customized version of the command run by
&lt;tt class=&#34;literal&#34;&gt;make test-container&lt;/tt&gt;. This is something I started off doing by hand, and
then made a simple shell script, and eventually a more complex tool in Python.
That&#39;s a pretty normal progression for me. I won&#39;t share the script here
because it&#39;s pretty me-specific but I will talk a bit about how it works.
Effectively, it just runs a tweaked version of the docker/podman command seen
in the makefile with a few volume mount options (-v) that I want. In particular
I make the results directory, which includes the coverage report and some of
the ceph cluster config. An example follows:&lt;/p&gt;&lt;pre class=&#34;literal&#34;&gt;podman run --device /dev/fuse \
  --cap-add SYS_ADMIN \
  --cap-add SYS_PTRACE \
  --security-opt=label=disable \
  --rm \
  -it \
  --network=host \
  --name=go-ceph-ci \
  -v /home/jmulliga/devel/go-ceph:/go/src/github.com/ceph/go-ceph \
  -v /home/jmulliga/devel/go-ceph/_results/ceph:/tmp/ceph \
  -v /home/jmulliga/devel/go-ceph/_results:/results \
  -e GOPROXY=http://localhost:8081 \
  go-ceph-ci:octopus&lt;/pre&gt;&lt;p&gt;The coverage report is useful because I like to view the html coverage report
to make sure all the non-error conditions are tested and all of the testable
error conditions are too. I&#39;ll go into how I make use of the ceph config shortly.&lt;/p&gt;&lt;p&gt;The container has an entrypoint.sh script that takes a number of useful
options.  Currently, the majority of them are about what tests get run. I won&#39;t
go over every single one. The script has a working (last time I checked)
&lt;tt class=&#34;literal&#34;&gt;--help&lt;/tt&gt; option.  I call my wrapper script with additional args that are
passed on to the container, such as &lt;tt class=&#34;literal&#34;&gt;--test-pkg=cephfs&lt;/tt&gt;. This causes the
entrypoint.sh script to only run tests for the cephfs subpackage. If my work is
only touching cephfs code then this makes the overall job faster by only
testing the relevant package. There&#39;s also the &lt;tt class=&#34;literal&#34;&gt;--test-run=VALUE&lt;/tt&gt; option
which is passed along to the go test command&#39;s &lt;tt class=&#34;literal&#34;&gt;-run&lt;/tt&gt; option. Using this
option can now reduce the number of tests to a specific subset. For the vast
majority of cases I use --test-pkg with a fair portion also using
&lt;tt class=&#34;literal&#34;&gt;--test-run&lt;/tt&gt;. I do generally run at least once without &lt;tt class=&#34;literal&#34;&gt;--test-run&lt;/tt&gt; before
pushing the code to create a PR. That&#39;s also often the step where I will double
check the coverage report and eyeball the coverage percentages and skim over my
new or changed functions.&lt;/p&gt;&lt;p&gt;Despite the above working for many cases, let&#39;s say 90%, there are times when I
want to go even faster or I need to debug things and using the container to run
the tests is more hassle than its worth. In these cases I run the container
with the options &lt;tt class=&#34;literal&#34;&gt;--test-run=NONE --pause&lt;/tt&gt;. I run this container in the
background. This will cause the tiny ceph cluster to get set up, but it will
skip running tests, and then the script will just sleep forever. Once I have my
little ceph environment going I can start testing stuff against this cluster
from outside the container. This is why I have the ceph config dir in a shared
directory. I can now set the environment variable in my shell to &lt;tt class=&#34;literal&#34;&gt;export
CEPH_CONF=$PWD/_results/ceph/ceph.conf&lt;/tt&gt; and then run the tests that make use
of the ceph cluster using the standard go tooling, such as &lt;tt class=&#34;literal&#34;&gt;go test -v
./rados&lt;/tt&gt;.  Now, I don&#39;t need to wait for ceph to start every time I want to
execute my test(s).&lt;/p&gt;&lt;p&gt;One word of warning, if you do want to try this at home. Not all our tests are
clean and properly idempotent. I certainly want that to be true, but there are
times where I hit a condition that leaves state behind on the cluster which
might interfere to later test runs. Caveat emptor, patches welcome, and all
that. :-)&lt;/p&gt;&lt;p&gt;This is getting longer than I expected it would so I want to wrap up, but I
will mention one more thing I&#39;ve found handly lately. Sometimes if I can&#39;t
figure out what&#39;s going on with something in the Ceph code itself, say with an
enexpected test failure, I want to enable debug logging in the ceph code. For
this, I usually combine the above techinque of starting Ceph in the container
and then I&#39;ll edit the shared ceph.conf file. To the &lt;tt class=&#34;literal&#34;&gt;[global]&lt;/tt&gt; section I&#39;ll
add stuff like:&lt;/p&gt;&lt;pre class=&#34;literal&#34;&gt;log to stderr = true
err to stderr = true
debug client = 20
debug mgrc = 20&lt;/pre&gt;&lt;p&gt;I refer to the &lt;a href=&#34;https://docs.ceph.com/docs/master/rados/troubleshooting/log-and-debug/#subsystem-log-and-debug-settings&#34;&gt;Logging and Debugging&lt;/a&gt; page in the ceph docs to help me pick
what subsystems to enable debug for.&lt;/p&gt;&lt;p&gt;It&#39;s turned into a bit of a long-winded but general overview of a few
techniques I use when working on the go-ceph project. I hope it was
interesting.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2020-08-26:how-i-work-on-go-ceph</id>
    </entry>
    
    <entry>
        <title>Nine Years</title>
        <link href="http://asynchrono.us/nine-years.html"></link>
        <updated>2020-05-25T14:37:15Z</updated>
        <published>2020-05-25T14:24:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Well, it has been (approximately) nine years since I last added content to this
site. I recently spiffied it up a little bit and removed some of the more
unfashionable elements of the site design. I left most of it the same however,
as the longer I looked at it the happier I was with it. It&#39;s certainly
old-fashioned, in the mid-2000s sense of old fashioned, but it&#39;s my kind of
old-fashioned.&lt;/p&gt;&lt;p&gt;The homegrown static site generator I use for it has been improved as well.
Most of the time spent on it was just getting it working on Python 3.
Very little else about it needed to change, because it does rather little.&lt;/p&gt;&lt;p&gt;I certainly do not promise much additional activity here but I have been hoping
get my thoughts down in writing more often. I spend a lot more time
communicating online rather than in person that I once did, that motivates me a
bit more to try and keep some of my more common thoughts in one place that I
can refer to later. This site could be that place.&lt;/p&gt;&lt;p&gt;I thought I might amuse myself a bit by creating a list of things I would have
written about in the intervening years. However, this list would not make any
sense to any poor person who stumbles across this site and so I will refrain
from making that list part of a post. I might create some sort of list-of-ideas
but I&#39;ll keep it private.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2020-05-25:nine-years</id>
    </entry>
    
    <entry>
        <title>My 2011 in Music</title>
        <link href="http://asynchrono.us/my-2011-in-music.html"></link>
        <updated>2012-01-01T03:36:34Z</updated>
        <published>2011-12-31T19:27:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;For me 2011 was a pretty darn good year for music. I regularly listened
to a lot more new music than last year. I also sampled more stuff
after reading a few more music blogs this year. I especially appreciated
learning about bandcamp.com and listing to albums from that site.
I figure it influenced a couple of real purchases this year.&lt;/p&gt;&lt;h3&gt;Biggest 2010 Albums of 2011&lt;/h3&gt;&lt;p&gt;These are albums/artists that I listened to a lot in 2011, even
though they weren&#39;t new this year. Some of them were new to me
and others simply kept me coming back to them.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Borknagar - &lt;a href=&#34;http://amzn.com/B0039E7EHQ&#34;&gt;Universal&lt;/a&gt;: I still listen to this album all the time.
Simply fantastic.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Enslaved - &lt;a href=&#34;http://amzn.com/B0043360QS&#34;&gt;Axioma Ethica Odini&lt;/a&gt;: This is also a insanely good album.
Even at work I&#39;ve named some of my test data after the track names
here.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ghost - &lt;a href=&#34;http://amzn.com/B0047E6LW6&#34;&gt;Opus Eponymous&lt;/a&gt;: If evil can be fun and poppy, this album is
exhibit A. Every time I see someone diss this album online I want to
shake them and tell them to stop overthinking it and just enjoy.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Julie Christmas - &lt;a href=&#34;http://juliechristmas.bandcamp.com/album/the-bad-wife&#34;&gt;The Bad Wife&lt;/a&gt;: I simply love her voice. I hope
Made out of Babies makes another album soon, but this solo album
will tide me over in the meantime.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Melechesh - &lt;a href=&#34;http://amzn.com/B0040U8X2I&#34;&gt;The Epigenesis&lt;/a&gt;: I simply love the middle eastern + metal
sound these guys put together. I&#39;ve used it to wake myself up on
quite a few morning drives.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Shining - &lt;a href=&#34;http://shiningnorway.bandcamp.com/album/blackjazz&#34;&gt;Blackjazz&lt;/a&gt;: This album is nuts, in the best way possible.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Standout New Music of 2011&lt;/h3&gt;&lt;h3&gt;The Good Ones&lt;/h3&gt;&lt;p&gt;These albums were pretty good and I listened to them quite
a bit.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The Sword - &lt;a href=&#34;http://amzn.com/B003Z2XTLW&#34;&gt;Warp Riders&lt;/a&gt;: Loved the title track. I preferred what these guys
were doing on the first two albums, but still a very enjoyable journey
though space.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Novembers Doom - &lt;a href=&#34;http://amzn.com/B004U8T3CY&#34;&gt;Aphotic&lt;/a&gt;: Another solid album from this band.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Septicflesh - &lt;a href=&#34;http://amzn.com/B004UOBL7I&#34;&gt;The Great Mass&lt;/a&gt;: Got this one pretty late in the year for it
to really sink in on me, but it&#39;s kind of been a grower. The orchestral bits
are worked in well with the metal side of things. I want to listen to some
of these guy&#39;s older releases now.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Anaal Nathrakh - &lt;a href=&#34;http://candlelightrecordsusa.bandcamp.com/album/passion&#34;&gt;Passion&lt;/a&gt;: Got this one at the same time as Septicflesh. I
had this playing when I was stuck in traffic one day and I think it made
my crazy (more crazy?). Now sometimes I listen to it when I code in order
to feel more evil. :-D&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;The Great Ones&lt;/h3&gt;&lt;p&gt;These albums were really awesome and I listened to these albums a ton.
They got the most use in my car so my last.fm stats really don&#39;t represent
how often I listened to these.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;ICS Vortex - &lt;a href=&#34;http://amzn.com/B005F99QW4&#34;&gt;Storm Seeker&lt;/a&gt;: I&#39;ve really grown to like Vortex&#39;s vocals
after listening to Borknagar so many times. I listened to the opening track,
The Blackmobile, and knew I had to buy the album. While the remaining
tracks differ quite a bit from Blackmobile I still think it&#39;s great.
The whole album is good progressive metal, with what sounds to me
a Yes-like feel.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Obscura - &lt;a href=&#34;http://obscura.bandcamp.com/album/omnivium&#34;&gt;Omnivium&lt;/a&gt;: Kicked my ass. This is simply an amazing album
there were a few things I liked more on the previous album, mainly
the vocals, but well worth a listen. The cover is an illustration
from a book on the mating process of Metroids.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Kvelertak - &lt;a href=&#34;http://en.wikipedia.org/wiki/Kvelertak_%28album%29&#34;&gt;Kvelertak&lt;/a&gt;: I&#39;m cheating a little here because only the
US release was in 2011. This album is hugely energetic and I liked
to listen  to it on the treadmill!&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Woods of Ypres - &lt;a href=&#34;http://amzn.com/B004RWI3VA&#34;&gt;Woods IV (The Green Album)&lt;/a&gt;: Can being sad be fun?
That&#39;s how I feel about this music. Quite often I&#39;d find my self
singing or shouting along with the lyrics to this in the car. What&#39;s
really sad is the recent death of the bands frontman (RIP).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Red Fang - &lt;a href=&#34;http://redfang.bandcamp.com/album/murder-the-mountains&#34;&gt;Murder the Mountains&lt;/a&gt;: This band is hilarious, awesome,
and makes &lt;a href=&#34;https://www.youtube.com/watch?v=WQPfQvLIseA&#34;&gt;fantastic music videos&lt;/a&gt;.  Of course, the album itself
rocks too. My favorite track is Throw Up, which sounds pretty Melvins-ish
to me. I expect this band to get more popular soon.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;My penultimate album of 2011&lt;/h3&gt;&lt;img alt=&#34;Mastodon/The Hunter Album Cover&#34; src=&#34;https://upload.wikimedia.org/wikipedia/en/2/28/Mastodon-The_Hunter.jpg&#34;&gt;&lt;/img&gt;&lt;p&gt;Mastodon - &lt;a href=&#34;http://amzn.com/B005MW5CWW&#34;&gt;The Hunter&lt;/a&gt;: Mastodon did a great job building up anticipation
of this album in my opinion. They released full song previews on youtube
before the official release date. Like some I was unsure about some
of the differences between what they&#39;re doing here versus Crack the Skye.
But really, the album&#39;s a grower. I mean it&#39;s a huge grower. The first
time I listened to &#39;Creature Lives&#39; I wasn&#39;t sure about it. But now,
and even more after attending the live show, I love it. I sing along to
it. My favorite track is Spectrelight, but the whole last few tracks of the
album are just tremendous.&lt;/p&gt;&lt;h3&gt;My favorite album of 2011&lt;/h3&gt;&lt;img alt=&#34;Subrosa/No Help for the Mighty Ones Album Cover&#34; src=&#34;http://f0.bcbits.com/z/34/43/3443170138-1.jpg&#34;&gt;&lt;/img&gt;&lt;p&gt;Subrosa - &lt;a href=&#34;http://subrosausa.bandcamp.com/album/no-help-for-the-mighty-ones&#34;&gt;No Help for the Mighty Ones&lt;/a&gt;: If you&#39;re wondering what album
I could have liked more than The Hunter (maybe you&#39;re not) wait no longer.
No Help for the Mighty Ones is a deep, beautiful and haunting album.
I haven&#39;t read or watched some of the sources they used as background
material, but I&#39;m sure it could only help me appreciate it more.
It&#39;s simply so heavy and sad it wraps around to wonderful.
I&#39;m not much of a reviewer and that&#39;s not what I was planning on doing
here, suffice to say it&#39;s a great piece of art. My personal favorite
track is Whippoorwill, but really, there&#39;s nothing bad here.&lt;/p&gt;&lt;h3&gt;Recent Acquisitions&lt;/h3&gt;&lt;p&gt;I got some CDs (real, physical CDs, yay!) this Christmas from my
awesome family. I also got some Amazon points that I&#39;ve already
use for a few mp3 albums. These are albums that I haven&#39;t got a
chance to listen to much yet but I expect I&#39;ll be queuing up
to play pretty often.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Absu - &lt;a href=&#34;http://candlelightrecordsusa.bandcamp.com/album/abzu&#34;&gt;Abzu&lt;/a&gt;: Love the opening scream. I&#39;ve already listened to this
a couple of times from the bandcamp page pre purchase.
I&#39;ve got to check out
the previous album, Absu (oh-you-guys-are-clever) now.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Cave In - &lt;a href=&#34;http://amzn.com/B004VAM5Q2&#34;&gt;White Silence&lt;/a&gt;: I was a big fan of Zozobra when these
guys were apart. So far I really like what&#39;s happening on this
album as well.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Glorior Belli - &lt;a href=&#34;http://amzn.com/B005GYWGZC&#34;&gt;The Great Southern Darkness&lt;/a&gt;: The title track is
seriously badass.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Revocation - &lt;a href=&#34;http://revocation.bandcamp.com/album/chaos-of-forms&#34;&gt;Chaos of Forms&lt;/a&gt;: Love the previous album and expect
this one to rock as well.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Unexpect - &lt;a href=&#34;http://unexpect.bandcamp.com/album/fables-of-the-sleepless-empire&#34;&gt;Fables of the Sleepless Empire&lt;/a&gt;: I&#39;ve been waiting for
this album for what feels like forever. I&#39;m simply giddy.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Yob - &lt;a href=&#34;http://amzn.com/B005DN4AGE&#34;&gt;Atma&lt;/a&gt;: Doom. Doom. DOOM!&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2011-12-31:my-2011-in-music</id>
    </entry>
    
    <entry>
        <title>Please Release</title>
        <link href="http://asynchrono.us/please-release.html"></link>
        <updated>2011-01-09T17:13:38Z</updated>
        <published>2011-01-09T16:54:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;One nice thing about using Python is the simple and easy way to get
libraries and other packages quickly and easily using tools like pypi and
pip. However, when deploying I prefer OS packages (typically RPMs since
I&#39;ve worked at RHEL/Fedora using shops). Sometimes the libraries I
need are not packaged by upstream and I end up building them myself.&lt;/p&gt;&lt;p&gt;None of that bugs me. What I what I wish was that more OSS projects,
especially some of the smaller libs, would actually release occasionally.
Instead I have to get a copy out of source control, which often has
no release information. This makes me queasy because I have a hard time
telling if the most recent versions are stable. Even if you don&#39;t want
to make tarballs, at least periodically tag your releases in a way
that makes us downstream users feel some confidence that your code
isn&#39;t halfway in the middle of a refactoring or something.&lt;/p&gt;&lt;p&gt;If it&#39;s a &#34;mature&#34; code base, one that changes rarely, stick a release
tag on there once a year or something. I&#39;m going to end up testing this
stuff for my own purposes, but a release tag at least makes me feel
that I&#39;m not going to end up wasting too much of my time on software
left in the lurch. So far some of the worst offenders are on the dev
sites like bitbucket and github. I don&#39;t know if my sample size is just
too small or I have bad luck, but I have a guess that in the ye olden days
people had to create a tarball just to get hold of the code, but
these newer sites/tools make it easy for people to skip that step,
and then forget completely about doing a release at all.&lt;/p&gt;&lt;p&gt;I don&#39;t actually think anyone is going to listen to me, and I&#39;m going to have
to keep building packages that have strings like &#34;20101114git83848383f3892&#34;
or &#34;20110109hgf110ac096f19&#34; in them. But hope springs eternal :-).&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2011-01-09:please-release</id>
    </entry>
    
    <entry>
        <title>Dell Vostro 3300 and Fedora 13</title>
        <link href="http://asynchrono.us/dell-vostro-3300-and-fedora-13.html"></link>
        <updated>2010-09-30T12:43:27Z</updated>
        <published>2010-09-30T12:35:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;I recently got myself a Dell Vostro 3300 and am in the process of installing Linux,
Fedora 13 to be specific, on it. I started out using the KDE Spin LiveCD and
resizing the Windows 7 partition down to about a third of its orignal size. This
was a little tricky because the Fedora automated installer saw the partition and
recognized it as NTFS, but reported the size a 0 Bytes. This prevented me from
running the resize tool in the Fedora installer, so I did it via the command line.
I used ntfsresize(8) to shrink it, and then used manual partitioning in the
Fedora installer to shrink the partition. I gave myself some wiggle room by making
the partition a tad bit bigger than the size I shrunk the filesystem to.&lt;/p&gt;&lt;p&gt;A lot of the hardware was working right out of the box, wireless networking was the
big exception. I knew the machine would come with Broadcom wireless beforehand so
this was expected. After plugging into the wired lan and running the update tool
I added the rpmfusion repos, and thanks to the hints on &lt;a href=&#34;http://arunsag.wordpress.com/2010/08/16/dell-vostro-3500-and-fedora-13/&#34;&gt;a helpful blog post&lt;/a&gt; I
knew to install the kmod-wl package.&lt;/p&gt;&lt;p&gt;There is still more stuff to try out and I plan on writing about this machine
a little bit in future entries.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2010-09-30:dell-vostro-3300-and-fedora-13</id>
    </entry>
    
    <entry>
        <title>my udev just exploded</title>
        <link href="http://asynchrono.us/my-udev-just-exploded.html"></link>
        <updated>2010-04-07T00:00:27Z</updated>
        <published>2010-04-06T23:54:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Every time I reboot my server machine something explodes. It&#39;s
my own fault, but its still annoying. This time I found out that
the newer versions of udev really don&#39;t work with the deprecated
SYSFS stuff. I found out because my system wouldn&#39;t create /dev
nodes for /dev/sda1 and the like. I had to manually futz with
udev to get the devices in dev, then mount the file systems,
then ultimately I downgraded to udev-149.&lt;/p&gt;&lt;p&gt;I knew that version worked and found a bug
(&lt;a href=&#34;http://bugs.gentoo.org/show_bug.cgi?id=302173&#34;&gt;http://bugs.gentoo.org/show_bug.cgi?id=302173&lt;/a&gt;) with a similar
issue. I know the right way to fix it is to build a kernel,
but I wish the warning the udev ebuild printed was a little more
prominent - maybe print something like : &#34;No, Seriously this
version won&#39;t work at all with the old SYFS layout, you jerk&#34;.&lt;/p&gt;&lt;p&gt;Maybe then I would have paid attention. :-)&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2010-04-06:my-udev-just-exploded</id>
    </entry>
    
    <entry>
        <title>Fedora 12 works for me</title>
        <link href="http://asynchrono.us/fedora-12-works-for-me.html"></link>
        <updated>2010-02-28T23:07:54Z</updated>
        <published>2010-02-28T22:59:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;So I&#39;ve been hankering to try a new distro for a while and
after a few false starts in years past, I&#39;m now running
Fedora on my laptop. Fedora 12 is the first version I&#39;ve simply
been able to boot up with and have it just load and work without
strange glitches. Even the much maligned (by me) NetworkManager is
working quite well. Hibernate works, but there is a minor &#34;scrambled&#34;
screen before it loads. Other than that, I&#39;m pleased.&lt;/p&gt;&lt;p&gt;Following a couple blog posts got me up and running with the
multimedia stuff that the stock distro does not supply. All-in-all
it took me very little time to get stuff working well. I&#39;m even
all KDE 4.4-up. Aside from my second Kubuntu install from years ago
(I think it was a 7.x, but I&#39;m not sure) this has to be one of
the bet Linux install experiences - especially counting the post
install &#34;get the environment the way I like it&#34; work.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2010-02-28:fedora-12-works-for-me</id>
    </entry>
    
    <entry>
        <title>Nasuni, at long last</title>
        <link href="http://asynchrono.us/nasuni-at-long-last.html"></link>
        <updated>2010-02-09T15:21:45Z</updated>
        <published>2010-02-09T15:14:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Today is a crazy day at work, because we&#39;re launching our product beta to
the world. The &lt;a href=&#34;http://www.nasuni.com&#34;&gt;Nasuni Filer&lt;/a&gt; provides a local network filesystem (CIFS)
that is backed by cloud storage, and the user can choose what cloud vendor
to use. Files are encrypted remotely and snapshots are automatically made
available.&lt;/p&gt;&lt;p&gt;I won&#39;t say what parts I worked on. At least not until its been out
there for a while. :-)&lt;/p&gt;&lt;p&gt;Everybody is hopping around looking at a monitor we set up to show
who&#39;s signing up and downloading filers. Let&#39;s see if I can get some work
done today amidst the excitement.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2010-02-09:nasuni-at-long-last</id>
    </entry>
    
    <entry>
        <title>My 2010 website refresh</title>
        <link href="http://asynchrono.us/my-2010-website-refresh.html"></link>
        <updated>2010-01-31T19:01:49Z</updated>
        <published>2010-01-31T18:48:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;So I finally got to a point where I could no longer stand the software
I wrote to generate this website. So I redid it, it has a significantly
simplified core and I swapped the old Zope-Style page templates for
the &lt;a href=&#34;http://jinja.pocoo.org/2/&#34;&gt;jinja2&lt;/a&gt; templating library.  I like Jinja and I&#39;ve been doing a lot
of Django stuff at work, so it makes sense for me.&lt;/p&gt;&lt;p&gt;I also use some standard library modules where I had been using custom
code before. It is always an interesting experience to learn about
something like that, a little bit deflating though. :-)&lt;/p&gt;&lt;p&gt;I don&#39;t write the code for this site for any other reason than fun.
I get to learn a bit and keep coding at my own (snails pace) schedule.
Now that the code is all nice and shiny I wonder if I&#39;ll have to write
more often, not that I&#39;m promising myself anything.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2010-01-31:my-2010-website-refresh</id>
    </entry>
    
    <entry>
        <title>Link: About Intellectual Property and Competition</title>
        <link href="http://asynchrono.us/link:-about-intellectual-property-and-competition.html"></link>
        <updated>2010-01-31T17:33:38Z</updated>
        <published>2009-10-12T00:31:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Just read this article: &lt;a href=&#34;http://www.thefreemanonline.org/featured/how-intellectual-property-impedes-competition/&#34;&gt;How “Intellectual Property” Impedes Competition&lt;/a&gt;.
Which I thought was very interesting. I especially like:
&#34;Real, tangible property rights result from natural scarcity and follow as a matter of course from the attempt to maintain occupancy of physical property that cannot be possessed by more than one person at a time.&#34;&lt;/p&gt;&lt;p&gt;I think this is why people who defened very strong IP regimes by comparing
to real property rights are not making a good argument. I don&#39;t totally agree
with the article either but I always like to read arguments for limited IP
with pro market perspectives.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2009-10-12:link:-about-intellectual-property-and-competition</id>
    </entry>
    
    <entry>
        <title>Buy This Book</title>
        <link href="http://asynchrono.us/buy-this-book.html"></link>
        <updated>2010-01-31T17:33:38Z</updated>
        <published>2009-07-05T14:34:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;If you are interested in distributed version control, buy
&lt;a href=&#34;http://www.amazon.com/Mercurial-Definitive-Guide-Bryan-OSullivan/dp/0596800673/ref=pd_rhf_p_t_1&#34;&gt;Mercurial: The Definitive Guide&lt;/a&gt; by Bryan O&#39;Sullivan at your first
opportunity. I had a chance to make some corrections and suggestions
at the &lt;a href=&#34;http://hgbook.red-bean.com&#34;&gt;online copy&lt;/a&gt; so I know it&#39;s good. :-)&lt;/p&gt;&lt;p&gt;And while you&#39;re at it download &lt;a href=&#34;http://mercurial.selenic.com/wiki/WhatsNew?action=recall&amp;rev=47&#34;&gt;release 1.3&lt;/a&gt; with the latest and
greatest features and fixes.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2009-07-05:buy-this-book</id>
    </entry>
    
    <entry>
        <title>Good Things in Bad Times</title>
        <link href="http://asynchrono.us/good-things-in-bad-times.html"></link>
        <updated>2010-01-31T17:33:38Z</updated>
        <published>2009-03-08T23:35:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;The good news starts off with the release of &lt;a href=&#34;http://selenic.com/mercurial&#34;&gt;Mercurial&lt;/a&gt; version 1.2,
in which my largest contribution becomes part of an official release.
Now people who have multiple branches (probably named branches) that
are unwanted can close a branch. As with normal operation in Mercurial
nothing gets deleted, as that would change history, instead a new commit
flags the branch as &#34;closed.&#34;  A closed branch can then easily be ignored
by commands or tools. The heads and branches commands can be set to skip
displaying the closed branch.&lt;/p&gt;&lt;p&gt;The other big thing in the release that is relevant to me is the addition
of the pure-python modules. The parts of Mercurial that were covered by
C modules now have python equivalents. I like this for a couple of reasons,
it makes it easier for folks to try running on &lt;a href=&#34;http://fwierzbicki.blogspot.com/2009/02/progress-with-mercurial-on-jython-part.html&#34;&gt;Jython&lt;/a&gt; or PyPy or other
similar platforms. I also like it because python is (for me at least)
easier to read than C. Now its easier to get the gist of a module before
seeing the work done to speed it up.&lt;/p&gt;&lt;p&gt;Next up is the pleasant discovery of &lt;a href=&#34;http://matplotlib.sourceforge.net/index.html&#34;&gt;matplotlib&lt;/a&gt; a graphics &amp;amp; plotting
library for Python. Or, I could say re-discovery because I think I ran
across it a while ago but forgot about it. Now that I need to draw
graphs with lots of data points for work, I think this lib will really
come in handy. The result even looks pretty.&lt;/p&gt;&lt;p&gt;My self-made tool for partially synchronizing my music directory between
desktop and laptop is making some good progress after being dormant for a
while. The &#34;pull&#34; and compare functions are working but I still need to
implement a &#34;push&#34; operation. The tool is heavily influenced by the
Mercurial cli and even some of its code structure. I will probably will
make the code available, but don&#39;t plan on advertising it too much.
The &#34;database&#34; structure isn&#39;t a generic one with wide application.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2009-03-08:good-things-in-bad-times</id>
    </entry>
    
    <entry>
        <title>The Anti-Resolution</title>
        <link href="http://asynchrono.us/the-anti-resolution.html"></link>
        <updated>2010-01-31T17:33:38Z</updated>
        <published>2009-02-08T22:58:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;For the whole month of January I&#39;ve been putting off writing an entry.
I keep meaning to come up with something more substaintail then the
average entry. But I do have some good news, I&#39;ve got more patches in
Mercurial, got even more new music, just tried KDE 4.2 which seems pretty
sweet so far, and seem caught up on most of my outstanding tasks.&lt;/p&gt;&lt;p&gt;I&#39;m still failing at being a Cool Internet Guy... but that was to be
expected. In order to taunt myself I want to make a list of things I
plan on writing about. This may (or may not) motivate me.&lt;/p&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Hypothetical business ideas&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Why I like filesystems over databases&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Mercurial&#39;s general awesomeness&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;My ideal Linux distro&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Books I&#39;ve been reading&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2009-02-08:the-anti-resolution</id>
    </entry>
    
    <entry>
        <title>Furlough</title>
        <link href="http://asynchrono.us/furlough.html"></link>
        <updated>2010-01-31T17:33:38Z</updated>
        <published>2008-12-29T01:05:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;I&#39;ve taken the week off. It&#39;s not company policy, I don&#39;t have to,
but I always feel idle at work when coming in during these odd short
weeks. The worst is the day after Christmas, I&#39;ve done it before and
didn&#39;t enjoy it. If I was deep into a project where I could work
independently for a while it would be different, I think.
Anyway, with a free week I can catch up on some reading... I haven&#39;t
read a whole book since this summer.&lt;/p&gt;&lt;p&gt;Since I don&#39;t feel like doing anything difficult, I will very briefly
rate the CDs I received as Xmas gifts:&lt;/p&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Made Out of Babies - The Ruiner [4.5/5] -
The vocals are both frightening and inviting at the same time. :-)
Favorite tracks: Cooker, The Major.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Dillinger Escape Plan - Ire Works [4/5] -
I love the pseudo-pop and Patton-esque parts... of course I like
Patton&#39;s music so I guess that seems to make sense.
Favorite tracks: Black Bubblegum, When Acting as a Particle.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Deadbird - Twilight Ritual [3.5/5] -
I haven&#39;t listened to it enough to make a solid decision, but
its pretty decent. Got it on a whim, due to Amazon recommendations.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2008-12-29:furlough</id>
    </entry>
    
    <entry>
        <title>Why Thee Kay</title>
        <link href="http://asynchrono.us/why-thee-kay.html"></link>
        <updated>2010-01-31T17:33:38Z</updated>
        <published>2008-12-08T01:05:00Z</published>

      <content type="html">
      &lt;div class=&#34;generated-text&#34;&gt;&lt;p&gt;Well, Python 3000 is done and 3.0 has been released. I like a lot
of the changes that have been made to the language. My favorite
is probably the change to make print a function, I&#39;ve run into many
situations where I would have like to create a class with a print(...)
method but had to settle for a less convenient name.&lt;/p&gt;&lt;p&gt;But today, I&#39;m not here to be positive. I&#39;m going to gripe! Or a least
express a little bit of skepticism. So far there are two things about
the change that I don&#39;t quite like. There is the removal of the callable(...)
function. This is minor, but I really don&#39;t get it. Maybe I&#39;m weird in that
I was using it pretty often. But it&#39;s easy to deal with, just create my
own utility function that does the same thing.&lt;/p&gt;&lt;p&gt;Less easy for me to just deal with, is the change to unicode strings
everywhere. What bugs me isn&#39;t that unicode is used as the default, but
that &#34;regular&#34; byte strings have been sort-of deprecated. sys.argv,
sys.stdin and sys.stdout are now &#34;text&#34; based which really doesn&#39;t make
sense on Linux/Unix systems. How the hell does the language know that
I&#39;m not piping in binary data? I wouldn&#39;t be bothered as much if there
was a bytes equivalent open by default (rawstdin or some such). I
guess I can do something like: &#34;os.fdopen(sys.stdin.fileno(), &#39;rb&#39;)&#34;
but that seems quite
clunky. The old model was simple on unix-like systems, it was obvious
and straightforward.&lt;/p&gt;&lt;p&gt;I hadn&#39;t thought much about the issue until I read some messages by
Matt Mackall, the creator of Mercurial, who was complaining about the
change. Personally, I would&#39;ve gone with byte strings, that always have
an attached encoding which is always defaulted to UTF-8 everywhere. :-)
The fact that there is more than one way
to represent unicode &#34;text&#34; makes it hard to know what the original
byte stream was. This is too bad, because it&#39;s nice to be able to write
stupid programs.&lt;/p&gt;&lt;/div&gt;
      </content>

        <id>tag:asynchrono.us,2008-12-08:why-thee-kay</id>
    </entry>
    

</feed>