2017年12月20日水曜日

CH◯NITHMのシミュレーターを作ったお話

こんにちは。水珈琲です。ごっちゃんです。

さて、Twitterを見てる人は知ってるかも知れませんが僕はCH◯NITHMのスライダーを作ってます。
少し前はシミュレーターも作ってましたが面倒くさくなったのでkb10uy氏のSeaurchinをお借りしてます。

今回作ったスライダーの仕組みとか、これからの方針とか、その辺りを書きたいな〜と思いつつ最初の部分を書いてます。


始まり


事の発端は友達でした。
僕は田舎に住んでいたんですが、友達がウニがやりてえ!って言うので車で1時間掛けて行ったんです。そしたら自分がドハマリしました。

しかし当時僕の住んでる市にはCH◯NITHMなんて無くて(リフレクビートとかユビとか弐寺はあった)悲しい状態だったのですが、何を血迷ったのか無ければ作ればいいじゃない!と自作に取り掛かり始めました。

まずアクリル板に手を出しました。
それっぽいのが出来そうだったからです。
今考えても一番適してる素材だと思います。

結局300mm x 450mmのアクリル板を長い方向に3枚に切って重ねることでいい感じにしました。
触った感じはかなり近いと思います。


センサー


スライダーはタッチパネルなので何かしらのセンサーを付ける必要がありました。
色々検討した結果、自分は赤外線遮断方式を採用することにしました。
一番のメリットは、タッチした感じが本家に近く、手袋でも反応する事です。
デメリットは上下の判定が出来ないことですかね。

このあたり詳しくまとめたページを作ってあるので興味がある方は是非。

これで設計が大体固まったので作業を進めるんですが、なんといっても田舎。
部品を注文して届くまでに時間がかかるのと、1回辺り500円の送料がかかるのです。

悪戦苦闘しながらなんだかんだ作った結果が、
こんな感じです。


ソフトウェア


スライダーが完成した辺りからシミュ作るのむずくね???ってなってきます。
susの解析は作ったもののレンダリングを放置してます...

まあ結局互換的にもあるもの使ったほうがいいよね的な理論でkb10uy氏のSeaurchinに対応するためのコンバータを書いて遊んでます。

AIR系判定が付いてないですが
こんな風に遊べます。

創作譜面が遊べるのでめちゃ楽しいです。(映像が下手なのが画面が小さすぎて手が動かなかったから)

まあCH◯NITHMをしたことがある人はわかると思いますが、映像の通りプレイ中はスライダーなんて見ません。
Seaurchinが対応してないのでスライダーを光らせてないですが、正直十分です。。。
かなり苦労して部品を作ったのに結局光らせないで遊んでるのなんだか...


最後に


もし、自分も作りたい!って方がいらっしゃいましたら、そこそこの覚悟を持ってやってみてください。
是非とも新しいスライダーを作り上げてほしいですね...!
プレイするだけなら光らせる機能は必要ないです。ほんと。

本当に最後になりますが、この度(前と比べて)都会に引っ越しました。
なんと引っ越す5日前に常々入れてくれと言っていた近所のゲーセンにCH◯NITHMが導入されました。
なんでこんなに運が無いんだ...と思いつつ引っ越した先でこの記事を書いてます。(向こうではめっちゃCH◯NITHMが流行ってるらしい)

こんな適当な僕ですが、スライダー第二弾を計画してます。
次は(光らせる機能ももちろん付けて)手袋にも上下判定にも対応できたらなぁ...と計画してるので、また何か出来たら記事を書きたいですね...

というわけで締め方が分からなくなってしまいましたが、今回の記事はこんな感じで終わらせていただきたいと思います。
最後まで読んでいただいてありがとうございました!



【宣伝枠】
締めたばっかりなのに速攻宣伝で申し訳ないんですが、Twitterのフォローをバックアップするサービスやってます。
17年の夏ごろからTwitterのアカウント凍結が相次いでるのでその予防になれば幸いです。

2017年12月19日火曜日

Cent OS7でBitZenyマイニング環境インストール

こんにちは。
BitZenyのマイニング機を増やしてます。

今回は1発でインストールする方法をまとめていきます。
全てrootユーザでの実行を想定しています。
環境に応じてsudoを付与してあげて下さい。



yum install git wget curl autoconf libcurl-devel jansson-devel openssl openssl-devel gcc gawk automake libtool
git clone https://github.com/bitzeny/cpuminer.git
cd cpuminer
./autogen.sh
./configure CLFLAGS=" -Ofast -flto -march=native"
make
make install

2017年12月17日日曜日

Bitzenyマイニング覚書

こんちは。水珈琲です。

なんかTwitterでCPUで掘れるBitzenyってのが流行ってるので色々やってます。
あいにく価値が上がってからのマイニングなのであれなんですが出来る限り効率アップを目指してます。

HTは使うべきか

先駆者さんの検証では

Windowsは無効の方が若干早い。Linuxは有効の方が若干早い。

らしいです。
うちの環境(Linux)で試しに無効にしてみましたが確かに遅くなりました。

ので、まあ...両方試して早い方でいいんじゃないですかね。

プールは使うべきか、プールはどれが良い

基本的に使うべきです。
1人だと効率が悪すぎます。
ただ、見つけた時には沢山のBitzenyが手に入るというメリットもあります。ごく稀ですが。
プールの選び方は、大規模なプールだと数分毎に誰かが見つけるので頻繁に手に入ります。ただし、皆で分けるので1度にもらえる量は少しになってしまいます。
小規模なプールだと、頻度は数時間に1度程度ですが、1度見つかるとそこそこの量が手に入ります。

個人的にはがっつり手に入るのが気持ち良い気がするので小規模プールを使ってますが、好みで選んで大丈夫だと思います。

採掘機は何が良い

手元にある機材で少し試しました。
Xeon2枚積んだラックサーバーも試してはみました。

R120b-1(ラック鯖) Xeon-E5630(2CPU8C16T(合計)) 4kH/s 215W
ThinkPad X230 i5-3320m(1CPU2C4T) 1.2kH/s 20W(画面最小輝度/バッテリー抜き)
MacbookPro MF839J/A i5-5257U(1CPU2C4T) 1.2kH/s 30W (画面最小輝度)
自作PC A10-7890K(1CPU2C4T) 1.6kH/s 150W


...電力消費量を見るとThinkPadを4台動かして80Wで4.8kH/s掘る方が圧倒的に高コスパなのでは...

思いの外、新しいノートパソコンは掘れます。(新しいと言っても3世代モバイルCore iシリーズとかで十分ですが)
きちんと冷却してメンテナンスするならば、ノートパソコンで掘るのはかなりありだと思います。
(故障率を計算に入れてないので鵜呑みにするのは良くないですが)

最後に

なんか思った事があれば追記します。。。
その辺に転がってるPCで掘れる仮想通貨はなかなか貴重なのでこれからも続く...?かも?

面白い通貨なので是非掘ってみたら良いと思います。
デスクトップPCで24時間30日掘ると電気代が数千円上がるので気をつけて下さいね。

2017年8月7日月曜日

Android Studioでビルドと実行がズレたお話

最初に

この問題の解決策を教えて頂いた @kimukou2628 様本当にありがとうございます...!
凄く助かりました...

状況

  1. Aを編集してBuild&Runしても反映されず,もう一度Build&Runすると反映される.
  2. Aを編集してBuild&Runしても反映されず,Bを編集してBuild&RunするとAが反映される.Cを編集してBuild&RunするとBが反映される(以下無限ループ)

試した事

  • ProjectのClean
  • ProjectのRebuild
  • StudioのInvalidate Caches / Restart
  • InstantRunの無効化
  • .gradleの削除&再実行
これらはどれもうちの環境では効果がありませんでした.

解決方法

  • *.imlファイルの削除(リネーム)
  • *.ideaフォルダの削除(リネーム)
あっさり解決してしまいました...ホントびっくりです...!

2017年7月22日土曜日

Android開発初心者の壁レイアウト、そしてWeight

Androidアプリ開発を初めてしているほとんどの方はこう思うはずです。
Androidのレイアウトって難しい。
では何故こう感じるか、そしてレイアウトの考え方のお話をします。

まずAndroidはiPhoneと大きく違う所があります。
それは画面サイズです。iPhoneはAppleだけが製造しているためサイズも数種類しかありません(最近増えてますが...笑)
一方Androidは各メーカーが自由に設計、製造しているため画面サイズ、解像度がまちまちなんです。

そのため絶対座標でレイアウトを作ると小さい端末でははみ出て、大きい端末では余白が出来てしまいます。

この問題を解決するためにAndroidではWeight(重み)という概念を使います。簡単に言い換えるとです。

まず最初にlayout_widthとlayout_heightについて理解する必要があります。

layout_widthは横幅、layout_heightは縦幅です。

これらに代入出来る内容は同じで数種類あります。

match_parent 親のサイズに合わせる
wrap_content 自分を表示できる最小サイズ
fill_parent 親のサイズに合わせる
Xdp

この4つです。
fill_parentは過去の遺産なので忘れましょう。意味としてはmatch_parentと一緒です

Androidのレイアウトは親子関係があります。
画面幅が100、中にあるLinearLayoutの幅が50でその中のボタンをmatch_parentにした場合ボタンのサイズは50になります。
XdpはXに数字が入ります。上のバー(アクションバーって言います)は48dpといったように色々決まってます。ここの数字はあまり使わない...はずです。
というか必要最低限に抑えるようにすると良いです。



では本題であるWeightについてです。
まず、前提としてWeightを使うときのみLinearLayoutの向きに応じて幅を0dpにします。

horizontalまたは未指定の場合はlayout_width
verticalの場合はlayout_height

を0dpにします。
0dpにしない使い方もありますがここでは省略します。

あと、最近のAndroidStudioはConstraintLayoutというのが標準になってしまっているので
android.support.constraint.ConstraintLayout

LinearLayout 
に書き換えた上でapp:から始まる行を全て消しましょう。
これらはConstraintLayout専用のパラメータなので大丈夫です。
ついでにLinearLayoutの中に
android:orientation="vertical"
を追記しておきます。

条件

  • ルート(一番親)はLinearLayoutでvertical指定
  • その下にLinearLayoutを置いてhorizontal(水色に設定してあります)
  • 全てのボタンはwidthが0dp
  • ボタンの数字は設定しているWeightの数値

この図を見たら分かる事が色々あると思います。
1つだけ設置してweightを1にするとmatch-parentと同じ動きをします。
2つ設置して両方1にすると半々になります。同じ重さの物は同じサイズになります。3、4と増えていっても同じく同じサイズです。

Weightが1の物2つ = Weightが2の物1つ (上から5,6つ目の画像)

ちなみにWeightは100分率の考え方も出来ます。
80:20だったら両辺10で割って8と2にすれば画面幅80%と20%に別れます。(80と20でも大丈夫)

片方を85%,もう片方を15%にしたいならそれぞれその数字を入力すればOK。

最低限これだけが分かっていればAndroidのレイアウトはなんとでもなります。

つまるところ、そのViewのWeight/Viewが入ってるLinearLayoutの中のView達のWeightの総和の画面幅になるってことです。

豆知識として画面右と画面左(上下も可)に表示したい時はボタンをwrap_contentで2つ置いた後2つの隙間にSpaceを置いてSpaceだけWeightを1にすると左右にボタンが設置されます。
Weight未指定は0なので表示されない気がしますがwrap_contentが優先されるので、ボタンが最低限表示できる幅を保持したままSpaceが最大化されるためです。

とりあえずはこの知識があればAndroidのレイアウトは結構出来ます。
是非マスターしてみて下さい!
分からない事があれば質問していただければ分かる範囲で答えたいと思います。

2017年5月13日土曜日

自宅サーバーという選択肢

はじめまして。私はジタクサーバー。あなたの開発ライフを守ります。
みなさんはじめまして! Githubでは@kawakawaritsuki、Life is Tech!ではごっちゃんと名乗っているものです。
自宅サーバーライフ、楽しんでますか! もう既に楽しんでいる方も、これからっていう方も是非読んでいってくださいね!
この記事はQiita版Life is Tech ! Members Advent Calendar 2016及びAdventar版LiT! Members Advent Calendar 2016、2日目の記事です。

My Server

OS:CentOS Linux release 7.3.1611 (Core)
M/B:A88M-ITX/ac R2.0
CPU:AMD A10 7870K
ROM:500GB+3TB+1TB
RAM:8GB
拡張:PT3

500GBのHDDはOSとhome。60GB程度を/に、残りをhomeに割り振ってます。
3TBのHDDはChinachu用。動画が大量に入ってます。
1TBのHDDはSamba用。ファイル共有ですね。

コマンドラインのみで使ってます。
また、SSHは鍵認証方式を使っています。
パスワードで認証している人は是非鍵認証方式に変更してみましょう。
あとサーバーに対してLAN用のDNSを設定しておくと便利ですよ。

用途

ファイルサーバー

今回の記事で取り上げる内容1つ目です。
自分用のファイルサーバーは一台あると本当に便利です。

テストサーバー

今回の記事で取り上げる内容2つ目です。
なにかサーバーを立てたいなってなった時に手元にサーバーがある安心感は他の何にも変えられません!(?)

運用サーバー

今回の記事で取り上げる内容3つ目です。
実際に稼働させるためのサーバーとしても使えます。おすすめはしませんが。
僕は本稼働のみConoHaというVPSを使っています。
今は自宅サーバー一本でやってます。

マイクラサーバー

身内でやってる奴です。 工業楽しいですよね。 どうでもいいので今回は取り上げません。

録画サーバー

Chinachuを使って録画サーバーと立ててます。 条件一致便利。 ちょっとネタがアレなので今回は取り上げません。

Wikiサーバー

これが最高なんです。
Crowiっていうソフトウェアを使ってるんですがもう手放せないです。
自分専用のWiki、しかもMarkdownで書ける。画像もアップロードし放題。
最高です。

RADIUSサーバー

マイナーすぎて通じないと思いますがWi-Fiのエンタープライズ認証をする時に使います()

ファイルサーバーとして

僕は500GB弱を割り振ってます。
開発してるとファイルってどんどん増えますよね。
そんなときにファイルサーバーが1つあると本当に便利です。
色々試していてわかったのですが、Samba(Windowsのファイル共有形式)は転送速度がサーバーのCPUの速度に依存するのに対して、ftpだとほぼ帯域最大の速度が出ました。
Core i5で運用している友達はSambaを使っていますが、僕のサーバーは性能が低いのでSFTP(SSHで接続するFTP)で運用しています。

テストサーバーとして

その場で作業用のサーバーとしては自宅サーバーは最高の選択です。 あってよかった自宅サーバー。結構助かります。 RubyやPython、Java等といった良く使うソフトウェアを先に導入しておくと便利です。

運用サーバーとして

常に自分の隣にあるのでいざという時すぐに対応出来ますが、安定感、安心感に欠くのでおすすめこそしませんが可能です。 自分専用のBASIC認証をつけたウェブページを使いたい。等と言った用途ならば良いかもしれません。

Gitサーバーとして(おまけ)

GitBucketやGitLabといった素晴らしいソフトウェアを使用すればGitサーバーを 簡単に 立てることが出来ます。 もちろんプライベートですし身内との共同開発もし放題です。 ただしGithubの最大の強みであるOSSの利点は活かせないので使い分けをしましょう。 昔書いた記事があるので参考にどうぞ。Linuxでも使えます。

ドメインについて

無料で使えるDNS(DDNSも可)は個人的にはdip.jpをおすすめしています。 詳しくはdip.jpのページなどを参考にしていただければと思いますが、便利なサービスです。 また、独自ドメインも持っています。ドメインは一つ持っていると非常に便利に使えるのでとてもおすすめですが多少金額がかさむのが難点。 気にならないなら是非取ってみると良いと思います。

回線について

プライベートIPではなく、グローバルIPが振られている必要があります。 但し、これは外部に公開する目的がある場合のみです。 自分の家の中だけでファイル共有やテストサーバーとして運用する場合は問題ありません。 尚、外部に公開する場合はポート開放が必要です。 ルーターの設定を変更しましょう。

Dockerについて

テスト用にサーバーを立てる場合はDockerを使うと快適に使うことができます。 是非調べてみてください。 闇にハマります。本当に奥が深いです。

OSについて

僕はLinuxを使っています。 もちろんWindowsでも可能ではありますが、PSがよく分からない上GUIだと重い、接続制限(規約)があるなどと言った理由で使用していません。 接続数制限については学生なら無料でWindows Serverを入手出来ますが、結局汎用性が低かったりしてあまり使うことがない気がします。 但し、ファイルサーバーとして使う場合はSambaは"Windowsファイル共有"なので、Windows Serverの方が良いと思います。

おまけ

Life is Tech!要素がすっかすかになってしまったのでこんな時に便利!自宅サーバー!コーナーです笑

Web開発の成果を発表会や展示の時に公開したい!

自宅サーバーにアクセスしてぱぱっと公開しましょう! Webサービスコース(Sinatra)の方はRuby、Webデザインコースの方はApacheや下の小技等を使いましょう。 そしてIP、ポートをURLバーに打ち込んでテストします! うまく開けたら、発表会の時は短縮URL、展示会のときはQRコードにして画面に表示しておきましょう!

ファイルを間違えて消してしまう地獄に陥る前に!

どのキャンプに行っても絶対何人も現れるファイルが消えた事例。 いくら気をつけていても何故かファイルを失くすのです。 そのためにバックアップは必須!
  • 前述したGitサーバーを使うもよし!
  • 慣れた方法でサーバーにファイルを保管するもよし!
とにかくバックアップはお忘れなく!

一瞬で公開する小技

前提としてpythonが入っている必要があります。
公開したいWebページのルートディレクトリに移動して
sudo python -m SimpleHTTPServer 80
というコマンドを打つだけです。
起動したら別のPCからサーバーのIPを開いてみましょう。 きちんとindex.htmlが表示されたら成功です。
実際に公開したい場合は先にポート開放をしておきましょう。 また、80番ポートは危険なので他ポートをおすすめします。
本当に楽で便利です。ただあくまでも本稼働向きではなくテスト用と考えたほうが良さそうです。 本稼働の場合はきちんとApacheなどを使いましょう。

最後に

内容が貧弱すぎるので徐々に追記していきたいと思います。 サーバーをまるっと変える予定があるのでその時に更新するかもしれません。
明日、3日目は@Windows_Tenさんの「開発が捗る環境づくり」です! 捗るのって大切なので楽しみです。
最後まで読んでいただきありがとうございました。

ATtiny85にArduinoで書き込んでみた

環境

自分はMacOSX10.11.3でArduino1.0.5を使っています。 もちろんWindowsでも出来るはずです!

普段は1.6.xを使っているのですが、自分の環境では手順1で引っかかってしまったので、1.0.5を使っています。 Arduino1.0.5はここでDLできます。 https://www.arduino.cc/en/Main/OldSoftwareReleases#1.0.x

手順

  1. ArduinoIDEの準備をする
  2. ArduinoにArduinoISPを書き込む
  3. いい感じに配線する
  4. 書き込む

1.ArduinoIDEの準備をする

http://make.kosakalab.com/make/electronic-work/arduino-ide-arduinoisp/ こちらのページの

ATmega/ATtiny記述ファイルアーカイブ

から、hardware.zipをDLします。 そして、自分の標準のフォルダ(Arduinoフォルダ)に解凍したものを入れます。

そしてArduinoIDEを起動します(この時点で起動していた場合は再起動させてください)。 ツールのマイコンボードの中にATtinyなどが追加されていればOKです。

2.ArduinoにArduinoISPを書き込む

Arduinoのツールバーのファイルの中の、スケッチの例の中にあるArduinoISPをクリックします。 するとソースが表示されるので、それをArduinoに書き込んでください。

3.いい感じに配線する

こんな感じです

さっきのページにも配線図はありますが、書き込むだけの装置なら正直これだけで十分です。(テストするなら話は別)

4.書き込む

ソースコードが書けたら、先ほどの配線をしたArduinoを接続します。 そして、ArduinoIDEのツールの中の マイコンボードをATtiny85に 書き込み装置をArduino as ISPに設定します。

そして、いざ書き込み! 普通に書き込みボタンを押します。 エラーが出ることが結構ありますが、案外書き込めてます。 試してみてください!

「ln.is」について調べてみた。

最近(?)Twitterで問題になったりならなかったりする、「ln.is」について調べてみた。

最初に

真似しないでくださいね。。。笑

とりあえずやってみた。

http://linkis.com/ にアクセス!

そこから試しに短縮URL(じゃない気がするけど笑)を生成してみた。

検証1(URLについて)

(最初からコレでいいじゃんというツッコミは置いといてw)

検証2(ページについて)

ページの5分の1くらいのサイズにLinkis特有のメニューが出てる。

↑こんな感じ

短縮元ページはiFrameで表示してるみたい。 ファビコンはlinkis.comのものに差し替わってる。 このメニューで出来ることは、いいね!とシェアと共有元の人、それにページに対してコメントも付けれるみたい。

やりたいことは分かるんですがちょっと嫌ですねー。

検証3(ツイートのURLが自動的に書き換わる)

ページを見てたら、「Twitter automation」という項目があったので、チェックに入れてみた。 https://twitter.com/Dummy01001/status/697019738594140160 ちゃっかり書き換わった。 URLが入ったツイートをされると、一度ツイートを削除してURLを書き換えてもう一度ツイートする仕組みのようだ。

結果

  1. ページに独自のメニューを出すサービス。コメントとか出来る。
  2. 1については、ページの改竄とも取れる。
  3. ツイートに含まれてるURLを勝手に書き換えるといった事も出来るようだ。
  4. このサービスを使ったページを開くと承認を促されるため他人に広がりやすい

他人に迷惑?

迷惑といえば迷惑かもしれない。 とりあえずサイトを運営されている方に申し訳ない それに、どうやらこのサービスを使ったページを開くと、認証を促されることがある模様?(確認は取れていません) (追記:5/9)

このように、Twitterと連携しましょう的なものが表示されることを確認しました。 おそらく何のことか分からず、連携ボタンを押して他人に回って〜という無限ループが生まれるんでしょうね。。。 (前回確認が取れなかったのはおそらくlink.isのアカウントにログインしたままだったからだと思います) (追記ここまで)

少なくとも自分から使ってないかぎりは自分にとって迷惑ですね(汗)

感想

自分は公式のページから試したものの、意味わからないまま認証したりしてそう。。。 おそらく、ln.isのURLでツイートしてる人の大半は気づいてないと思う。 一回認証しちゃうとそれ以降ずっとらしい。

結論

たまにはTwitterなどのSNSの認証状態を確認していらないものを外そう!

(追記:2/9)

確認方法

https://twitter.com/settings/applications このページに、「Linkis.com」という項目があったらそれです。

解除方法

こんなサービス使わない!という人は、確認方法で書いたページで、いらないものの「許可を取り消す」ボタンを押します。 その後、 http://ln.is へ行き、Settingの中のACCOUNTSページで、ログアウトボタンを押してください。 (追記ここまで)

2017年5月10日水曜日

WPA2Enterpriseな無線環境を作りたい妄想

こんにちは。みずこーひーです。 今すごく迷走してます。。。 WPA2Enterpriseな環境を作ってみたい。。。けど対応APたっけえ!!! って感じです。 やるなら外部RADIUS鯖が良いんですよね。あととにかく早い方がうれしいですが。 AirMac Extremeとかリースアップの業務用APでも手に入れた方が良いのか。。。 最低でも300Mbps出れば実用の範囲内(今はacで理論値1Gbps超えの実測500Mbps弱) くらげみたいなAirMac落札してみますかね。。。

WindowsにGitサーバーを立ててみた話

普段は、Macを利用してプログラミングをしているのですが、この際自分用の自由なGitサーバーが欲しくなったので、自前の自宅サーバー(Windows7Pro)にサーバーを立ててみました。

サーバーソフトウェア選び

いろんなソフトがあるようですが、今回はGitBucketというソフトウェアを使ってみました。GitHubのクローンのようなものです。日本の方が作られているとのこと。

ダウンロード

####GitBucket本体 https://github.com/takezoe/gitbucket/releases このサイトの、warファイルをDLします。

Java(JRE)

このソフトはJavaで実行するので、JREが必要です。

起動方法

基本的にはbatファイルを作成して起動するのがいいと思います。

warファイルがデスクトップに有ることを前提として、

  • デスクトップ右クリック
  • 新規作成→テキスト
  • ファイル名を「好きな名前.bat」となるようにする。
  • そして、そのファイルを右クリックして編集。

ファイルの中に、

java -jar gitbucket.war

と書いて、保存して終了する。

そして、その生成したbatファイルをダブルクリックすると起動出来ます。

操作方法

起動ができたら、その端末のブラウザから http://localhost:8080 へアクセスします。 UIはまさにGithubなので使い慣れていれば安心です。

その他のPCからは、 http://192.168.XXX.XXX:8080 と、IPアドレスを指定してあげます。

開けない場合はファイアウォールから許可してください。

初期設定

初めて起動した時は、アカウントを作ることはできないので ID:root PW:root と入力してログインします。

その後、右上のスパナマークをクリックして、System Settingsへ移動すれば、ユーザーを作れるようにしたりすることができます。

ログインはメールアドレスではなく、IDでのログインとなります。

ポートについて

さすがにポートが8080だと都合が悪い場合もあると思うので、ポートの変更方法について

batファイルのgitbucket.warの最後にスペースを開けて

--port=80

などと追記することで、設定できます。

最後に

かなり簡単にGitのサーバーを実装することが出来ました。 warファイルはJavaなので、LinuxでもMacでも簡単にインストールできると思います。 内容に、誤字や不備があればコメントいただけると幸いです。

JavaでHttpのGETとかPOSTをさくっと実装したい

こんにちは。中3(執筆時)のどこにでもいそうなプログラミングバカです。 今回は最近個人的にPOSTとかしまくったアプリを作っててその時に作った何かの残骸っぽいもの。 簡単に言うとGET/POSTがさくっと使えるクラス。

ソース


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.URL;
import java.net.URLConnection;

public class HttpConnector {

    String host = "";//ここにドメインとか書いておくとコンストラクタのhostにファイル名を指定することができる
    String message = "";
    String contentType = "";//ContentTypeをここに指定しておく。

    private OnHttpResponseListener resLis = null;
    private OnHttpErrorListener errLis = null;

    public HttpConnector(){}
    public HttpConnector(String host){
        this.host += host;
    }
    public HttpConnector(String host, String message){
        this.host += host;
        this.message = message;
    }

    public void get(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(host);
                    URLConnection uc = url.openConnection();

                    InputStream is = uc.getInputStream();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                    StringBuffer sb = new StringBuffer();
                    String s;
                    while ((s = reader.readLine()) != null) {
                        sb.append(s);
                    }
                    if (resLis != null)
                        resLis.onResponse(sb.toString());
                    reader.close();

                } catch (IOException e) {
                    if (errLis != null)
                        errLis.onError(0);
                }
            }
        }).start();
    }

    //ポスト用コマンド
    public void post(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(host);
                    URLConnection uc = url.openConnection();
                    uc.setDoOutput(true);
                    uc.setRequestProperty("Content-type", "application/json");
                    OutputStream os = uc.getOutputStream();

                    PrintStream ps = new PrintStream(os);
                    ps.print(message);
                    ps.close();

                    InputStream is = uc.getInputStream();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                    StringBuffer sb = new StringBuffer();
                    String s;
                    while ((s = reader.readLine()) != null) {
                        sb.append(s);
                    }
                    if (resLis != null)
                        resLis.onResponse(sb.toString());
                    reader.close();

                } catch (IOException e) {
                    if (errLis != null)
                        errLis.onError(0);
                }
            }
        }).start();
    }

    public void setHost(String host){
        this.host = host;
    }

    public String getHost(){
        return host;
    }

    public void setContentType(String contentType){
        this.contentType = contentType;
    }

    public String getContentType(){
        return contentType;
    }

    public void setMessage(String message){
        this.message = message;
    }

    public String getMessage(){
        return message;
    }

    public void setOnHttpResponseListener(OnHttpResponseListener listener){
        this.resLis = listener;
    }

    public void setOnHttpErrorListener(OnHttpErrorListener listener){
        this.errLis = listener;
    }

    public void removeResponseListener(){
        this.resLis = null;
    }

    public void removeErrorListener(){
        this.errLis = null;
    }

}

import java.util.EventListener;

public interface OnHttpResponseListener extends EventListener {
    void onResponse(String response);
}

import java.util.EventListener;

public interface OnHttpErrorListener extends EventListener {
    void onError(int error);
}

説明

適当に作ってるんでエラー番号の処理とかは書いてません。すみません。 Androidで使う場合はHandlerをかませる必要があることが有ります。コメントしていただければそれ用のソースも公開します。 ほとんど例外書いてないんであまり変なことはしないほうがいいかも。

使い方

GET


HttpConnector httpConnector = new HttpConnector("http://example.com/");
httpConnector.setOnHttpResponseListener(new OnHttpResponseListener() {
    @Override
    public void onResponse(String response) {
        System.out.println("Response:" + response);
    }
});
httpConnector.setOnHttpErrorListener(new OnHttpErrorListener() {
    @Override
    public void onError(int error) {
        System.out.println("Error:" + error);//現状0しかない
    }
});
httpConnector.get();

HttpConnector httpConnector = new HttpConnector("http://example.com/"); でホスト指定。 変更する際はsetHostとかでできます。 setOnHttpResponseListenerで成功時のリスナ、setOnHttpErrorListenerで失敗時のリスナを指定。(強制ではないのでエラーのみ未実装とかでもOK。) OnHttpResponseListenerのresponseに受信した文字列が入ります。 そして、最後のhttpConnector.get()で受信を開始します。処理はスレッドで行うようにしてます。

###POST

HttpConnector httpConnector = new HttpConnector("http://example.com/","POSTするメッセージ");
//HttpConnector httpConnector = new HttpConnector("http://example.com/");
//httpConnector.setMeesage("POSTするメッセージ");//この2行でも可
httpConnector.setOnHttpResponseListener(new OnHttpResponseListener() {
    @Override
    public void onResponse(String response) {
        System.out.println("Response:" + response);
    }
});
httpConnector.setOnHttpErrorListener(new OnHttpErrorListener() {
    @Override
    public void onError(int error) {
        System.out.println("Error:" + error);//現状0しかない
    }
});
httpConnector.post();//ここ重要

Getとの違いは、POSTするメッセージを指定すること(コンストラクタでも指定できるしsetMessage()メソッドでも指定可)と、最後のhttpConnector.post()でポストをすることです。

どうでもいい応用

例えば、同じドメインで複数の場所にアクセスするとき

HttpConnector httpConnector = new HttpConnector("get");//実質http://example.com/getと同じ
HttpConnector httpConnector = new HttpConnector("post");//実質http://example.com/postと同じ

っていう使い方ができます。

最後に

読みにくい文章を最後まで読んでいただいてありがとうございました! 誤字やソースのミスがあればバシバシ言ってもらえると嬉しいです! 一人でも役に立てれば幸いです!

Crashlyticsを活用しよう

はじめまして。LiT!ではごっちゃんと名乗っているメンバーです。

今回は Android iOS コースのメンバーで特に そろそろリリースしたいなあ って思っている人向けの記事です。 ...とは言いましたが、リリースする予定が無い自分用のアプリでもかなり便利です。 とりあえず入れておきましょう。

Crashlyticsを活用すれば、リリース後のあんな困った!やこんな困った!を簡単に解決できちゃいます。

また、今回の記事ではAndroidを対象として書いています。 iOSについても後日追記したいとは考えていますが今のところはAndroidのみです。

この記事はQiita版Life is Tech ! Members Advent Calendar 2016及びAdventar版LiT! Members Advent Calendar 2016、6日目の記事です。

Crashlyticsとは

簡単に言えばエラーが起きた時 自動的に エラーの情報が開発者に送信されるサービスです。 CrashlyticsはTwitter社が提供しているサービスなので安心です。

Androidだと、エラーが発生した時「問題が発生したため◯◯を終了します」というものが度々表示され、レポートボタンを押せば開発者にエラー情報を送信できます。 しかし、これは任意であるため、殆どの人が押しません。 これでは、開発者が気づかないエラーが紛れ込んでいる可能性もあります。

しかしCrashlyticsは完全に自動で送信されるため、バグがあったときに 素早く 対処することが出来ます。

また、リリースする予定が無いアプリでも、いきなりなんか落ちた!って事、よくあると思います。しかし、そのタイミングでPCに繋いでいないとエラーログが見れなくてもやもやっとすることが僕は沢山あります。

そんな時でも、Crashlyticsを入れておけば落ち着いてからエラーを見返すことが出来ます。 しかもずっと残るので安心です。

PCへの導入

https://get.fabric.io/ とりあえずアクセス! このページではFabricと書いてありますが、CrashlyticsはFabricの中の一つのサービスなのでまずはFabricの登録をします。

公式サイト見たら簡単に出来ますが一応手順を簡単に書いておきます。

まずはGet Started with Fabricをクリックしてアカウントを作ります。エラー情報が来た時などにログインするのできちんと覚えておきましょう。

無事、登録/ログインが出来たらダッシュボードが開くと思います。

https://fabric.io/downloads/android

このページの手順に従って準備します。

Android StudioのメニューのWindowsならFile-Settings、MacならAndroid Studio-Preferences を開いて、その中のPluginsを選択します。

そして、Browse repositoriesをクリックし、検索窓にFabricと入力し、"Fabric for Android"をインストールします。

その後Android Studioを再起動するとFabricのアイコンが表示されていると思います。

導入はこれで完了です。

アプリへの導入

Android Studioの上のバーのFabricボタンを押します。 すると右側に電源ボタンみたいなのが出てくると思うのでそれをクリックしてログインします。 Kit選択画面まで進んだら、Crashlyticsを選択し、Installボタンをクリックします。 ここで、ソースコードの編集部分が表示されるので確認したらApplyボタンをクリックします。

これで導入自体は完了です。 簡単ですね!

一度インストールした状態でFabricのサイトにアクセスするとアプリ名が表示されているはずです。 Crashlyticsの項目を選択すると、エラーの情報などを閲覧することが出来ます。

また、エラーが発生したときには自分宛てにメールが届きます。 これで見逃すことはありませんね!

最後に

ライブラリやサービスには、利用者にとって便利なものが沢山あります。 しかし、もちろん開発者の手助けになるものも色々あります。

便利なサービスを活用してより良いソフトウェアを作ることもまた、とても良いことです。

今回はCrashlyticsを紹介しましたが、Crashlytics以外にも様々なサービスがあります。是非色々探して使ってみてください! また、これ凄く便利!というものを見つけたらQiitaなどに投稿していただければまた別の人の役に立つと思います!

長い文章を最後まで読んでいただきありがとうございました。 写真や画像がなく凄く読みづらかったと思います。 きっと探せばもっと分かりやすい説明があると思うので1情報として活用していただければと思います。 申し訳ありませんでしたm(-_-)m

明日は@Windows_Tenさんの"MODのテクスチャを作ろう"です! Moddingは闇に包まれてる気がしますができれば楽しいんでしょうね(遠い目)。 僕も少しは作ってますが...

お楽しみに!

はじめまして。

はじめまして。みずこーひーです。
この度Qiitaに書いてた記事を引っ越しました。
Qiitaが改善されたら戻っても良いんですけどね。。。

Androidとかそれ以外の事とか書きます。