Meanwhile, in Japan: Square Watermelon Bread
So that actually looks super delicious, right? Or is it just me?
Living somewhat close to Baltimore and claiming to support social justice, I've felt a certain amount of guilt for not taking part in the recent protests. (I do support the protesters; I just didn't carve out the time and energy.) But here's the thing: WHITE GUILT IS USELESS.
Following in the footsteps of Val and Leigh, I'm using some of my economic privilege to fight white supremacy in the wake of racist violence including, but not limited to, last week's Charleston church shooting and—more broadly—racial profiling, police brutality, mass incarceration of African-Americans, and the militarization of many U.S. police departments. Specifically, I've just donated $1000 toward anti-racist action. If, like me, you've benefited from white privilege and have the means to do so, I invite you to donate to these or similar groups fighting for racial justice.
I have donated $250 each to each of these organizations:
Baltimore Racial Justice Action is “an action-based organization grounded in collective analysis of structural racism and white privilege.” In addition to a supportive community and educational events, BRJA offers consulting and training to individuals and organizations that seek to become inclusive and equitable. Donate here. Contributions are tax-deductible.
The American Civil Liberties Union, which works on the fight for voting rights, against the infuriating school-to-prison pipeline, and on many other racial justice issues. Donate here. Donations to the ACLU are not tax-deductible or employer-matchable; if that matters to you, donate to the ACLU Foundation here.
We the Protesters works to “fulfill the democratic promise of our union, establish true and lasting justice, accord dignity and standing to everyone, center the humanity of oppressed people, promote the brightest future for our children, and secure the blessings of freedom for all black lives.” Donate via the PayPal button at the end of their homepage. Donations are not tax-deductible.
The Equal Justice Initiative works “to reform the criminal justice system, challenge poverty and the legacy of racial injustice, educate the public and policymakers, and create hope in marginalized communities.” Donate here. Donations are tax-deductible and eligible for employer matching.
Giving to any (or all!) of these organizations is a direct way to fight racism and white supremacy in the United States. Guilt is useless. Take action.
This entry was originally posted at http://bokunenjin.dreamwidth.org/62030.html.
Although Ant builds have made Android development much easier, I've long been curious about the cross-platform phone development apps: you write a simple app in some common language, like HTML or Python, then run something that can turn it into apps on multiple mobile platforms, like Android, iOS, Blackberry, Windows phone, UbuntoOS, FirefoxOS or Tizen.
Last week I tried two of the many cross-platform mobile frameworks: Kivy and PhoneGap.
If you want to skip the gory details, skip to the summary: how do Kivy and PhoneGap compare? PhoneGap
I tried PhoneGap first. It's based on Node.js, so the first step was installing that. Debian has packages for nodejs, so apt-get install nodejs npm nodejs-legacy did the trick. You need nodejs-legacy to get the "node" command, which you'll need for installing PhoneGap.
Now comes a confusing part. You'll be using npm to install ... something. But depending on which tutorial you're following, it may tell you to install and use either phonegap or cordova.
Cordova is an Apache project which is intertwined with PhoneGap. After reading all their FAQs on the subject, I'm as confused as ever about where PhoneGap ends and Cordova begins, which one is newer, which one is more open-source, whether I should say I'm developing in PhoneGap or Cordova, or even whether I should be asking questions on the #phonegap or #cordova channels on Freenode. (The one question I had, which came up later in the process, I asked on #phonegap and got a helpful answer very quickly.) Neither one is packaged in Debian.
After some searching for a good, comprehensive tutorial, I ended up on a The Cordova tutorial rather than a PhoneGap one. So I typed: sudo npm install -g cordova
Once it's installed, you can create a new app, add the android platform (assuming you already have android development tools installed) and build your new app: cordova create hello com.example.hello HelloWorld cordova platform add android cordova build
Error: Please install Android target: "android-22"Apparently Cordova/Phonegap can only build with its own preferred version of android, which currently is 22. Editing files to specify android-19 didn't work for me; it just gave errors at a different point.
So I fired up the Android SDK manager, selected android-22 for install, accepted the license ... and waited ... and waited. In the end it took over two hours to download the android-22 SDK; the system image is 13Gb! So that's a bit of a strike against PhoneGap.
While I was waiting for android-22 to download, I took a look at Kivy. Kivy
As a Python enthusiast, I wanted to like Kivy best. Plus, it's in the Debian repositories: I installed it with sudo apt-get install python-kivy python-kivy-examples
They have a nice quickstart tutorial for writing a Hello World app on their site. You write it, run it locally in python to bring up a window and see what the app will look like. But then the tutorial immediately jumps into more advanced programming without telling you how to build and deploy your Hello World. For Android, that information is in the Android Packaging Guide. They recommend an app called Buildozer (cute name), which you have to pull from git, build and install. buildozer init buildozer android debug deploy run got started on building ... but then I noticed that it was attempting to download and build its own version of apache ant (sort of a Java version of make). I already have ant -- I've been using it for weeks for building my own Java android apps. Why did it want a different version?
The file buildozer.spec in your project's directory lets you uncomment and customize variables like: # (int) Android SDK version to use android.sdk = 21 # (str) Android NDK directory (if empty, it will be automatically downloaded.) # android.ndk_path = # (str) Android SDK directory (if empty, it will be automatically downloaded.) # android.sdk_path =
Unlike a lot of Android build packages, buildozer will not inherit variables like ANDROID_SDK, ANDROID_NDK and ANDROID_HOME from your environment; you must edit buildozer.spec.
But that doesn't help with ant. Fortunately, when I inspected the Python code for buildozer itself, I discovered there was another variable that isn't mentioned in the default spec file. Just add this line: android.ant_path = /usr/bin
Next, buildozer gave me a slew of compilation errors: kivy/graphics/opengl.c: No such file or directory ... many many more lines of compilation interspersed with errors kivy/graphics/vbo.c:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.
I had to ask on #kivy to solve that one. It turns out that the current version of cython, 0.22, doesn't work with kivy stable. My choices were to uninstall kivy and pull the development version from git, or to uninstall cython and install version 0.21.2 via pip. I opted for the latter option. Either way, there's no "make clean", so removing the dist and build directories let me start over with the new cython. apt-get purge cython sudo pip install Cython==0.21.2 rm -rf ./.buildozer/android/platform/python-for-android/dist rm -rf ./.buildozer/android/platform/python-for-android/build
Buildozer was now happy, and proceeded to download and build Python-2.7.2, pygame and a large collection of other Python libraries for the ARM platform. Apparently each app packages the Python language and all libraries it needs into the Android .apk file.
Eventually I ran into trouble because I'd named my python file hello.py instead of main.py; apparently this is something you're not allowed to change and they don't mention it in the docs, but that was easily solved. Then I ran into trouble again: Exception: Unable to find capture version in ./main.py (looking for `__version__ = ['"](.*)['"]`) The buildozer.spec file offers two types of versioning: by default "method 1" is enabled, but I never figured out how to get past that error with "method 1" so I commented it out and uncommented "method 2". With that, I was finally able to build an Android package.
The .apk file it created was quite large because of all the embedded Python libraries: for the little 77-line pong demo, /usr/share/kivy-examples/tutorials/pong in the Debian kivy-examples package, the apk came out 7.3Mb. For comparison, my FeedViewer native java app, roughly 2000 lines of Java plus a few XML files, produces a 44k apk.
The next step was to make a real mini app. But when I looked through the Kivy examples, they all seemed highly specialized, and I couldn't find any documentation that addressed issues like what widgets were available or how to lay them out. How do I add a basic text widget? How do I put a button next to it? How do I get the app to launch in portrait rather than landscape mode? Is there any way to speed up the very slow initialization?
I'd spent a few hours on Kivy and made a Hello World app, but I was having trouble figuring out how to do anything more. I needed a change of scenery. PhoneGap, redux
By this time, android-22 had finally finished downloading. I was ready to try PhoneGap again.
This time, cordova platforms add android cordova build worked fine. It took a long time, because it downloaded the huge gradle build system rather than using something simpler like ant. I already have a copy of gradle somewhere (I downloaded it for the OsmAnd build), but it's not in my path, and I was too beaten down by this point to figure out where it was and how to get cordova to point to it.
Cordova eventually produced a 1.8Mb "hello world" apk -- a quarter the size of the Kivy package, though 20 times as big as a native Java app. Deployed on Android, it initialized much faster than the Kivy app, and came up in portrait mode but rotated correctly if I rotated the phone.
The only tricky part was file access: opening a file:// URL didn't work. I asked on #phonegap and someone helpfully told me I'd need the file plugin. That was easy to find in the documentation, and I added it like this: cordova plugin search file cordova plugin add org.apache.cordova.file
My final apk, for a small web app I use regularly on Android, was almost the same size as their hello world example: 1.8Mb. And it works great: phonegap had no problem playing an audio clip, something that was tricky when I was trying to do the same thing from a native Android java WebView class. Summary: How do Kivy and PhoneGap compare?
This has been a long article, I know. So how do Kivy and PhoneGap compare, and which one will I be using?
They both need a large amount of disk space for the development environment. I wish I had good numbers to give you, but I was working with both systems at the same time, and their packages are scattered all over the disk so I haven't found a good way of measuring their size. I suspect PhoneGap is quite a bit bigger, because it uses gradle rather than ant and because it insists on android-22.
On the other hand, PhoneGap wins big on packaged application size: its .apk files are a quarter the size of Kivy's.
PhoneGap definitely wins on documentation. Kivy has seemingly lots of documentation, but its tutorials jumped around rather than following a logical sequence, and I had trouble finding answers to basic questions like "How do I display a text field with a button?" PhoneGap doesn't need that, because the UI is basic HTML and CSS -- limited though they are, at least most people know how to use them.
Finally, PhoneGap wins on startup speed. For my very simple test app, startup was more or less immediate, while the Kivy Hello World app required several seconds of startup time on my Galaxy S4.
Kivy is an interesting project. I like the ant-based build, the straightforward .spec file, and of course the Python language. But it still has some catching up to do in performance and documentation. For throwing together a simple app and packaging it for Android, I have to give the win to PhoneGap.
It's Raining Men: Slacker Demons Book One by Jennifer Stevenson
Chloe's been dumped by yet another loser so she turns to sympathetic bartender Archie, who suddenly claims that it's the fault of terrible sex demons (including himself) and she's been selected to receive a rain of good men as part of victim's compensation. Wacky hijinks ensue.
The demon-lover trope of paranormal romance is usually a big yawn for me because they usually pair it with a "he wants to be better for her" style plotline that takes itself entirely too seriously, but this book is silly and flippant enough about it to be fun. I don't know that I'll bother with any more of the series, but this was a fun summer read on its own.
I received this one free from Librarything in exchange for fair review.
Knit Wear Love: Foolproof Instructions for Knitting Your Best-Fitting… by Amy Herzog
I really loved the idea of Amy Herzog's Knit to Flatter book, which is about finding and adjusting patterns to suit you. It's a great book (from what I can tell without actually following any of the patterns since I just had it from the library for 3 weeks), but I found that the patterns didn't inspire me, so it hasn't gone on the list of things I want for my personal knitting reference library.
Knit Wear Love has solved this problem for me: rather than focusing on body type, the designs are more heavily focused on aesthetic: classic, sporty, bohemian, etc. She's got some really cute details, and it's showcased by lovely photography. Plus, of course, huge numbers of charts, advice about fit, etc. It's pretty much everything I wanted in a sweater book. I borrowed a copy from the library to check it out, but this one is going on my personal library wishlist for when I'm interested in tackling a sweater for myself.
Powers: The Definitive Hardcover Collection, Vol. 1 by Brian Michael Bendis, Michael Avon Oeming (Illustrator)
This graphic novel is an exploration of what it would be like to be a cop in a world with superhero celebrities. It's decent, and I know lots of folk who like the grittier, broken superhero genre who would enjoy this. I felt like there were some really great world and character ideas set up and it was worth reading for that, but I also felt like the pacing and the genre didn't quite do it for me. I'm happy to recommend it to people who like the genre, though.
Also, I want to note that I don't really recommend the "definitive hardcover collection" for light reading. It's a huge coffee table book, lovely but hard to read in bed.
Powers: The Definitive Hardcover Collection, Vol. 2 by Brian Michael Bendis, Michael Avon Oeming (Illustrator)
I liked the first volume enough to pick up the 2nd book, but I found the pacing even more off in that one, to the point where I was tempted to just flip through pages until it got to the point. Too much media retrospective, not enough story. I feel a bit bad complaining about this because I think the media treatment of superheroes is part of the point, and the puff piece media clips feel like they've been dropped from an alternate reality in a good way. But the problem is that I dislike reading/hearing these things normally because I don't care about the celebs in real life, and thus it didn't help me care about fictional celebrities any more than I do about the real ones. I guess they are a clever device but ultimately not one that worked for me. Your mileage may vary. Still quite the story, but a bit hard to get through at times.
Gradually that urge to play with fire has been growing, and last month when fail-better-blog heated the water in the LA tea trailer using charcoal, even if it was just binchōtan, the seduction was complete.
I already have an electric benibachi furo, but it isn't convertible for use with real ash and charcoal. Step one: get a plain furo, ideally in a dōanburo shape for ease of (my) doing and (guests') seeing the ash form. The funny thing is that haigata, or ash formation, was one of my least favorite things to do in Gakuen. I feel like it took me forever to do each one, and I never really got the hang of it—mine looked lopsided, choppy, and overworked. It was a task I approached with anxiety, possibly because I didn't have a chance to practice outside of the evenings I was on duty to do it in preparation for the next day's jitsugi. Or rather, it didn't occur to me that I could make a chance; the men's dorm contained our Midorikai utensils and equipment, including extra furo, so a diligent classmate of mine quietly borrowed one of them and found some ash to practice haigata regularly in his dorm room.
Back in the present day, I lucked out in finding an inexpensive used iron furo I like in the shape I wanted for sale on ebay. It arrived yesterday. Not having worked with an iron furo that wasn't a tokiwa furo, I brushed up on the differences in things used with an iron furo versus a bronze or ceramic furo. I believe they're limited to using a shikigawara instead of shiki-ita and using a red maegawara instead of a white one. Am I missing anything? I understand that furo made of iron are informal, or sō 草, in the shin-gyō-sō 真行草 scheme, which isn't surprising at all given my taste. I wonder whether that will limit the utensils I can use with it in my toriawase, or whether it can be placed on nagaita or daisu.
Starting with just the items that go in or under the furo, along with charcoal I'll need a shikigawara, ash, gotoku, maegawara, sokogawara, and hōshogami. I've been wondering what the purpose of lining the bottom of the furo with hōshogami is. Is it to cushion the unglazed ceramic sokogawara from the hard surface of the furo? Is it largely symbolic like the hōshogami in hōraikazari, providing a clean, pure base for the things on it?
This entry was originally posted at http://bokunenjin.dreamwidth.org/61551.html.
I actually did complete this hat before giving it to M for Christmas 2013, but apparently I can’t find pictures of it (or the kraken hat I made for S the same year), so instead you get this one photo of it with only one side completed:
BTW, I chose the title for this post because of my half-finished picture. But for those of you who don’t know, the whole “right brained / left brained” thing is kind of BS and you might want to read up on it. The myth comes from some research on epileptic patients where the two halves of the brain were severed and they don’t seem to generalize to humans with normally connected brains.
From the article linked above (because I’m not looking up pubmed for a knitting post):
There is a misconception that everything to do with being analytical is confined to one side of the brain, and everything to do with being creative is confined to the opposite side, Anderson said. In fact, it is the connections among all brain regions that enable humans to engage in both creativity and analytical thinking.
“It is not the case that the left hemisphere is associated with logic or reasoning more than the right,” Anderson told LiveScience. “Also, creativity is no more processed in the right hemisphere than the left.”
Anderson’s team examined brain scans of participants ages 7 to 29 while they were resting. They looked at activity in 7,000 brain regions, and examined neural connections within and between these regions. Although they saw pockets of heavy neural traffic in certain key regions, on average, both sides of the brain were essentially equal in their neural networks and connectivity.
(tl;dr: Brains are much more versatile than pop culture might have you believe.)
So there’s your science tidbit for the day. Let’s go back to talking about knitting.
Brain Hat (KNITTING PATTERN, not actual hat)
by Alana Noritake ($5 on Ravelry)
This is a pretty simple pattern: make a skullcap, put a lot of i-cord on it. But it’s worth buying yourself a copy of the pattern because it includes a bunch of pictures of the hat in progress and finished, as well as photos of brains and insight on how to make it look good. I definitely felt like I got my $5 worth and had a much better hat for it!
I made the brain hat for M, who’s allergic to animal fibers, so I was somewhat limited in my choices of yarn. I think I used knitpicks comfy, which is a cotton-acrylic blend that’s quite nice to work with (soft and a little more stretchy than straight cotton). This worked pretty well, to be honest, but doesn’t make for the warmest of hats. This makes it not so great as an all-winter Canada hat, but ok for warmer climates or indoor costume use.
If I did this again again, I’d probably make 50% more brain icord and take more time pinning it to be absolutely perfect. I just didn’t allot quite as much time as I should have before xmas so I was frantically making this on the plane to Ottawa and at my parents’ house before it got packaged up as a present.
Overall, though, a fun pattern and one I’d be happy to make again, given a lot more time or a knitting machine that produced icord.