Linuxで動かすswiftからC++のコードが呼びたい
どうも,まるさ@maruuusa83です.
xcodeを使わない,CLIのswiftからC++コード呼び出すのにちょっと困ったのでメモします(初心者丸出し)
Linuxとかでswift書いてて困った人どうぞ
知っておくべきこと
- swiftからはC/Objective-Cしか呼び出せない
swiftc
を使うと-import-obj-header
でブリッジヘッダが指定できる
適当にググるとxcode使ってる場合の情報ばかりなので困りましたが,なんとかなりました.
ブリッジするときC++成分があるとSwiftが怒るので注意します.
C++のコードのオブジェクトファイルを用意する
Cとくっつけるためにextern "C"
したC向けWrapperを用意する必要があります.
HelloSwift.cpp
#include <iostream> class HelloSwift { public: void hello_swift_from_cpp() { std::cout << "Hello Swift from C++!\n" << std::endl; } }; extern "C" void helloswift(void) { HelloSwift hs = HelloSwift(); hs.hello_swift_from_cpp(); }
オブジェクトファイルつくりましょう.
$ g++ -c HelloSwift.cpp
ブリッジヘッダファイルを用意する
Swfitで読み込むCかObjective-Cのヘッダファイルを用意します. ここでC++成分が残っていると文句を言ってきますので注意.
具体的には,C++のときにextern "C"
しておいたWrapper群を列挙します.
bridge.h
void helloswift(void);
swiftをかく
ここまでくるとC++コードがswiftから呼べるようになります.うれしい.
ヘッダはコマンドオプションで直接指定するのでimport
の必要はありません.
test.swift
// bridge.h is imported
helloswift()
swiftcする
先ほど書いたブリッジヘッダファイルを-import-objc-header
で指定しておくのがミソ.あと,C++のオブジェクトファイルも渡しておきます.
$ swiftc -import-objc-header bridge.h test.swift HelloSwift.o $ ./main Hello Swift!
動いた!
それでは,今回はこのへんで ノ
まるさ
JavaとPythonでFPGA回路設計をするための開発環境作ったよ
どうも,まるさ@maruuusa83です.
ひさしぶりに真面目に技術っぽい記事かきます.
現在ぼくは,コンピュータ・アーキテクチャあたりの単語をキーワードとしている研究室で活動をしています.
もともとずっとソフトやってたのでヒーヒー言ってます.
高位合成(HLS, High Level Synthesis)という技術がホットだそうで,色々あってツールを統合するツールを作りました.
PyJer: JavaとPythonでサクッとZedBoardアプリを設計するよ!なフレームワーク
Java言語ベースの高位合成ツールSynthesijerと PythonベースのIPコア合成フレームワークPyCoRAMを組み合わせていい感じにサクッとZynqアプリがつくれます.
まだREADME雑にしか作ってないですがご勘弁を.
今回作ったフレームワークの嬉しいところは,JavaとPythonでロジックを書いたらあとはBOOT.binの生成まで勝手にやってくれるところです.
ぼくはこいつをGitlab CIに食わせてDropboxに出来上がったBOOT.binを投げ込んでくれるようにしています.
OS載せたZynqを想定しているので,ビルドをフックさせて自動デプロイまでできると思います.
どんなもの?
次のようなアーキテクチャのハードウェアの構築のためのフレームワークです.
ハードウェアの概略構成
このような構成に限定しているために,BOOT.binの生成まで勝手にやってくれます.
赤枠が自分で実装することになる部分です.
IoTデバイスのような,外部回路(センサなど)からデータを受け取ってインターネットへ出力するデバイスの プロトタイピングのためのツールとして作成しました.
User Logicの領域は主にJava言語のフツーのプログラムとして記述します.
Synthesijerを用いた高位合成によってハードウェアが合成されます.
ぼくは外部回路との通信などクロックレベルのタイミング管理が必要な部分はVerilogで書いてJava側から呼び出しています.
PSとPLの間のデータ共有は,PyCoRAMが生成するCoRAMアーキテクチャを使って行ないます.
そのため,Data Flow ControllerはPythonによって記述することになります.
User Logicで処理したデータはDRAMに転送できるので,Linux上のプログラムから自由にデータを使うことができます.
つかいかた
(v0.2.1時点での使い方です.この後変更の予定があります.詳細な使い方はまた別にまとめます.)
1.前提
- Linuxディストリビューション上で動作させる
- Java SE 8, python3, jinjer2が入っている(Synthesijer,PyCoRAMに必要な環境)
- 高前田先生のPyCoRAM導入の資料の「Linuxカーネルイメージ作成」~「SDカードへの書き込み」の準備を行ったZedBoardがある
- Vivadoが導入されていて,コマンドラインからbatchモードが使える
- Vivado SDKもコマンドラインからbatchモードが使える
2.導入
とりあえずGithubからcloneしてきます.
cloneが済んだらmake init
してみてください.
このコマンドでSynthesijerとPyCoRAMがプロジェクト内にクローンされます.
いちおう,make test
というコマンドを用意しています.サンプルプロジェクトを展開してビルドしてcleanするというもので,
きちんと導入できているか確認するのに使えます.が,マシン次第でとても時間がかかることがあるので注意してください.
3.ハードウェアの開発
テスト用に作ったサンプルプロジェクトがtestディレクトリ内にあります.
testフォルダをルートに読み替えた感じでコードを配置することになります.
すなわち,
- Synthesijer関連:プロジェクトルート直下
- PyCoRAM関連:pycoram直下
- Vivado関連:vivado-autobuilder下
となります.
シンプルなプロジェクトならば,PyCoRAM周りはtestのプロジェクトをコピペで作るのが楽かと思います.
4.ビルド
ルート直下のMakefileの最初のほうに設定項目があります.
- TOP:Synthesijerのトップモジュールのファイル名
- MODULES:Synthesijerで書いたモジュールのファイル名一覧
- WRAPPERS:Verilogコードを使っている場合,SynthesijerによるそのWrapperのファイル名一覧
- VERILOG_MODULES:Verilogで記述したモジュールのファイル名一覧
たとえば,testプロジェクトだと次のような記述になります.
TOP=SumTestTop.java MODULES=SumTest.java Dummy.java WRAPPERS= VERILOG_MODULES=
PyCoRAM関連のソースコードのファイル名はtestプロジェクトと同様にしていれば特に設定の必要はありません.
もし必要があれば,Makefileのマクロを書き換えてください.
開発途中,Javaの合成だけしたい!とかそういう場合はsynthesijer_build
,pycoram_build
などの
makeコマンドを使うとよいです.
さいごに
PyJerではJavaとPythonで簡単なヘテロジニアスなプロセッシング環境のプロトタイピングができます.
複数のセンサやモータを取り回すようなものづくりに使えるように書いてみました.
サクッと書けてCIも回せるので良い感じだったと思います.(締めが雑)
Synthesijerの三好さん,PyCoRAMの高前田さん,お世話になりました.ありがとうございます!
というわけで,ツールを書いたお話でした.
それでは,今回はこの辺で ノ
まるさ
新宿御苑以外にもよい公園はたくさんあるんだよ!!!!
どうも,まるさ@maruuusa83です!
自然の多いところにいきたい
どうでもいいことですが,ぼくはよくぼっちで自然のある場所を探し求めます.
でも都会の有名なところはカップルがいっぱいでぼっちでいるぼくは少なからずヘコみます.
ぼっちでは手をつないだり知らない植物見てキャイキャイしたりできないわけです.
新宿御苑とか神代植物公園とかいいところだけど若干ぼっちには厳しい.
まわりのみんなが「新宿御苑!新宿御苑!」としか言わないので御苑以外に東京都心から電車一本で行ける個人的に好きなところをボソリとつぶやきます.
もちろん新宿御苑も素晴らしい.秋のモミジバスズカケノキ並木は最高.
神代植物公園
最近大温室がリニューアルしたので行きたくてウズウズしています.
タイミングによっては人がちょっぴり多いのでぼっちだとつらいことがあります.気を付けましょう.
基本的には植物を鑑賞するための公園で,遊んだり寝転んだりする場所はありません.
個人的に好きなのはバラ庭園.
バラシーズンの直前には藤のカーテンがキレイでした.
甘い香りで甘い気分に(?)
神代植物公園は高い木が多くて涼しい
参拝するのもよし,深大寺そばを食べるのもよし.
このあいだ一人で行ってそば饅頭を2つ買ったのですがカップルで食べるものだと思われてなんかツラかったです.
ぼくは歩くのが好きなのでこのまま野川沿いに武蔵国分寺公園向きに北上していくのが好きです.(見どころがたくさんある)
逆に南下していくと二子玉川のほうまで行けるようです.
なんか自分で撮った写真が少ない・・・
武蔵国分寺公園
じ,じつを言うと武蔵国分寺公園のほうに入ったことはありません.
が,野川遡上をしていくとお鷹の道~真姿の池のほうに出ることができます.ここいいんですよね.
お鷹の道
武蔵国分寺公園のほうまで入ったことはないのですが,芝が広がってて良いところっぽいです.
友達も「ダンケパーク」と呼んでいました.
この公園,旧国鉄中央鉄道学園跡地だということは前から知っていて,廃線/軌道跡めぐりをしたくて仕方がないです.
武蔵国分寺公園Webサイト
昭和記念公園
この記事の真打です.新宿御苑の対抗馬ですね.
だいたい新宿御苑の倍くらいの広さがあって,自然を残したエリアから巨大な芝生エリアまでなんでもアリです.
新宿御苑と似てこそいますが,もうちょっとカジュアルな感じの公園です.
冬の暖かい日の昼寝は最高
春には色々な桜が見れる
日本庭園も整備されていて,盆栽の展示なんかもやってます.
雪吊りもやってます.
昭和記念公園の日本庭園は個人的な穴場.お抹茶が頂ける.
ここは案外ぼっちでもつらくない.ぼっちである事実を除けば.
武蔵野はたくさん公園があって良い
ここまでで紹介しませんでしたが,武蔵野にこればまだまだたくさんの公園があります.
武蔵野の森を残したような公園で,広場があって,というかむちゃくちゃ広くて・・・的な.
今の時期はハケの保存区でホタルが見られます.
武蔵野には自然公園が多い
中央線から北上すると多摩湖があります.
徒歩だと好きじゃないとキツいですけど,自転車好きならこっちもアリです.
多摩湖近辺は森が残っていて野鳥観察が楽しい
東京の公園ってデカくていいですよね.
都心の公園だと外の喧噪とのギャップがなんだか不思議です.
浜離宮恩賜庭園まだ行ってないので行ってみたい.
それでは,
今回はこのへんで ノ
まるさ
上三依水生植物園でメコノプシスのお花見てきた
どうも,まるさ@maruuusa83です!
植物大好きマンのぼくが「日本では育たないという幻の青いケシ」を探し求めた話です.
大自然を駆け巡り,スピリチュアル体験をし,蛇に囲まれながらも幻の花を見るスペクタクルストーリー(?)
このあと30分森で迷子になった
好きな花
ぼくはケシが好きです.アヘンはいらないです.
食べるほうじゃないです.花のほうです.
可愛いですね.かわいい.
というかキンポウゲ系の花が好きなんですよね.
いやー,キンポウゲって良くないですか?????
Anemone coronaria 16/3/22
こういう雄しべ雌しべがワーッとあるような花が好きです.
最近よくSalvia guaraniticaを見かけるのでトリカブトの花の時期が楽しみになっています
(まだみたことない)
百合のほうではなく花のほうです.花のユリはカタカナにすることにしましょう.
筑波実験植物園に咲いてたなんだか珍しいオオミスミソウ
(これ同定大変だったし本当に正しいのか)
二重咲のオオミスミソウ.葉の斑と紫もかわいくて一目ぼれ.
Hepatica nobilis Schreb. var. japonica 16/4/1
閑話休題.
メコノプシス・ベトニキフォリアってご存知ですか?
ぼくはご存知です(?)
日本では「ヒマラヤの青いケシ」などと呼ばれているそうで,中学生の頃からずっと見たくて仕方のない花です.
なかなか日本では栽培困難らしくぼくの中では幻の花,伝説の花と位置付けられています.
でも通販でならなんとか買えるみたいだし・・・どっか見れるんちゃうのん・・・
ということでメコノプシスを見る旅に出る
日光市の北のほうにある植物園で見れるらしい情報をGETしたので,いざ日光へ.
ぼっちで.
目的地は日光のはるか北ということで,きぬがわで鬼怒川温泉駅まで.
ここまで2時間半ぐらい
この後東武鬼怒川線と野岩鉄道会津鬼怒川線に乗るのですが,本数が少ないのでここで一時間ほど休憩することになります.
出発のとき切符がうまく買えなかったのですが,駅員さんが「あー忙しいからこれあげる」と言って着駅清算券なるものをくれました.ご迷惑おかけしました・・・
着駅精算券.このすぐ隣でカップルがイチャイチャしててつらかった.ぼっちなので.
野岩鉄道線内に進入するとトンネルだらけでハァー電波も無エ,景色も無エ,電車もそれほど走って無エって感じです.
さらにもう40分くらい電車に乗ります.
上三依塩原温泉口駅に到着
あーっ山奥~~~みたいなところでとても良い
電車が少ないので,この辺まで来ると日帰りが厳しくなってきます.
空気がキレイで気持ちいい.
この駅にはパワースポットがありました.
自らパワースポットだと名乗るパワースポットは初めて見ました.
自己主張するパワースポット
よくわかんないですが,知らないおじさんがこの上に立って上を見上げながら「そうか・・・」とつぶやいて何かを感じているようでした.
花を見る前に何かに連れていかれるのは困るのでぼくはやりませんでした.
このあとまたほんの少し歩きます.
上三依水生植物園に到着
家からどえらい遠かったですが,ようやく植物園に到着しました.
まだ花見てないのにすごい達成感です.
見切れている案山子は遠くから見ると「二人組の何かを構えた農民」なのでとても怖い思いをした
すごいところに来てしまった感.滝とかある.
新宿を発ってからここまで4時間かかりました.
日帰りをしようと思うと場合によっては20分しか見れません.秘境.
植物園の中は山草,水辺の草が中心でした.
こういう雰囲気の植物園は楽しい.
ニッコウキスゲ.ユリみたいな花だけどユリ科じゃない(とはいえ旧ユリ科).
Hemerocallis dumortieri var. esculenta 16/6/11
ニリンソウかなあ.看板にはミヤコワスレとあったけどちゃうよな・・・
(たぶん)Anemone flaccida 16/6/11
この植物園なんかヘビさんがたくさんいる
この植物園スゲーたくさん蛇いるんだけど pic.twitter.com/FnDScdfDNZ
— ジジがおうちにやってきた (@maruuusa83) 2016年6月11日
ヘビには詳しくないけど,アオダイショウかなあ.
Elaphe climacophora(いちおう調べた)
このときどうもカエルさん狙ってたのか,ぼくに驚いたヘビさんに驚いたカエルさんが一目散に逃げていきました.
ヘビさんたち水辺のやぶとか橋の下とかでうにょうにょしてました.
ずいぶん奥のほうに注意書きがありました.ておくれ.
そして幻の花を・・・
中学生の頃から見たいみたいと思っていた花にようやく,8年の念願かなってお目にかかることができました.ぼっちで.
これが探し求めた幻の花だ!!!!!
Meconopsis betonicifolia 16/6/11
いやぁ,なんか思ってたよりたくさん咲いてる.
赤が入るのもいるらしい.
Meconopsis betonicifolia 16/6/11
同定が怪しい.看板には「ヒマラヤの青いケシ(メコノプシス属)」としかなくて種名がわからない.
写真からじゃ同定しにくいですね・・・
現地はヘビが怖くて一か所にとどまれなかった←
さいごに
ようやく長年の夢だったメコノプシス属の花を見ることができました.
いやぁ,たくさん咲いててよかった.
この後当然帰れなくて日光で一泊しました.
電車移動にものすごく時間がかかるので観光も温泉もお預けでした(笑)
これまで行った植物園の中でも結構おもしろいところでした.
1時間くらいたっぷり見て回れてボリュームも満点でした.
満足満足.
特急に遅れそうで「仕方ないのでこれで行ってください・・・」と発行してもらった二回目の着駅精算券
それでは
今回はこのへんで ノ
まるさ
Google Spreadsheetでチケット駆動生活をするはなし(タスク追加アプリ編)
どうも,まるさ@maruuusa83です.
Google Spreadsheetでチケット駆動生活をするはなし(スプレッドシート編)に引き続き,
スクリプトとアンケートフォームを使ってタスク追加アプリを実装していくぞ編です.
タスク追加アプリ?
スプレッドシートでタスク管理するってよくあることだとおもいます.
でもタスクの追加って面倒じゃないですか・・・?
ぼくはセルひとつひとつにいちいち打っていくのが面倒ですく投げ出してしまいます.
というかスマホからタスク追加したい
というわけで,今回はスマホから楽にタスク追加できるように前回のスプレッドシートを拡張していきます.
1. タスク登録ページをGoogleフォームで作る
Googleフォームを使えば,一発でクロスプラットフォームなタスク追加アプリが作れそうな気がします.
というわけでタスク管理スプレッドシートに関連付けてアンケートフォームを作ります.
1.1 新しいフォームの作成
まずはスプレッドシートから新しくフォームを追加します.
メニューバーから 挿入 > フォーム を選択してください.
新しくフォームを追加
すると新しいフォームの編集画面が表示されるかと思います.
新規フォームの編集画面
1.2 フォームの編集
必要な項目をガシガシ追加していきます.
今回は次の項目を用意します.
質問 | 必須 | 入力方法 |
---|---|---|
タスク名 | Yes | 記述式 |
締切日 | 日付 | |
タスクの詳細 | 記述式 | |
メモ | 記述式 | |
タグ | 記述式 | |
親タスク | 記述式 | |
継続タスク | 記述式 |
まずはタスク名の登録フォーム
質問の追加
設定を進めていく
編集が完了したら右上の「送信」のボタンを押してURLのタブを開いて,フォームのURLを取得しておきましょう.
1.3 状況の整理
これでフォームの作成ができました.クラスプラットフォームなアプリの完成(!)
スマホでも見られる(これは自分で実際に使っているタスク管理アプリ)
スプレッドシートには「フォームの回答1」という新しいシートが追加され,質問に回答するとここに反映されるようになっています.
回答一覧のシート
2. スクリプトを使ったフォームの回答のコピー
先ほどのフォームの回答はタスク管理のシートに登録したいわけなので,「フォームの回答1」からタスク管理のために作ったスプレッドシートに自動的にコピーするようにしていきます.
2.1 下準備
スクリプトを書くときに設定しやすいように,シートの名前を統一しておきましょう.
フォームの回答が保存されるシートを「フォームの回答」,タスク管理のために作ったシートを「タスク一覧」とすることにしました.
シートの名前の変更
2.2 コピーするスクリプト
2.2.1 新しいスクリプトの作成
ここからはスクリプトを書いていくので,スクリプトエディタを開きます.
スクリプトエディタを開く
スクリプトエディタ
新しいスクリプトを作成します.
新規スクリプト
名前はcopyFromFormとでもしておいてください.
最初から追加されているコード.gsは削除してしまって構いません.新しいスクリプトを作成するかわりにコード.gsをリネームするのでも構いません.
2.2.2 列をコピーするスクリプト
次に示すスクリプトは,せっせと列の内容をコピーするものです.
ところでスクリプトの最初のほうの<スプレッドシートのID>というのは,スプレッドシートを開いているときのURLの中に含まれているIDです.
入力する必要があるので,記録しておいてください.
https://docs.google.com/spreadsheets/d/<スプレッドシートのID>/edit#gid=<シートのID>
スプレッドシートのIDの位置
あ,あと,スクリプトを保存しようとするとプロジェクト名を決めろと言われるので,適当にtask_managerなど名前をつけておいてください.
function copyFromForm() {
var spreadsheet = SpreadsheetApp.openById("<スプレッドシートのID>")
var sheets = spreadsheet.getSheets();
for (var i in sheets){
if (sheets[i].getSheetName() == "フォームの回答") {
formans = sheets[i];
}
if (sheets[i].getSheetName() == "タスク一覧") {
tasks = sheets[i];
}
}
var newtaskrow = formans.getLastRow();
var taskslastrow = tasks.getLastRow();
// タスクID
tasks.getRange(taskslastrow + 1, 1).setValue(tasks.getRange(3, 2).getValue() + 1);
// 状態
tasks.getRange(taskslastrow + 1, 2).setValue("未着手");
// タスク名
tasks.getRange(taskslastrow + 1, 4).setValue(formans.getRange(newtaskrow , 2).getValue());
// 締切
tasks.getRange(taskslastrow + 1, 3).setValue(formans.getRange(newtaskrow, 3).getValue());
// タスク詳細
tasks.getRange(taskslastrow + 1, 5).setValue(formans.getRange(newtaskrow, 4).getValue());
// メモ
tasks.getRange(taskslastrow + 1, 6).setValue(formans.getRange(newtaskrow, 5).getValue());
// タグ
tasks.getRange(taskslastrow + 1, 7).setValue(formans.getRange(newtaskrow, 6).getValue());
// 親タスク
tasks.getRange(taskslastrow + 1, 8).setValue(formans.getRange(newtaskrow, 7).getValue());
// 継続タスク
tasks.getRange(taskslastrow + 1, 9).setValue(formans.getRange(newtaskrow, 8).getValue());
// 最終更新
tasks.getRange(taskslastrow + 1, 10).setValue(formans.getRange(newtaskrow, 1).getValue());
}
フォームの回答をコピーするスクリプト
<スプレッドシートのID>で指定したスプレッドシートからフォームの回答シートとタスク一覧シートを探し出し,フォームの回答の最終行をタスク一覧の最終行へ追加する.という処理をおこなっています.
sheet.getRange(row, col)は,シートの左上:A1を(1, 1)とした位置で指定します.
タスクIDは,スプレッドシート上でカウントしているタスク数に1を加えたものを設定するようにしています.
2.2.3 スクリプトのデバグ実行
きちんと動作するか確認するために,デバグ実行してみます.
デバグボタンを押してスプレッドシートを確認してみてください.
デバグ実行
テストタスクが自動的にコピーされた!
もし正しく動作しなければ,エラーメッセージなど見ながらデバグしてみてください.
2.3 トリガの設定
先ほどのスクリプトをフォームが入力された時点で動作するように設定します.
2.3.1 トリガの設定 ツールバーからトリガ設定を開いて,[copyFromForm」に対して「スプレッドシートから」「フォーム送信時」を設定してください.
トリガ設定を開く
トリガの設定
トリガを設定すると許可を求める画面が表示されるので,許可してください.
2.3.1 トリガのテスト
これでタスクの自動登録ができるようになったハズなので,フォームに入力してタスク一覧のシートを見ながら送信してみます.
フォームを記入して送信すると
自動的にコピーされた!
3. 最終更新日時の自動更新(おまけ)
せっかくスクリプトを作っているのでおまけスクリプトを追加します.
最終更新日時を自分の手でアップデートするのはなんだかあほらしいので自動更新するように設定します.
function insertLastUpdated() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var currentrow = spreadsheet.getActiveCell().getRow();
if (spreadsheet.getSheetName() == "タスク一覧" && currentrow >= 6){
spreadsheet.getRange(currentrow, 10).setValue(new Date());
}
}
最終更新日時を更新するスクリプト
トリガを更新時にしたとき,getActiveSheetやgetActiveCellを用いて更新されたセルを特定することができます.
更新されたタスクの最終更新のセル(J行)に現在の日にちを自動的に書き込みます.
(自動更新されたセルをクリックするとわかりますが,更新時間まで記録されています.)
シートやタスクを書き込む範囲をきちんと設定しておかないとややこしいことになるので条件分岐しています.
これでタスク追加アプリを作成することができました!!!!やったね!!!
これでタスク一覧の操作のしやすさと登録のしやすさが両立できるようになりました.
では
今回はこの辺で! ノ
まるさ
Google Spreadsheetでチケット駆動生活をするはなし(スプレッドシート編)
どうも,まるさ@maruuusa83です.
最近なんだかタスクが多くて生活が木っ端みじんになりそうです.
ひとまず大きな案件が片付いたので,Google Spreadsheetを使ってタスクを整理するためのツールを作りました.
今回はそのおはなしです.
この記事ではスプレッドシート上での設定について,
次回記事ではスクリプトを使ってタスク登録アプリの作成を行います.
チケット駆動生活(?)
ぼくはタスクをそのまま放っておくと忘れて締め切りを逃してしまうタイプの人間です.
しかたがないですから,ふせんにタスクを書いてペタペタディスプレイの周りに張り付けることでタスクを管理する,「リアルチケット駆動生活」を実施していました.
常に見えるところにタスク一覧があれば嫌でも仕事するわけです.
まぁでもタスクが増えてくると管理しきれない!
RedmineとかサイボウズLiveとかチケット管理システムとか使うにしても一人だと面倒でだんだん遠のいていく.
スプレッドシートで管理しようと思っても入力が面倒で嫌になってくる.
どうしたものか・・・
便利で便利なスプレッドシートを作りたい
最近あれこれスプレッドシートで作るのにハマっています
というわけで,スプレッドシートでチケット管理するための仕組みを作ることにしました.
まず必要な項目を整理します.
- タスク名
- 締め切り
- タスクの進行状況
それと,あったらいいなあという項目.
- 詳細
- メモ
- タグ
- 親タスクナンバー(サブタスクであることを表す)
- 継続タスクナンバー(あるタスクの続きであることを表す)
必要な機能をまとめます.
- 状態・締切に応じた色分け
- タグによる整理と検索
- タスク番号の自動割り当て
- タスク登録アプリの作成
目玉はタスク登録アプリですね.
スプレッドシートいちいちポチポチしなくてよくなります.
スプレッドシートを作っていく
とりあえずスプレッドシートを書いていきましょう.
とりあえず項目を入力していく
1.データ検証の設定
項目ごとに「日付」だとか「ドロップダウンリスト」だとかの設定をしていきます.
1.1 日付入力の設定
まずは簡単な日付の設定をやっていきます.
範囲を指定して右クリックで「データの検証」を開く
条件を「日付」「有効な日付」に設定
これで入力を日付に制限して,かつ簡単に日付が入力できるようになります.
「最終更新日時」の項目も同様に日付を入力することになりますから,同様に設定しておいてください.
セルをダブルクリックすればカレンダーが現れるようになった!
1.2 ドロップダウンリストの設定
「状態」の項目について,
- 未着手
- 作業中
- チェック待ち
- 完了
- 破棄
という項目からドロップダウンリストで選択できるようにしていきます.
日付の設定と同様の手順で範囲を指定して「データの検証」を開きます.
今度は条件を「リストを直接指定」に設定してカンマ区切りで項目を入力します.
条件を設定していく
状態の項目のセルの右側に▼が現れるようになります.
これをクリックすればドロップダウンリストが現れます.
ドロップダウンリストが現れるようになった!
2.シートの整形と自動色付け
シートの整形と色付けの設定を行っていきます.
2.1 シートの整形
適当な値を入力して様子を見つつセルの大きさを決めたり項目の行に色を付けてみたりししてください.
こんな感じに設定してみました
2.2 表示領域の固定
タスクが増えてくるとスクロールしたとき項目名が見えなくなったりすると嫌なので,常に表示されるように固定しておきます.
項目名の行を選択して,「表示」>「固定」>「現在の行まで」で行の固定を設定できます.
固定行の設定
項目名の固定に加えてタスク名なども固定した
これで上下左右のスクロールでも必要な項目は常に見えるようになりました.
2.3 自動色付けの設定
まずは締め切りを超えてしまったとき色が付くようにします.
「条件付き書式」を開いて「次より前の日付」「本日」を設定します.
今回はセルの背景が赤くなるように設定しました.
「条件付き書式」を開く
条件付き書式のルール設定
締め切りを超えたら目立つようになった!
つぎに,完了したタスクの行は全体が灰色になるように設定します.
こういう感じにしたいなあ
次の写真のように,実行したい範囲全体を選択して,先ほどと同様の手順で「条件付き書式のルール」で「カスタム数式」の設定を行います.
設定を行う範囲
行ごと色を付ける設定
「完了」を設定すると自動でブラックアウトするようになった!
ところで,締切を迎えてしまっている場合にブラックアウトの上から色が変わってしまっています.
これは条件付き書式のルールの適用順を変更することで解決できます.
適用すべき範囲
赤丸の部分をつかむと順番を入れ替えできる.書式は下から順に適用される
3.フィルタの設定
最後のスプレッドシート上での作業として検索と並べ替えができるように設定していきます.
項目名も含めて範囲選択し(ぼくはその他の設定もA5:J1000くらいにしています),ツールバー内のフィルタボタンを押します.
選択範囲とフィルタ
この設定で項目名にプルダウンメニューのアイコンが表示され,各列ごとに並べ替え,フィルタリングの設定などができるようになります.
並べ替えや条件フィルタ,値フィルタが使えるようになる
「状態」の項目について,完了したタスクや破棄したタスクは見えなくなるようにしておくといい感じです.
値フィルタはすでに存在する値からしかフィルタの設定ができません.とりあえず一通りすべての状態をスプレッドシートに入力してから「完了」と「破棄」のチェックを外し,OKを押します.
「状態」の項目のフィルタ設定
特定のタグを含む行のみを表示するような場合は,「タグ」の項目の値フィルタを使います.
はじめに「値でフィルタ」の直下にある「クリア」で全てのチェックボックスを外しておき,そのあと検索ボックスで必要なタグを含むセルを検索しておきます.
そののちに「すべて選択」をクリックしてOKを押せば,検索したいタグを含む行のみが表示されるようになります.
タグの検索
4.統計情報の表示
この後タスクの自動登録に「登録したタスクの数」が必要になるので,ほしい統計情報を設定しておきます.
今回は未着手のタスクの個数とこれまでに登録したタスクの数の二つを設定しました.
それぞれ,セルに次のような数式を入力しています.
=COUNTIF(B6:B997, "未着手") //未着手タスクの個数
=COUNT(A6:A996) //全タスク数
統計情報
スプレッドシートを使った設定はここまでになります.
次回の記事ではスクリプトとアンケートフォームを用いてタスク登録アプリを作成します.
では,
今回はこのへんで ノ
まるさ
2015年振り返りと2016年の抱負
明けましておめでとうございます、まるさ@maruuusa83です。
去年を振り返ったり、今年の目標を書いたりします。
2015年の感想
この年を漢字一文字で表すなら、「耐」です。
これからのためにぐっと堪える一年でした。
この一年、必死になって乗りきった感じがします。
卒業研究
高専時代の卒業研究はカツカツになりながらも楽しかったです。
ヘラヘラしてたので「ちゃんと研究やりなよ」なんてどこかから怒られたこともありましたが、ちゃんとやってたつもりですw
わりと全力投球できたと思っています。
でも卒研の結果は「失敗だった」としていいかなあと思っています。
目標にたどり着くことができなかった。
やっぱり開発力の不足が一番の要因です。
思想設計から実験まで全てがヘタクソだった。
この研究で最優秀卒研の賞なんていただいてしまいましたが、すっかりもらえないものだと思っていたので発表前からヘコんでいました。
まあなんだかんだ構想1年半と実装半年くらいはかけたので、賞を貰えたのは素直に嬉しかったです。
もっとやりたかったなあ、と、自分の限界を感じつつ、これからはもっとコード書いていこうと決意した卒業研究でした。
テーマも内容もとても気に入っているのでじっくり使っていきたいです。
大学への三年次編入
大学にはいって、ずいぶんと自由を奪われました。
うちの大学の編入生は一般に実験科目がないそうなのですが、ぼくの学科だけは実験科目があります。
毎週オムニバスで、授業時間で終われない実験も数多く、レポートの分量も凄い。でも内容は高専時代の焼きなましをする感じ。もちろん面白い実験もありましたが、ひたすら辛いばかりの毎日でした。
新しい風を吹き込もうと前期はサークルにトライしてみましたが、「編入生は実験がなくてヒマ」という内部生の常識がぼくの生活にトドメをさし、生活の何もかもが滅茶苦茶になりました。
お陰で成績は目も当てられない。
後期にはいってからは前期の反省を活かし省エネ生活。
せっかく環境が変わったのでハード屋に転向しようとハードウェアアクセラレーションにかかわる演習テーマを取るも、結局ここでも様々な(とても様々な)壁に阻まれツラい思いをします。
目標にxc7z010clg400を入れてスイッチ、目標にxc7z010clg400を入れてスイッチ、目標にxc7z010clg400を入れてスイッチ、目標にxc7z010clg400を入れてスイッチ...
— ナニモカ・モナ・ゲウッテ (@maruuusa83) 2015, 12月 31
...動け、動け、動いてよ。今、動かなきゃ、今、やらなきゃ、ぼくの単位は死んじゃうんだ。そんなのやなんだよ。だから、動いてよ
— ナニモカ・モナ・ゲウッテ (@maruuusa83) 2015, 12月 31
まあ、いいです。ちょうどいい負荷かなあと思いますw
私生活
四月に沖縄から東京に引っ越しをしました。
編入を期に奨学金も大幅に増やし、後期にはバイトも始めさせていただいて、だいぶ経済的にも自立しました。
家計が実家と完全に別になり、自分に入ってきたお金で全部やりくりするという新しい経済スタイルになったわけです。
両親にもそれほど迷惑をかけずにすむので、趣味に使ってみたり、外食してみたり、いつもと違う食材を買ったり、貯金する努力をしてみたり、そういうこともできるようになりました。
とはいえ
部屋が四畳半と多少せまくなったので趣味の多くがうまくいかなくなりました。
楽器もやりにくくなりましたし(音は平気)、パンも焼きにくくなりましたし、コーヒーも淹れにくいし、料理もやりにくいので質も回数も低くなりました。
恋人が遊んでくれるのを楽しみに生活していましたが、年を越す直前に別れることになってしまいました。
省スペースでどうにかなる趣味として、アニメと海外ドラマと映画を見る時間が増えました。
テレビを買ってないので、テレビがわりですw
去年の実績として、わかるだけでアニメ1375話、映画36本、海外ドラマ49話みました。
n巡したアニメや映画シリーズもあるので、見た回数で言うともっとたくさんあります。
見すぎです。見すぎw
明るいうちに遊びに出かける機会もずいぶん減ったのでどんどん色白になってる気がしますw
ほんと趣味減ったよなあ
なんだか私生活からはずいぶんとまるさらしさが失われてしまった気がします。
もうただのアニメオタクです。アニメオタクマルサになりました。
こんにちは、アニメオタクマルサです!
生活の一部が英語になった
先ほどチラと述べた「演習」では、留学生のタコ部屋(笑)に一緒に詰められて作業していました。
7~8名いる部屋で日本語話者はぼくだけ。 英語漬けの生活になりました。
一日の発言の半分以上は英語という生活が3カ月くらい続きました。英語しか話さない日もたくさんありました。
これはいいきっかけだろうということで、家・研究室以外でのスキマ時間はボキャブラリーを増やすようになりました。
英語だけで観光したり日本料理を教えたりもしました。
さっぱり英語力が上がったような気はしませんが、なんとなく、英語に触れることが好きになりました。
異文化に触れつつ、日本の良さだとかを知ってもらえて楽しく充実した生活だったと思います。
まあこれは、何にも打ち込んでいない、学校生活だけに必死になっている生活へのせめてもの抵抗だったような気もします。
ですが、数少ない友達としてよく遊んでくれたベトナム人の二人を含め、年を越す直前に、彼らはみな留学期間を終え国へ帰っていきました。
これから寂しくなります。
長くて、そして短い一年だった
ほんと、今年は貧乏クジたくさん引いた気がします。
つらすぎて血便と高熱に苦しむような出来事もありました。
穏やかでいたい年末でさえ、たくさんの別れがありました。こうして長いような短いような一年は終わりました。
それでも、なんとなく、またぼくへと風が向いてきているような気がしています。
この流れを掴んで、いまの歩みを一歩一歩大切に踏みしめて、ゆっくりまるさらしさを取り戻したいです。
今年の目標
今年は申年らしいです。(さる・・・なんだかつらい響きだなあw)
そして、これからアカデミアの道が始まります。
自分で決めたキャリアプランを確実に達成できるように、ひとつひとつの行動を大切に一年を過ごしたいです。
大学で研究やってる人間らしくなれればいいなあ。
というわけで、次のことを達成します:
- とにかく進級する(笑)
- 大学院に進学する
- 演習のテーマを「成功」といえるように達成
- TOEIC 800up (TOEFLになるかもしれない)
- 献血に4回くらいは行ける程度には健康的に、心も時間も余裕を持って生活
公開できなさそうな話や目標もたくさんありますが、きちんとメモして全部達成必須にして手堅い一年にしようと思います。
さいごに
荒れた一年でしたが今年はもっと楽しくやっていきます!!!!!
みなさん、どうぞ今年もよろしくお願い致します。
あ、まるさの隣あいてますよ!w(
それではこのへんで ノ
まるさ