Category: 未分類

  • [WIP]2022年に訪れた飲食店一覧

    この記事はこたつ記事です、内容はないです。

    こんにちは、現在2022年12月24日23:20分です。

    この記事は東京高専SPC同好会/プロコンゼミ老人会 Advent Calendar 2022 の18日目の記事です。

    今年新たに訪れた飲食店を一覧で出したい、みたいなことってありますよね。

    googleタイムラインの情報を解析すればできるはず!というわけでやってみた(やる予定ということを宣言します)

    データのダウンロード

    google データエクスポート にいってgoogel タイムラインのデータをエクスポートします。

    ダウンロードしたjsonファイルを開いてい見るとそれっぽい感じで訪れた場所が保存されています。

    TODO 分析

    訪れていた時間とか保存されているので、適当にあたりをつけて適当なAPIに投げれば適当な感じになるんじゃないですかね、やってないですけど。

    とりあえずnameの頻度だけでsortしてみると、それっぽいけどあんまうれしくない感じの結果が出てきました。

    飲食店っぽいのはzeyoと中華第一麺

    以上、気が向いたらやる

  • [i3wm]スクロールでworkspaceを切り替えるようにする

    i3wm.org(ハイライトはchromeでのみ有効)

    bar {
        bindsym button4 workspace prev_on_output
        bindsym button5 workspace next_on_output
    }

    button4, button5はマウスのスクロール, 1画面しかない場合はprev/nextだけで良いが複数画面あるときはprev_on_output, next_on_outputだと嬉しい

  • AdventCalendarへの投稿を自動でTweetするやつ

    この記事は東京高専プロコンゼミアドベントカレンダー②2日目の記事です。
    ちなみに記事を書き始めた現在(2019/12/02 23:37 JST)です

    追記: 内容が薄い気がするので気が向いたら内容増やします。。。

    動機

    毎年プロコンゼミではアドベントカレンダーをやってるのですが、去年その日の記事を毎日Twitterに上げてました

    手動で。なので今年は自動でツイートするようにしたいと思います。

    使った技術(?)

    RSS

    ウェブサイトなどの更新情報をいい感じにまとめてくれるやつです、Adventar.orgの場合は adverntar.org/calendars/{id}.rss とつけると取得できます。普通は人間が直接読むものではなくRSSリーダーに定期的に読ませて更新があったら知らせてもらいます。なのでxmlで書かれていて、プログラムでのパースがしやすいようになっています。

    東京高専プロコンゼミアドベントカレンダー①のRSS

    Twitter API

    TwitterはAPIを公開していて誰でも(英語の作文をする必要がありますが)Twitterの機能をソフトウェアから触れるようになってます。

    GAS

    Google Apps Script, Googleが出してる(本来は)Googleのアプリとかの連携を高度にできるなんらか、Javascriptで書けて定期的に実行したり特定のイベントで実行させたりできる。外部と通信ができるのでなんでもやれる(例えばTwitter APIを使ってtweetしたり)

    できたもの

    とりあえず動いてます、更新があったら4時間以内に下のツイートのreply treeに入っていくはずです。コードは汚いのできれいにしてから後で公開します…

    追記: なんかバグっててウケた、あとで直します…

    https://twitter.com/NITTC_SPC/status/1201509270769979395

    まとめ

    • RSSはパースしやすくて便利
    • APIを公開してるTwitterは神
    • サーバーレスっぽいことを気軽にやれてしまうGASは良い
    • 退屈なことはコンピュータにやらせるようにしましょう

    おわり

  • 2文字.2文字ドメイン(ee.sb)を取得した話

    この記事は東京高専プロコンゼミアドベントカレンダー②1日目の記事です.

    ごめんなさい、明日提出の物理の課題をやっていたら時間が無くなったので後で追記します。ハワイ時間には間に合うようにします…–

    追記: UTC -12 を仮定すると現在12/01 23:52です、ハウランド島とベーカー島の標準時です、ちなみにハウランド島とベーカー島は現在無人島らしいです。

    TL;DR

    ee.sbというドメインを取得しました、

    SEDO.comで売ってるので興味ある人は買ってください、当分は to2.pwに使おうと思っています(まだ使えるようにしていません…) 追記, 使えるようにしました。

    予備知識: ドメインとは

    URLのgoogle.com, google.co.jp…の部分ですこのブログだとlog.u-t.me の部分が当たります。

    このドメインの一番右の部分(com, jp, me)はTLD(top-level domains)と呼ばれています。TLDはIPアドレスやドメインを管理しているICANN(リンク)が管理していて、日本ではJPRSが.jpを管理しています。

    TLDは.jp(日本)や.us(アメリカ)など、国ごとに発行されているccTLD(country-code TLD)とそれ以外の.comや.org, .shop などのgTLD(generic TLD)に分類されます。

    最近ではGMOが新TLD.shopを49億円で落札したり、Googleが.devを開放したりして話題になりました

    で、これが重要なんですがccTLDは2文字, gTLDは3文字以上と決まっています。.me取ってるやんとかツッコミがきそうですが、.meはモンテネグロのccTLDです。

    短いドメインが取りたくなった

    で、ふと短いドメインが取りたくなりました。←

    ドメインは欲しかったら何でも取れるわけではなく当然既に他の人に取られていたら取れませんし, TLDによってドメインの取得条件を定めている場合があります(例えば.jpは日本国内の法人, 個人. .ac.jpは高等教育機関など)。

    で2文字.ccTLD(2文字)の空いてるドメインをgoddady(リンク)のAPIとか使って探したんですが条件に合致するようなドメインはなく、無理かなーとか思って  2文字.2文字 ドメイン 取得 とかでGoogle検索をしてみたらこんな記事を見つけました。

    .sbドメインの存在を知り調べたら色々面白くて、気がついたらドメイン取得してました??? 5859円/yでした。(買ったとき7000円だと思ってたんだけど思ったより安かった??)

    https://twitter.com/yuto_tamur/status/1196058398439043072

    このドメイン、やばい点がいっぱいあってICCANのページに貼られてる管理者のページ(http://www.nic.net.sb/)のdnsがwixに向けられてて、それなのにwixではページが作られてなかったり。

    公式のwhoisのページで無効な証明書を使ってたりします。ロック!!

    レジストラがまともに活動してるかも怪しいので取得できるか怪しかったのですが4日後無事取得することができました(そもそもドメインの取得に数日かかるとか全く思ってなかったけど…)

    https://twitter.com/yuto_tamur/status/1197419851842637824

    ちなみにGandi.netで取得しました、他のドメインはGoogle Domainsで取得してるのでGoogleDomainsで取りたかったんですがGoogle Domainsでは.sbなんてドメイン扱っていませんでした…

    なんで取得でき(てしまっ)たか

    それまで.com.sb, .net.sb, .org.sbでしか取得できなかったものが2016/12に直接取得できるようになったぽいです、まだかなり余ってそうなので2文字.2文字ドメインが欲しい人は今のうちに取っておくのがいいんじゃないんですかね

    https://web.archive.org/web/20171020075812/https://nic.sb/

    取れてしまったので

    とりあえずto2.pwで使えるようにしておきます(まだしてません…)学生に6000/yはきついので売れたらなぁと思ってSEDO.comに出しています、誰か買ってください。。。

  • #procon30 に参加した話

    終わってから10日以上たってますがprocon30こと第30回 全国高等専門学校プログラミングコンテストに参加したので参加記を書いていきたいと思います。

    今年は自由部門のリーダー && 東京高専プロコンゼミの代表として参加しました。

    出したもの

    GulliverBlocskという「VRでLEGO作品の中に入り込める」ことをコンセプトにした作品で自由部門に出場しました。
    開発リポジトリ
    デモンストレーション(動画)
    プレゼンテーション(動画)

    https://youtu.be/FOi_t-h9DXg?t=1236
    https://youtu.be/QY-F4nFKLxk?t=543
    デモンストレーション動画

    予選

    5月初めにアイディアを確定させた気がします、アイディア出しは自由、課題含めかなり難航しました。”LEGOを3DスキャンしてVRで中に入る”というアイディアは先生にかなり難色を示されました、まずスキャン自体が難しい、ブロックを一つずつ置かないといけない、それでは楽しめないのではないか、初めからコンピュータの中で組み立てればいいじゃん。みたいな感じだったと思います、完全にその通りなので一度諦めました、が、他にいいアイディアが出なかったので結局無理やり通すことになりました。予選結果はB通過(10~20位)でした、課題がA通過(1~10位)だったので結構モチベーション削られたんですが、通ったことは通ったので開発できることになりました。

    本選

    移動部門

    移動部門は大部分を先輩に任せていたのですが、台風が来たので振替とか色々対応してもらいました、結果として東京高専は移動日を土曜日から金曜日に変更する対応を取りました。
    ポスターや配布用パンフレットなど金曜日に印刷する予定だったのを木曜日中に印刷しなければならなくなり、木曜日中に急遽原稿を完成させ、何とか印刷までこぎつけました。(あらかじめ完成させとけという話ですが…)
     この日は帰宅して2時間で準備を終わらせすぐに始発で出発みたいな限界をしました。

    https://twitter.com/yuto_tamur/status/1182175915989618688
    台風に対応するための緊急対策本部

    -1 日目(金曜日)

    移動日です、前日に限界をしてたので飛行機では離陸してから着陸するまでの記憶がありません。

    この日はまだまともな食事をする余裕があったよう、昼食に宮崎県発祥の(?)チキン南蛮を食べています。

    https://twitter.com/yuto_tamur/status/1182521603260743681

    0日目(土曜日)

    この日は何をやってたか記憶がありあませんが宿にこもって開発をしてた気がします、あと夜は先生方に宿に来てもらってプレゼンの練習をしていたはず。
    この日trelloに 当日までにかならずやらないといけない リストを作りました。
    昼ごはんは鳥そばを食べてます、このご飯を最後にプロコンが終わるまでずっとコンビニ飯でした、別に食べに行っても問題なかったはずなんですが。。。

    1日目(日曜日)

    プレゼンがある日です、プレゼンはプレゼン担当に任せてブースで展示をしてました。
    12時ごろ、サーバーが落ちました。
    15時ごろ(?)、太陽の位置が変わったからなのか、急に認識の精度が落ちました。
    この他にも色々バグが見つかりました、当日までにかならずやらないといけないリストの内容がかなり増えました、もう当日なのに。次の日にデモンストレーション審査が待ってたのでこの日の夜ほぼ徹夜をして半分くらいは直しました。

    2日目(月曜日)

    デモンストレーション審査の日です、1回目のデモ審査はさんざんでした、できると言っていた機能が実際には動かなかったり(自分が夜直したはずの部分)しました、2回目3回目のデモは問題の機能紹介を削除しておおむね満足なデモが出来た気がします。

    マニュアル審査は時間内に操作できた部分はほぼ完璧に動作したので、おそらく満点評価をとれたと思います。

    結果発表

    結果発表の順番として 競技 => 課題 => 自由だったので他の部門が優勝, 最優秀賞が確定してる状態で自由部門が最優秀賞だと発表するまでかなり厳しかったです、ゼミの代表なので打ち上げのときに競技, 課題の最優秀賞で乾杯の音頭とるのか、最悪じゃんとか考えてました。最優秀賞が発表されたとき変な声がでました。

    最終的に最優秀賞 文部科学大臣賞

    https://twitter.com/NITTC_SPC/status/1183644407536349184

    フォーラムエイト企業賞
    アバナード企業賞をいただくことができました

    https://twitter.com/NITTC_SPC/status/1183647970152968193

    さらに競技部門, 課題部門でも優勝, 最優秀賞を頂くことができ、東京高専として 高専プロコン史上初の3冠となりました。

    https://twitter.com/NITTC_SPC/status/1183652091140591617

    地元ケーブルテレビの取材を受けて放送事故レベルの日本語的にガバガバなことを言った覚えがあります。

    この日の夜は焼き肉を食べました、かなり気分がハイになってた気がします。

    https://twitter.com/NITTC_SPC/status/1183727256172032000

    3日目(火曜日)

    観光をしました。

    https://twitter.com/yuto_tamur/status/1183920205870747648
    https://twitter.com/yuto_tamur/status/1183959433463779328

    反省、感想

    コードを一切書かずにプロジェクトマネージャをやるはずだったのですが途中からめんどくさくなりコードを書き始めてしまいました。バグが多く残っていたのも、通信のみで各モジュールごとには正しく動いてるからと統合テストを最後の1週間でやったからみたいなことがあり、ちゃんとPMしてたら防げた案件でした。

    3冠を獲得できたのは、言うまでもないですがこれまでサポートしていただいた先輩方、後援会の方々、顧問の先生方、その他様々な方々のおかげだと思っています、ありがとうございました。
    今後も強豪校としてプロコンに出場できるよう頑張りますので、どうぞよろしくお願いします。

    来年のプロコンは苫小牧で開かれるみたいです、自分は直接は開発にかかわらないと思いますが応援メンバーとして会場には行こうと思っています。

  • SQL-injectionが通用するサイトを作った話

    はじめに

    この記事はプロコンゼミ(SPC同好会) その1 advent Calendar 2018 12日目の記事です

    その1 1日目, その2,2日目にも記事を書いています

    直前まで何を書くか決まっておらず迷走した結果sqlインジェクションが通るウェブサイトを作ることにしました()

    とりあえずSQL,SQLインジェクションについて軽く触れます、SQLが何だがわかってる人は適当に読み流してもらえると。

    SQLとは

    SQLは、関係データベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)、ドメイン固有言語である。エドガー・F・コッドによって考案された関係データベースの関係モデルにおける演算体系である、関係代数と関係論理(関係計算)にある程度基づいている。 データベース言語の国際標準としてのSQLは何かの略語ではない。

    by wikipedia
    らしいです、はい

    データベースにアクセスするための言語というかそのようなものです、基本情報の午後試験で選択できたりします、
    ただ最近(?)は直接人間がsqlを書くことは少なくrailsのactiverecordやDjangoのそれなどORM(Object-relational mapping)を使うことが多いです、実際今年度のプロコンでも自由はSequerize,課題はDjangoのORMを使っていました。

    SQLが直接使われなくなった原因は単純に書きにくいというのもありますが”SQLインジェクション”を引き起こしやすくなることが大きいのではないでしょうか

    SQLの構文

    SQLインジェクションの説明をする前にSQL自体について説明したいと思います、私自身SQL初心者と言っても良い部類だと思うので間違っているかもしれません、あくまで参考程度に…

    SQL系データベース(RDB)ではデータを表のように管理します。

    Users

    id name password
    1 Tarou adfskj
    2 Hanako asdffjf
    3 saitou asdfhsA
    4 tanaka ASdsf

    一つの表のことをテーブル,列のことをカラムといいます
    この場合はusers テーブル, name カラムみたいな感じです

    # users テーブルから idカラムとnameカラムを取得
    select id,name from users;
    

    出力 =>

    id name
    1 Tarou
    2 Hanako
    3 saitou
    4 tanaka
    # users テーブルから idカラムが1である要素のnameカラムを取得
    select name from users where id=1;
    

    出力 =>

    name
    Tarou

    まあなんかこんな感じでSQLを使うと任意のデータを取り出したりデータを追加したり、上書きしたりすることができます

    SQLインジェクションとは

    やっとSQLインジェクションの解説まで到達しました、
    SQLインジェクションとはその名の通りSQLにinject(注入する)攻撃です。
    先程まではSQLを手で打っている想定でしたが実際はアプリケーションの中で実行します、すると次のようなコードを書きたくなります

    (sqlは仮定上の関数です、実際には色々なライブラリがあります)

    result = sql('select name from users where id ="' + $id + '" and password="'+ $password + '";')
    

    (usersテーブルからidが”変数id”でpasswordが”変数password”であるものの名前を取得)

    一見うまく行きそうに見えますがこのコードはSQLインジェクション攻撃を受ける余地があります

    変数 passwordにユーザから入力された文字列をそのまま代入している場合、次のようなsql文が発行される可能性があります

    $id に 1 , $passwordに 1" or "1"="1が代入された場合

    select name from users where id="1" and password ="1" or "1" = "1";
    

    これでは本来はpasswordの値が合わないとアクセスできないデータに "1" = "1"である限りアクセスされてしまいます、これがSQLインジェクションです、SQLに悪意のある文字列を”注入”しているわけです。

    通常はユーザーが入力した文字列の中にSQLで意味を持つ(記号,文)が入っていないか確認をします、railsのActiverecordやほとんどのORMがこれを自動でやってくれます。

    作ったもの

    https://sql-injection.u-t.me

    さてやっと本題(?)です、現在ではほぼ全てのサイトでSQLインジェクションに対して対策が取られています(少なくとも自分はそう信じたいです)なのであえてSQLインジェクション攻撃が通用するウェブサイトを作ったわけです(?)。

    もちろん実際に運用しているわけではなく、データベースも本来はサーバーで動かすのですがフロントで動かしていて、リロードするたびにデータはリセットされます。
    また、SQLインジェクションがわかりやすいように()発行されたSQL文が確認できるようになっています。

    SQLインジェクション攻撃の仕方は少なくとも先程説明した 1" or "1" and "1では通るようになっています。user名はadminとnormaluserです、ウェブサイトと言ってもログイン機能しかないんですけどね…

    技術的なお話

    sql.js

    流石にサーバーで動かしてるsqlを脆弱にするのは気が引けるのでフロントでsqlを実行しています、内部ではsqliteが動いてるらしいです、はじめはweb splというブラウザ標準の機能を使う予定だったのですが、どうやらwebsqlは非推奨になったらしいです、なのでsql.jsを使っています、人類なんでも.jsつければいいとおもってるでしょ。

    Nuxt.js

    フロントはNuxtを使っています、プロコン期間中はあまり気にしなかったけどNuxtとても良い、フロントのコードをガンガンかけて気持ちがいい。
    なにぶん全然ネタが思いつかなくて短時間で作ったのでクオリティは察してください。

    GitHub Pages

    ホスティングは我らがGitHubPagesを使っています。超楽、便利

    あとGitHub Pagesでデプロイしてるので当然リポジトリも公開しています
    github

    おわりに

    なんというか、完全にAdventarのためのネタですが、まあ強制的にアウトプットしないといけない良い機会だと考えましょう。

    最後にadventartのリンク色々

    その1
    その2

    明日(12/13)の担当は
    その1 => @chuson
    その2 => @rei
    です

  • 世界一短い短縮URL作成サービスをリリースした(かった)

    はじめに

    この記事はプロコンゼミ(SPC同好会) その2 Advent Calendar 2018二日目の記事です

    なんか調子乗って(その1,1日目),(その2,2日目)を抑えてしまったので記事を書きます
    ちなみの1日目の記事はこちら

    はい、察してください

    最後まで開発できずにベータ版として公開することにしました。
    明日もテストだししょうがないね

    あと世界一かどうかちゃんと調べたわけではないです(同じことをやってる人がいそう)

    とりあえず作ったものの紹介

    短縮URL作成サービスto2.pw(β)を作りました、
    最短でドメインン + 2文字の短縮urlを作成できます

    有効時間によって生成するURLの長さを変えています、有効時間を3時間にすると2文字の短縮URLを作成することができます。

    自分が短縮URLを使うタイミングって黒板に書いたり、目の前のPCに入力したり…etcという、どんなに長くても数時間くらいしか同じURLをつかわないシーンがほとんどなので短いURLを生成できる短縮サービスを作ったわけです、あと正直ほとんど使われないと思っていて、その分強気にURLを短くしています。

    あと当然自分はAdminなので専用のドメインを使って
    u-t.me/任意のリンクを発行できます、具体的には
    u-t.me/twitter
    u-t.me/git
    みたいなリンクをサービスを運用している限り使い続けることができます、

    独自ドメイン、機能としてつけたいと思っているのですが、ssl証明書の発行がだるそうだなぁとか思ってます。

    動機

    夏休みごろ、

    => Djangoの勉強をしたい
    => webサービス作ろう
    => 自分が使えるやつ
    => URL短縮サービス
    => なんか特徴がほしい
    => 生成されるURLを短くする

    こんな感じのフローで短縮urlサービスを作ることにしました
    そのときに途中までつくってたのですが、中途半端に開発を投げ出していました、
    (残骸 Herokuでホストしていてまだ残ってた)
    プロコンが終わり、アドベントカレンダーを書くということで、いい機会なので開発を再開することにしました,多少なりともWEBに対する知見も増えたはずなので最初から作り直しました.
    で、完成した(β)のがto2.pwです

    使った技術とか

    • Django
    • URLの短縮,認証,
    • Nuxt
    • フロント
    • bootstrap-vue
    • プロコンでも+nuxtで使っていたので、本当はvuetifyとか使いたかったんだけど使い方が全くわからなかった、bootstrapバンザーイ
    • postgresql
    • DB,ちゃんと(?)オープンソースのDB
    • social-auth-app-django
    • OAuthでのSNSログイン、すごい簡単だった
    • docker-compose
    • 開発環境,実行環境
    • https-portal
    • ssl化
    • nginx
    • リバースプロキシ(nuxt,Djangoのstaticファイル,APIをすべて to2.pw/ にあつめた)
    • Hatchful
    • アイコンの生成,(デザインセンスがないので必須)

    思ったこと

    https-potal超便利

    https-porta
    簡単にssl化できるやつ、これまではsslかするのに色々してssl証明書を取得してnginxでssl化、3ヶ月に一回再度証明書発行、みたいなことをやっていたのですがhttps-portalを使うとdocker-composeに数行書くだけでめんどくさいこと全部やってくれます。

    social-auth-app-django超便利

    Django、最初からuser管理の仕組みがついてくるのですがそこに乗っける形でOAuthログインを実装してくれる、自分がやったことと言ったら設定ファイルに数行追加しただけ、費やした時間の95%がAPIキーの取得だった、SNSログインを実装するだけでDjangoを使いたくなるレベルで簡単。

    Django,APIを作るものではない

    上記の通りDjango使ったことはまあ良かったのですがちょっと冗長だったかもしれない、Django、テンプレート(railsでいうview)があるのですが一切使わなかった

    モチベーションがほしい

    実際にかけた時間は多分一週間にも満たないと思うのですが間が空いてしまった、モチベーションを維持する何らかのソリューションを使えばよかった(まあ今回はアドベントカレンダーがあったわけですが)

    ドメインを探すの癖になる

    to2.pw、domains.google.comで取ってますなんかなるべく短いドメインを取ろうと思って合計2時間くらいずっと文字列を入力してた気がする、実際には個人が取得できる(現実的に)のは3文字までらしいです、ちなみに.pwはとても安かった(千円/年)SEOがとても悪いらしいです、まあ検索からの流入が見込めるものでもないからね…

    ちなみにまだgoogleにindexされていない、なんかちょっと前まで匿名で(recaptchaは有り)urlを登録できた気がするのだけどなんかsearch consoleというものになったみたい

    To-Do

    時間がなくてベータ版だみたいなことをうるさくいってきましたが具体的にこれから実装したいこと

    • QRコードの表示
    • CI,CD
    • サブドメインでアカウントごとに専用namespaceを与えられるようにしたい
    • 上の機能をユーザーが用意した独自ドメインでもできるようにしたい
    • 任意のurlを発行できるようにしたい 例)to2.pw/event-hoge
    • アナリティクス,URLへのアクセス数カウント
    • URLの削除
    • PWAに対応
    • chrome dev tool のAuditsの向上(とてもひどかった)
    • 収益化(AdsenseはR18なのでこれは保留)

    おわりに

    ベータ版ですが機能としては十分に使えるはずなのでぜひ使ってください、使っていただけると泣いて喜びます。
    => to2.pw

    >>
    追記
    何か気がついたことなどあったら気軽に連絡していただけるとうれしいです=> twitter

    すみません今日も内容が薄い気がしますが明日試験なので勘弁してください
    to2.pwが完成したらqiitaにも~~つよつよSEOで流入を増やすため~~記事を書くかもしれないです。
    あとはじめにも触れましたがこの記事はプロコンゼミ(SPC同好会) その2 Advent Calendar 2018二日目の記事です

    その1 => https://adventar.org/calendars/3129

    今日(12/2)のその1担当 => @stop_pattern

    明日(12/3)の担当は
    その1 => @shibh308
    その2 => @kapipara
    です

    ああもう19時だよ…:wq

  • Re:Github-pagesでblogを立てた

    テスト期間中ではありますが、今年も12月になってしまいました、なぜクリスマスに縁のない人類がクリスマスまでカウントしないといけないのか、私には全くわからないわけですが、去年に引き続き今年も東京高専プロコンゼミではアドベントカレンダーをやるみたいです、ところで今年はカレンダーが2つあるので勢いで1,2,12,21日目合計四日間分抑えてしまいましたのでとにかく書かなければなりません。

    さてお約束、
    この記事は東京高専プロコンゼミ(SPC同好会) その1 Advent Calendar 2018 1日目の記事です

    (今年はその2もあるみたいです)

    動機

    タイトルがRe:なので察した方は察したと思いますが実は去年のアドベントカレンダーでも、GitHubPagesを使ってblogを作ることを記事(魚拓)にしていたのですが、見てもらえればわかりますがそれから一年間投稿なし、何故か?

    ディスアド

    • 不便 => 投稿するのにマークダウン作成するだけでなく、色々いじる必要があった
    • ダサい => デザインセンスがないのでお察し
    • パフォーマンスが悪い => ajaxでマークダウンを取得して”フロントで”htmlに変換->表示みたいなことをやっていた、表示するのに時間がかかった

    => 完全に”四角い車輪の再発明”だった

    GitHubPagesなどの静的ホストでブログを運用するためのプロジェクトはすでにある、OSSのありがたみを感受すべきだった

    というわけでA fast, simple & powerful blog frameworkであるHexoを使ってブログを立てたというお話

    Hexo

    普通は(というかPagesのデフォルト)でメジャーなjekyllというのがあるのですが、なんとなく癪なのでHexoを使うことにしました
    docs GitHub

    トップページを要約すると、
    速い
    マークダウンサポート
    簡単にデプロイできる
    プラグインが豊富

    やるべきこと

    sudo pacman -S yarn
    yarn global add hexo-cli
    hexo init blog
    cd blog
    yarn install
    
    #開発用サーバー
    hexo server
    
    #静的ファイル生成
    hexo generate
    

    これだけ!簡単!!

    実際はこの他にymlの設定フィアルをいじっています,まあ直感的なのであまりつまることは少ないと思います。

    投稿方法

    hexo new hoge-title
    

    sources/_post/hoge-title.mdが生成されます
    そのファイルを普通のマークダウンと同じように編集すればよいだけ

    テーマの導入

    はじめは見た目で選んでmaterial-flowにしようとしたのですがドキュメントが中国語なのと完成度か低い部分があったのでGitHubスターでソートして最終的にnextにしました満足

    導入方法はドキュメントに書いてあるとおりとても簡単、OSS素晴らしい

    GitHub Pagesに乗っける

    GitHub Pages、GitHubが静的サイトのホスティングをやってくれるやつ.
    今回は静的ファイル生成先を/docsにしてそこをGitHubPagesに乗っけてもらってます

    ファイルはすべてGitHub tyuto/blogに上がってます

    無料ドメイン

    GitHub students + namecheapでもらえる.meドメインを使っています,ただ1年間しか無料でないのでその後は20$くらい払う必要があります、まあしょうがない

    終わりに

    なんかしょぼい記事になってしまった気がするのですが、勘弁してください明日はちゃんと書くので勘弁してください。
    あとはじめにも書きましたが、東京高専プロコンゼミアドベントカレンダー、今年は2つあるのですぜひ合わせてそちらもご覧ください。
    今日(12/1)
    * その1 => これ
    * その2の記事 => @kimotoyanke

    明日 (12/2)
    * その1 => @stop_pattern
    * その2 => 自分()

  • github.io(github pages)を使ってblogを作った話

    この記事は東京高専spc同好会アドベントカレンダー22日目の記事です。

    blogを作りたい

    adventカレンダーを~~書くことを強制された~~書く必要があったのですが自分はblogを持ってないのでblogをつくろうと、そういう話です。

    blogを作るのはいいのですが、無料ブログは細かくいじれない、レンタルサーバーはお金がかかる、ということでgithubpagesでblogを作ろうと思ったわけです。

    github.io (githubpages)って何

    ここに詳しく書いてありますが、githubリポジトリに公開したら簡単にwebページを公開できるサービスでhtml,css,javascriptなど静的なwebpageだったら無料でwebpageを作って公開することができます。

    marked.js

    流石に毎回htmlで書くのはだるいのでmarkedownで書けるようにします、marked.jsを読み込むとmarked({markdownの何か})でclient側でmarkdownをhtmlに変えることができます。
    まだsyntax highlightがうまく表示されなかったりして別の何かで処理をする必要があるのですがまだ実装していません。

    ディレクトリ構成

    dir

    詳しくはgithub

    /md/{日付}.mdにmarkdownで書いた記事、/post/{日付}/index.htmlにそれを読み込むhtmlファイルがおいてあります。
    toppageではlistにかかれている最新の記事を5個表示するようにしています~~まだ5記事も投稿してないからundefindと表示されてしまったり~~

    自動投稿(自動投稿)

    ここで言う自動投稿はmdを書いただけでディレクトリを適当に作ったりgit push をしたりするものであって,ある時間になると投稿されるといったものではありません。
    ブログを投稿するのにいちいちfileを加えたりするのがめんどくさいので自動投稿用のshellscriptを書きました。はじめはpythonで書こうと思ってたのですがpythonでgitをいじるのがあまりスマートではなかったのでshellで書くことにしました

    mkdir "./post/${1}"
    cp -r "./post/format/index.html" "./post/${1}/index.html"
    sed -e "s/{title}/${2}/g" "./post/${1}/index.html" >> "./post/${1}/index.html"
    sed -e "s#{url}#../../md/${1}.md#g"  "./post/${1}/index.html" >> "./post/$1/index.html"
    sed -i "1s#^#md/${1}.md\n#" "list"
    git add "post/${1}/index.html"
    git add list
    git add "md/${1}.md"
    git commit -m "[post] ${1}"
    git push origin master
    

    sed

    commandで文字置換ができるやつです、今回はコピペコードですけど色々できそう

    画像に関して

    画像をgithubに上げると容量を圧迫しそうなので、googledriveにあげてそこからリンクを貼って表示しています。

    Google Drive に保存した画像を直接呼び出せるURLの取得-qiita

    回線ほしい

    これから実装したいこと

    • 一般的な自動投稿
    • syntaxhighlight
    • 同じ環境で表示されるmarkdown editor
    • イケてるui(?)
    • 速度(ajaxで同期処理をしてたりしてる気が)

    気づいたこと、感想

    • shell だと ” と ’ で挙動が違う?
    • イケてるデザインにするのって難しい(知識とセンスが必要)
    • vpsほしい

    追記

    非常にイケてない
    ![非常にイケてない](http://drive.google.com/uc?export=view&id=1g9vAH6EwDT-v7Omm1jwkYM7FLMoN5Sy

  • Atcoder-ABC82に参加した話

    blog初投稿です、

    まだ自動で投稿する機能はできていないので手動で投稿すると思います。
    markdownも書き慣れてないところがあるので見苦しいかもしれないですが生暖かい目で見守っていただけると幸いです。

    ABCってなんぞやって人はここにくわしい説明がのっているので一読推奨です

    A問題

    2つの数の平均値を切り上げた値を返す問題でした。

    “`python:A.py
    import math
    a , b = map(float,input().split())
    print(math.ceil((a+b)/2))

    <pre><code><br />切り上げの関数がいまいち自信がなくてしらべたので少し時間がかかってしまいました。

    ## B問題
    文字列sとtが与えられてそれぞれ入れ替えていいので辞書順でs &lt; tにすることができるかという問題でした。

    “`python:B.py
    s = input()
    t = input()
    sli = list(s)
    tli = list(t)
    sli.sort()
    tli.sort()
    tli.reverse()
    def tostr(lis):
    hoge = “”
    for i in lis:
    hoge += i
    return hoge
    tstr = tostr(tli)
    sstr = tostr(sli)
    if tstr > sstr:
    print(“Yes”)
    else:
    print(“No”)

    コードが長い気がしますがac出せました

    C問題

    数列が渡されてその数列から良い数列にするために最低限取り除かないといけない要素数を答えるという問題でした。

    python:C.py
    N = int(input())
    ali = list(map(int,input().split()))
    sali = sorted(ali)
    now = None
    num = []
    suu = []
    kari = 0
    for i in range(N):
    if sali[i] == now:
    kari += 1
    else:
    if kari > 0:
    suu.append(kari)
    kari = 1
    num.append(sali[i])
    now = sali[i]
    suu.append(kari)
    kari = 0
    for i in range(len(suu)):
    if num[i] > suu[i]:
    kari += suu[i]
    elif num[i] < suu[i]:
    kari += suu[i] - num[i]
    print(kari)

    こちらも長い気がしますがacを出すことができました、最初に数列の中にある数の種類とその要素数を別々のリストを使って数えていたのが非効率な気がしますが…公式の解説を見てもよくわからないのでまあこんな感じで良かったのだと思います。

    D問題

    2次元座標上で、ロボットに渡されるコマンドとゴールの座標が渡されゴールにたどり着けるか答えるという問題でした。
    これは全く解けませんでした、公式の解説をみてもdpとかよくわからない言葉が出てきてるので自分では解けない問題なんだな、と…時間は余ってたので全探索を実装しようとも考えましたがスマホの計算機で簡単に計算したら答えの欄に∞マークが出てしまったので…

    結果

    Dは解けなかったですが全体の順位が134だったのでレートは92上がって635になりました、ついに無色より緑が近くなりました、まだ一度もDを解いたこたがないのでDが解けないと緑はきついのかな…まあhighestスコアを維持できたので自分の中では良かったんじゃないかなと。