ブログを書くのに便利なショートカットキー

こんにちは。

Kitachisukuです。

今回は自分がはてなブログを書くのに使っている便利なショートカットキーについてまとめていきます。

 

Windowsです

 


 1.スクショ即保存キー

2.コピー履歴

3.Do,Undo

4.仮想デスクトップ系


 

1.スクショ系のキー

・即保存

PrintScreen + Windowsキーでピクチャの中のスクリーンショットフォルダに即保存できます。

 

・画面コピー

PrintScreenだけです。

 

・フォーカスのあるウィンドウのみを撮影

Alt + PrintScreenです。

 

なおこれらは併用できます...が、

併用した時に、

自分の場合はなぜか保存先がビデオのCapturesになってました...

 

2.コピー履歴

Windows + Vです。

まず出てきたウィンドウの「クリックボードを有効にする」を押したら、

その次にコピーした履歴が全部残ります。

URLとかまとめる時に便利なんじゃないでしょうか。

 

3.Do,Undo

多分たいていの人は知ってると思います。

なお自分はUndoの方法を知りませんでした...

 

Do(1個戻す) Ctrl + Z

Undo(1個やり直す) Ctrl + Y

 

4.仮想デスクトップ系

複数の作業を並列して行うときに使います。

Windows + Ctrl + D 新しい仮想デスクトップ作成

Windows + Ctrl + ←もしくは→ どちらかの方向の仮想デスクトップに移動

Windows + Ctrl + F4 今使ってる仮想デスクトップを削除

 

こんな感じです。

後でUbuntuの場合も載せようと思います。

短くなりましたが、

では。

Ubuntu(Raspberry Pi 4)にRustコンパイル環境を作ってHello Worldする

こんにちは。

kitachisukuです。

今回はUbuntu MATEに自分の愛用言語Rustを入れてHello Worldします。

 


 1.環境

2.インストール

3.お待ちかねのHello World!


 

 1.環境

Raspberry Pi 4にUbuntu MATEを入れて動かしてます。

メモリ 8GB

CPUクロック数 1.5GHz

 

2.インストール

Windowsとは違って、

Visual Studio Build Toolsとか入らないです。

 

これを実行すると、

こう出てきます。

 1) Proceed with installation (default)
 2) Customize installation
 3) Cancel installation

 

直訳

 1) インストールを続行 (標準)
 2) カスタムインストール
 3) インストールをキャンセル

 

それぞれの用途に合わせて1,2,3と入力してEnterを押してください。

 

何もエラーが起きてなかったらインストールは終了です。

 

このときに使うcurlをインストールしていなかったら以下のコマンドでインストールします。

 

 sudo apt install curl

 いつもどおりのsudoです。

 

じゃあversion確認でもしてみるか、とコマンドを打つと、

 ~$ rustup --version

コマンド 'rustup' が見つかりません。次の方法でインストールできます:

sudo snap install rustup

あれ、インストールしたはずなのにな....

 

調べてみると、

パスの設定をしなきゃならないっぽいです。

 

$HOME/.cargo/envというファイルでパスが設定できます(ありがたいですね)。

 

 ~$ source $HOME/.cargo/env

 

今度こそ。

 ~$ rustup --version

rustup 1.23.1 (3df2264a9 2020-11-30)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.49.0 (e1884a8e3 2020-12-29)`

よしっ!正常に表示されました。

 

一応cargoも試してみます。 

 ~$ cargo --version

cargo 1.49.0 (d00d64df9 2020-12-05)

 

これで準備完了です。

 

3.お待ちかねのHello World!

nanoエディタを使って書きます。

 

hello.rs

fn main(){

    println!("Hello World!");

}

 

コンパイル

 ~$ rustc hello.rs -o hello

 

実行結果

 ~$ ./hello

 Hello World!

 

以上です。

では。

Ubuntu MATE on Raspberry Pi 4 で思ったこと

こんにちは。

Kitachisukuです。

先日、

Raspberry Pi 4を買って、

Ubuntu MATEを入れたのですが、

それで思ったことを今回は書いてみようと思います。

 


 1.いいと思ったこと

2.悪いと思ったこと

3.まとめ


 

 1.いいと思ったこと

・起動が結構早い

もちろんSSDとかよりは遅いんですが、

結構早く読み込まれて結構早く立ち上がりました。

 

・安い

安いのはRaspberry Pi 4のおかげです。

ヨドバシのスターターセットを買って、

1万7千円でした。

PCにしては相当安いほうだと思いますよ...?

 

コマンドラインが充実

Windowsコマンドプロンプトとかより、

コマンドライン要素が強めなおかげか、

様々なコマンドがあります。

 

 sudo

管理者実行

 

 apt

アプリのインストールとか。

 

 vi もしくは nano

標準で入ってるっぽいテキストエディタ

 

Windowsとあまり変わらない

操作感はWindowsと変わりない感じです。

標準の日本語入力(Mozc)もあまりIMEと変わらない感じですし、

UbuntuはともかくUbuntu MATEはだいたい配置が同じなので、

いつもどおりできます。

 

しいてあげるとすれば、

  • メニューが上の方にある
  • すべてのウィンドウ表示・非表示ボタンがある

ってことぐらいです。

 

2.悪いと思ったこと

・アプリのダウンロード時のエラー

おそらくラズパイ由来...?

CPUが違うからとかでしょうか。

 

・スリープ不可

これもラズパイ由来...?

一応サスペンドはあるんですが、

何故か自分の環境ではおしたらかたまりました...

(swapの設定もしました)

 

・ちょっと設定が面倒

まあ前の記事でSDカードに焼いてっていうのも結構面倒なんですが、

一番面倒に感じたのは「日本語化設定」です。

 

最初の画面で言語に日本語を選んでも、

一部日本語化されていなかったり、

日本語入力が不可だったりしました。

 

設定方法は、

  1. メニューで「lang」と検索して出てくる言語設定クリック
  2. なにかインストールしてねって出るのでインストール
  3. 出てきた画面の「システム全体に適用」を押して再起動
  4. 設定されていなかったらIMEを設定して再起動

という手順なんですが、

それなりにいろいろ設定したので、

個人的にはめんどくさかったです(ただ自分が極度のめんどくさがりやなだけです)。

 

3.まとめ

Raspberry Pi 4でUbuntu MATEは...

普通に動く!

ただし設定が必要だったり、

なんかエラーが出たりすることはあります。

 

でもどんどんUbuntu MATEとかも進化していってますし、

いつかは完璧対応とかになると思います(その頃にはラズパイの性能も上がってるでしょうし)。

ちなみにこの記事はUbuntu MATEのFireFoxで書いてます。

 

意外と使える、ラズパイ×Ubuntu MATEでした。

 

では。

Raspberry Pi 4を買った話

こんにちは。

kitachisukuです。

今回はRaspberry Pi 4を買ったついでに自分が弱い外部系のことをまとめてみます。

外部系のものは初心者なので、あんまり期待しないでください。

 


 1.性能

2.入れるOS

3.SDカードに書き込み

4.初心者レベルの勘違い

5.と、いうわけです。


 

1.性能

Raspberry Pi 4

  • CPU 1.5GHz
  • メモリ 8GB

 

2.入れるOS

候補

 

ネットの情報(+独断と偏見)を見てみるとこんな感じになっている(パフォーマンス)。

  • Ubuntu...重い&メモリの使用量多い
  • Ubuntu MATE..軽い&メモリの使用量少ない
  • Lubuntu..軽い&メモリの使用量少ない しかし動かないものもある
  • Xubuntu...軽い&メモリの使用量少ない だがデザインが個人的に嫌い

 

というわけでUbuntu MATEをインストールします。

 

3.SDカードに書き込み

マイクロSDカードをカードリーダーに入れた奴をUSBに入れました。

 

イメージ画像↓

画力が壊滅的ですがそこはお許しください。

 

書き込みにはRaspberry Pi Imagerを使いました。

イメージファイルは(.img)Ubuntu MATEの64bit版を使いました。

※配布されているのは.xz形式なので7-ZIPとかで解凍してください。

 

Use Custom

Use Customを押して、

ダウンロードして回答したimgファイルを選び、

SDカードを選んでからWRITEを押して書き込みスタートです。

 

4.初心者レベルの勘違い

さすがに自分以外やらないと思いますが....

一応書いておきます。

Q.OSは64bit? それとも32bit?

A.ラズベリーパイ4だったらいけるっぽいです。

 

Q.マイクロSDカードが押し込むとこわれそうで怖い...

A.向きがあってるならば多少力を入れて押し込めます。

 

5.と、いうわけです。

そういうことでラズベリーパイ4を買いました。

自分専用のPCが欲しくて、

本当は自作PCがよかったんですがまずはこういうのからやって行こうと考えて、

ラズベリーパイを買いました。

 

後で外部HDDを付ける予定です(大き目のファイルとか使いそうなのでSSDじゃないです)。

 

では。

HTML+JavaScriptでデスクトップアプリも!?ウェブ技術でアプリを作る方法

こんにちは。

kitachisukuです。

今回はHTML+JavaScriptでデスクトップアプリを作る方法を紹介します。

 


 1.HTML+JavaScriptでアプリって作れるの?

 2.作る方法

3.評価


 

 1.HTML+JavaScriptでアプリって作れるの?

ええ、できます。

なんとHTML+JavaScriptで作れます。

ちなみにCSSも使えますし、

VBScriptも使えます。

 

ただし本来はウェブ上で使う技術なため、

ネイティブでない = 動作速度が遅い

などの問題もあります。

 

まあそこはWebAssenbly使えばいいんですが、

ネイティブアプリより少し遅いという欠点があります。

 

ですが、

この方式で作られた有名なアプリもあります。

 

例えば、

Visual Studio Codeです。

恐らくこのブログを見ている人の中にも、

使っている人はいるんじゃないでしょうか(私も使っています)。

 

あのVSCodeもその技術で作られているんですから、

やってみる価値はじゅうぶんにあると考えていいでしょう。

 

 2.作る方法

いくつか種類がありますが、

代表的なものを説明していきます。

 

Electron

 よく見るやつです。

Githubが開発しました。

デスクトップアプリ(Win.Mac,Linux)が作れます。

 

作成したアプリケーションは、

内蔵されているオープンソースのブラウザ「Chromium」の上で動きます。

 

これで作られたアプリの例は、

VScode,Atomです。

 

インストールにはnpm(Node.jsが必要)を使います。

npm install electron --save-dev

 でインストールできます。

 

また、

類似したものにはNW.jsなどがあります。

 

Cordova

こちらはデスクトップ出なくスマホ用です。

どのOSでもAndroidは可能で、

MacならiPhoneも可能です。

 

これはAndroid(iPhone)のWebViewを内部的に動かして、

アプリを作れるようにしています。

 

npm install -g cordova
でインストールできます。
 
HTML Application
これは実質Windowsのみです。
内部的にInternet Explolerを動かしてアプリを動かします。
 
3.評価
Electron...サイズ重,動作良,シェア〇
Cordova...サイズ普通,動作良,シェア〇
HTML Application...サイズ小,動作悪,シェア×
 
ElectronはChromiumを仕込んでいるので重いです。
Cordovaは普通のアプリとあまり変わらないのでいい。
HTML ApplicationはIE使ってることとシェアの点で×。
 
一長一短って感じもしますが、
個人的にはElectronがHTML Applicationよりいいと思います。
多少重くても最近はあまり問題にならないので。
 
こんな感じです。
 
では。

EXEはダメか!?アプリ配布のおすすめ方法

こんにちは。

Kitachisukuです。

みなさん、

アプリを作って、配布するぞーってなったときに、

配布形式を考えていたりしますか?

 

例えば配布にEXEを使った場合、

以下の利点があります。

  • 一目でWindowsアプリとわかる
  • ダウンロードしてすぐ起動できる

ですが、

EXEはウイルスの可能性も高いため、

ウイルスソフトに誤ブロックされてしまうという可能性も出てきます。

 

そして、

今回はそれについてまとめました。

 

ですがとりあえず結論を言っておきます。

普通の人向けだったらインストーラー、

プログラムなどやっている人向け

もしくはちょっとしたアプリだったらZIP

という感じにするのが一番いいと思います。

 


 1.EXEで配布(もしくは各OSの実行形式)インストーラーじゃない

 2.ZIPで配布

3.tar.gzで配布(もしくはtar.bz2)

4.インストーラーで配布

5.まとめ

6.開発ソフトとかのリンク


 

 

 1.EXEで配布(もしくは各OSの実行形式)インストーラーじゃない

フリーゲームとかはこういうのありますよね。

これらのファイルの利点は以下のような利点です。

  • 一目でどのOSのアプリかわかる
  • ダウンロードしてすぐ起動できる

逆に欠点はこれです。

  • 誤ウイルス検出
  • 作成されるファイルなどをまとめにくい
  • 複数のファイル(dllなど)がないと動かせないプログラムなどだとごちゃごちゃする

これらを考えると、

ちょっとしたアプリじゃなかったら少し嫌ですね...

 

 2.ZIPで配布

もはや定番みたいな感じです。

ZIPファイルの利点は以下のような利点です。

  • ファイルなどをまとめられる
  • READMEなどを付けられる
  • 配布するバイナリサイズを削減できる

欠点はこのような感じです。

  • ダウンロードから実行までに7-ZipなどのZIP解凍ソフトが必要
  • 圧縮前は4GB以下、圧縮後は2GB以下でないと、ファイルが破損する

それでも配布が容易な点と、

4GB(2GB)以下という点も、

そこまで大きいアプリはそうそうないので、

恐らく大丈夫だと思います。

 

3.tar.gzで配布(もしくはtar.bz2,tar.xz)

これは、

2つの形式のファイルを組み合わせて使うものです。

まずTAR形式は、

ファイルをひとまとまりにするファイルです。

次にgz形式、bz2形式、xz形式は、

一つのファイルを圧縮する高圧縮のファイルです。

 

つまり、

TARでまとめてからgz,bz2,xzで圧縮するわけです。

 

利点はこれです。

  • 圧縮率を高くできる
  • その他、ZIPと同じ

逆に欠点はこれです。

  • 2段階の手順が必要なため解凍。圧縮が面倒
  • 対応していないものもあるかも

サイズが大きいファイルだけに使うって感じです。

 

4.インストーラーで配布

exe,msiなどの形式で配布、

またはストアで配布といった形になります。

利点はこれです。

  • PCに詳しくない人でも簡単にインストールできる
  • スタートアップなどの設定ができる

欠点はこれです。

もし企業レベルとかだったり、

多くの人に使ってもらいたいものだった場合は、

やっぱりこれ一択になります。

欠点は主に開発者への欠点なので、

ユーザー側からはあまり問題はないのではと思われます。

 

5.まとめ

ちょっとしたアプリで単体だったらexeなどの実行形式

ちょっとしたアプリで複数だったり、プログラム向けだったりはZIP

とにかく高圧縮を求めるのであればTAR.GZ(sz,bz2)

万人向けのアプリだったらインストーラ

ということになります。

 

では。

 

6.開発ソフトとかのリンク

ZIP解凍ソフト 7-ZIPLhaplus

インストーラー作成ソフト Inno Setup(非MSI)、WiX Toolset(MSI)

RustのGTKでGladeを試してみる

こんにちは。

Kitachisukuです。

RustのGTKでGladeを試してみました。

 


 1.方法


 

 1.方法

gtk::Builderを使います。

ちなみにコードは現在作成中のプログラムから引っ張ってきてます。

(そのため作成中のコードです。)

 

環境(Windows 64bit {MSYS2} GTK3.0 Glade 3.38.2)

 

ui.glade

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
  <requires lib="gtk+" version="3.24"/>
  <object class="GtkWindow" id="win">
    <property name="can-focus">False</property>
    <property name="title" translatable="yes">Easy Base 64 - by kitachisuku</property>
    <property name="window-position">center</property>
    <property name="default-width">1000</property>
    <property name="default-height">700</property>
    <child>
      <object class="GtkBox" id="mainbox">
        <property name="visible">True</property>
        <property name="can-focus">False</property>
        <property name="spacing">10</property>
        <property name="homogeneous">True</property>
        <child>
          <object class="GtkBox" id="leftbox">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="orientation">vertical</property>
            <property name="spacing">30</property>
            <child>
              <object class="GtkEntry" id="imagefile">
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="placeholder-text" translatable="yes">画像ファイル名(フルパスで!)</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="changeBase64">
                <property name="label" translatable="yes">画像をBase64データに変換</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="changeBase64HTML">
                <property name="label" translatable="yes">画像をimgタグ(HTML)に変換</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="changeBase64HTML1">
                <property name="label" translatable="yes">画像をリンク + imgタグ(HTML)に変換</property>
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="receives-default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">3</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkBox" id="rightbox">
            <property name="visible">True</property>
            <property name="can-focus">False</property>
            <property name="orientation">vertical</property>
            <property name="spacing">10</property>
            <child>
              <object class="GtkEntry">
                <property name="visible">True</property>
                <property name="can-focus">True</property>
                <property name="vexpand">False</property>
                <property name="editable">False</property>
                <property name="placeholder-text" translatable="yes">結果(Base64変換後)</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

 

画像

f:id:Kitachisuku:20210118191813j:plain

 

main.rs

extern crate gtk;
extern crate gio;

use gtk::prelude::*;

fn main()
{
    if gtk::init().is_err(){
        println!("GTKの起動に失敗しました。");
        return;
    }

    //  UIファイル読み込み
    let uifile = include_str!("ui.glade");

    //  ビルダー作成
    let builder = gtk::Builder::from_string(uifile);

    let window: gtk::Window = builder.get_object("win").unwrap();

    window.show_all();

    gtk::main();
}

 

ディレクトリ構造

f:id:Kitachisuku:20210118192004j:plain

 

実行結果

f:id:Kitachisuku:20210118192141j:plain

 

ちなみにこれに使っている作成中のアプリは近いうちに出します。

 

では。