2021年1月30日土曜日

Dell Latitude E6320にUbuntu 20.04 LTSをインストールするとwi-fiに接続できないについて

 あまプロでは生徒のノートパソコンにUbuntuを使っています。
先日、Ubuntuのネット接続て嵌ったのてあメログ。

生徒用に買うたDell Latitude E6320にUbuntu 20.04.1 LTSをインストールしました。
インストール完了後に再起動を行って、再起動後まではwi-fiがつながっていました。
しかし、その後の更新でシステムエラーが発生し、その再起動後にwi-fiがつながらなくなってしまいました…。
wi-fiの物理スイッチをOn/Offしても変化なし、再起動しても変化なし…。

色々調べてみると、無線装置のbcmwl packageにバグが有るらしく、既にバグ報告が登録されてました。
他の方の投稿で、新しい版のbcmwl packageをインストールすると解決したというのを見掛けたので、試してみると無事に再起動後にwi-fiに繋がりました…。

良かった良かった。

2021年1月22日金曜日

FujitsuパソコンにUbuntuをインストールについて

 あまプロでは生徒のノートパソコンのOSにUbuntuを使っています。

先日、Ubuntuのインストールで嵌まったんであメログ。

先ず、ここからisoファイルをダウンロードして、ブータブルUSBを作成します。

 次にBIOSで起動デバイスの優先順位を選択し、USBメモリを上位にします。(ここは一般的なBIOSと同じ)

次にレガシーUSBサポートを有効にします(ここも一般的なBIOSと同じ)
次にセキュリティの管理者用パスワードを設定して、取り外し可能なディスクからの起動を「常に可能」にする(ここがFujitsu特有)

上記三点の設定を行わないと、USBから起動してくれませんでした…。

Ubuntuのインストールが終われば、上記設定は元に戻しても構いません。

2020年11月26日木曜日

ワードプレスのページネーションについて

 あまプロではWrodpressでウェブサイトを構築する事が有ります。
ワードプレスで少し躓いたんであメログ。

 ワードプレスでは投稿を一定数のページ単位で表示するページネーションという機能が備わっています。
公式の基本的な例にPHPのプログラムが載っていて、それをコピペしたらページネーションのHTMLが生成される
筈なんですが、何故か私の環境ではURLのクエリ部分が
https://amahiroba.info/?page_id=721&category=ボランティア募集#038;category=ボランティア募集&paged=2
の様にcategoryが繰り返されて正しいURLになりませんでした…。

原因を調べてみるとesc_url( get_pagenum_link( $big))でURLをエスケープしている箇所が有るんですが、そこにマルチバイト文字列(日本語)等#038;が入っているとエスケープ出来ないそうです。
なので、エスケープ出来る様にhtml_entity_decode( get_pagenum_link( $big))に改修すると

正しいURLが生成されました。
https://amahiroba.info/?page_id=721&category=ボランティア募集&paged=2

2020年7月18日土曜日

Ubuntuの追加したユーザでの日本語入力について

あまプロではUbuntuを使ってプログラミング教室を行っています。
Ubuntuの日本語入力で躓いたのであメログ。

Ubuntuのインストール時に入力言語の設定を行います。
ここで日本語を設定すると、キーボードに日本語レイアウトを選択して、全角半角の切り替えが出来る様になります。

通常はこれだけで日本語が行えるんですが、新たなユーザを追加した場合にハマりポイントが有ります。
 インストール時に日本語入力の設定を行っていれば、正しく日本語入力出来て、
 地域と言語設定もこの様になってます。
キーボードレイアウトも日本語キーボードになってます。
なんですが、後からユーザを追加した場合は、地域と言語設定が
 この様になって、キーボードレイアウトも
英語キーボードになってまうんですね…。
なもんで、新たにユーザを追加した場合は、一度入力ソースを全部削除して
日本語を追加します。
これで日本語キーボードレイアウトになります。
次に日本語(Mozc)を追加します。

これでログアウトしてログインすると、無事に日本語入力が出来る様になります。

通行止めするらしい


2020年6月2日火曜日

要素のクリアボタンについて

あまプロではウェブシステムの保守を行う事があります。

先日、ChromiumのUIが変更されたのであメログ。

HTML5の<input type="time">タグをChromiumで開くと🅧のクリアボタンが表示されていたのが、最近のアップデートで時計アイコンに変わっていた。
ワンクリックで時間をクリアできなくなり不便という要望が出たので、何とか回避してみました。

inputの隣に×アイコンを追加して、それがクリックされたらJavaScriptでinputの値を空にしています。
ESCキー押下でもクリアする様にしてます。
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>てすと</title>
        <style type="text/css"><!--
            .clear { color: gray; position: relative; left: -0.4em;}
            @-moz-document url-prefix() {
              .clear {
                display: none;
              }
            }
        --></style>
    </head>
    <body>
        <input type="time" id="time0" name="time0">
        <span id="clear0" class="clear">&#127335;</span>
        <br>
        <input type="time" id="time1" name="time1">
        <span id="clear1" class="clear">&#127335;</span>

        <script type="text/javascript"><!--
            function downEscape() {
                if( event.key == 'Escape') this.value = '';
            }
            function clickEscape() {
                this.previousElementSibling.value = '';
            }
            function changePointerDefault() {
                this.style.cursor = 'default';
            }
            document.getElementById( 'time0').addEventListener(
                'keydown', downEscape, false
            );
            document.getElementById( 'clear0').addEventListener(
                'click', clickEscape, false
            );
            document.getElementById( 'clear0').addEventListener(
                'mouseover', changePointerDefault, false
            );
            document.getElementById( 'time1').addEventListener(
                'keydown', downEscape, false
            );
            document.getElementById( 'clear1').addEventListener(
                'click', clickEscape, false
            );
            document.getElementById( 'clear1').addEventListener(
                'mouseover', changePointerDefault, false
            );
        --></script>
    </body>
</html>

表示するとこんな感じ。
mozilla系のfirefoxでは今でもクリアボタンが表示されてるので、追加クリアボタンは非表示にしてます。

こんな感じ。

ワンライナーでHTMLとCSSとJavaScriptをごちゃまぜにするのがお好みな方は

 <!DOCTYPE html>
<html lang="ja">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>てすと</title>
    </head>
    <body>
        <input type="time" id="time0" name="time0" onKeyDown="if( event.key == 'Escape') this.value = '';">
        <span id="clear0" class="clear" style="color: gray; position: relative; left: -0.4em;" onClick="this.previousElementSibling.value = '';" onMouseover="this.style.cursor = 'default';">&#127335;</span>
        <br>
        <input type="time" id="time1" name="time1" onKeyDown="if( event.key == 'Escape') this.value = '';">
        <span id="clear1" class="clear" style="color: gray; position: relative; left: -0.4em;" onClick="this.previousElementSibling.value = '';" onMouseover="this.style.cursor = 'default';">&#127335;</span>
    </body>
</html>

こちらをどうぞ。

2020年5月10日日曜日

JavaScriptとCSSのミニファイ化について

あまプロでは市内のお持ち帰り配達お店マップを作っています。

開発が進むに連れて、JavaScriptファイルとCSSファイルとHTMLファイルが肥大化して来ました。
そこでファイルサイズを抑えるミニファイを行ったのであメログ。

CSSやJavaScriptやHTMLには可読性を上げる為にコメントやインデントを入れていますが、ブラウザで実行する際にはそれらは不要になります。
なので、サイトにリリースする際にはミニファイしてファイルサイズを小さくします。
そうすると、当然ダウンロード時間が減り、結果ウェブサイトの応答が早くなります。

CSSやJavaScriptのミニファイを行うツールがオープンソースで公開されてますので、それを使います。
HTMLのミニファイツールも有るのですが、今回は割愛。

先ず、ミニファイツールをインストールする前に、npmをインストールします。sudo apt install npm
でインストールしておきます。
aptが依存するパッケージを自動的にインストールしてくれるので便利です。

続きまして、npmでCleanCSSとUglifyESをインストールします。
npm install clean-css-cli -g
npm install uglify-es -g
 
基本的な使い方はこちら 
cleancss -o takeaway.min.css takeaway.css
uglifyjs -c -m -o takeaway.min.js -- takeaway.js
 
*.cssや*.jsがミニファイ前のファイルで、*.min.cssや*.min.jsがミニファイ後のファイルです。 
比較してみると
-rw-r--r-- 1 root root 2.5K May  9 23:35 takeaway.css
-rw-r--r-- 1 root root 1.7K May  9 23:35 takeaway.min.css
-rw-r--r-- 1 root root 5.0K May  9 23:35 takeaway.js
-rw-r--r-- 1 root root 2.8K May  9 23:35 takeaway.min.js
-rw-r--r-- 1 root root  26K May  9 23:35 takeawayLib.js
-rw-r--r-- 1 root root  12K May 10 00:14 takeawayLib.min.js
ミニファイ後はサイズが約半分になってます。
たかが半分されど半分…塵も積もれば山となります。

ミニファイ後のファイルを開いてみると改行や空白が削除された長〜い一行のファイルになっています。
CSSはこれで良いのですが、JavaScriptはこのままでは開発し難いです。
JavaScriptは開発中にブレークポイントで停止して変数をウォッチしてデバッグする事が有りますが…これ、一行のファイルだととてもデバッグし難いんです。
なので、今時のブラウザにはJavaScriptの整形機能が有ります。
ブラウザの開発ツール(Ctrl + Shift + I)のデバッガータブの下に{ }のアイコンが有ります。
これを押下するとソースを整形してくれます。
整形はしてくれるんですが、ミニファイ時に難読化のオプション-mを指定しているので、変数名が一文字になって非常に理解し難いです。
これには、デバッグ時に変数名やfunction名を復元するソースマップを作成して対応します。
ソースマップはミニファイ時にuglifyjs -c -m -o takeaway.min.js --source-map "url='takeaway.min.js.map'" -- takeaway.js
のオプションを指定するだけです。 

すると、ミニファイ時にソースマップが作成されます。
-rw-r--r-- 1 root root 2.5K May  9 23:35 takeaway.css
-rw-r--r-- 1 root root 5.0K May  9 23:35 takeaway.js
-rw-r--r-- 1 root root 1.7K May  9 23:35 takeaway.min.css
-rw-r--r-- 1 root root 2.8K May  9 23:35 takeaway.min.js
-rw-r--r-- 1 root root 3.0K May  9 23:35 takeaway.min.js.map
-rw-r--r-- 1 root root  26K May  9 23:35 takeawayLib.js
-rw-r--r-- 1 root root  12K May 10 00:14 takeawayLib.min.js
-rw-r--r-- 1 root root  16K May 10 00:14 takeawayLib.min.js.map

先程と同様にブラウザの開発ツールのデバッグタブを表示すると
*.min.jsに加えて*.jsが表示され、*.jsの方は変数名やfunction名が理解し易い形式で表示されます。

開発用のdevelopブランチではJavaScriptをデバッグしますので、ソースマップ有りで。
リリース用のgh-pagesブランチではJavaScriptをデバッグしないので、ソースマップ無しで。
という風に使い分けます。