読者です 読者をやめる 読者になる 読者になる

慶應義塾大学 学籍番号のチェックディジット計算【Excel】

お久しぶりです。SFCのれにうむです。
SA業務で学籍番号の真正性確認がひつようになりました。コード書きたいですけど、こういうときはExcelを使わなければいけません。
というわけで、メモ代わりに、その式をおいておきます

=IF(MOD(MOD(INT(A1/10000000),10)*9+MOD(INT(A1/1000000),10)*8+MOD(INT(A1/100000),10)*7+MOD(INT(A1/10000),10)*6+MOD(INT(A1/1000),10)*5+MOD(INT(A1/100),10)*4+MOD(INT(A1/10),10)*3,11)=IF(MOD(A1,10)=0,10,MOD(A1,10)),"OK","NG")

以上です。

QSLカードテンプレート

お久しぶりです。れにうむです。

アマチュア無線QSLカードを1000枚「イロドリ」という印刷業者を使って印刷しました。値段はなんと、1000枚で3085円です、QSLカード専門店ではありえない安さですね。しかし、「イロドリ」は自分で作ったpdfなどのデータを印刷してくれるだけのサービスなのでデータ面などは自作するしかありません。そこで、今回はデータ面を作成したので共有しようと思い公開することにしました。これはJARLの転送の規格にあっていると思います!

(1ページ目は使うことは無いと思いますが、8桁コールサイン宛用です)

pdf : https://re75.info/share/qsl_addr_tmp.pdf

パワポ ( pptx ) : https://re75.info/share/qsl_addr_tmp.pptx



なにかご質問・ご意見等ございましたらコメントもしくはTwitter ( @chigakuishi )まで!

男性の下心利用した不正なソフトウェアの配布

久しぶりです、れにうむです。久しぶりです。

ここで本題です。
スマートフォンでは"ランダムチャット"と呼ばれる部類のアプリがあります。ここでは出会い系アプリとは違い男女など関係なく話すという建前になっているのですが、じっさいは出会いを求めた下心だらけの男が沢山います。

これに目をつけたのか、淫らな写真を見せるなどと語った女性がLINEの交換を申し出てこれが自分の写真といいながら不正なプログラムとおもわれる物をダウンロードさせる手法をみつけました。

1.淫らな発言でつられる馬鹿な男になる
f:id:rhe:20160304224549p:plain
ひどいですね。きになっちゃっうのも仕方ないですね(棒)
LINEを登録してみましょう

2 .実際に登録してみる
f:id:rhe:20160304231521p:plain
なんか普通の大学生?って感じです。追加してみました

3 .話しかけてみる
f:id:rhe:20160304232050p:plain
話してたら顔画像交換の流れになって変な顔画像があるらしいURLを送ってきました………
あと、一回関係ない画像送って間違えたと言ったところ反応してくれたので中の人はちゃんと読んでいると思われます。

4 .クリックしてみる(ちゃった)
f:id:rhe:20160304232315p:plain
なにかの攻撃とかに使われるの怖かったのでクリックするのはやめておこうと思っていたのですが誤ってクリックしてしまいました………
このようなページに飛んで、apkファイルをダウンロードさせてこようとしていました……。恐るべし
流石にこれはダウンロードしたり実行したりはしてません
仮想的な環境で解析してみたいな………


まとめ

うまい(?)話は疑うようにしましょう
あやしい実行ファイルはダウンロードしないようにしましょう
対策は去勢でもすればいいんですかね?????

正規表現テスター的な何か

 おひさしぶりです、れにうむです。
 今回は、高校の部活のコーチとして夏合宿に参加して後輩指導をすることになり、その一環としての講座として、後輩たちに実習を交えながら正規表現を教えました。
 しかし、人によってやってる言語もことなり、そもそも、今回はプログラミングの講座ではないので正規表現を簡単に試せる環境をWeb上につくり、それが

http://web.sfc.wide.ad.jp/~rhenium/reg.html

f:id:rhe:20150808083626p:plain

これです。

機能としては、おおまかに
 [1] /hogehoge/
形式の正規表現の練習用のものと
 [2] s/hogehoge/foobar/g
形式の正規表現を利用した置換の練習用のものを用意しました。

 使い方は単純で、まず、[1]は正規表現を一番上の入力欄に書いて、正規表現を適用させる対象を改行区切りで「入力」の大きい欄にいれます。それをした後、「抽出実行」ボタンを押すと正規表現がマッチする部分のある行が出力されます。ちなみに、後方参照するために()で囲うと、「出力」のほうはマッチする行において[$1 , $2 , $3 , ....]という形式で出力されます。

 つぎに[2]は2つ横にならんだ欄の左側に置換する対象を示す正規表現、右側に置換する文字列を書きます。そのあと入力に置換する文章を入力して置換実行ボタンを押すと置換後の文字列が「出力」欄にでます。
 また、置換する文字列の欄ではもちろん「$1,$2...」形式で後方参照した物の読み込みでできます。

 ごまかした点としては ¥ と \ の違いに悩んだので、結局 ¥ はすべて \ に置換しました。

 どこまで、使えるかわかりませんがご自由にお使いください(??)

【 CodeIQ 】ホリエモンからの挑戦 解いてみた

挑戦者求む!あなたが優秀なエンジニアなら必ず解けるはずです。挑戦お待ちしています。 by SNS株式会社 堀江貴文│CodeIQ
ホリエモンからの賞金問題といてみましたヾ(@⌒ー⌒@)ノ

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	int len = 0;
	int n = 0;
	int ans = 0;
	int p = 0;
	cin >> len >> n;
	vector <int> dat(n);
	for(int i=0 ; i<n ; i++){
		cin >> dat[i];
	}
	sort( dat.begin(), dat.end(), greater<int>() );
	while(p <= n-3){
		if(dat[p] >= len){
			p++;
			continue;
		}
		int p2 = p+1;
		while(p2 <= n-2){
			if(dat[p]+dat[p2] >= len){
				p2++;
				continue;
			}
			bool f=binary_search(
				dat.begin()+p2+1, dat.end(), len-dat[p]-dat[p2], greater<int>()
			);
			if(f){
				ans++;
			}
			p2++;
		}
		p++;
	}
	cout << ans << endl;
	return 0;
}

降順ソートした後、明らかに違うの切りながら2つを選んで残り1つを二分探索しました。
おそらく想定された方法かなって感じがします。codeiq.jp

なつかしいアプリケーション

サーチランチャーの詳細情報 : Vector ソフトを探す!

最近、大学の研究会の関係でWindowsを使い始めたのを期に、むっかぁぁぁぁぁーーーーーーし(中2くらいだから5年前?)に開発した「サーチランチャー」というランチャーソフトをVectorにあげていたのを思い出したので使ってみました。
昔過ぎて、自分でも仕様を忘れていたので完全に他人の作ったソフトを使ってる感じなので、レビューしたいと思います。


まず、このランチャーの主な目的は「キーボードだけでソフトウェアを立ち上げたりウェブページを開いたりする」ということらしいです。

ランチャーを起動した後は、"CTRL+F1"を押すと、ランチャーのウィンドウが立ち上がり、そこに登録した時の(後述)名前の一部(前方一致)を入力すると下部に一覧が出てきます、そこを上下キーで操作して(しない場合は一番上)TABで決定すると、選択したものが立ち上がるというもののようです。

ここまでで、改善してほしいと昔の自分に思うのは2点で
1.CTRL+F1はすごく打ちにくい、設定ファイルでウィンドウが立ち上がるショートカットを変えれるようにしてほしい
2. なんで決定がTABなの?選択がTABで決定がEnterあたりが普通でしょ?
ってかんじです。

次に登録するのは、ウィンドウを立ち上げた状態で"CTRL+N"を押すとテキストエディタが起動して、登録ファイルが立ち上がりそこに書式に従って記入していくみたいです。
この形式は今の僕も結構好きなので、賛否はわかれるでしょうけどいいと思います。

ついでにこのランチャーに突っ込みたいのは、一度ウィンドウをたちあげたら、何かを立ち上げない限りウィンドウを消せないところです、ESCかなにかで消せるべきではないでしょうか?右上の☓を押すと、ランチャー自体が終了しますし、それは致命的だと思います。


開発者がすでにコードをなくしていて、アップデートされることがないとわかっているソフトウェアに対するレビューはこのくらいにしたいと思います。
使いたい人は是非使ってください。あ、メールアドレスに書いてあるメールアドレスはすでに使えません。www.vector.co.jp

CodeIQ バイナリカウント問題

今回、講義中暇だったので、バイナリカウント問題を解いたので、公開しておきます〜!
挑戦者求む!数学の問題をプログラミングで解こう!二進数の1の個数を数えて下さい。 by @riverplus Kawazoe│CodeIQcodeiq.jp

$n=<STDIN>;
$two=1;
$i=0;
$ans=0;
while(1){
        $i++;
        $ans+=int($n/($two*2))*$two;
        if($n % ($two*2)<$two){$ans+=($n % ($two*2))}
        else{$ans+=$two}
        $n-=$two;
        $two*=2;
        if($n<=0){last}
}
print $ans."\n";

スッキリ書けてるかな???

【Perl】緯度経度の二点間距離

http://web.sfc.wide.ad.jp/~rhenium/fx/index.php?1=36.10056&2=140.09111&3=35.65500&4=139.74472

昨日は激しい腹痛、下痢、嘔吐、発熱で病院行きおそらく盲腸と言われるも、CTしたらただの胃腸炎といわれたれにうむです。

まえから、僕は旅行が好きで、ハイキングしたりサイクリングするとき、ロガーアプリなどで位置情報をGPXファイルに保存していたので、それで遊びたいと思っていたのでとりあえず、緯度経度で表された2点の距離を表示するサブルーチンをPerlでつくってみました。

どうやったら求められるかhttp://yamadarake.jp/trdi/report000001.htmlJavaプログラムを参考にさせていただきながらPerlで書きなおしてみました。

$pi=3.1415926535897932384626433;
sub deg2rad{
 $_[0]*$pi/ 180.0;
}
sub hubeny{
 (local $lat1,local $lng1,local $lat2,local $lng2,local $a,local $e2,local $mnum)=@_;
 local $my=deg2rad(($lat1+$lat2)/2.0);
 local $dy=deg2rad($lat1-$lat2);
 local $dx=deg2rad($lng1-$lng2);
 local $sin=sin $my;
 local $w=sqrt 1.0-$e2*$sin*$sin;
 local $m=$mnum/($w*$w*$w);
 local $n=$a/$w;
 local $dym=$dy*$m;
 local $dxcos=$dx*$n*(cos $my);
 sqrt $dym*$dym+$dxcos*$dxcos;
}
sub hunbeny_{
 (local $lat1,local $lng1,local $lat2,local $lng2)=@_;
 hubeny($lat1,$lng1,$lat2,$lng2,$GRS80_A,$GRS80_E2,$GRS80_MNUM);
}
sub dis{
 (local $lat1,local $lng1,local $lat2,local $lng2)=@_;
 local $GRS80_E2 = 0.00669438002301188;
 local $GRS80_MNUM = 6335439.32708317;
 hunbeny_($lat1,$lng1,$lat2,$lng2);
}
print dis(36.10056,140.09111,35.65500,139.74472);

出力結果 58502.4589312411

具合悪いので作業時間が短くちゃんとなってる保証はないですが、おそらく、平気でしょう。
何かあったらコメントかTwitterhttp://twitter.com/chigakuishiにでも知らせてください。
できるだけ早く対処するかもしれません。
ではおやすみなさいZzzz………………………………

AVRはじめました!

前から少し気になっていて、受験が終わったら一度やってみたいと思っていたマイコンのプログラミングを始めてみました。
完全に独学で、Webで見た情報を頑張ってかき集めてやっているので、自分のやっていることが正しいのかわからない暗闇の中歩いてる感じだったので、初めてLEDが自分の書いたコード通りに光った時は、とても感激して、中1のころに、はじめてC言語で"hello world"の表示を成功させたときのことを思い出しましたね。

とりあえず、今回は秋葉原マイコン(AVR ATtiny2313 ATmega328P),ブレッドボード、ケーブル類、白色LED、抵抗、スイッチ、電源 を買ってきて、Webに上がってるソースコードの見様見真似と改変で↓のようなコードを書きとりあえずボタンを押すと数字が1増えて0x00〜0x0Fまでを数えて結果をLEDの2進数表記でそのまま返す簡単なカウンタ(?)をつくりました。
はてな記法の実験で乗っけます。

#include <avr/io.h>
#include <util/delay.h>

int main() {

    DDRD=0b00001111;
    DDRB=0b00000000;
    PORTD=0b00000101;
    PORTB=0b00000000;
    unsigned char f=0;
    while(1){
        if((PINB&0b00000001)&&f) {
            if(PORTD!=0b00001111)PORTD += 0b00000001;
            else PORTD=0b00000000;
            f=0;
            _delay_ms(10);// ※1
        }else if((PINB&0b00000001)==0&&(f==0)){
            f=1;
            _delay_ms(10);//※1

        }
    }

    return 0;
}

今回は、ボタンを買うのを忘れてスイッチにしたからか ※1 の10ミリ秒待つ動作をしないと、ON→OFFへスイッチを動かすあいだに短い時間でなんどかHighとLowを繰り替えずみたいなので、短い時間は反応しないようにしてみました、正しい対処なのか、ボタンでもそのままなのかは完全独学で開始二日目なのでしりませんが、結果うまく行ったのでいいでしょう。今度アキバ行ったらボタン買って再トライしてみたいです。

あと、スイッチをOFFにした時入力端子がどこにもつながってないとHighでもLowでもない状態になっておかしなことになるので↓のように配線してみたらうまく行きました、自分で思いついただけなんで正しいかは(ryと思ってたら電子工作入門サイトに同じような配線があったのであってるみたいです。
[PIN]---------------[抵抗]-----------(VCC)
     |________[スイッチ]________(GND)

抵抗ちっちゃ過ぎたりなかったりするとスイッチが入った時すごい電流流れるから気をつけなきゃですね(?)
回路図はPCで書くのめんどいし、すごい簡単なことしかやってないので需要がないでしょうから書きません、欲しい人いたらリプでもください♡(ぐぐったらあなたのほしい情報はあると思いますが)

親切な方が内部プルアップを使ったほうが楽と教えてくださいました
まとめてくださってるサイトを紹介して頂いたので載せておきます。
http://d.hatena.ne.jp/hijouguchi/touch/20100619/1276955729(hijouguchiの日記)

お久しぶりです

このブログを放置してなんと3年も立ちました、時が過ぎるのは早いです

3年が立つ間に僕は高校を卒業することになり無事なんとか大学生になれそうなのでこのブログを復活させようと思います。
内容は旅行のメモと、プログラミングのメモ書きその他を考えてますが何週間で力尽きるかわからないのであまり期待しないでください☆(ゝω・)vキャピ

これが最後の記事の気もする!!!!!!!!!!11