ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2.07.2014

wordpress+google analyticsでファイルダウンロード数のカウント

せっかくツールを作っているので、どのぐらいの方にダウンロードいただいているのかは気になるところだ。 

というわけで、google analyticsのevent tracking機能を使用し、ダウンロード数のカウントをしようと色々ググってみるも、どうも現行のバージョンで動作するものがパッと見つからない。 

というわけで、マニュアルを読みつつ適用できたので、方法を記しておこうと思う。   

まず、wordpressのヘッダファイルを編集する。 

</head>のタグを検索し、その寸前に以下のコードを投入する。
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
  
このスクリプトの4行目のUA-xx部分には、google analyticsで使用しているIDを投入するので、それぞれユニークな値が入る。   

続いて、トラッキングしたいリンクの書き方を少し変更する必要がある。   例えば、当サイトであれば、
<a href="/file/flash_subnet_for_win.zip>Flash Subnet for Win</a>
  

のリンクがファイルのダウンロードリンクになるわけだが、こちらを以下の通り編集する。
<a onclick="_gaq.push(['_trackEvent','Files','Download','Flash Subnet for Win']);" href="/file/flash_subnet_for_win.zip">Flash Subnet for Win</a>
  
赤太字にしている部分については、それぞれ環境に応じて好きな値を投入すればいいと思う。 

各パラメータのイメージは以下の通り。左からカテゴリ、アクション、ラベルの並び。

  スクリーンショット 2014-01-14 21.31.52
  スクリーンショット 2014-01-14 21.32.09
  スクリーンショット 2014-01-14 21.32.17



2.06.2014

【Python】Ciscoルータへのtelnet

風邪で一日中ダウンしていて、何も手につかない状態だったが、そういう時に限っていろいろと思いついてしまって結局ベッドでパチパチキーボードを叩いていた。 

とは言っても、頭をフル回転させてコードを書く気力はなく、自宅のciscoルータに対して、telnet試験をひたすら繰り返していた。 

今まであまり気にしていなかったが、pythonにおけるtelnetlibで気づいたことがあったのでメモしておく。 

telnetlibではtelnetの戻り値を指定することのできるread_until関数が用意されているが、ciscoルータなどのコマンド入力をシーケンシャルに進めて行く場合、このread_untilで"#"などを待ち、次のステップに進むなどの書き方がスムーズだ。 

例えば、先日書き直しをしたLoggetのciscoルータアクセス部分のコードは以下のようなイメージである。


class RemoteAccess:
    "remote access class"
    def __init__(self,address,login_pass,login_id,en_pass):
        self.address = address
        self.login_pass = login_pass
        self.login_id = login_id
        self.en_pass = en_pass

    def TnetNoIdCisco(self):
        "telnet without login ID"
        now = datetime.datetime.now()
        nowstr = str(now.strftime("%Y%m%d-%H%M(%S)"))
        logname = nowstr + '_' + self.address + '_log.txt'
        tn = telnetlib.Telnet(self.address, 23, 5)
        log = open(logname, 'wb')
        tn.read_until('assword:',2)
        tn.write(self.login_pass + '\r\n')
        tn.read_until('>',2)
        tn.write('en' + '\r\n')
        tn.read_until('assword:',2)
        tn.write(self.en_pass + '\r\n')
        tn.read_until('#',2)        
        tn.write('ter len 0' + '\r\n')
        ccom = open('cisco_show.txt','r')
        ccoms = ccom.readline().replace(('\n'or'\r'),'\r\n')
        ccli = ccoms.rstrip('\n')
        while ccli:
            tn.write(ccli.encode('ascii') + '\r\n')
            ccoms = ccom.readline().replace(('\n'or'\r'),'\r\n')
            ccli = ccoms.rstrip('\r\n')
        tn.write('exit' + '\r\n')
        output = tn.read_all()
        log.write(output)
        log.close()

贅肉がつきまくっていてちょっと恥ずかしいコードではあるものの、 ポイントはそこではなく、read_unitl関数の引数であるtimeout値である。


tn.read_until("#",2)
  

timeout値は必須の引数ではなく、空欄でも動作するため、これまでは特に指定していなかった。

しかし、実験を繰り返して行くうちにtimeoutを指定しないと複雑な処理に分岐させていった時に、処理がハングしてしまって、原因不明のフリーズが起きるときがあった。 

色々とデバッグしつつパラメータを入れていったところ、read_until関数にtimeoutの引数を指定すれば、フリーズすることがなくなった。

2.05.2014

【Python】Flash Subnet For Winの公開

Windows版のIP計算機、Flash Subnetのベータ版をすることにした。

 flash

 IP計算機の公開などと言っても非常に今更感があるが、軽く、使いやすくするにはどうすればいいを重視して作成した。

使い難い、こういう機能があるといい、などのフィードバックは非常にありがたいが、何よりも使ってもらえるのがありがたい。

使い方は単純明快である。

  flash1
IPアドレス欄にIPアドレスを投入する。
Subnet Mask or Prefix欄に、サブネットマスクかプリフィクスのどちらかを入力する。
そしてCalcボタンを押すと結果がOutputに表示される。   

これまでのIP計算機と大きく違う点としてお勧めしたいのは2点ある。 

1. Subnet maskやprefixの分類を気にせず投入できること

2. インプットボックスがオクテットごとに分かれていないこと 

1について、大体のIP計算機はサブネットマスクかプリフィクスのどちらかしか入力できない。片方しかサポートしてくれないのは非常にストレスだ。なぜなら、IP計算機が必要なタイミングで必ずプリフィクスを入力するとは限らないし、必ずサブネットマスクとも限らない。

2について、大体の計算機はインプットボックスがオクテットごとに分離されている。
それのせいで、資料やテキストからcopy &pasteができず、アドレスを入力するたびにTabでボックスを移動するなど、非常にストレスが大きい。

Flash Subnetではその二つのストレスを取り去り、完全無料・商用利用可能のIP計算フリーソフトとして公開した。

 ダウンロードはダウンロードページから。

2.04.2014

【iOS】Apple Developer Program登録ペンディング

結論:Apple Developer Programに登録するときは、登録情報をすべて英語にしておく必要がある。

Apple Developer Programへの登録がペンディングになっていた。
スクリーンショットはとっていないが、支払い情報が確認できないだかなんだかの状態になって、ペンディングされていたようだ。

mail you shortlyとか書いてあったが、一向に連絡がないため、こちらからサポートに問い合わせを実施。

しばらくして非常に丁寧な返信で、Apple IDの登録名と住所をすべてアルファベット表記とするよう依頼があった。

登録名を変更し、改めてそのフィードバックを返したところ、正常に支払いが完了し、無事登録が完了した。

この問い合わせは日本語でも良いようで、知らなかったので英語と日本語両方書いてsubmitしたが、日本語での返信だった。

2.03.2014

【Objective-c】アプリのlaunchimage用画像

前から構想は練ってきていたが、とりあえずポインタを理解した事で、objective-cの理解が圧倒的に深まり、オリジナルアプリ作りもサクサク進んだ。

まだ、クラス・オブジェクトの理解が怪しい部分があるけれど、とりあえずは試作の完成に至ったため、Developer Programに登録した。

なんやかんやで一番困ったのはアイコンとDefault画面の設定だった。

わざとやってんだろ・・・と言いたくなる勢いでどのサイズのアイコンを用意していいのかわからないという意地悪ぶり。

結局はこちらのDevelopers IOさんのページを参考にさせて頂き、作成することができた。

無事アイコンを作成して、ビルドしようとすると、今度はlaunchimageがないとかなんとか言い始める始末。
色々調べると、真っ黒画面で良さそうなので、適当に作ってみた。

iOS5, 6, 7のすべてをサポートしようとすると、どうやら3種の解像度が必要らしい。
というのが以下の3つ。

 Default.png(320*480)
 Default

 Default@2x.png(640*960)
 Default@2x

Default-568h@2x.png(640*1136)
 Default-568h@2x

2.02.2014

【Objective-C】勉強のときにわかりやすい書き換え

一通りのC言語学習を終えたので、改めてobjective-cに挑むことに。

objective-cとCの決定的な違いはオブジェクト指向に伴うクラスの概念追加と、クッソ憶えにくいヘンテコ名の関数なんだけれど、後者は諦めて憶えるしかないとして、前者は少しわかりやすい書き換えを思いついた(と言っても大した事じゃないけど・・・)。


例えば、
NSDate *today = [NSDate date];
NSLog(@"今日の日付は%@です" , today);

は、今日の日付を表示するコードだが、これは変数宣言+初期化+メッセージが合体しているので、初心者の僕の頭では解読が難しい。

これを下記のように書き換えてあげれば、教科書の解読が一段としやすくなる。
NSDate *today;
today = [NSDate date];
NSLog(@"今日の日付は%@です", today);

どちらも実行結果は同じであるが、変数宣言と代入を分けたことによって、格段にコードがわかりやすくなった(少なくとも僕には)。 

これまで、簡略化表記に混乱していた僕としては、一瞬で理解度が増した書き換えであった。


2.01.2014

【C】ポインタについての今の理解

色々本を読んでいると、ポインタがイミフで飛ばしがちだった。 

自分なりに理解を深めて行った結果、結局ポインタというのは、メモリの効率利用のための手法であるのではないかと思っている。

 ポインタにはポインタ型、ポインタ変数、ポインタ値というのがあって、他の型とくっついて稼働する。 

変数宣言したときに確保したメモリ領域を効率的に使い回しするためには、そのアドレスについてどこかに控えておいた方が効率がいい。

いちいちアドレスを調べてからその値を取得してそのアドレスに代入という形を取るよりも、ポインタで示しといて、後からポインタを使って書き換えて行く方が便利がいいし、必要以上に変数宣言する必要もなくなってくる。

結果物理領域の使用効率性も高まるし、コンピュータにとってもわかりやすいプログラムになると言う事だと思われる。 

つまり、というか、真理として、&でアドレス調べて*で使う。これだけでいいわけだ。 

とまあ、ここまでが昨日ポインタについて頑張って勉強してみた時点の理解。今後学習を続けて行って、更なる理解が深まる自分に期待したい。  
//ポインタ変数pにiのアドレスを代入する例

int main(void){

    int *p, a; //ポインタ変数pと変数aを宣言
    p=&a; //変数aのアドレスを&で取得して、ポインタ変数pに代入
    printf("p=%p\n",p); //ポインタ変数pのアドレスを%pで取得
    printf("a=%p\n",&a); //変数aのアドレスを&で指定し、%pで取得
}
//結果
//p=0x7fff5fbff8bc
//a=0x7fff5fbff8bc

1.31.2014

【C】C言語を基礎から学ぶことにした

objective-cに何度か挑戦しては挫折。少しは書けるpythonに逃げては新しいコードを書いて自己満足に浸る日々を過ごすのに嫌気がさしたので、やはり最初からC言語を学ぶ事にした。

とりあえずxcodeがCのコンパイラとして動いてくれるので、開発環境はobjective-cと変更することなく使える。

 やり方は簡単で、新しいプロジェクトの作成時に、OSX applicationからcommand lineを選択。

xcodeでc
xcodeでC言語

typeからCを選んであげるだけ。
見慣れたフォーマットで開発ができるので、非常に便利。

Macだと、苦Cさんの開発環境も使えないしね。 とりあえず、知ってることも「知ってるわ」とか言わずに、素直に学んで行くことに。  
#include <stidio.h>

int main(void)
{
    printf("Hello C言語!\n")
    return 0;
}