Panasonic の Let's note でCD/DVD起動

Ubuntu などのLinuxをCDから使おうしたけど、CD からブートできなくて少し手間取った。BIOS の設定で Boot Device Priority を設定したけどうまくイカず.... 実はそれだけではだめなのだ! BIOS の「メイン」項目から「DVD ドライブ電源」をオンに設定*1したら、CD からブートできる。

あまりCD使わないから電源ランプついてないことに気づかなかった ... 。 

*1:バッテリの持ち時間を考慮して、普段はオフになってる

golang構造体にはデフォルト変数の機能がない

type test1 struct {

a int =1
b float32 =1.0

}

のようにデフォルトで値を初期化設定をする機能がない

このような初期化を行いたい場合は、構造体の初期化をするための関数を用意することで対応できるため、実用上、特段こまらないのだが、なぜこのような基本的な機能がないのだろう。

コンストラクタ再帰的なコンストラクタなどのc++,javaのめんどくさい仕様を 省いてシンプルな言語仕様にするためだろうか? どうやら golangの構造体はは他の言語のclassの設計思想とは大きくことなり コンストラクタ、デストラクタ、仮想メソッドetc などOOPを複雑なものにしている概念を 根こそぎ省略したシンプルな言語のようだ

ちなみに、デフォルトでは0の値で初期化される*1

package main


import (
"fmt"
)

type test1 struct {
a int
b float32
}

func main() {
var t1=test1{}
fmt.Printf("%d \n",t1.a)
fmt.Printf("%f",t1.b)
}

*1:golangでは変数が明示的に値を初期化しなかった場合,ゼロ値というデフォルト値で初期化される。ゼロ値は型ごとに決まっており,たとえばintのゼロ値は0である。

Elemental 関数 :Fortran

エレメンタル関数(Elemental function) について述べる。

Elemental functionは、 スカラー値を引数にして、スカラー値を返却するスカラー演算子として定義されるが 配列も実際の引数のように扱うことができる関数のことをいう。 すなわち、以下のようないわゆる"Elemental-wise" operation を可能にする

x = [1 、2 、3]

y = [5、 6、 2] w = x+y

result :: w =6 8 5

このような関数は必ずside effect のないpure functionでなくてはならない。 例として以下のコードをあげる

module test
  implicit none
contains
  elemental real function power(x,n)
    real, intent(in) :: x
    integer ,intent(in) ::n 
    power = x**n
  end function
end module

program test_prog
  use test
  implicit none

  real, dimension(3) :: x = (/ 1.0, 2.0, 3.0 /)
  integer::n=3
  print *, power(x,n)
end program

Pythonでのクラスメソッド・静的メソッド

Pythonでのクラスメソッド・静的メソッド

クラスのもつメンバ関数として、通常のインスタンスメソッド (instance methods)*1以外に静的メソッドとクラスメソッドが存在する

静的メソッド

静的メソッドは要は引数にselfをもたないクラスのメンバ関数のこと。よってインスタンス変数にはアクセスできない。 これを明示的に表現するために @staticmethodというデコレータが存在する

class A(object):
    ...
    @staticmethod
    def my_static_method():
        print 'I do not access to  A'

クラスメソッド

これは継承(inheritance)を使うときに使用する*2

class A:

    @classmethod
    def introduce(cls):
        print("Hello, I am %s!" %cls)
class SubA(A):
    pass

SubA.introduce()
# Hello, I am __main__.SubA!

引数のclsはなんらかのクラスであり、インスタンスではない。よってこちらもインスタンス変数*3にはアクセスできない。 これが有用なのは継承を行う場合だ。上の例では、継承時のクラス変数の値が子のクラス変数の値となっている点に注意。 またここでclass methodの第一引数のclsはkeywordではなく単なる慣習であることに注意。 この慣習は class methodでは第一引数は実体をもったインスタンス(self)ではなく、 クラスオブジェクト自身であることを明示的に表現するために用いられる.

gogochephy.hatenablog.com

*1: 関数の第一引数に self を必ずもつメソッド

*2:c++のoverloadingと同等の機能を実現できる

*3: initに定義された変数

markdown(github css)+数式をvimで編集するときに便利な設定

Linux/Unixにおいてmarkdown(github css)+数式をvimで編集するときに便利な設定.

Pandocを使うのは数式や派生markdown形式にできるだけ対応するため。 Appendixとして、自動更新の方法も述べる。

以下のものをそれぞれダウンロード、インストールする。

 準備

github css

Github Markdown CSS - for Markdown Editor Preview Github Markdown CSS - for Markdown Editor Preview

Vim Markdown

plasticboy/vim-markdown · GitHub plasticboy/vim-markdown · GitHub

markdownのハイライト,折りたたみ

Pandoc

あるマークアップ形式(HTML , Latex , Markdown reStructuredText )で書かれた文書を別の形式へ変換する.

vim-quickrun

https://github.com/thinca/vim-quickrun

最後にvimrc設定

vimrc には

let g:quickrun_config = {
\ "markdown" : {
\ "outputter": "browser", 
\ "args" : "--mathjax -s -c /path/to/your/cssfile/github.css", 
\ }, 
\}

Appendix : 自動更新

1 . html tag

markdown file に

<meta http-equiv="refresh" content="3" >

を書いておく

2 . script で更新ファイルの監視

Watch for file changes and refresh your browser automatically - BrettTerpstra.com

pythonにswitch文がない経緯・理由

一連の if ... elif ... elif ... は、他の言語における switch 文や case 文の代用となります。

4. その他の制御フローツール — Python 3.4.3 ドキュメント より

デザインと歴史 FAQ — Python 3.4.3 ドキュメント

 

結局公式ドキュメントの説明のとおり、if... elif... elif... else の繰り返しで簡単に同じことができるため導入する必要がないとのこと。

 

また以下のような辞書式を利用することでも同じ結果が得られる。

 


#!usr/bin/python
import sys
N=int(sys.argv[1])
switch_dictionary = {
 1 : 'switch',
 2 : 'if ... elif ... elif ...',
 3 : 'dictionary',
}
print switch_dictionary[N]


 

Pythonでのクラス属性とインスタンス属性

 本稿ではクラス属性とインスタンス属性の違いについてのべ、クラス属性がどのような場合に有効かを紹介する。


class A(object):
 val = 5 #すべてのインスタンスに共有されるクラス変数
 def __init__(self):


class B(object):
 def __init__(self, val=5):
 self.val= val # 各インスタンスにユニークなインスタンス変数



上のようなコードでclass A,Bでどう違うのか?

まず違いとしてselfを使わずにインスタンス変数(メンバ変数)が定義できるという違いに気づく。

Pythonのクラスとクラスのインスタンスはそれぞれ、別々の区別されたnamespaceをもつ。ただし、注意すべき点は、インスタンスのnamespaceのほうがclassのnamespaceよりも優先されるということだ。すなわち両方に同じ名前の属性(attribute)が存在した場合, はじめにインスタンスのnamespaceから適合するものをチェックし存在したらインスタンスのものを返却する。存在しなければクラスのものを探しに行くという手順を踏む。

 

class変数の性質

class変数の性質について述べよう。class変数は値を途中で代入することができる。ただしこの場合、単にインスタンスごとに値が変更される

class A(object):
 val = 5
 def __init__(self):

a=A()
print a.val
>5
a.val=0
print a.val
> 0
a2=A()
print a2.val
>5

 上のような挙動は以下のclass 属性の挙動をみれば納得できる

class C(object):
 class_val = 5
 def __init__(self,input):
    self.var=input

c=C(1)
c.__dict__
>{'var': 2}
#class変数は値を途中で代入
c.class_val=0
>{'class_val': 0, 'var': 2}

上の結果から明らかなように、クラス変数を変更したとき、namespaceレベルでは、c.__dict__に(すなわちクラスのインスタンスのnamespaceに)class_val attributeを追加している!!さらに、すでに述べたクラスのnamespaceに対する、インスタンスのnamespaceの優位性から、インスタンスのnamespaceの結果が返却される.

一方他のインスタンス(class_valの値を変更してないインスタンス)では、上のような追加は行われないので、素直にクラスのattribuiteが参照される。

 

いつクラス属性を使うべきか??

上のようにクラス属性の挙動は少し複雑なものになっているが、果たして有用な場面はあるのだろうか??

以下の場合では有用かもしれない。 

1.速度

class namespaceはクラスの定義が行われた時に一度きり作られるのでその分少しだけ早いです。

しかしこの程度のperformanceの違いが気になるならそもそもpythonを使うべきではないのかもしれません

2.クラスでしか使わない定数

 c++static member. 

3.各クラスのインスタンスごとに設定すると便利かもしれないt(典型的な)デフォルト値

例えばリストをメンバ変数としてもつとして、そのリストの上限を決める値。

4.インスタンス間で共通のデータ

 一つのクラスに対して、インスタンスをいくつも作った時、各インスタンスで生成された情報の共通のデータを持っておきたい場合など。例として以下のようなもの。

class Person(object):
AllInstance = []

def __init__(self, name):
self.name = name
Person.AllInstance.append(self)




p1=Person("Kim")
p2=Person("Chan")
Person.AllInstance
> [<__main__.Person at 0x7f6409586810>, <__main__.Person at 0x7f64095865d0>]