Logic Delight

明日のワシは忘れてしまうから、コードにはコメントを書くのです。

タグ間の変更フォルダ+ファイル数をカウントする

というのをやってみた。(結局は、使わないで済むアプローチになったので使われず)

Win

svn diff --summarize --username %SVN_USER_NAME% --password %SVN_PASSWORD% %TAG_FROM_URL% %TAG_TO_URL% | find /v /c ""

Unix/Linux

svn diff --summarize --username ${SVN_USER_NAME} --password ${SVN_PASSWORD} ${TAG_FROM_URL} ${TAG_TO_URL} | wc -l

OWASP Night 10th @ ソフトバンク汐留

開催日時:2014/02/19 19:00-20:30

※このメモ書きを見つけて記事としてアップしたのは、2014/10/03です

APPSECについて

by 上野 宣さん

  • APPSEC APAC 2014 のWebサイト紹介(https://appsecapac.org/2014/)
    • About This Site
      • OWASPのプロジェクト
      • 日本のWebセキュリティ
      • 日本のモバイルセキュリティ
    • SCHED(スケジュール管理サイト)
      • Expand Viewで要Check
    • AppSensor(Product)
    • OWASP ZAP 日本語版ドキュメント

文字コードのセキュリティがどのくらい改善されたか(3年前との比較)

by 徳丸浩さん

  • WinXP sp3 (No patch) on Win8.1 vs WinXP latest IE6
  • 7種類のデモ
    • 5/7は処理系で対応済み
      • これらはプラットフォーム側で整備されるべきもの
    • 文字集合が変わる問題」はアプリ側で対処が必要
      • 入り口から出口までUnicodeで統一することを推奨

ソフトバンク脆弱性診断

by ソフトバンクのセキュリティを支えるチーム
洲崎さん、仲田さん

脆弱性診断の担当チーム

  • どんなことをしてる?
    • 内製で通信3社を診断
    • 受付サイト〜ポータル化
    • 大まかな診断内容
      • ネットワークの診断
      • Webアプリの診断
      • スマホアプリの診断
  • ネットワークの診断
    • ローカル&リモートの両側を診断
      • ローカル側の診断は現地に赴く必要が有るため工数が嵩む
      • 診断用端末貸出による工数削減、貸出端末30台くらい
    • Vulsプロジェクト
      • いつでも好きな時に診断を受けられるようなシステムを社内展開(予定)
  • Webアプリの診断
  • スマホアプリの診断
    • 簡易診断
      • プライバシー送出情報のガイドラインに準拠しているか?
        • Webで診断を自動化
          • プロキシで動的解析させる
    • 詳細診断

最近のOWASPプロジェクト

by 岡田 良太郎 (@okdt) さん

  • OWASP CISO Servey Report 2013
  • Xenotix XSS Exploit Framework Ver.5
  • Java Encoder 1.1.1
  • (1/29) インターネットセキュリティに関するOWASP宣言
    • インターネットが監視され過ぎていることへの警鐘
    • 日本語版を準備中
  • Top 10 Mobile Risks
  • 本日のクーポンコード:XXXXX
    • →APPSECの申し込み費用が0x13%OFFになる!

Yahoo!のワンタイムパスワードをGoogle認証システム(Google Authenticator)で管理する

ログイン画面などのID/Passwordを入力させる画面がHTTPSになっていないサイトを片っ端から利用解除して他の同種サービスに乗り換えているワシです、うす。
今回は、ワンタイムパスワード生成のスマホアプリを1つに絞りたいけど絞れていないかた向けです。

不正ログインが横行していて、ID/Passwordの使い回しなんざやっていたらイチコロなここ最近のインターネット界隈ですが、Yahoo!Japanが不正ログイン事件でID流出など痛い目をみた後、手遅れながらワンタイムパスワード(以下、OTP)認証を追加導入しましたな。

ワンタイムパスワード(OTP) - Yahoo! JAPAN IDガイド

認証がセキュアになる事自体は大歓迎ですが、なぜだか肝心のYahoo!のページでOTPを設定しようとすると、独自のOTP生成アプリをスマホAndroid/iPhone)にインストールしなさい、と言われます。ま、OTPをスマホアプリで実現すること自体はGoogle認証システムという仕組みを提供しているGoogleさんも同様なんですが、他のサービスであるDropboxFacebookではGoogle認証システムで相乗り対応できていたので、あんたのところもGoole認証システムで管理出来ればいいのに、と思って無理やりQRコードを読み込ませてみたけど、有効なURLスキームじゃありません的なエラーで取り込めませんでした。仕方なく独自アプリをインストールするものの、この調子でWebサイトごとにOTP生成アプリをインストールし続けていくのもなんだかなぁ、と思ってしまうのでありますな。

ちょっと調べてみたところ、特に何も工夫をせずにYahoo!のOTPを利用できるスマホアプリは

のようで、両方とも確かにできました。後者の方が、Y!みたいな恥ずかしいアイコンじゃないので、本意ではないですが、後者を使っていました。

ただ、後日、愛読している 2段階認証ノススメ (まとめ) - セキュリティは楽しいかね? Part 2 で知ったのですが、

アプリ登録用の QRコードが独自の URLスキーム (yjotp) なため、アプリが対応していないとそのままでは登録できない。たとえば Google認証システムは未対応のため、手入力で登録する必要がある。

ということで、なるほど手入力ならできるのか、と。

そこで、早速Yahoo!ワンタイムパスワードのサイトに行って、(既にOTP設定してあるワシは)OTP設定を「変更」として、表示されるQRコードを、一般的なQRコードリーダーで読んでみました。読み取れた文字列はこんな感じ。

yjotp://totp/user_id?secret=ABCDEFGHIJKLMNOPQRSTUVWXYZ

yjotpが例の悪名高い独自URLスキームで、user_id のところには 自分のYahoo!ID が、secret= の後には認証キーとなる長い文字列が続いておりました。

これをGoogle認証システムに登録するには、Google認証システムを起動して「+」ボタンを押し「トークンを追加」画面へ行きます。「時間ベース」が選択されている状態で、アカウント欄にはOTPを識別するための任意のアカウント情報(例えば user_id@yahoo.co.jp)、キー欄には secret= のうしろに続いていた長い認証キー文字列を設定すれば、はい、めでたく登録できますた、と。

おそらく機能的には遜色なかったので、前述の HDE OTP Generator に統合していっても問題ないと思われますが、ワシは堅牢そうなGのアイコンが気に入っていたので、Google認証システムに統合しました。

皆様におかれましても、IDとパスワードだけでは大切な自分のアカウント・個人情報を守れない時代ですので、ワンタイムパスワードが利用できるサービスでまだ設定をしていない、という方は是非ご検討されてみてはいかがでしょうか。

Java経験者のための、C#のキャッチ・アップ用小ネタ集(第3回)

更新が滞っておりましたが、小出しの続きですな。読者の方には全く関係ありませんが、実は予定を変更してお届けしております。

基本的な部分での、Javaとの違い。

Javaでは1ソースファイルに1つのpublicクラスという制約があるが、C#では縛りなし

Javaで言うところの package (パッケージ) は、C#では namespace (名前空間)

見慣れたJavaでは、こんな感じ。2つ目のpublicクラスが定義されていると、コンパイルエラーで怒られた気がする、確か。

// MyClass.java
package jp.ne.skyblue.myapp;

public class MyClass {

    public void hoge() {
        System.out.println("Say Hoge!");
    }

}

C#では、クラスをいくつでも定義できちゃう。
おそらく、繋がりが深い同類のクラス群は、同時に参照・メンテされることが多いだろうから、まとめてもいいよ的な考えなのかしら?と思うのですが、javaっぽくクラス名でファイルを探しても一向に見つからないのでgrepかけることになることも・・・。

// MyClasses.cs
using System;

namespace jp.ne.skyblue.myapp
{
    public class MyClassA
    {
        public void Hoge() {
            Console.WriteLine("Say Hoge!");
        }
    }

    public class MyClassB
    {
        public void Fuga() {
            Console.WriteLine("Say Fuga!");
        }
    }
}

なんにせよ節度と秩序を保ちつつ、クラスは定義していきたいものですな。

Javaで言うところのJavadocは、C#で言うところのXML Documentというもの

ま、ドキュメントコメントを書かないと、後々自分を含め色々な関係各位が困ったことになりますよね。あと、書いてあるけどわかりにくかったり、嘘ついていたり、とか世の中には様々な罠がありますが、そんなことに絶望することなく、真摯な気持ちで未来の自分のために書くことを心がけたいところですな。

// MyClass.java
package jp.ne.skyblue.myapp;

/**
 * 俺の俺による俺のためのクラス。
 */
public class MyClass {

    /**
     * Hoge って言えって言う。
     *
     * @param message 付加するメッセージ
     * @return 言った後の気持ち
     */
    public Feeling hoge(String message) {
        System.out.println("Say Hoge! and " + message);

        return Feeling.GOOD;
    }

}

んで、XML Documentがコチラ。

// MyClasses.cs
using System;

namespace jp.ne.skyblue.myapp
{
    /// <summary>
    /// 俺の俺による俺のためのAクラス。
    /// </summary>
    public class MyClassA
    {
        /// <summary>
        /// Hoge って言えって言う。
        /// </summary>
        /// <param name="message">付加するメッセージ</param>
        /// <returns>言った後の気持ち</returns>
        public Feeling Hoge(string message) {
            Console.WriteLine("Say Hoge! and " + message);

            return Feeling.GOOD;
        }
    }

    /// <summary>
    /// そしてBクラス。
    /// </summary>
    public class MyClassB
    {
        /// <summary>
        /// Fuga って言えって言う。
        /// 
        /// ※フガって言うので精一杯だから、文字列を付加したり気持ちを返したりしません。
        /// </summary>
        public void Fuga() {
            Console.WriteLine("Say Fuga!");
        }
    }
}

下記のサイトに真面目な違いが書いてあるので、真面目な人はそちらをお読み下さい。

(参考サイト)
XML Document (C# によるプログラミング入門)

継承や実装は全てコロン(:)で表す

Javaのようなオブジェクト指向言語では、継承(extend)やインターフェースの実装(implement)は必要不可欠でありますな。

// Renewable.java
package jp.ne.skyblue.myapp;

/**
 * 再生可能であることを表すインターフェース。
 */
public interface Renewable {
    /**
     * (何度でも)再生します。
     */
    void renew();
}

// Terminator.java
package jp.ne.skyblue.myapp;

/**
 * 新型ターミネーターを表すクラス。
 */
public class Terminator implements Renewable {
    /**
     * @see jp.ne.skyblue.myapp.Renewable#renew()
     */
    public void renew() {
        // do something.
    }
}

// ArnoldSchwarzenegger.java
package jp.ne.skyblue.myapp;

/**
 * シュワちゃんを表すクラス。
 */
public class ArnoldSchwarzenegger extends Terminator {
    /**
     * @see jp.ne.skyblue.myapp.Renewable#renew()
     */
    @Override
    public void renew() {
        // I'll be back!
        super.renew();
    }
}

C#では、extends とか implements とか言わせずに、『漢は黙ってコロン!』という心意気のようです。
ワシのようなTOEIC難民が英単語を覚える僅かなチャンスを削らんとしているのか、或いは少しでもコード量タイピング量を減らして何かの速度を上げたり何かの効率を上げたりしようとしているのか。その意図はワシにはわかりません。

// MyClasses.cs
using System;

namespace jp.ne.skyblue.myapp
{
    /// <summary>
    /// 再生可能であることを表すインターフェース。
    /// </summary>
    public interface IRenewable
    {
        /// <summary>
        /// (何度でも)再生します。
        /// </summary>
        void Renew();
    }

    /// <summary>
    /// 新型ターミネーターを表すクラス。
    /// </summary>
    public class Terminator : IRenewable
    {
        /// <summary>
        /// <see cref="IRenewable.Renew"/>
        /// </summary>
        public virtual void Renew() {
            // do something.
        }
    }

    /// <summary>
    /// シュワちゃんを表すクラス。
    /// </summary>
    public class ArnoldSchwarzenegger : Terminator
    {
        /// <summary>
        /// <see cref="IRenewable.Renew"/>
        /// </summary>
        public override void Renew() {
            // I'll be back!
            base.Renew();
        }
    }
}

とまぁ・・・、最後の方どーでもよくなってきていないですよ。これでも精一杯真面目に書いておりますよ。ということで不定期に続きますので宜しくお願いします。

Twitterの新機能「全ツイート履歴をダウンロード」を使ってみた

Twitterのつぶやき履歴を全件ダウンロードできるようになったと聞いたので、早速やってみました。

  1. Twitterサイト右上の歯車アイコンを押して出てくるサブメニューの「設定」を選択
  2. ユーザー情報ページの下部に「全ツイート履歴をリクエストする」というボタンを押す
  3. 登録してあるアドレスにメールが飛んでくる(Title=〇〇さんのツイート履歴ダウンロードの準備ができました)
  4. メール本文中にあるボタン「今すぐ開始」をクリック
  5. Twitterの履歴ダウンロード用ページが表示されるので、「ダウンロード」ボタンをクリック
  6. tweets.zipがダウンロードできる。

tweets.zipの中身はコチラ。


tweets

│ index.html ((ここを開くとTwitterWebページライクに履歴が閲覧できる))

│ README.txt ((ツイート履歴の説明書))

│ tweets.csv ((全ツイート情報をカンマ区切り形式でまとめてある))

├─css
│ application.min.css

├─data
│ └─js

│ │ payload_details.js ((ダウンロードした時点のTweetサマリ情報))

│ │ tweet_index.js ((配下の/tweets 以下のインデックス))

│ │ user_details.js ((ダウンロードした時点のTwitterユーザー情報))
│ │
│ └─tweets

│ 2010_05.js ((ツイートをJSON形式で月ごとにまとめてある))
│ 2010_06.js
│ 2010_07.js
│ :

├─img
│ bg.png
│ sprite.png

├─js
│ application.js
│ ja.js

└─lib
├─bootstrap
│ bootstrap-dropdown.js
│ bootstrap-modal.js
│ bootstrap-tooltip.js
│ bootstrap-transition.js
│ bootstrap.min.css
│ glyphicons-halflings-white.png
│ glyphicons-halflings.png

├─hogan
│ hogan-2.0.0.min.js

├─jquery
jquery-1.8.3.min.js

├─twt
│ sprite.png
│ sprite.rtl.png
│ twt.all.min.js
│ twt.min.css

└─underscore
underscore-min.js

諸々のスクリーンショットをアップしようと思ったけど、面倒くさいし、他に記事があるみたいだから、そのリンクで済ませちゃおう。。

Twitterの新機能でさっそく過去ツイートをダウンロードしてみた
スクリーンショットつきの記事(週アスPLUS)はコチラ

ただ、正直、Twilog(外部サイト)のほうがダウンロード不要なぶん、まだ便利かな〜。

などとコメントされていますが、確かに、目視で過去に己の吐いたモノを眺めて感慨に耽る分にはどんなサービスでも大差ないのかもしれないですが、なんせ本家は生データを提供してくれますので、過去に「家路なう」ってつぶやいた回数を確認したい時なんか

grep "家路なう" ./tweets.csv | wc -l

とかできちゃいます*1。つまり過去のつぶやきデータに対するマイニングが自分でできるのは嬉しいよね、って。嬉しいのかな・・・書いていて自信がなくなってきましたw

はい、そんな感じで今後もNonValuableTweet満載でお届けし続けようと思いますので宜しくお願いします。

*1:ちなみに533件でした。