tag:blogger.com,1999:blog-37764430245122171052024-03-14T13:57:09.764+09:00my days and responsesmemo about my days, programming, reading, learning...Unknownnoreply@blogger.comBlogger36125tag:blogger.com,1999:blog-3776443024512217105.post-50525823560421417402020-07-18T00:41:00.002+09:002020-07-18T00:41:55.132+09:00docker-ce issue on debian bullseyeEncountered apt upgrade error on debian bullseye.<div>After managing to install failed packages, docker-ce remained to be failed.</div><div><br /></div><div>With this command:</div><div> journalctl -fu docker</div><div><br /></div><div>There was an error log which contained:</div><div> level=error msg="AUFS was not found in /proc/filesystems" storage-driver=aufs</div><div><br /></div><div>So AUFS seems not supported with current environment. Searched for info about similar issues, it looks switching to overlay2 is one way to resolve this unless I want to explicitly setup AUFS support.</div><div><br /></div><div>I could see it works by</div><div> service docker stop</div><div> dockerd --storage-driver-overlay2</div><div><br /></div><div>To specify this in config file, I followed https://docs.docker.com/storage/storagedriver/overlayfs-driver/ and added /etc/docker/daemon.json to use overlay2 as storage driver (exactly same from the documentation):</div><div><br /></div><div>{</div><div> "storage-driver": "overlay2"</div><div>}</div><div><br /></div><div>Then restarted docker service with this successfully:</div><div> systemctl restart docker</div><div><br /></div><div>And </div><div> docker run hello-world</div><div>worked.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-37310236859567048642013-02-13T03:18:00.001+09:002013-02-13T03:32:09.594+09:00Trying Microsoft Office 365 for Editing Word DocumentsI've been looking for a way to edit microsoft word documents without having to carry my laptop PC. Sometimes I need to carry different PCs than the one I've got Microsoft Office installed and I work on docs with. I've tried Google Docs, which is okay to me for viewing and editing new docs. Recently I figured there's a service called Microsoft Office 365, so I decided to give it a try. Today I used it for one hour with Google Chrome, which I think is a supported environment considering I didn't see any message stating otherwise. Here's how I felt as a beginner.<br />
<br />
Now I just wanted to edit some word documents that's already been formatted. I expected the Word app from Office 365 to be fairly compatible with Microsoft Word, but it wasn't so enough, at least to me. I imported a Word document and I could view and edit easily. It seems OK except for 3 things:<br />
<br />
1. It doesn't have a function to copy format from one part to another.<br />
I only used it for an hour, so I might have just missed it. Couldn't find it anyway although I use the function often on Microsoft Word.<br />
<br />
2. IME input failed after using the Word app for several minutes, and I couldn't type anything in Japanese (came back to be functional after I closed the app and reopened the document).<br />
<br />
3. Web view, which is my favorite one, was not available. Not that I necessarily want to edit web pages, but when working with a laptop I'd like to make use of full screen width for editing.<br />
<br />
To me the 3 functions above are very simple (don't know if it's hard to implement them well here) yet important.<br />
<br />
I'll probably try to continue to use Microsoft 365 for a while and see if it get's any better if I get used to it. So far, I don't feel it's whole a lot better than using Google Docs to edit documents and finish them with ordinary Microsoft Office apps. I imagined Microsoft Office 365 to be more compatible with the desktop products in terms of design and basic functions. As for me, it is a bit disappointing not to be able to just quickly modify and finish documents online. Again, it might be just because of me not experienced with the online apps...<br />
<br />
<br />
<a href="http://www.office365.com/">Microsoft Office 365: http://www.office365.com/</a><br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-7221774665819367362013-01-23T04:00:00.002+09:002013-01-23T04:00:45.180+09:00Sake Festival in Oimachi, Shinagawa, Tokyo (January 23 - 27, 2013)<br />
There'll be a Sake Festival at Oi(Oimachi) Food Shop in Hankyu Department Store (Oi-Shokuhin-kan in Hankyu Hyakkaten). <span style="background-color: whitesmoke; color: #666666; font-family: 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', メイリオ, Meiryo, 'MS Pゴシック', Osaka; font-size: 13px; line-height: 19.5px;">It's from January 23rd to 27th (1月23日(水)~1月27日(日)). On 23rd, 24th, 25th it's from noon to 8 p.m., and on 26th and 27th it's from 11 a.m. to 8 p.m. </span><br />
<span style="background-color: whitesmoke; color: #666666; font-family: 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', メイリオ, Meiryo, 'MS Pゴシック', Osaka; font-size: 13px; line-height: 19.5px;"><br /></span>
<span style="color: #666666; font-family: Hiragino Kaku Gothic Pro, ヒラギノ角ゴ Pro W3, メイリオ, Meiryo, MS Pゴシック, Osaka; font-size: x-small;"><span style="line-height: 19.5px;">There'll be 12 Sake breweries from several part of Japan. The event is targeted for both Sake fans and beginners (especially ladies who might have never tried Sake before), about 120 kinds of Sake will be there. They'll serve you sample Sake for tasting.</span></span><br />
<br />
<span style="color: #666666; font-family: Hiragino Kaku Gothic Pro, ヒラギノ角ゴ Pro W3, メイリオ, Meiryo, MS Pゴシック, Osaka; font-size: x-small;"><span style="line-height: 19.5px;">I recommend Akabu Brewery from Iwate since it's near my hometown. They are trying hard after damage caused by earthquakes in 2011 as well, and most importantly they've managed to make great Sake! Refer to the links below if you are interested:</span></span><br />
<span style="color: #666666; font-family: Hiragino Kaku Gothic Pro, ヒラギノ角ゴ Pro W3, メイリオ, Meiryo, MS Pゴシック, Osaka; font-size: x-small;"><span style="line-height: 19.5px;"><br /></span></span>
<br />
Akabu Brewery (English Intro.)<br />
<a href="http://oishiisanriku.com/akabu_e.html">http://oishiisanriku.com/akabu_e.html</a><br />
<br />
Akabu Brewery (Official Web Site, Currently Only in Japanese)<br />
<a href="http://www.akabu1.com/">http://www.akabu1.com/</a><br />
<br />
<br />
Oimachi Food Shop (Google Map)<br />
<a href="https://maps.google.co.jp/maps?q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%93%81%E5%B7%9D%E5%8C%BA%E5%A4%A7%E4%BA%951-50-5&ie=UTF-8&hq=&hnear=0x60188a7da3812eb5:0xa344c97d8c1fafe3,T%C5%8Dky%C5%8D-to,+Shinagawa-ku,+%C5%8Ci,+%EF%BC%91%E4%B8%81%E7%9B%AE%EF%BC%95%EF%BC%90%E2%88%92%EF%BC%95&gl=jp&ei=SN_-UNi1FYndmAXLq4HQDA&ved=0CH8QtgM">https://maps.google.co.jp/maps?q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E5%93%81%E5%B7%9D%E5%8C%BA%E5%A4%A7%E4%BA%951-50-5&ie=UTF-8&hq=&hnear=0x60188a7da3812eb5:0xa344c97d8c1fafe3,T%C5%8Dky%C5%8D-to,+Shinagawa-ku,+%C5%8Ci,+%EF%BC%91%E4%B8%81%E7%9B%AE%EF%BC%95%EF%BC%90%E2%88%92%EF%BC%95&gl=jp&ei=SN_-UNi1FYndmAXLq4HQDA&ved=0CH8QtgM</a><br />
<br />
<span style="color: #666666; font-family: Hiragino Kaku Gothic Pro, ヒラギノ角ゴ Pro W3, メイリオ, Meiryo, MS Pゴシック, Osaka; font-size: x-small;"><span style="line-height: 19.5px;">Oimachi Food Shop Event List (</span></span>Only in Japanese)<br />
<a href="http://www.hankyu-dept.co.jp/ooi/topics.html">http://www.hankyu-dept.co.jp/ooi/topics.html</a><br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-60131069027479725662012-03-04T16:50:00.001+09:002012-03-04T16:50:11.849+09:00Building emacs on a Debian Box to Explore the Source CodeI use emacs daily and have been interested in the source code. Occasionally I write short emacs lisp code to take care of daily chores and have set up.<br />
It's great that emacs has a built-in help system, which you can invoke by [control-h a] if you need to search some feature by words in description. If you know a function by name, you can just type [control-h f] with the cursor at the function name while you are editing your elisp code, or you can specify a function name at the help function prompt. In any case, if the system finds a function, the description shows up. (Try [control-h ?] for more ways to make use of the help system...)<br />
<br />
Also you can refer to implementations (elisp or c code) by [ESC x find-function]. To be able to view c source code, you need to set up a local source code directory, i.e. set the following variable:<br />
<br />
<pre style="background-color: white; font-size: 13px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><code>
</code></pre>
<pre style="background-color: white; font-size: 13px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><code>find-function-C-source-directory</code></pre>
<pre style="background-color: white; font-size: 13px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="font-family: Times; font-size: medium; white-space: normal;">
</div>
<div style="font-family: Times; font-size: medium; white-space: normal;">
There are many pages that shows how to do it, but I couldn't find a description on a emacs document, so here I just say the variable and the use is defined in find-func.el:</div>
</pre>
<br />
<a href="http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/find-func.el">http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/emacs-lisp/find-func.el</a><br />
<br />
This time, I decided to set up my own emacs environment which I can mess around with. So I started from here, after searching for the source code repository:<br />
<a href="http://savannah.gnu.org/bzr/?group=emacs">http://savannah.gnu.org/bzr/?group=emacs</a><br />
<br />
Following the instruction, I branched from the repository with the command:<br />
bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk<br />
<br />
A directory named "trunk" is created and directories and files are copied from the directory. <br />
<br />
Now it's pretty straight forward to build your own emacs. Files like INSTALL, INSTALL.BZR, and README are well-written, so probably you wouldn't have much trouble to complete the process.<br />
<br />
As for me, I built emacs on a Debian box, and I needed to install some libraries like libxpm, but you just need to look at the error/warning messages to figure out what needs to be done optionally. You also need autotools if you don't have them installed yet on your system. Later I might go into details if I have a chance and feel like to... Once again, the process is well-documented and it shouldn't be of much trouble to try by yourself.<br />
<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-54831137386113135792012-03-02T11:10:00.000+09:002012-03-02T13:30:13.957+09:00A Live Charity Music Event (3/3 6pm in Yushima, Bunkyo-ku, Tokyo)There'll be a live charity music event in Yushima, Bunkyo-ku, Tokyo starting 6 pm on March the 3rd:<br />
<div>
<a href="http://www.revive-japan.net/">http://www.revive-japan.net/</a><br />
<br /></div>
<div>
<br /></div>
<div>
Buy a bandana as a ticket for 2000 yen, which is a pass to all the lives held at 17 bars/restanrants. Your drinks/foods are not included. Your ticket fee will be donated to Iwate, Miyagi, Fukushima, which are prefectures damaged in the series of earthquakes and tsunamis last year.</div>
<div>
<br /></div>
<div>
The restaurants, the bars, the bands have been working hard to make this event happen, for nearly free, if you think about their time and fees to prepare bandanas, equipments and stuff. There are sponsors contributing money for the event, for the whole 2000 yen will be sent to the prefectures.</div>
<div>
<br /></div>
<div>
So if you buy a few drinks, you can also contribute to the bars/restaurants, and be part of it! Just enjoy the lives and you can change Japan a bit in a positive way. I believe it's more important than just donating money.</div>
<div>
<br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-3173727506498136472011-06-07T11:38:00.002+09:002011-06-08T04:11:47.614+09:00Got my Gameduino Working ( @gameduino )I received my gameduino on Sunday and stacked and plugged the parts. It's pretty easy to get the gameduino kit ready, even for me with almost no experience with assembling these kind of parts. Mine was pre-loaded with the asteroids game.<br />
<br />
I got one for backing the gameduino project via Kickstarter:<br />
http://www.kickstarter.com/projects/2084212109/gameduino-an-arduino-game-adapter?ref=live<br />
<br />
and here's the gameduino project page (?):<br />
<br />
http://excamera.com/sphinx/gameduino/<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSRBgXu00vY4Oiy-RyyN5YH3MvtePCjJ8tgx2Y3XM0QBE6D4R3HoserxFsFvFfaoyur5DuVq3OgSTzhbF9DjyTFLDZ4XuHepPIEMorpOkWCPoYc0DUGKJ27PgJqfpVbaLfKEeGPngHkh0/s1600/IMG_0809.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSRBgXu00vY4Oiy-RyyN5YH3MvtePCjJ8tgx2Y3XM0QBE6D4R3HoserxFsFvFfaoyur5DuVq3OgSTzhbF9DjyTFLDZ4XuHepPIEMorpOkWCPoYc0DUGKJ27PgJqfpVbaLfKEeGPngHkh0/s320/IMG_0809.JPG" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUXuveh7kmYzwm57ycu0EjFmX7zORvIOpVnQRIoQ0_hBXoXQgn441-icfEYG4o3RA7ShI1GLZqWmrbNUVrMJe-9tfwg7lFoc1QWvWUjmdysscCXHiSH9JE3GNWRjdJSLHo72tMaI_YuMo/s1600/IMG_0810.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUXuveh7kmYzwm57ycu0EjFmX7zORvIOpVnQRIoQ0_hBXoXQgn441-icfEYG4o3RA7ShI1GLZqWmrbNUVrMJe-9tfwg7lFoc1QWvWUjmdysscCXHiSH9JE3GNWRjdJSLHo72tMaI_YuMo/s320/IMG_0810.JPG" width="240" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div>Just wish I have time to play with it today but it's time to go back to work...<br />
<br />
Thanks James!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-76117434152268520062011-03-17T15:43:00.000+09:002011-03-17T15:43:39.958+09:00Tips: Multiple Python Versions with MacPortsI wanted to try python3 with MacPorts on my macbook, but wasn't sure if I want to remove older versions yet (for GAE and such).<br />
<br />
Anyways I searched and installed the latest one available with MacPorts.<br />
<blockquote>$ port search python3</blockquote>which lists python versions 3.1.2 and 3.2. I wanted the newer one, so I did:<br />
<blockquote>$ sudo port install python32</blockquote>to install python 3.2 successfully.<br />
<br />
Then I checked the version:<br />
<blockquote>$ python -V<br />
Python 2.5.4</blockquote><br />
So python still pointed to an old version. I could type "python3.2" and run the 3.2 version (actually I've managed to use other versions like that). <br />
<br />
Then I found a discussion on this topic:<br />
<a href="http://superuser.com/questions/35256/how-can-i-change-the-default-python-version-on-snow-leopard">http://superuser.com/questions/35256/how-can-i-change-the-default-python-version-on-snow-leopard</a><br />
<br />
<br />
OK, so the python_select package seems just what I wanted.<br />
<blockquote>$ sudo port install python_select<br />
$ python_select -l</blockquote>gave me some output:<br />
<blockquote>Available versions:<br />
current none python26 python26-apple python27 python32</blockquote>Now I tried:<br />
<blockquote>$ python_select python32</blockquote><br />
which didn't work, because it modifies the macports system info...<br />
<br />
A command that works:<br />
<blockquote>$ sudo python_select python32<br />
$ python -V<br />
Python 3.2</blockquote>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-52780458626285220292011-03-16T13:00:00.000+09:002011-03-16T13:00:11.321+09:00Gas Shortage in Japan after Earthquake and AnxietiesIt's been 5 days since huge earthquakes hit Japan. My family and relatives live in Tohoku region. Luckily they survived and the houses are ok. For those who are in similar situations (who doesn't have to evacuate from their residense), there's a common anxiety growing larger and larger; they don't have enough gas to maintain their ordinary activities. <br />
<br />
Tohoku region is, generally speaking, a very rural area. Most people can't commute or go buy groceries without cars. Even most of public transportations like buses and trains (you know, in quite a few areas down there, they are not electric) need gases. Of course grocery stores can't get items, which happens at especially small stores. I guess in less populated areas, if this situation continues, there's going to be shortage of foods and economic activity will nearly halt. In Tokyo too, either gas stations don't have enough supply or people are rushing into gas stations out of worries. As in a press conference, it seems it's true that there's not enough gas for everyone to stock unnecessary amount. <br />
<br />
As you might already know, gas is also critical for helping those who are directly damaged in the disaster and waiting to be rescued. To provide foods and water for evacuated people, gas is necessary. Rescue vehicles need gas. So for now, lack of gas affects severely damaged areas. <br />
<br />
There's already a short term problem in effect. In a long term, lack of gas affects those who have survived, which in turn may slow down the economy in Japan. Everyone here needs to calm down a bit and help manage limited amounted of resource.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-33954944833477902472011-02-06T02:28:00.001+09:002011-02-06T02:38:17.620+09:00TopCoder Training in Shibuya, TokyoThis month here's a series of TopCoder training lectures in Shibuya, Tokyo. It was the first day, and there are 3 days to go (on coming Saturdays). Luckily I could reserve a seat for myself.<br />
<div><br />
</div><div>The lecture series is organized by <a href="http://www.appliplanet.co.jp/">Application Planet Inc</a>., and they are trying to double the number of "active" TopCoder members in Japan ("active" means to join competitions frequently enough... at least once in last 6 months). They've been working on the lectures since last year (or so I've heard).</div><div><br />
</div><div>I hope there'll be more active members in Japan, and maybe better single round match schedules for members in Asia, at least once in a few months. TopCoder single round matches are so great in that it's open to everyone, but it's virtually impossible to join one if it's held like at 11 am on a weekday..., especially if you work for a normal company (I mean, if you are a developer for certain companies, you might be able to manage to join a competition and still show up not so late for your average day...).</div><div><br />
</div><div>The lecturer is Naohiro Takahashi, a famous redcoder in Japan, who goes by "chokudai." He's a junior student in a university and writer. He's got so many great achievements (you can find a bunch of them if you just google it).</div><div><br />
</div><div>Lectures and labs there were great, and it's also really a good opportunity to actually be able to listen to red coders and to know they are also human :-) and (some part of ) how they've got so far. It's mostly aimed at beginners and good for people looking for other folks who are struggling too, like me.</div><div><br />
</div><div>So I just need to practice more and more...</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-181866801601859592011-01-29T13:58:00.005+09:002011-02-05T20:24:38.868+09:00Google URL Shortener Fixed Now?<div><span class="Apple-style-span" style="font-family: inherit;">I don't believe it matters much anymore, so I'm writing about a bug (or maybe a feature back then) in <a href="http://goo.gl/">Google URL Shortener</a>. As far as I tested today it's already taken care of.</span></div><div><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></div><div><span class="Apple-style-span" style="font-family: inherit;">In short, I think there was a chain-of-shortened-URLs bug, so to speak. On the release day or so I read about the URL shortener and tried it to see if how it was different from other shorteners. I liked the simple interface with some extra features like access stats and 2D matrix bar codes. Anyways, then it occured to me if it can shorten just any URL (well, even when they are descending people still call moving staircases an escalator...). </span></div><div><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></div><div><span class="Apple-style-span" style="font-family: inherit;">So an URL 'http://goo.gl/' is obviously shorter than URLs "shortened" by goo.gl. Unexpectedly goo.gl actually lengthened the URL, with a hash code:</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: inherit; font-size: 13px; line-height: 19px; white-space: nowrap;">goo.gl/I349</span></div><div><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></div><div><span class="Apple-style-span" style="font-family: inherit;">Then I also wondered what would goo.gl return if a shortened URL by goo.gl itself, i.e. "<span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px; line-height: 19px; white-space: nowrap;">goo.gl/I349", </span>was given. The result:</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: inherit; font-size: 13px; line-height: 19px; white-space: nowrap;">goo.gl/CCix</span><br />
<span class="Apple-style-span" style="font-size: x-small;"><span class="Apple-style-span" style="border-collapse: collapse; line-height: 19px; white-space: nowrap;">And you could repeat the process, making a chain with each time generating a different hash code... </span></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: inherit; font-size: 13px; line-height: 19px; white-space: nowrap;"><br />
</span></div><div><span class="Apple-style-span" style="font-size: x-small;"><span class="Apple-style-span" style="border-collapse: collapse; line-height: 19px; white-space: nowrap;"><span class="Apple-style-span" style="border-collapse: separate; font-family: inherit; font-size: small; line-height: normal; white-space: normal;">I'd have reported them if it was really serious problem, or I liked the way google support team responds generally. So far as I know I don't think they are very good at communicating with users. Maybe they just don't reply but listens well, I don't know:</span></span></span></div><span class="Apple-style-span" style="font-family: inherit; font-size: 16px;"><a href="http://74k3.blogspot.com/2010/09/google-translator-toolkit.html#links">my days and responses: Google Translator Toolkit</a></span><br />
<div><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></div><div><span class="Apple-style-span" style="font-family: inherit;">As for goo.gl I don't know what's been going on, so I can't say if it was really a bug, but to me there were lessons learned:</span></div><div><span class="Apple-style-span" style="font-family: inherit;">- Try to find test cases carefully (and never think they are complete).</span></div><div><span class="Apple-style-span" style="font-family: inherit;">- Users might help you reporting bugs if you are little more friendly :)</span></div><div><span class="Apple-style-span" style="font-family: inherit;"><br />
</span></div><div><span class="Apple-style-span" style="font-family: inherit;">Common sense, but really important...</span></div><div><br />
</div><div><br />
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-4499482158249267802011-01-26T13:09:00.001+09:002011-01-26T13:09:09.110+09:00Thanks to Twitter...Thanks to people tweeted on my last post, finally there were lots of accesses. I figure twitter is the quickest way to notify people of such a personal blog post (as most of you already know).<br />
<div><br />
</div><div>最初はまったく読まれる気配がなかったが、しばらくして主にTwitter経由で結構アクセスが来たらしい。また何かおもしろいものがあったら投稿しよう。</div><div><br />
</div><div><br />
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-28255514962090799772011-01-19T12:18:00.053+09:002011-01-28T20:25:13.610+09:00Read an Interesting Article on Facebook Developers(和訳)<div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="white-space: pre-wrap;">I enjoyed reading the article and thought people might find it interesting too... so I roughly translated the article to Japanese. </span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="white-space: pre-wrap;"><br />
</span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="white-space: pre-wrap;"><br />
</span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="white-space: pre-wrap;">以下Facebook社の開発プロセスについてのyeeguy氏のブログを日本語訳したもの。95%程度はあっていると思うが詳しく確認していないので詳細は適当な部分がある。題名は原文へリンクしてある。</span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span id="internal-source-marker_0.7666540511418134" style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br />
</span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span id="internal-source-marker_0.7666540511418134" style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><br />
</span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span id="internal-source-marker_0.7666540511418134" style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-style-span" style="font-family: Verdana;"><a href="http://framethink.wordpress.com/2011/01/17/how-facebook-ships-code/">How Facebook Ships Code(Facebook社でコードがリリースされるまで)</a></span></span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span id="internal-source-marker_0.7666540511418134" style="background-color: transparent; vertical-align: baseline; white-space: pre-wrap;"><span class="Apple-style-span" style="font-family: Verdana; font-size: x-small;"><br />
</span></span></div><div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span id="internal-source-marker_0.7666540511418134" style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2011年1月17日 — yeeguy</span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facebook社のやり方に感心している。とても個性的な環境で、同じ環境を簡単に作れるようなものではない (もしやってみたとしても、他の会社全てでうまくいくわけではないだろう)。以下に示すのは、会社でどのようにソフトウェア開発をしてリリースをしているのか、Facebook社に在籍する多くの友人と話しているうちに集まったメモだ。</span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: Verdana;"><span class="Apple-style-span" style="white-space: pre-wrap;">他にもFacebook社に興味を持っている人達がいるようだ…</span></span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">また、 </span><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="http://launch.is/blog/2010/12/14/launch002-what-i-learned-from-zuckerbergs-mistakes.html">Facebook社の開発者主導の文化が大いに世間の詮索の的になってい</a>て</span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; vertical-align: baseline; white-space: pre-wrap;">、一方他の会社では<a href="http://blogs.forrester.com/tom_grant/11-01-17-product_management_you_get_what_you_pay_for?cm_mmc=RSS-_-IT-_-942-_-blog_1887">開発者主導の文化が実現可能なのか、どんな方法で実現するのかという</a></span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;"><a href="http://blogs.forrester.com/tom_grant/11-01-17-product_management_you_get_what_you_pay_for?cm_mmc=RSS-_-IT-_-942-_-blog_1887">難しい問題に取り組んでいる</a>。</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">しかしながら、Facebook社では内部のプロセスをとても慎重に選定する。新機能や内部のシステムについて<a href="http://www.facebook.com/notes.php?id=9445547199">Facebookのエンジニアチームはメモを公開する</a>が、これらは大抵「どのように」ではなく「どんな」という類の記事である… そのため、外部の人間にとってはFacebookが他の会社と比較して大幅に効率的にサービスを改良し最適化しているのかが簡単にはわからない。Facebook社がどのように機能しているのかをもっと理解するための試みとして、外部の人間の立場で個人的にこれらの考察を数ヶ月の期間にわたってまとめた。情報提供者に対するプライバシーを尊重し、全ての氏名、特定の機能や製品について言及している部分は削除した。また、</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">これらの考察をまとめてから公開するまでに6ヶ月以上も待ったので、</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">きっとこれらのメモの内容は少し古くなってしまっている。これらのメモを公開することで、Facebook社が</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">カオスな状況に陥らずに</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">組織の意志決定を</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">どのように</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">行ってきたかをいくらかでも解明するために</span><span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;">役立つことを期待している… Facebook社の成果、あるいはFacebook社がいかに首尾一貫して製品を提供してきたかについて反論するのは難しい。一般ユーザー(コンシューマ)を対象としている多くのインターネット企業がFacebookの例から学べると思うし、学んで欲しい。</span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><br />
<span class="Apple-style-span" style="font-family: Verdana; white-space: pre-wrap;"></span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Facebook社の内部についての視点をまとめるのに協力していただいた多くの方々には多大に感謝している。</span><a href="http://www.reddit.com/user/epriest"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">epriest</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏や</span><a href="http://www.reddit.com/user/fryfrog"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">fryfrog</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏など、訂正、編集についてのまとめをしていただいいた方々にもまた感謝する。</span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">注:</span><br />
<ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2010年7月の時点でこの会社には2000人近くの従業員がおり、およそ1100人の従業員がいた10ヶ月前よりも増えている。一年たたずにほぼスタッフが2倍!</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">規模において上位2つのチームはエンジニアとオペレーション担当で、それぞれ400から500人のチームメンバーが所属する。これらの2チームだけで会社のおよそ50%を占める。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">プロダクトマネージャとエンジニアの比率は大ざっぱに言うと1対7から1対10程度</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">全てのエンジニアは4週間から6週間の「ブートキャンプ」トレーニングを経験する。このトレーニングを通してバグの修正をしたりシニア/テニュア(永任権を持つ?)エンジニアによる講義を聴いたりすることでFacebookのシステムについて学ぶ。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">ブートキャンプを終えると、全てのエンジニアが本番環境のDBにアクセスできるようになる(「大きな権限は大きな責任を伴う」ことについての標準的な講義と「クビに値する違反事項」、例えばユーザーの個人データの公開、の明確なリストも同時に提供される)</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[記述編集、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3j0a"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">fryfrog</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“内部の権限を持ってすれば可能になってしまうと想像できるようなひどいことを社内の誰かが実行してしまうのを防ぐため、とても優れたセーフガードがある。サポートに連絡するような「立場に」ならざるを得ない場合、その内容が記録されるのには理由があり、しっかりとレビューされる。ここでは道を踏み外す者は許容できない。以上。”</span></li>
</ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアなら誰でもFacebookのコードベースの任意箇所を思い通りに変更でき、チェックインできる</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">大いにエンジニア主導の文化である。「ここではプロダクトマネージャは基本的に役に立たない」というのはあるエンジニアによる言葉の引用。エンジニアは開発過程の途中で設計を変えたり、プロジェクトの順位を変更したり、アイデアが浮かんだらいつでも新しい機能を加えたりする。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">異チーム合同の月例ミーティングでは、エンジニアが進捗報告を発表する。プロダクトマーケティングやプロダクトマネジメントの人間もこれらのミーティングに参加するが、これらの人が話し過ぎると「この間のミーティングではプロダクトがおしゃべりしすぎた」などという評価がリーダーに対して返ってくる。彼らはエンジニアが公的にプロダクトを所有する状態を望んでおり、開発するものについてエンジニアがコンタクトの中心となるのを望んでいる。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">プロジェクトに対しての人員配置は完全に自主的である。</span></li>
</ul><ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">プロダクトマネージャがエンジニアのグループに声をかけ、アイデアを説明し、熱心に興味持たせるよう働きかける。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアは、取り組むならどのアイデアが面白そうか判断する。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアは上司(マネージャ)に「今週はこの5つのことに取り組みたい。」と話す。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアマネージャはたいていエンジニアの希望をほうっておき、時には特定のタスクをまず片付けるように指示することもある。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアは機能全般にわたって取り仕切る --- フロントエンドのjavascript、バックエンドのデータベースコード、またそれらの間にあるもの全て。デザイナーに助けを求めたければ(人数は限られるが専属のデザイナーがいる)、デザイナーを説得してプロジェクトに参加するように興味を持たなければいけない。アーキテクトに助けを求める場合も同様。しかし一般的には、エンジニアは必要なもの全てについて自ら対応するよう期待される。</span></li>
</ul></ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">機能についてのあるアイデアが実現するに値するかどうかの議論は、一般的に1週間を実装に費やしてユーザーの一部に対してテストすることで解決する。例えば、ネバダ州のユーザーのうち1%を対象とする。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアは一般的にインフラ、スケーラビリティや「困難な問題」に取り組みたがる --- そこに全ての名声があるから。フロントエンドのプロジェクトとユーザーインタフェースに取り組むことについてエンジニアの熱心な興味を引くのは難しい場合がある。「ここは私が作ったんだ」と特定の機能を指差したいがためにお客さんが触れるような箇所に関わる、というようなコンシューマービジネスの場合とは反対の状況である。Facebookでは、ニュースフィードのアルゴリズム、広告のターゲットを絞るアルゴリズム、memcacheの最適化などのようなバックエンドの案件はうまみが多くエンジニアが欲しがるプロジェクトだ。</span></li>
</ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;">特定の高優先度の機能(例えばニュースフィード)に影響があるコミットはマージ前にコードレビューを受ける。</span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> News FeedについてはZuckerberg氏が必ずどんな変更点もレビューするほど重要だが、これは例外的なケースだ。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3b37"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">epriest</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“全ての変更点についてコードレビューは義務となっている(つまり、一人以上のエンジニアによってレビューされる)。 この記事の言わんとしているところはZuck氏が個人的に全ての変更点を見るわけではないということだと思う。”</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3j0a"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">fryfrog</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“全ての変更点は最低1人によりレビューされ、特に招待しなかったとしてもシステムは他の誰にでも簡単に見ることができ、コードをレビューすることができる。レビューされていないコードを混入するには、意図的かつ悪意を持った行動が伴うはずだ。”</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;">QAは全く存在しない</span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">。関わった仕事についてエンジニア自らがテスト、バグ修正、リリース後の運用に責任を負う。単体テストや結合テストのフレームワークは存在するが、時々利用されているのみである。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3j0a"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">fryfrog</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">実際には会社にQA(チーム)が存在していることを付け加えたい。ただし、正式なQAグループではない。職場にいる、あるいはVPN経由で接続している全ての従業員は次のタイミングでリリースされる全ての変更点を含むバージョンのサイトを使っている。このバージョンは頻繁に更新され、世間のユーザーに見えるものよりも通常1〜12時間先行している。全ての従業員はどんなバグでも報告するように推奨され、これらの報告に対しては迅速に行動が起こされる。”</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">QA(品質保証)や自動ユニットテストが欠如していることの驚きについて — “多くのエンジニアはバグのないコードを書くことができる。ほとんどの会社がそれに対してのインセンティブを設けていないだけだ。QA部署があるなら、単純に彼らに任せてエラーを見つけてもらうのが簡単だ。” [EDIT: これは主観的な意見であったということに注意してください。他の会社での標準的な開発プラクティスと対照的に述べるためにこの記述を入れました。]</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3b37"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">epriest</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“我々はテストを自動化した。その中にはリリースが世に出る前にパスしなければいけない「push-blocking」テストも含まれる。 「ほとんどのエンジニアはバグのないコードを書くことができる」ということは我々は全く信じておらず、ビジネスの基礎とできるような妥当な考えだとも思っていない。</span></li>
</ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">プロダクトマネージャに影響力と権力がないことの驚きについて — プロダクトマネージャは独立性と自由さを持っている。影響力を持つカギは、エンジニアリングマネージャと本当に良い関係を築くことである。ばかげたアイデアを提案しない程度に、十分な技術が必要。それはさておいても、ロードマップやバックログを作成する際に許可やレビューを受ける必要がない。”プロダクトディレクタはロードマップに載っている事ついてすら全てきちんと知ってはいない。” プロジェクトマネージャの数は比較的少ないが、彼らは皆、社内の本当に重要で個人的に興味のある部分について責任を負っていると感じている。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">デフォルトではコミットした全てのコードは週ごと(火曜日)のリリースパッケージに含められる</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">さらに多くの手続きを踏めば、同日に変更点をリリースすることも可能</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">火曜日のコードリリースの条件として、その週のリリース候補に対してコードをコミットした全てのエンジニアがon-site状態であること</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">エンジニアは「コードのリリースの知らせ(roll call)」を待つためリリースが開始される前に特定のIRCチャンネルに現れる必要があり、そうしないと公に「さらされる」</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">オペレーションチームはリリースするコードを徐々に反映させることにより実行する</span></li>
</ul><ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facebookには60,000台程度のサーバーがある</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">新しいコードのリリースには9つの </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: line-through; vertical-align: baseline; white-space: pre-wrap;">concentric</span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">レベルが存在する</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[CORRECTION thx </span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3b37"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">epriest</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“この9つのレベルは同心的(concentric)ではない。3つの同心的なフェーズが存在する(p1 = 内部リリース、p2 = 小規模な外部リリース、 p3 = 完全な外部リリース)。 他の6つの段階は付属的なものであり、内部ツール、ビデオアップロードホストなどである。”</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">最小のレベルでは6サーバーだけになる。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">例えば、火曜日の新規リリースが6サーバーを対象に行われる(レベル1)場合、オペレーションチームはそれら6つのサーバーを監視し、正しく機能していることを次のレベルへと移行する前に確認する。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">リリースが問題を引き起こした場合(例えば、エラーが出る、など。)には更新を停止する。問題となるチェンジセットをコミットしたエンジニアは問題の修復に専念することになる。そしてリリースはレベル1からやりなおしとなる。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: circle; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">リリースは同じレベルを繰り返し通過する場合がある: 1-2-3-修正。 1に戻る。 1-2-3-4-5-修正。1に戻る。 1-2-3-4-5-6-7-8-9。</span></li>
</ul></ul><ul><li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">オペレーションチームはよく訓練を積んでおり、大いに尊敬される存在であり、ビジネスにとても敏感だ。彼らのサーバーメトリクスは通常のエラーログ、負荷やメモリ使用統計の上を行く --- ユーザーの行動も守備範囲だ。例えば、新規のリリースによってFacebookの機能に関わるユーザーの割合が変化した場合、オペレーションチームは彼らの基準でそれを検知し、それを理由にリリースを中止して調査を行うことができる。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">リリースの過程において、オペレーションチームはIRCベースのページングシステムを使用してFacebook、メール、IRC、メッセンジャ、SMS経由で個々のエンジニアに対して必要に応じて通知できる。おぺれーshチームに対して応答しない場合は公にさらされる。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">コードがレベル9に達して安定している状態になったら、週ごとの更新で完了する。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">ある機能がその週の更新に間に合わなくても、大したことではない(外部的に重要な依存関係がない限りは)--- 一般的に、ある機能は完成した段階でいつでも投入される。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">svnでblameされたり(ソースレポジトリ上のある変更点について非難されたり)、公にさらされたり、プロジェクトを頻繁すぎるほど失敗させたりすると、エンジニアは解雇される。「とても高度な達成度が要求される文化だ。」 マネージャ(上司)は文字通り達成度の低い者たちを6ヶ月の雇用期間で振り分けて「どうもこれではうまくいかない。君はうちの文化には合わない。」と伝える。これは実際のところ、この会社のあらゆるレベルにおいて行われることであり、C(最高責任者)レベルやVP(副社長)レベルであったとしても、彼らが「超」生産的ではない場合は即刻免職となる。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3b37"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">epriest</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“バグを出すことで呼び出されることはない。 リリース時に変更点を含める依頼をしているのに、そのときに念のため対応できるように待機していない(そして代わりにそれを補ってくれる人も用意していない)場合にのみ呼び出される。</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3b37"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">epriest</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] </span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">“非難されたからといって解雇はされない。 この観点から言うと我々は極度に寛容であり、シニアエンジニアのほとんどが最低1度は恐ろしいことをしでかしており、私も例外ではない。知る限りでは、このような性質の過ちを犯したことで解雇された者はいない。”</span></li>
<li style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">[訂正、</span><a href="http://www.reddit.com/r/programming/comments/f3u0n/how_facebook_ships_code/c1d3j0a"><span style="background-color: transparent; color: #0000ee; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">fryfrog</span></a><span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">氏の指摘] “</span><span style="background-color: transparent; color: black; font-family: Verdana; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">この記事に書かれているような間違いを犯したことで解雇されてしまったというような人は私も知らない。不注意でサイトをダウンさせた人達を知っている。問題を引き起こしたものが何であれ頑張って修正するし、誰でも失敗から学ぶ。個人的な意見では、公の場でさらされるのは解雇の恐れよりも格段に効果的だ。</span></li>
</ul><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Facebookの開発文化がこの先時間の経過とともにどのように進化していくのかを観察するのは非常に興味深い。特に、もしこの文化が数千人レベルの従業員を抱えるまでに成長した段階でもそれに応じて拡大できるのかを見届けたい。</span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br />
</span><br />
<span style="background-color: transparent; color: black; font-family: Verdana; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">「あなたはどう思いますか?」「開発者主導の文化」はあなたの会社ではうまくいくでしょうか?</span></div>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-3776443024512217105.post-39102602702838313262010-09-16T12:21:00.001+09:002010-09-16T12:22:59.636+09:00Google Translator ToolkitI've used Google Translator Toolkit for about a 30-page project. The interface is simple and comfortable to use. <br />
<br />
After completing my translation tasks, I wanted to export my private translation memory. The Toolkit only let me download broken TMX files(formatted correctly but with no content body).<br />
<br />
I attempted to contact the Google Translator Toolkit project customer support regarding the issue, but they never responded to my message via a contact form. After a week or so, I repeated the same thing, reminding them that it was the second time. Again, they've never responded.<br />
<br />
So after a few month (that's today...) I tried the memory exporting function on Google Translator Toolkit. It seems it's working now. Although I haven't looked into the TMX file in detail (thus don't know if it's really working but the file size seems about right), I appreciate the effort to fix the problem. <br />
<br />
Then again, I wonder what's wrong with their poor communication. No response, no announcement AFAIK. Maybe they are just too busy making the Toolkit work, or other tasks came up with higher priority. I myself work on my websites for living as an engineer, so I guess understand such situation partly.<br />
<br />
After all, Google Translator Toolkit became better, so thanks for the good work, to whom it may concern!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-36780668344602650022010-06-29T03:15:00.004+09:002010-06-29T03:29:03.115+09:00Free Translation Tools... or How I Ended up with Google Translator ToolkitAs I'm working on my moderately large translation project, I needed some help with repetitive sentences and such. Copying and pasting soon got me irritated enough...<br />
<br />
I use a macbook lately. At first I tried Omega-T and Sun Open Language Tools. Ok, the applications can be installed fairly easily on my macbook. Only neither of them worked properly. OmegaT failed to open a document (it just shows a gray, empty window after importing files). Sun Open Language Tools fail after editing some portion of my file (it might depend on input files).<br />
<br />
So I was gonna try without tools because it seemed I should spend my time for actual work. Then I remembered that google has released an online translation tool. So I gave it a try. It's simple, but just works on my macbook in chrome! Great. The only thing so far that I don't like about the tool is, it tries to share your data with everybody by default. You need to be careful when you don't want your document public. I know it's very nice to be able to share translation memory publicly, though. If I work on something about open source projects, I would be glad to shere my work (as long as it's not against the agreement).<br />
<br />
Actually I've used Sun Open Language tools before on Windows. It worked great for my translation project, handling HTML pretty well. I haven't tracked down the problem on my macbook using Open Language Tools, but hope that I can get around with it. To be able to edit files offline could be important, even today, as wi-fi spots are still sparse out there. OmegaT also looks good, but for now, as I don't have much time to mess around with any tool just to make it work, I'm gonna use Google Translator Toolkit.<br />
<br />
<br />
<br />
OmegaT:<br />
<a href="http://www.omegat.org/">http://www.omegat.org/</a><br />
<br />
<br />
Sun Open Language Tools:<br />
<a href="https://open-language-tools.dev.java.net/">https://open-language-tools.dev.java.net/</a><br />
<br />
Google Translator Toolkit:<br />
<a href="http://translate.google.com/toolkit/">http://translate.google.com/toolkit/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-78624051395072737492010-04-29T09:42:00.000+09:002010-04-29T09:42:29.919+09:00Suuken (Math Exam) Pre 2ndJust found out I passed the pre-2nd Suuken. <br />
<br />
So I'm going to study for the 2nd level.<br />
<br />
Suuken (Math Exam) web site:<br />
http://www.suken.net/Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-8472136965817746852010-04-24T22:29:00.000+09:002010-04-24T22:29:57.970+09:00Trying iPhone programmingRestarted to work on iPhone programming... Today I'm reading a book on game programming and OpenGL. <br />
<br />
I'd like to implement a glossary viewer connected to multiple source of info. Other than that I'm interested in visual recognition application.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-51726343344361041782010-03-20T02:31:00.000+09:002010-03-20T02:31:04.015+09:00Fabric — Fabric v0.9 documentation<a href="http://docs.fabfile.org/0.9.0/">Fabric — Fabric v0.9 documentation</a><br />
<br />
Trying to see what fabric is for. <br />
<br />
It would be nice to be able to switch batch mode and user interaction mode dynamically. With expect/tk you have such a feature, but fabric doesn't offer one afaik.<br />
<br />
So far, fabric seems better at simple automated batch processing than expect/tk is, but expect has a wider variety of features. So I'll see if there are tasks suitable for fabric/python.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-61636580519174432982010-02-26T02:19:00.000+09:002010-02-26T02:19:10.828+09:00Twitterfeed TestSetting up my twitterfeed account...Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-47982367455242823522010-02-24T12:01:00.001+09:002010-02-24T12:48:12.968+09:00Debugging Emacs LispTried to use emacs lisp debugging feature in emacs.<br />
<br />
It's very simple. Just "edebug-defun" pointing to a function definition, and you can trace the function when evaluated.<br />
<br />
Call the function, then set breakpoints at S-expressions with "b", then "f" to run. When an S-expression with a breakpoint is evaluated, the execution pauses. "f" to continue again. "G" to ignore all the breakpoint and finish up the execution. "q" to exit and go to top level at once.<br />
<br />
There are more commands for this debugging feature, but for me these commands are enough to get started with debugging small elisp function. I'll look into other commands.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-80887372061032367202009-12-17T12:36:00.000+09:002009-12-17T12:36:09.792+09:00Books for Today (Japanese Books on Software Engineering)Stopped by at a books store and picked two books on software requirement engineering.<br />
<br />
1. 「要求」の基本原則, 岡大勝/三宅和之 (Oka Hiromasa, Miyake Kazuyuki, The Fundamental Rules of Requirement Engineering), ISBN 978-4-7741-4018-6<br />
<br />
2. 要求定義マニュアル, 神崎善司 (Zenji Kanzaki, Relationship Driven Requirement Analysis), ISBN 978-4-7980-2099-0<br />
<br />
The first one is a short book and seems suitable to grasp some key ideas quickly (more for thinking tips?).<br />
<br />
The other one seems more for step by step, hands on self-trainings.<br />
<br />
So I'll try to finish the first one tonite and work on the other one the following week.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-25950964128499148522009-11-14T22:32:00.000+09:002009-11-14T22:32:02.610+09:00Tried Go Language on Snow LeopardOn my Macbook (Mac OS X 10.6) I installed the Go language.<br />
<br />
Basically I just followed the instruction after I watched the video on the website:<br />
<br />
http://golang.org/<br />
<br />
Added the following environment variables to my .bashrc:<br />
export GOROOT=$HOME/go<br />
export GOARCH=386<br />
export GOOS=darwin<br />
<br />
Then sourced the .bashrc (just this time because I did't want to restart my shell):<br />
$ . ~/.bashrc<br />
<br />
<br />
Installed mercurial($ is my prompt):<br />
$ sudo easy_install mercurial<br />
<br />
I've already had python 2.5.4 installed.<br />
<br />
Then I tried to checkout source code from the Go language reposository:<br />
hg clone -r release https://go.googlecode.com/hg/ $GOROOT<br />
<br />
But then I got some error which seemed to come from my locale setup. For now I added the following to my .bashrc (not sure if that's the best workaround but anyway...):<br />
export LC_CTYPE=C<br />
<br />
Sourced .bashrc again, then retried the hg command to checkout the code.<br />
Now it worked!<br />
<br />
I've already had the latest XCode installed on my Macbook, so I already have required tools to build Go environment. So I just typed did as follows to build the Go system:<br />
<br />
$ cd $GOROOT/src<br />
$ ./all.bash<br />
<br />
Then after a few minutes I saw this after lines of build commands:<br />
<br />
--- cd ../test<br />
0 known bugs; 0 unexpected bugs<br />
<br />
Which means Go's ready here!<br />
<br />
So I write my first Go program hello.go:<br />
<br />
package main<br />
<br />
import "fmt"<br />
<br />
func main() {<br />
fmt.Printf("hello, 世界\n")<br />
fmt.Printf("123456789 * 123456789 = %d\n", 123456789 * 123456789)<br />
}<br />
<br />
<br />
Attempted to compile:<br />
$ 8g hello<br />
<br />
Which tells me:<br />
c0 a4<br />
b3 a6<br />
hello.go:6: illegal rune in string<br />
hello.go:6: illegal rune in string<br />
hello.go:7: syntax error near fmt<br />
<br />
Hmmm, multibyte string seems to cause some errors. So for now I change them to simpler "world" for now...:<br />
<br />
fmt.Printf("hello, world")<br />
<br />
What about the syntax error thing at line 7? By taking a look at the tutorial, I could see that I probably need a semicolon at the end of the line if I put more than one statement in a function (might not be correct to say so... oh, now I found there's some description on semicolons in "Effective Go" page). Anyway if I put at the end of line 6, the syntax error at 7 is gone, but instead this error comes along:<br />
<br />
hello.go:7: constant 15241578750190521 overflows int<br />
<br />
Sure, it's more than int can handle... So I look for some piece of info on variable types... OK, so there's 64-bit int (described at Printing section of Effective Go at least, and feels like there must be somewhere else too). Now I modify my source code at line 7:<br />
<br />
fmt.Printf("123456789 * 123456789 = %d\n", int64(123456789 * 123456789))<br />
<br />
Then my source code compiles successfully!<br />
$ 8g hello.go<br />
$ 8l hello.8<br />
<br />
So I run the linked binary (unless you specify with -o option your target will be named "8.out" with the 8l command):<br />
<br />
$ ./8.out<br />
<br />
hello, world<br />
123456789 * 123456789 = 15241578750190521<br />
<br />
<br />
Examined the result with the bc command (a calculator command usually installed on *nix based systems), and looks right.<br />
<br />
So my first Go code worked (except for the multibyte string issue) and I can start playing with the language.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-73292492039550913792009-11-08T00:16:00.000+09:002009-11-08T00:16:26.343+09:00eclipsecoder exceptioneclipsecoder plugin wasn't working with c++, so after searching for some info, I installed Mingw. Now it seems working but still an exception shows up.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-35861209735218746522009-11-05T11:55:00.000+09:002009-11-05T11:55:03.990+09:00Wi2 not as good as expected so farSo I tried Wi2 with a coupon code from Bic Camera. Although it says DOUTOR cafes are covered, there are actually few wi-fi enabled DOUTORs even in Tokyo. Very disappointing. Let's see if it gets any better... Besides, the Wi2 site says DOUTOR in Hakozaki has a wi-fi spot, but I haven't been able to confirm that. I just walked by and didn't bother walking in though. It might work inside.<br />
<br />
Today's self-study: I reviewed how adjacency matrices can be represented, and some about Floyd algorithm for finding shortest paths.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-3776443024512217105.post-75822377341422686522009-11-04T12:48:00.001+09:002009-11-04T12:49:04.247+09:00Wi-Fi Spots in Tokyo, and Self-StudyToday I went to Bic Camera, which sells PCs, TV sets, etc. It's an electric appliance store. They have cameras too, as the name says so. Anyway I found this ad about wi-fi service at 380 yen per month. To me it's bettern than Yodobashi Camera's wi-fi plan (similar chain of stores). Bic Camera's plan covers JR stations and DOUTOR (cafe here like Starbucks) plus Yodobashi's area (so far as I understand). I'm going to give it a try and see if it's any better. You find a lot of DOUTORs in Tokyo, which is a good point (don't really care about how their latte tastes for now).<br />
At Bic Camera I bought a portable heater from SANYO, which is rechargeable. Traditional, disposable ones are cheap and convenient, but if rechargeable ones work, I'm going to switch to them.<br />
<br />
About my learning stuff...<br />
Yesterday at a cafe, I read chapter 6 of "Programming Principles and Practice Using C++."<br />
Up to chapter 5, I just skimmed through, as the contents seemed fairly basic. I might go back to exercises in those chapters later.<br />
In chapter 6, creating a calculator program is given as a topic. Although it's still introductory chapter, several techniques like tokenizing and parsing are explained. <br />
I brought my mac book (which I had repaired yesterday) and implemented a calculator program following the text, up to 6.3.1. <br />
Today I got back to dynamic programming. I finished up studying binomial coefficients and its implementation, and started to work on Floyd's algorithm, to find shortest edges for any given pair of vertices in a graph.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3776443024512217105.post-28044378453641685992009-10-29T12:26:00.002+09:002009-10-29T12:26:35.310+09:00Got KindleI received my Kindle today. Just needed to plug it for power supply, and it just works. Cool<br />
<br />
There are two things I'm not used to it is the number of buttons. Lately I use iPhone a lot, so it feels like there are way too many hardware buttons on Kindle. The other thing is how you purchase a book on Kindle. It seems that your personal info is set up on your Kindle (on shipping?) and you don't have to type your password or anything. No warning about it on the screen. You can cancel your purchase if you accidentally buy a book, and the content will be removed later if you do so. <br />
<br />
I should take a look at the cancellation policy in detail. I wonder if someone bought a book on my Kindle without intention, opened it, and cancellation would be valid or invalid.<br />
<br />
<br />
I reviewed little basic about imaginary numbers. Tomorrow I need to spend much more time to study math for my exam this weekend.Unknownnoreply@blogger.com0