昔、自作のCSSで作ったサイトをBulmaに切り替える(簡単なBulmaの使い方)

初めに

昔、若気の至りで作成したCSS/HTMLで作成したサイトをBULMAに切り替えてみた備忘録

結論

やっぱり、デザインに関しては中途半端にチャレンジするのであればあるものを実装したほうが良いと思いました。
切り替え自体も1時間程度で終了しましたし、スッキリしました。

変更前

スクリーンショット 2019-10-06 0.55.59.png

変更後

スクリーンショット 2019-10-06 0.57.18.png

手順

旧式のHTMLサイトとCSSを用意しました。
今回のサイトはCSSが該当HTML内に入っていたため1ファイルでしたが…

1,既存のCSSを全削除

不用意に残っていると悪さをしそうなのですべて削除しました。

2,Bulmaを読み込ませる

ヘッダー部に下記の1行を入れます。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.min.css">  

3,ベースをどのように書くか調べる

とりあえず、全体構成が最初であるため BulmaLayoutを参照します。
この中の、Containerを参照し body要素直下に埋め込みます。
こんな感じですね。

  <body>  
    <div class="container">  
      <div class="notification">  
      </div>  
    </div>  
  </body>  

4,タイトルをどうするか考える

タイトルに関してはheroというのがあったのでこれを利用しました。
こんな感じに記載すれば綺麗になりました。

<section class="hero is-info">  
    <div class="hero-body">  
    <div class="container">  
        <h1 class="title">  
        hasito.com  
        </h1>  
        <h2 class="subtitle">  
        しがないサラリーマンプログラマ  
        </h2>  
    </div>  
    </div>  
</section>  

5,全体構成を考える

次に、現状の構成から大きく変えない方法で少しみてみたところ…
tilesがそれっぽいのでこれをそのまま流用しました.

こんな感じの構成です。
スクリーンショット 2019-10-06 1.13.14.png

該当の要素に各コンテンツを埋め込んでいくだけですね。
完成は下記になります。

https://hasito.com

悩んだ所

そこまでなかったので備忘録的に書いておきます。

Herotilesの間にmarginが生まれない

正規な解決方法があるのでしょうけど、すぐに探せなかったため改行で逃げています…

tilesが最も長い要素に依存する。

例えば横軸で長い要素が1個あると、他の要素も長く取ろうとして不格好になります。
私サイトはTwitterが長さ指定無しだったため6000px程度になりかなり見にくくなってしまいました。
Twitterの埋め込みはdata-height="x"で高さを指定できるため、これで解決しました。

pythonでLinuxコマンド文字列を整形する汎用的なプログラム

背景

Linuxコマンドを用いて例えばCPU温度などを定期的にDBに追加しています。
この時にコードをなるべく少なくしようとコマンドだけで色々と調べたのですがなかなか難易度が高かったので作成しました。

仕様

汎用的に利用できるようにしたいのでpythonのFormatのような動きを実現させたい。

コード

こうなりました。

import sys;  
print(sys.argv[1].format(*sys.argv[2].split(" ")) )  
  • 第一引数:Formatの指定文字列
  • 第二引数:空白で区切られたFormatに入れる文字列

利用方法

mosquitto_sub -t "#" -v |xargs -I@ python3 /home/hashito/command/text2format.py "insert into mqtt.msg (t,m,tm)values(\'{}\',\'{}\',UNIX_TIMESTAMP(NOW()))" @ | xargs -I@ mysql -e "@"  

mqttの内容を雑にマリアDBにつっこめます

追記

@shiracamus 様からコメントいただきました。
コマンドのみだと下記の形で出来るようです。

$ echo "a b" | xargs echo | xargs printf "insert into mqtt.msg (t,m,tm)values('%s','%s',UNIX_TIMESTAMP(NOW()))"  
insert into mqtt.msg (t,m,tm)values('a','b',UNIX_TIMESTAMP(NOW()))  

これをずっと探していたのですが、自分の知識がなく助かりました!
ありがとうございました!

MQTTのMessageを残らずMySQL(MariaDB)に保存するコマンド

#個人的なメモ

db構造

  
sudo mysql -e "SHOW FULL COLUMNS FROM mqtt.msg"  
+-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+  
| Field | Type          | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |  
+-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+  
| m     | varchar(1124) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         |  
| tm    | int(11)       | NULL              | YES  |     | NULL    |       | select,insert,update,references |         |  
+-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+  

コマンド

mosquitto_sub -t "#" -v | xargs -I@ sudo mysql -e "insert into mqtt.msg (m,tm)values('@',$(date +%s))"  

上記だと、時間が固定になってしまいます。
SQLの方で持ってくるように変更

mosquitto_sub -t "#" -v | xargs -I@ sudo mysql -e "insert into mqtt.msg (m,tm)values('@',UNIX_TIMESTAMP(NOW()))"  

課題

・セキュリティ的に問題有り
・トピックとMessageが分割できていない

commentいただけると嬉しいです!

npm http-server とDockerで無料HTTPS化

#はじめに
無料でHTTPSを立てたかったので、立て方をここに残します。(備忘録)

#やり方

用意するもの

下記のものがインストールされたlinuxサーバ
npm
<参考>Ubuntuに最新のNode.jsを難なくインストールする
docker and docker-compose
<参考>Ubuntu に docker と docker-compose を入れる
domain
<参考>freenomでドメインの取得

手順

1,domainの設定

用意したlinuxサーバのグローバルIPを設定してあげます。
私のはさくらインターネットで購入したので下記のようなイメージで設定しました。
スクリーンショット 2019-08-18 3.49.14.png

2,各種インストール

httpサーバソフト:http-server

下記のコマンドでインストールしてください。

$ sudo npm install -g http-server  

ジョブ管理ソフト:cron

ubuntu等の場合は最初から入っているかと思いますが、centosなどでは入っていない場合もあるようなので、下記のようにインストールしてください。

$ sudo yum -y install crontabs  

ファイヤーウォール管理ソフト:ufw

下記のコマンドでインストールしてください。

$ sudo apt -y install ufw  

*centos系はこちらを参照ください。<参考>ufwをcentosにインストール

2,crontabへの登録

これを実行する事により、サーバが再起動した場合も自動的に再実行されます。
下記のコマンドを実行してください。

$ sudo crontab -e  

コマンドを実行すると編集画面が表示されますので、下記の行を追加し保存してください。

@reboot sudo ufw allow 80;sudo ufw allow 443  
@reboot sudo http-server /{対象フォルダ} &  

*{対象フォルダ}はhttpサーバで表示するindex.htmlなどが存在するフォルダを指定してください。

3,docker-compose.ymlの作成

下記のコマンドを実行し、ファイル編集を開始してください。(例ではEditorをnanoで利用しています)

$ sudo nano docker-compose.yml  

新規ファイル内容は下記としてください

version: "3"  
services:  
  https-portal:  
    image: steveltn/https-portal:1  
    ports:  
      - 80:80  
      - 443:443  
    environment:  
      DOMAINS: '{ドメイン名} -> http://dockerhost:8080'  
      STAGE: production  
    volumes:  
      - ./org-chimata-ssl-certs:/var/lib/https-portal  
    restart: always  

*{ドメイン名}は用意されているドメイン名を利用ください。

4,docker-compose.ymlの実行

最初に念の為、ファイヤーウォールに穴を開けます。

$ sudo ufw allow 80;sudo ufw allow 443  

http-serverを立ち上げます

$ sudo http-server /{対象フォルダ} &  

下記のコマンドでhttps-portalを起動

$ sudo docker-compose up -d  

これで、正常に立ち上がるはずです。

問題がある場合

まずもってログを確認していただいたほうが良いかと思います。

dockerのログの見方

1,下記のコマンドでdockerのコンテナIDを取得

$ sudo docker ps  
> CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                                      NAMES  
> {コンテナID}        steveltn/https-portal:1   "/init"             2 days ago          Up 2 days           0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   {user name}_https-portal_1  

2,下記のコマンドでコンテナのログを取得

$ sudo docker logs {コンテナID}  

そして、エラーっぽいところの行をコピーしてググる!!

他の可能性

可能性としては…
http-serverは2回目以降は別ポートで起動します。→多重起動していないか確認
http-serverが立ち上がっているか?→curlなどでgetして確認
・ネットワーク全体で80/443PORTは許可されているか?→外部からtelnetなどで確認
STAGE: productionで何度も作成していないか?→Let's Encryptに回数などの制限があるようです。

Font Awesomeのアイコンを導入してみる

目的

サイトを作成するのに無料アイコンが必要だったので導入しました。
備忘録

流れ

1.登録:メール

下記のサイトにアクセスし、スタートをクリック
https://fontawesome.com/
image.png

下記に、自分のメールアドレスを入力し、「Send Kit Code」!
image.png

こんなメールが来るので「Click to Confirm Your Email Address + Set Things Up」!
image.png

2.登録:入力

新しいパスワードを入力
image.png

上から「ファーストネーム」、「ラストネーム」…「最初に使ったのはいつか」
って感じで入力。そのままですね
image.png

3.リンク取得

入力が終わると下記のような画面に移動します。
image.png
ここで表示されているコードをコピーしてホームページにCOPYすればOK

  
<script src="https://kit.fontawesome.com/{serial}.js" crossorigin="anonymous"></script>  

例もダウンロードできます。

  
      <!doctype html>  
      <html>  
        <head>  
          <!-- Place your kit's code here -->  
          <script src="https://kit.fontawesome.com/{serial}.js" crossorigin="anonymous"></script>  
        </head>  
  
        <body>  
          <i class="fas fa-thumbs-up fa-5x"></i>  
        </body>  
      </html>  

詰まったところ

フォントの最初の文字が異なる場合がある

フォントによって最初に入ってくる文字が異なる場合がります。
これがバージョンによって異なるらしく…注意が必要です。

fa s

<i class="fas fa-map-marked-alt fa-3x"></i>  

fa b

<i class="fab fa-linkedin fa-1x"></i>   

こちらのサイトにあるような分類になっているようです。
https://fontawesome.com/how-to-use/on-the-web/referencing-icons/basic-use

image.png

その他

ライセンス

ここにあります。
今日(2020年3月1日)現在はGPLライセンスのようです。
https://fontawesome.com/license/free

設定変更

設定を変更し、過去のバージョンも利用できるようです。
また、SVGかWebフォントも選択可能です。

kitのホーム画面で「your kit settings.」をクリックすると下記の画面に移動します。

image.png

windows10にpythonとVisualStudioCodeをインストールする(2020年4月版)

概要

Windows10にPython3とVisualStudioCodeをインストールしたので備忘録

動画

動画版もこちらにおいておきます。
IMAGE ALT TEXT HERE

#手順

1.Python3 インストール

1-1. ダウンロード

下記のURLからダウンロードしてください。
https://www.python.org/
image.png

image.png

1-2. 実行

ダウンロードしたファイルを実行してください。
image.png
「Add Python3.8 PATH」はチェックを入れてください。

image.png

これでPythonのインストールは完了です。

2.VisualStudioCode インストール

2-1. ダウンロード

下記のURLからダウンロードしてください。

https://azure.microsoft.com/ja-jp/products/visual-studio-code/

image.png
image.png

image.png image.png

2-2. 実行

ダウンロードしたファイルを実行してください。
image.png

image.png image.png image.png

チェック項目に関しては自由に選択してください。

image.png

これでインストールは完了です。

2-3.デバッグ設定

VisualStudioCodeを起動してください。

image.png

四角が重なったようなアイコンから拡張機能をインストール出来ます。
その中からPythonを選択し、インストールしてください。

インストールが終わるとデバッグが可能になります。

image.png

実行したいpythonファイルを開いた状態で、虫のようなマークを選択、その後Run and Debugをクリックすると、下記のような画面になります。
image.png

Python Fileを選択するとデバッグすることが出来ます。

riot.jsでマウスムーブイベントでグリグリ動かす方法

最初

riotとsvgを使って手軽にぐりぐりできないかと思った。

onclickイベント?

公式のドキュメントとかを見ていると日本語ではonclickとかoninputとかのイベントしか記載がない…
試しにonmousemoveを下記のようにしてみたら動いた。

<circle onmousemove={move} cx="10" cy="20" r="20" fill="blue" />  

マウスの場所…

通常、マウスのイベントの戻り値としてマウスの情報が飛んで来るのだが、riotは…?
適当に引数を追加し参照したところそれっぽい物が戻ってきていた。

move(e){  
  console.log(e);  
}  

要素への参照

マウスイベントの戻り値のpathに要素をみつけたので下記のように記載

    move(e){  
      e.path[0].setAttribute("cx",e.offsetX);  
      e.path[0].setAttribute("cy",e.offsetY);  
    }  

これでうまく動きました。

#全体のソース

<sample>  
<svg id="svg" width="300" height="340" style="border-width: thick; border-color: #EEE; border-style: solid; display: block; margin: auto;">  
    <circle onmousemove={move} onmousedown={down} cx="10" cy="20" r="20" fill="blue" />  
</svg>  
  <script>  
    var self=this;  
    move(e){  
      e.path[0].setAttribute("cx",e.offsetX);  
      e.path[0].setAttribute("cy",e.offsetY);  
    }  
  </script>  
</sample>  
<html>  
  <head>  
    <title>test</title>  
  </head>  
  <body>  
    <sample></sample>  
    <script type="riot/tag" src="sample.tag"></script>  
    <script src="https://cdn.jsdelivr.net/npm/riot@3.8/riot+compiler.min.js"></script>  
    <script>riot.mount('sample')</script>  
  </body>  
</html>  

[電子工作入門]スイッチ入力を受け取る

概要

スイッチを使って入力を受け取りLEDを光らせる回路を作成しました。
超入門だと思うので…

IMAGE ALT TEXT HERE

回路図

今回は、ポート2,4を利用します。
ポート4でスイッチを押しているかどうかを受け取り、ポート2でLEDを光らせます。

スクリーンショット 2020-03-20 7.36.02.png

[スイッチの片方が抵抗を挟んでGNDに落ちている理由]
スイッチが切れている時に電気的にGNDにも5vにもならない状態にしないためです。

[LEDにも抵抗を挟んでいる理由]
これはLEDを5vとGNDに直接つないでしまうと、大量の電流が流れるためLEDが破損する事を防ぐためです。
※ArduinoのIOは基本的に直接つないでも問題なかったと思いましたが、念の為です。

ソースコード

void setup() {  
  pinMode(2, OUTPUT);  
  pinMode(4, INPUT);  
}  
  
void loop() {  
  int pin4=digitalRead(4);  
  digitalWrite(2, pin4);   
}  

setup()で各pinを初期化しています。
loop()ではpin4で入力を受け取り、pin2に書き込みを行っています。

github
https://github.com/hashito/arduino_startup/tree/master/switch2led

結果

download.gif

距離センサを使ってみた

概要

距離センサを購入したので試してみました。

部品

距離センサ:HC-SR04
83円
image.png
※参考にしたSwitchScienceによるとこれには一部欠陥があるようで、そちらのほうが良いかもしれません。

表示機:TM1637が組み込まれた7セグLED
73円
image.png

コンピュータ:Arduino UNO互換機
699円
img.png

#配線
スクリーンショット 2020-03-22 7.46.02.png

Triggerを10マイクロ秒以上 UPさせると、40kHzで8回距離を測り、その結果をEchoに周波数で返す仕様らしいです。

#ソースコード

  
#include <Arduino.h>  
#include <TM1637Display.h>  
#include <Wire.h>  
  
#define SERIAL_BAUD 115200  
#define CLK 2  
#define DIO 3  
TM1637Display display(CLK, DIO);  
int Trig = 5;  
int Echo = 4;  
  
void setup() {  
  Serial.begin(SERIAL_BAUD);  
  while(!Serial) {}  
   pinMode(Trig,OUTPUT);  
   pinMode(Echo,INPUT);  
  
  Wire.begin();  
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };  
  display.setBrightness(0x0f);  
  display.setSegments(data);  
  delay(1000);  
}  
  
void loop() {  
  int Duration;  
  float Distance;  
    digitalWrite(Trig,LOW);  
    delayMicroseconds(1);  
    digitalWrite(Trig,HIGH);  
    delayMicroseconds(11);  
    digitalWrite(Trig,LOW);  
    Duration = pulseIn(Echo,HIGH);  
    if (Duration>0) {  
      Distance = Duration/2;  
      Distance = Distance*340*100/1000000; // 340m/s = 34000cm/s = 0.034cm/us   
      Serial.print(Distance);  
      Serial.println(" cm");  
      display.showNumberDec((unsigned int)(Distance*100), false);  
//      analogWrite(11, (unsigned int)(100-Distance));//ビープ音  
    }  
  delay(100);  
}  

github

動作確認

gif動画で上げても分かりにくかったので、Youtubeにて確認いただけると幸いです。
IMAGE ALT TEXT HERE