Raspberry PiでL-03FでdocomoのXiを使ってネットをしてみる

かなり色々と試行したので、無駄な処理が入っている可能性があるのですが、とりあえず、やっとことをまとめてみます。一応、Linuxdocomoのサポート外なので、以下も自己責任でお願いします(主にパケ死などに)。

参考にさせてもらったのは、

Qaplaの覚書・メモ・備忘録・独言 Raspberry Pi をUSBモデムでインターネット接続
OBDNマガジン: [.tested] docomo L-03D [AX3][A6]
ubuntu 9.04 で docomo L-02A を使う | azkの日記 | スラッシュドット・ジャパン
あたりだとおもいます。

まず、他の記事でもたくさんかかれているように、windows/mac上でのゼロインストールのために、CD/DVDとして、/dev/sr0でlinuxが反応してしまうので、とりあえず、usbに認識させるという動作を行います。usb_modeswtichを使うということを試行しましたが、うまく動かなかったので、sudo apt-get install ejectでejectを入れて、3つ目にあげたところでも書かれているように、

pi@raspberrypi ~ $ cat /etc/udev/rules.d/99-foma_l-02a.rules
KERNEL=="sr[0-9]*", ENV{ID_VENDOR_ID}=="1004", ENV{ID_MODEL_ID}=="6367", RUN+="/usr/bin/eject /dev/$kernel"

ACTION=="add" SUBSYSTEM=="usb", ATTR{idVendor}=="1004", ATTR{idProduct}=="6366", RUN+="/sbin/modprobe usbserial vendor=0x$attr{idVendor} product=0x$attr{idProduct}"

こういう感じで設定します。やってることとしては、usbにつながれたときにeject /dev/sr0を行なって(sr0以外も動くようになってますが)、usbserialをロードしています。これで、適当にさしなおしたり、リブートすると、こいつが動きます。すると、/dev/にttyUSB0,1,2が現れますが、たぶんl-03Fが新しいので、linuxがまだこのProdctIDが分からないのだと思う(というか、モデムモードに切り替えが必要なのだと思う)ので、ググると、optionをロードして、new_idにvendorid:productidをechoするみたいなのなどを試してみましたが、うまく動かないので、最終的に、

pi@raspberrypi ~ $ sudo usb_modeswitch -v 0x1004 -p 0x6366 -M "5553424308e02186000000000000061b000000020000000000000000000000"

Looking for default devices ...
   found matching product ID
   adding device
 Found device in default mode, class or configuration (1)
Accessing device 005 on bus 001 ...
Getting the current device configuration ...
 OK, got current device configuration (1)
Using first interface: 0x00
Using endpoints 0x01 (out) and 0x81 (in)
Not a storage device, skipping SCSI inquiry

USB description data (for identification)
-------------------------
Manufacturer: NTT DOCOMO, INC.
     Product: docomo L03F
  Serial No.: not provided
-------------------------
Looking for active driver ...
 OK, driver found ("usbserial_generic")
 OK, driver "usbserial_generic" detached
Setting up communication with interface 0
Using endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
 OK, message successfully sent
Resetting response endpoint 0x81
Resetting message endpoint 0x01
-> Run lsusb to note any changes. Bye.

と実行するとなんか知らないけど動きました(minicomで反応が見られるようになりました)。

pi@raspberrypi ~ $ sudo minicom -D /dev/ttyUSB1

Welcome to minicom 2.6.1

OPTIONS: I18n
Compiled on Apr 28 2012, 19:24:31.
Port /dev/ttyUSB1

Press CTRL-A Z for help on special keys

ati
NTT DOCOMO, INC.

OK

おそらく、うまくusb_modeswitchが出来ていれば、それで一発だと思うのですが、色々やりすぎて、Raspberry Piが闇化してしまったのが敗因だと思います。とりあえず、メモがてら書いてみました。

花火

夏を忘れないために花火です。Processing何かと役立つと思うので、ある程度使えるようにしてたい

float t;
float g = -0.8;
float v0 = 10.0;
float h = 100.0;
int divide = 30;
float theta = 360/divide;
float colors[][] = new float[divide+1][3];

int particlePerPiece = 5;

float x0; 
float y0; 

void setup() {
  size(800,800);
  stroke(255);
  background(192,64,0);
  t=0;
  h=-300.0;
  x0=width/2;
  y0=height/2;
  smooth();
  float r = random(0,255);
  float p = random(1,20);

  for (int i=0; i<=divide; i++)
  {
    colors[i][0] = r*p*i%255;
    colors[i][1] = r*p*i*i%255;
    colors[i][2] = r*p*i*i*i%255;
  }
 }
void draw() {
  background(0,0,0);
  if (t<10.0){

    ellipse(x0,y0-3*v0*t,10,30);
  }
  else
  {
    t-=10.0; 
      for (int i=0; i<=divide; i++)
    {
      stroke(colors[i][0],colors[i][1],colors[i][2]);
      fill(colors[i][0],colors[i][1],colors[i][2]);
      ellipse(x0+v0*cos(radians(i*theta))*t, 
      y0+h+sin(radians(i*theta))*v0*t-g*t*t, 4,4);
      

      /*if (t>5){
        for (int j=0; j<particlePerPiece; j++)
      {

        ellipse(x0+v0*cos(radians(i*theta))*(t-0.1)+random(-5,5), 
      y0+h+sin(radians(i*theta))*v0*(t-0.1)-g*(t-0.1)*(t-0.1)+random(-200,0)/2,2,2);
      }
      }*/
    }
    t += 10.0; // uuuuuu
  }
  t+=0.1;
  if (t > 35)
  {
    stroke(255,255,255);
    fill(255,255,255);
    t = 0;
  }
}
void mousePressed(){
  saveFrame("output.png");
}

正直ゴミコードです。

iOSのアプリつくった話。とコード署名でno identities are available for signingって言われまくった話

ものはたいしたものじゃないというか、僕が欲しかったっていうだけのアプリなのですが、iOS dev program登録して何もしないのもお金がもったいなすぎるということで、アプリを投稿してみました。

で、Objective-Cのメソッドなげーとか言いながら、まぁたのしくコーディング出来た訳です。んで、実機テストしてまぁいけんじゃね?的なノリでアップロードしようとしたのが昨日の昼。そっからが本気でえぐかったってことをちょっと懺悔的に書きたいと思います。


まず、めちゃくちゃ色々入力させられて、かつChromeでやってたので、3回データ(入力したやつ)が飛びました。まず、ここで死にたくなりました。Safariを使えっていうアレですね。

んで、よく考えてみると、アイコン作ってねえなってことでアイコンを作ったのですが、画像編集能力の欠如により1時間以上かけて結局ゴミみたいなアイコンしか作れなかったと。

そしてラスボスとして、コード署名に殺されかけました。とりあえず、Targetとか弄って、Archiveしたはいいんですが、"no identities are available for signing"を連呼されて、結局昨日は2時(今日か)くらいまでやって終わらず、そしてさっきようやく終わりました。

何がいけなかったのかといえば、結果から言えばDistributionにするのを忘れていたということなんですが、Distributionにするのは分かってて、出来てなかったのでひょっとしたら、ここでハマる人が僕以外にもいるかもしれないですね。stackoverflowとかの質問を見ていると、Provisioning Profiles->Distribution->+みたいな感じで書いてあった気がするんですが、まぁ確かに間違ってないっちゃ間違ってないんですが、その後の選択するやつで、その流れで+を押せばとりあえず、Distributionに関するprovisioning profileが手には入るんじゃないかと思って、今までのノリで、iOS App Developmentを押してたわけです。

めっちゃ落ち着いて後から見てみると、思いっきりそれは間違いで、上に思いっきり「Development」って書いてあるわけです。つまりその下にあるやつを押せばいいんですが、なんか知らないけど10個以上作ったProvisioning profiles全部流れ作業のように上を押しててハマりましたね。

なんかちょっと興奮してて文章書けないので、やめますが、とりあえず、アプリの登録は落ち着いてやるに限るみたいです。。。

seccon online

CTF雑魚なので、全然問題解けなかったのです。数毒のやつと、12問暗号のやつの11問までの部分点までしか解けなかった、という悲惨な結果です。

えっと、初めてのCTFということで初めてのWrite upを書いてみようと思いましたが、他の人にかなり完全な答えのWrite upがいくつかあったので、書きかけてたものを即消ししました。

精進します・・・

xcodeでboost使うためのメモ

非常に忘れっぽいので、というか毎回ググって誰かのブログから見てくるのがめんどくさいので、ここに書いておきます

例えば次のように関数を「nx^m」と書いたときのmが知りたいときってあるじゃないですか(?)。で、正規表現使いたいって思ってboostを読み込むわけですが、ちょっとめんどくさいので、書き残しておきます

regextest.h
#include <iostream>
#include <string>
#include <boost/regex.hpp>

using namespace std;
class RegexTest {
    
public:
    static string getDegree(string func_str);
};
regextest.mm
#include "regextest.h"

string RegexTest::getDegree(string func_str)
{
    boost::regex reg("(\\d*)x\\^(-?\\d+)");
    boost::smatch result;
    if (boost::regex_match(func_str, result, reg)) {
        return result.str(2);
    }
    return NULL;
    
}
main.mm
#import <Cocoa/Cocoa.h>
#include "regextest.h"

int main(int argc, char *argv[])
{
    string f("2x^3");
    cout << "("<< f << ")'s degree is " <<RegexTest::getDegree(f) << endl;
    return NSApplicationMain(argc, (const char **)argv);
}

これ普通にやろうとすると、リンクできないので、
f:id:moratorium08:20131106091148p:plain
このようにHeader Search Path(Build Settings の真ん中のあたりにSearch Pathという項目がありその中にあるやつ)を変更したあと、Build Phasesタブに移って、Link Binary With Librariesで、プラス押すとワーっとライブラリ押すといろいろ出てきますが、その中には無いので、左下のAdd Other押すと、ファイル全体のブラウジングできます。で、僕は/opt/local/lib/にいろいろあるので、そっから、今回使ったlibboost_regex-mt.aを選ぶと
f:id:moratorium08:20131106091613p:plain
実行してみると
f:id:moratorium08:20131106092800p:plain
できました。めでたしめでたし。(というか、まぁmain.mmで出来るので、他のところでもできますねってことですね)

あ、あといつもObjective-C++使うと忘れるのですが、main.mをmain.mmにするのを忘れるな と未来の自分に言っておきます。

Boost使って正規表現で名前付きキャプチャしようとした話

もともとPython

#coding:utf-8
from __future__ import print_function 
import re
s = "123hello"
# named capture 
m = re.match(r"(?P<num>\d*)(?P<str>.*)", s)
print("num is", m.group("num"))
print("str is", m.group("str"))

というように、正規表現を使って中の文字列に対して名前付きキャプチャしようとしただけなんですが、、、

以下C++で上のやつをやった結果です。

#include <iostream>
#include <boost/xpressive/xpressive.hpp>
#include <boost/xpressive/regex_algorithms.hpp>

using namespace boost::xpressive;
int main(void)
{
    std::string str("123hello");
    sregex rx = sregex::compile("(?P<num>\\d*)(?P<str>.*)");
    smatch m;

    if (regex_match(str.begin(), str.end(), m, rx)){
        std::cout << "num is " << m["num"] << std::endl;
        std::cout << "str is " << m["str"] << std::endl;
    }
}

User's Guide - 1.44.0
これ見れば一発かもしれませんが...