コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2014年2月4日 >>> 2014年1月22日
link もっと後

2014年2月4日

節分といえば落花生

節分から1日ずれちゃいましたが、節分の話でも。

北海道では節分に殻つきの落花生を撒きます。「鬼は外ー」は「雪(※)に向かって落花生を投げる」という意味でした。

もちろん店には大豆も(食べる用なのか?)売っていますが、撒くのは必ず落花生です。

しかし、関東、関西でその話をすると、大抵の人に「なんで落花生?大豆じゃないの?」と驚かれます。「うちもそうだよ」って言われたことはない…はず…たぶん。

そういや、なんで大豆or落花生なのだろう。小豆じゃダメなのかねえ??

(※)この時期の北海道はほぼ確実に雪が積もっているから、地面ではなく雪に向かって投げることになります。

編集者:すずき(2014/02/05 02:21)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年1月29日

ノートPCとSeaMonkey

目次: ブラウザー/メーラー

家のノートPCでSeaMonkeyを使っていると、画像が一部表示されないサイトがあります。

色んなサイトが該当しますが、例えば、らばQだと何の嫌がらせなのか、記事中の画像「だけ」表示されません。その一方で、背景や、らばQのバナーは出ますので、サイトやネットワークの問題ではなさそうです。

またIEやChromeで見ると画像が表示されますので、ファイアウォールなどに遮断されているわけでもなさそうですし、ノートPCとは別のデスクトップPC(Windows 7 64bit版)のSeaMonkeyで見ても画像が表示されますから、SeaMonkey自体の問題でもなさそうです。

SeaMonkeyのProfile Managerを起動(引数に -pを付けて起動する)して、新しくProfileを作ると画像が表示されたので、どうやらノートPCのSeaMonkeyのProfileに原因がありそうです。

Profileを直そう

新規Profileから設定をやり直すのも面倒くさいし、今まで使っていたProfileを何とかしようとして、キャッシュクリアとか、Cookie全消しとか、色々やってみたものの、一向に改善されません。困りました。

もうProfileがぶっ壊れてもいいや、という覚悟でProfileのディレクトリから適当に「blocklist.xml」ファイルと「adblockplus」「safebrowsing」ディレクトリを消してみたら、見事に復活しました。うーん、わけわからんな…。

編集者:すずき(2025/06/08 11:53)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年1月28日

嬉しいこと、嫌なこと

言われると嬉しいこと、嫌なことは人によって様々かと思います。

僕は、下に行くほど、やる気が減ります。

  • 能動「こんなのできた!」
  • 受動「何したらいい?」
  • 褒め「いいね!」
  • 提案「こんな風に良くしよう」
  • 批判「どうしてこうなった?」
  • 催促「できた?」
  • 無視「わからない」「知らない」「小麦粉か何かだ」
  • 評論「これだから〜はダメ」
  • 暴力「死んでもやれ」「(机バンバン)」

評論家は嫌い

内容が提案や批判と似ていても、
「あーあ、わかってないなー。ビシッと俺様が正論でシメてやらんとダメだな!」
的な言い放し無責任感が備わると評論、…というイメージで使ってます。

評論されると、内容はそれなりでも一番やる気が萎えます。なんでかわからんけど。

メモ: 技術系?の話はFacebookから転記しておくことにした。

編集者:すずき(2014/03/17 00:42)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年1月26日

Scalaの中間記法の優先度

ScalaとJavaでシフト演算子の優先度が違うのは、決して嫌がらせではなくて「Scalaの優先度は、メソッド名の先頭の1文字で決まる」ルールから来ているようです。

素人目線だと2文字見れば良かったんじゃ…?と思いますが、そうすると何か大変なことがあったのでしょう。たぶん。

それはさておき、Scalaで中間記法を使ったときの優先度は、低い順から、


(all letters) 注: アルファベットとか
|
^
&
< >
= !
:
+ -
* / %
(all other special characters) 注: ~ とか ? とか

注: Scala言語仕様Version 2.8の6.12.3 Infix Operationsより

となっています。シフト(<<)やビット演算(& |)は、比較演算(== !=)よりも「優先度が低い」はずです。

普通の & と =
scala> 1 & 2 == 5
<console>:8: error: overloaded method value & with alternatives:
  (x: Long)Long <and>
  (x: Int)Int <and>
  (x: Char)Int <and>
  (x: Short)Int <and>
  (x: Byte)Int
 cannot be applied to (Boolean)
              1 & 2 == 5
                ^


(& が優先なら)

scala> (1 & 2) == 5
res40: Boolean = false

(== が優先なら、こっちが期待値)

scala> 1 & (2 == 5)
<console>:8: error: overloaded method value & with alternatives:
  (x: Long)Long <and>
  (x: Int)Int <and>
  (x: Char)Int <and>
  (x: Short)Int <and>
  (x: Byte)Int
 cannot be applied to (Boolean)
              1 & (2 == 5)
                ^

ビット演算の方が優先度が低いので、上記の例のように「1 & (2 == false)」と解釈されて、型エラーになります。

謎の < と =
scala> 1 < 2 == false
res41: Boolean = false


(< が優先なら)

scala> (1 < 2) == false
res42: Boolean = false

(== が優先なら、こっちが期待値)

scala> 1 < (2 == false)
<console>:8: error: overloaded method value < with alternatives:
  (x: Double)Boolean <and>
  (x: Float)Boolean <and>
  (x: Long)Boolean <and>
  (x: Int)Boolean <and>
  (x: Char)Boolean <and>
  (x: Short)Boolean <and>
  (x: Byte)Boolean
 cannot be applied to (Boolean)
              1 < (2 == false)
                ^

比較演算の方が優先度が低いので、「1 < (2 == false)」と解釈され、型エラーになるかと思ったら、なりません。意味がわかりません。

編集者:すずき(2014/01/26 03:48)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年1月25日

演算子はメソッドだ

Scalaの特徴の1つは引数が1つのメソッドを演算子のように呼び出せることです(Rubyも同じですね)。背景には、基本型を廃して「全てオブジェクト」とする、言語の文法から演算子を廃する、という設計哲学があるようです。

しかし演算子の優先順位まで消滅して1 + 2 * 3 = 9になってしまうと(全て左結合させると ((1 + 2) * 3) になる)非常に混乱しますので、コンパイラが特殊なメソッド名だけ結合の優先度を変更します。

特殊なメソッド名を付けると優先度が変わる

class MyInt(v: Int) {
  val i = v

  def +(a: MyInt): MyInt = {
    new MyInt(i + a.i)
  }

  def *(a: MyInt): MyInt = {
    new MyInt(i * a.i)
  }

  def plus(a: MyInt): MyInt = {
    new MyInt(i + a.i)
  }

  def mult(a: MyInt): MyInt = {
    new MyInt(i * a.i)
  }
}

val a = new MyInt(1)
val b = new MyInt(2)
val c = new MyInt(3)

val r1 = a + b * c
val r2 = a plus b mult c

println("r1:" + r1.i)
println("r2:" + r2.i)
r1:7
r2:9

演算子もメソッドの一種ではありますが、上記のように旧来の演算子と同名のメソッドはやはり、優先度において特別です。単純に別名のメソッドで置き換えると、結合順序が狂います。

こうまでして文法上から演算子を廃したのはなぜだろう?誰かにメリットがあるはずなのだけど、何が嬉しいのかわからん…。

Scalaのシフト演算と比較

優先度と言えばScalaは優先度付けのルールがJavaと違います。例えば、Javaはシフト演算が比較より優先ですが、Scalaは優先度が同じです。

シフトと比較が同一優先度
(JavaならOK、ScalaではNG)

scala> 1 < 1 << 2
<console>:8: error: value << is not a member of Boolean
              1 < 1 << 2
                    ^

(本来やりたいこと)

scala> 1 < (1 << 2)
res1: Boolean = true

上記の例のように、Scalaで「(1) < (1 << 2)」のつもりで「1 < 1 << 2」と書くと、左から結合されて「(1 < 1) << 2」になって型エラー(※)が起き、ちょっと不思議な気持ちになります。

あえてJavaと違う優先度にしたのはなぜだ…。

(※)1 < 1はBooleanを返し、Booleanクラスは左シフトメソッド << を定義していないため、エラーになる。

編集者:すずき(2014/01/25 15:08)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年1月24日

Scalaでバイナリ解析2

前回の続き(2014年1月6日の日記参照)です。

おさらいすると、Booleanのリストをビット列に見立てて、任意のビット数を上位ビット〜下位ビットにOR演算し、Intのリストとして返すという処理をします。

ビット列 (0, 1, 0, 0, 1, 1, 0, 0, 0) に対して、(1ビット取る, 3ビット取る, 5ビット取る) という処理を行って、結果として (0, 4, 24) が返るイメージです。

やりたいこと

(入力1)
List(
  true, false, false, true, true, false, true, false,
  true, true, true, false, true, false, true, true
)

(入力2)
List(1, 2, 3, 4, 5, 6)

(出力)
List(1, 0, 6, 11, 21)

ビット列に相当するリストが入力1、何ビットずつまとめるか、という別のリストが入力2になります。

前回は特に触れませんでしたが、入力1と入力2の合計が異なるときの扱いについては悩みどころです。余ったリストを返すのが一番親切かもしれませんが、出力が3つになってしまいます…。

今回は、一番楽に(入力1>入力2)なら例外スロー、(入力1<入力2)なら切り捨て、としています。

前回の反省

前回使ったmapでは(入力:出力)の要素数を(1:1)にする必要があります。そのため(n:1)にしたければ、入力はあるが、出力はない「穴が空いた」状態を表現する必要が生じます。

Option型を使って、値はSome(値), 穴はNoneとし、最後にflattenを呼んでNoneを全部捨てましたが、あまり効率的とは思えません。

foldLeftはどうか?

入出力の要素数が一致していなくても構わないのがfoldLeftです。

foldLeftの場合

object BooleanToInt {
  def apply(g: List[Int]): ((List[Int], Boolean) => List[Int]) = {
    val o = new BooleanToInt(g)
    o.folder
  }
}

class BooleanToInt(g: List[Int]) {
  private var v = 0
  private var p = 0
  private var mp = g(0)
  private var gg = g.drop(1)

  def folder(a: List[Int], b: Boolean): List[Int] = {
    v <<= 1
    if (b) v |= 1
    p += 1

    if (p >= mp) {
      val result = a :+ v
      v = 0
      p = 0
      mp = gg(0)
      gg = gg.drop(1)
      result
    } else {
      a
    }
  }
}


val a = List(
  true, false, true, false,
  true, true, false, false,
  true, false, false, true,
  false, true, true, false
)

val b = List(1, 2, 3, 4, 5, 6)

val c = a.foldLeft(List[Int]())(BooleanToInt(b))

println(c)

コードがScala素人くさいのはさておき、SomeとかNoneが出てこない分、mapより良さそうです。

foldLeftの別形式

val c = (List[Int]() /: a)(BooleanToInt(b))

初期値のリストが長いときはfoldLeftを /: で書く手もあります。個人的には右側が被演算子になると読みづらいし、使うことはないですね…。

編集者:すずき(2014/01/25 12:57)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2014年2月4日 >>> 2014年1月22日
link もっと後

管理用メニュー

link 記事を新規作成

<2014>
<<<02>>>
------1
2345678
9101112131415
16171819202122
232425262728-

最近のコメント5件

  • link 26年1月23日
    すずきさん (01/29 09:48)
    「おおー、そんな昔からなんですね。歴史感じ...」
  • link 26年1月23日
    hdkさん (01/27 19:53)
    「#! はUNIX v8からだったってWi...」
  • link 24年12月9日
    すずきさん (01/18 15:45)
    「Thank you for your i...」
  • link 24年12月9日
    Up2Uさん (01/15 12:57)
    「Hi I also find the p...」
  • link 25年12月18日
    すずきさん (12/23 23:51)
    「良く見たらksys_read()でfil...」

最近の記事20件

  • link 23年4月10日
    すずき (01/27 02:48)
    「[Linux - まとめリンク] 目次: Linuxカーネル、ドライバ関連。Linux kernel 2.4 for ARMが...」
  • link 26年1月23日
    すずき (01/27 02:47)
    「[shebangの役割] 目次: Linuxスクリプトの先頭(例えばシェルスクリプトなど)に書く"#!〜"から始まるおまじない...」
  • link 26年1月21日
    すずき (01/22 02:55)
    「[日本のテレビメーカーの衰退] ソニーがテレビ事業を分離するニュース(ソニーはなぜ、テレビ事業を「分離」するのか - 中国TC...」
  • link 25年12月26日
    すずき (12/30 14:01)
    「[Linuxのjournal操作メモ] 目次: Linux最近のLinuxディストリビューションはsystemdを採用している...」
  • link 25年12月22日
    すずき (12/28 23:39)
    「[ゲームを買ったら遊びましょう3] 目次: ゲーム前回の振り返り(2024年10月20日の日記参照)から1年経ちました。所持し...」
  • link 21年12月28日
    すずき (12/25 00:40)
    「[ゲーム - まとめリンク] 目次: ゲームNintendo DSを買ったパネルでポンDS最近の朝はパネポンDS聖剣伝説DSチ...」
  • link 08年3月25日
    すずき (12/24 22:16)
    「[シムシティDS2クリア] 目次: ゲームシムシティDS2のチャレンジモード「現代 温暖化」編をクリアして、スタッフロールを拝...」
  • link 25年12月10日
    すずき (12/24 01:02)
    「[LinuxからBIOS/UEFIの設定を取得する] 目次: Linux設定によって何か動作を変えたい、PC再起動するのが嫌な...」
  • link 25年12月16日
    すずき (12/24 00:47)
    「[initramfsの更新方法] 目次: Linuxいつも忘れてググっている気がするのでメモしておきます。Linuxカーネルを...」
  • link 16年3月2日
    すずき (12/24 00:37)
    「[Device Treeの謎] 目次: LinuxDevice Treeを使ってARM Linuxを起動したとき、どうやってコ...」
  • link 25年12月19日
    すずき (12/21 00:11)
    「[preadとlseek + readは何が違う?] 目次: Linux前回(2025年12月18日の日記参照)はpreadと...」
  • link 25年12月8日
    すずき (12/20 21:48)
    「[LXPanelのボタン入れ替えが使えないときの直し方] 目次: LinuxLXDEにはLXPanelといってタスクバーやスタ...」
  • link 25年12月18日
    すずき (12/20 19:11)
    「[preadとlseek + readは違います] 目次: Linux知っている人には「なんだそんなことか」で終わりな話なんで...」
  • link 25年12月11日
    すずき (12/19 23:59)
    「[Ubuntuのカーネルパニック画面] 目次: LinuxUbuntu 24.04 LTSで起動中にカーネルパニックを起こすと...」
  • link 22年4月13日
    すずき (12/19 10:49)
    「[C言語とlibc - まとめリンク] 目次: C言語とlibcC言語について。C++言語もたまに。プログラムの落とし穴、演算...」
  • link 16年1月25日
    すずき (12/19 10:48)
    「[紆余曲折だったC++11のoverrideとfinal] 目次: C言語とlibc最近cpprefjp(リンクはこちら)のコ...」
  • link 16年1月8日
    すずき (12/19 10:48)
    「[C, C++の可変引数マクロでのつまづきとGNU拡張構文] 目次: C言語とlibcC99, C++11の可変引数マクロでは...」
  • link 13年8月11日
    すずき (12/19 10:47)
    「[C++とPythonのクラスと動的型付け] 目次: C言語とlibc初めて触れたオブジェクト指向言語がC++で、その次がJa...」
  • link 23年9月11日
    すずき (12/19 10:42)
    「[Windows - まとめリンク] 目次: WindowsWindows XPのブリッジ機能colinuxとWindowsの...」
  • link 08年9月10日
    すずき (12/19 10:42)
    「[Windows PCの容量が足りません] 目次: Windows最近Windowsの入っているパーティション(Cドライブ)の...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 2026年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 01/29 09:48