2018-04-29

Fedora で Python 3 が Python のデフォルトになるのはいつ?

Python は、ウィキペディアの説明によると、

文法を極力単純化してコードの可読性を高め、読みやすく、また書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語である。反面、実行速度はCに比べて犠牲にされている。(Python - Wikipedia より)

とあるのですが、なぜ C と比較するのでしょう?

いやいや、ここが問題なのではありません。さらに読み進めると次のような記述があります。

2015年11月にリリースされたFedora 23や2016年4月にリリースされたUbuntu 16.04 LTSでは、デフォルトでインストールされるPythonのバージョンが2.xから3.xに変更されている。(Python - Wikipedia より)

この記述は、Python3 がデフォルトの Python になったかのような印象を読み手に与えますが、端末エミュレータを開いて次のようにタイプすると、

> python --version
Python 2.7.14
> ls -l /usr/bin/python
lrwxrwxrwx. 1 root root 7  3月 15 01:46 /usr/bin/python -> python2
>

のようになります。

使用している環境は Fedora 28 のベータ版ですが、/usr/bin/python は依然として python2 を参照しています。デフォルトでインストールされる Python は Python3 になったのかもしれませんが、デフォルトの Python とは、少なくとも Fedora では python2 なのです。

それでは、Fedora で /usr/bin/pythonpython3 を指すようになる具体的な予定はあるのでしょうか?

参考サイト [1] に、この件に関する具体的な説明がありました。2020 年前半にリリースされる予定の Fedora 32 で切り替わるそうです。そして次の Fedora 33 で python2 のサポートが廃止されるようです。

2008 年にリリースされた Python 3 では、それまでのバージョンへの後方互換性が失われているため、このように、移行には時間がかかってしまいます。

参考サイト

  1. Finalizing Fedora's Switch to Python 3 - Fedora Project Wiki

ブログランキング・にほんブログ村へ
にほんブログ村

2018-04-27

Ubuntu 18.04 リリース ㊗🎊

Ubuntu を ASUS TransBook T100HA にインストールして使っていますが、そろそろ 18.04 LTS がリリースされるので 4 月になって 17.10 から 18.04 LTS のベータ版にアップグレードしていました。朝起きて、何気にパッケージの更新をしたところ、下記のウィンドウが開きました。そうだ、4 月 26 日(UTC、協定世界時)に 18.04 LTS の正式版がリリースされるんでしたね。

LTS, Long Term Support のサポート期間はデスクトップ版、サーバー版ともに 5 年になっています。

Linux のディストリビューションはずっと Fedora をメインとしていますが、古くなった格安のノート PC がいくつもありますので Ubuntu についても、この PC にインストールして使っています。青の Fedora に対し、赤の Ubuntu と、勝手にそういうイメージを持っていますが、色調からくるイメージ以外、ただ普通にデスクトップ用途で使う分には差異が少なくなってきたように感じています。

参考サイト

  1. 2018年4月27日号 Ubuntu 18.04 LTS “Bionic Beaver”のリリース, Spectre/Meltdown対策(ひとまず)完結編:Ubuntu Weekly Topics|gihyo.jp … 技術評論社 [2018-04-27]

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-04-26

wxPythonで標準出力のリダイレクト

Python に限ったことではないのですが、問題解決のためにちょっとしたプログラムを作って、それで問題を解決できれば、やれやれなんとかなったとまずはひと安心します。そのプログラムにある程度の頻度で今後も使う需要があるならば、少し汎用化して GUI 化したくなります。私の場合、Python では、wxPython を使って GUI 化をします。

GUI 化をするにあたって、あったら便利な機能が標準出力のリダイレクトです。参考文献 [1] にピッタリなサンプルがありましたので、自分なり理解するために少しだけ書き直したサンプルを紹介します。

使用環境は以下のとおりです。今回も業務上必要だったので Windows を使っています。

  • OS: Windows 7 Enterprise SP1 (x86_64)
  • Python: Python 3.6.5 (amd64)
  • Eclipse IDE for Java Developers, Version: Oxygen.3a Release (4.7.3a) + PyDev 6.3.2

 

標準出力を Text ウィジェットへリダイレクトするサンプル
import sys
import wx


class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title="TEST")
        panel = wx.Panel(self) 
        vbox = wx.BoxSizer(wx.VERTICAL) 

        # ---------------------------------------------------------------------
        # horizontal button bar
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        # start
        start = wx.Button(panel, wx.ID_ANY, "start")
        start.Bind(wx.EVT_BUTTON, self.onClicked)
        # stop
        stop = wx.Button(panel, wx.ID_ANY, "stop")
        stop.Bind(wx.EVT_BUTTON, self.onClicked)

        hbox.Add(start, 0, wx.ALIGN_LEFT)
        hbox.Add(stop, 0, wx.ALIGN_LEFT)

        # ---------------------------------------------------------------------
        # log window
        style = wx.TE_MULTILINE | wx.TE_READONLY | wx.HSCROLL
        log = wx.TextCtrl(panel, wx.ID_ANY, style=style)
        
        vbox.Add(hbox, 0, wx.ALL | wx.EXPAND, 2) 
        vbox.Add(log, 1, wx.ALL | wx.EXPAND, 2) 
        panel.SetSizer(vbox) 

        # ---------------------------------------------------------------------
        # redirect text here
        sys.stdout = log
        
    def onClicked(self, event):
        msg = event.GetEventObject().GetLabel()
        print("Label of pressed button = " + msg)

  
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()    

実行例を示しました。

Text ウィジェットへ標準出力をリダイレクト

参考サイト

  1. wxPython – Redirecting stdout / stderr | The Mouse Vs. The Python

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-04-22

Linux ディストロ探訪(3) 〜 Chakra 〜

Linux とは本来 Linux カーネルのことを指しています。しかし、カーネルだけでは OS として動作させることはできません。そこで、OS に関連するツールやアプリケーションなどをまとめて、インストールし易く、インストール後にすぐ利用できるような配布形態にしたものを「ディストリビューション(略してディストロ)」と呼んでいます。

本シリーズ記事は、Linux ディストリビューションをピックアップ、仮想マシン(あるいは実機)にインストールして紹介します[不定期]。

Chakra とは

Chakra (/ˈtʃæk.ɹə/) は Arch Linux をベースにしており、KDE のソフトウェアに集中させて、可能な限り KDE/Qt 以外のツールキットを利用するソフトウェアの使用を抑えたディストリビューションです。

※ 正式名は Chakra GNU/Linux です。

リリースは不定期で、リリースからリリースまでの間は ローリング・リリースを採用して、コアパッケージについてはセキュリティーパッチを当てていくというリリース方法を採用しています。

パッケージのレポジトリは下記の4つに分かれています(テスト用を除く)。

core
基本システムの設定に必要な全パッケージ
desktop
KDE ソフトウェアおよび Chakra 固有のツールを集約
gtk
有名どころの GTK アプリケーション
lib32
x86_64 環境下ですぐに使える 32 ビット (x86) のアプリケーション

Arch Linux の評価を検討したのですが、ハマりそうなポイントが多かったので、簡単にインストールできそうな Chakra をまず試すことにしました。

仮想環境で iso イメージを試してみる

下記のサイトから、chakra-2017.10-goedel-x86_64.iso.torrent をダウンロードして、BitTorrent のクライアントの Transmission で iso イメージ chakra-2017.10-goedel-x86_64.iso.torrent をダウンロードしました。

仮想環境 GNOME Boxes で、インストールする前にライブで起動してみました。

インストールしてみる

ライブで起動した Chakra の画面左上に表示されたウィンドウの下に並んでいるボタン左側 Install Chakra のボタンをクリックすると、ハードディスクなどストレージに Chakra をインストールするインストーラが起動します。言語を Japanese に設定すると、インストーラのメッセージが日本語に変わりました。

インストールのつくりはいたってシンプルで、下記の設定をしてパッケージが書き込まれれば完了です。

  1. ロケーション(時間帯)
  2. キーボードのレイアウト
  3. ストレージのパーティション
  4. ユーザーアカウント

日本語環境は未整備?

シンプルなインストールで、メッセージは国際化対応がされていたので、これで日本語環境がなんなく整えば文句無し、と期待したのですが、端末エミュレータ Konsole を起動してみてがっかりです。入力カーソルの表示位置と入力した捩の表示がズレています。まるでマルチバイト文字対応黎明期に遭遇した症状です。

Konsole に文字入力する際の入力カーソルと文字の位置関係

日本語入力メソッドは fcitx-mozc や ibus-mozc など一通り利用できるようになっているのですが…、インストールしても Konsole 上でひらがな入力すらできるようになりませんでした。単純に設定のやり方が間違っている可能性もあるのですが、いろいろ試してみたにもかかわらずできるようにならなかったので、とりあえずギブアップします。

まとめ

項目 説明
ディストリビューション Chakra GNU/Linux
プロジェクトサイト https://www.chakralinux.org/
デスクトップ環境 KDE
パッケージ形式 Pacman によるパッケージ管理 (tar.xz)、フロントエンドの管理ツールは Octopi
日本語入力 fcitx-mozc, ibus-mozc ただし、正常に機能することを確認できませんでした。
特記事項 可能な限り KDE/Qt 以外のツールキットを利用するソフトウェアの使用を抑えたディストリビューション
寸評 Gnome や GTK 系のデスクトップ環境に慣れ親しんできたので、KDE に特化したディストリビューションに新鮮さを感じました。また手軽にインストールできて Arch Linux の Pacman によるパッケージ管理を試せるのも新鮮で魅力的です。
惜しむらくは、日本語入力ができるようにならなかったことです。単に自分の知識が足りなかっただけなのかもしれません。記事では紹介しませんでしたが、実機へのインストールも難無くできて、WiFi や Bluetooth の利用もできました。
機を見て再挑戦して、Pacman によるパッケージ管理を詳しく紹介したいと考えています。

参考サイト

Chakra について日本語で書かれたサイトがほとんど見つかりませんでした。

  1. Chakra Linux: Its Own Beast, Its Own Beauty | Linux.com | The source for Linux information [2017-08-18]
  2. Mozc - ArchWiki

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-04-19

wxPython ふたたび

Websocket を Java で扱いたくて悪戦苦闘していましたが、JavaEE 環境を用意せずにちょこっとプログラムを作るなんていうことはどうやら叶わぬ夢と悟りました。いや、ほんと、ちょこっとした環境でテストして、JavaFX でちょこっとした GUI プログラムにして、ちょこっと使えるようにしたかったのですが…。

もしかすると python であれば、そんな夢を叶えてくれるかもしれないと考え、試してみたところ…難なくやりたいことが出来てしまいました。💦

使用環境は以下のとおりです。

  • OS: Windows 7 Enterprise SP1 (x86_64)
  • Python: Python 3.6.5 (amd64)

さて、ここからが本題です。

今回、python 2.7 系をアンインストールして、情報量が豊富であろう最新の python 3.6 系をインストールしました。そもそも python 2.7 系を使っていたのは、その当時、wxPython が新しい python にまだ対応していなかったからでした。さすがに今ではもう対応しているだろうとあらためて調べてみると、すでに pip でインストールできるようになっていました。早速、下記のようにしてインストールしました。

> py -m pip install -U wxPython

しばらく wxPython を使っていなかったので、リハビリがてら、参考サイト [3] にあった Hello World のプログラムをコピーして動作確認しました。コメントを除いて以下に再掲しました。

リスト:helloworld2.py 
import wx

class HelloFrame(wx.Frame):

    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        pnl = wx.Panel(self)

        st = wx.StaticText(pnl, label="Hello World!", pos=(25,25))
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)

        self.makeMenuBar()

        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")


    def makeMenuBar(self):

        fileMenu = wx.Menu()
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item")
        fileMenu.AppendSeparator()
        exitItem = fileMenu.Append(wx.ID_EXIT)

        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&File")
        menuBar.Append(helpMenu, "&Help")

        self.SetMenuBar(menuBar)

        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit,  exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)


    def OnExit(self, event):
        self.Close(True)


    def OnHello(self, event):
        wx.MessageBox("Hello again from wxPython")


    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)


if __name__ == '__main__':
    app = wx.App()
    frm = HelloFrame(None, title='Hello World 2')
    frm.Show()
    app.MainLoop()

実行例を示します。

> py helloworld2.py

ざっと眺めたところ、昔と変わりありません。しばらく GUI プログラムをするのに JavaFX を使うのを止めて、ふたたび wxPython を使ってみたくなりました。今回 Windows を使っているのは、純粋に業務上必要だったからなのですが、自宅で Linux 上でも動作確認をして、具合が良ければもうすこしのめり込みます。

参考サイト

  1. Python Releases for Windows | Python.org
  2. Welcome to wxPython! | wxPython
  3. Overview of wxPython | wxPython

ブログランキング・にほんブログ村へ
にほんブログ村

2018-04-12

【備忘録】Rのgrepで特定の文字列にマッチさせない方法

R で特定の文字列にマッチする要素を選びたいときに、簡単なマッチングであれば grep 関数を使いますが、逆に特定の文字列を含まないときにはどうすればよいでしょうか?Google で「R grep 含まない」をキーワードにして検索しましたが、これだという情報にたどりつけませんでした。

しかし、ふと RStudio で ?grep とタイプしてヘルプ文書を読んでみると、invert という便利な機能(引数?オプション?)があるではないですか。そう、まさにこれなのです。ということで、備忘録にします。

> tmp <- c("ABC", "DEF", "GHI")
> grep("ABC", tmp)
[1] 1
> grep("ABC", tmp, invert = TRUE)
[1] 2 3
>

どうやら、正規表現を使ってガチでやるにはどうすればいいんだろう、なんて考えてしまうことが迷走の始まりのようです。時間を忘れていろいろ検索するのは結構なことですが、肝心の解決にさっぱり結びつきません。Rの関数にもしかしてこういう機能が実装されていないのだろうか、という視点をすっかり忘れてしまっていました。反省!

参考サイト

  1. R: Pattern Matching and Replacement

 

ブログランキング・にほんブログ村へ
にほんブログ村

2018-04-08

Linux ディストロ探訪(2)~ Debian ~

Linux とは本来 Linux カーネルのことを指しています。しかし、カーネルだけでは OS として動作させることはできません。そこで、OS に関連するツールやアプリケーションなどをまとめて、インストールし易く、インストール後にすぐ利用できるような配布形態にしたものを「ディストリビューション(略してディストロ)」と呼んでいます。

本シリーズ記事は、Linux ディストリビューションをピックアップ、仮想マシン(あるいは実機)にインストールして紹介します[不定期]。

Debian

Debian (/ˈdɛbiən/) は、世界中の有志の開発者によって構成されているプロジェクトで、Debian GNU/Linux を中心とする Unix 系システムのディストリビューションを作成しています。

Debian GNU/Linux の他に、次のような他のカーネルを使ったプロジェクトもあります。

  • Debian GNU/Hurd (hurd-i386)
  • Debian GNU/NetBSD (netbsd-i386, netbsd-alpha)
  • Debian GNU/Solaris (solaris-i386)

Debian プロジェクトでは、Debian 社会契約が作成され、その中の Debian フリーソフトウェアガイドライン (DFSG) が、Debianにおけるソフトウェア評価基準となっています。このガイドラインに適合せず、フリーではないと評価されたソフトウェアは、Debian の一部として提供されることはありません。

Debian の特長は、メンテナンスが容易であることです。パッケージ管理システムを備えており、ひとたびインストールが終了すれば、パッケージマネージャの APT (Advanced Package Tool) により、ソフトウェアの更新が行えます。APT には補助的機能を追加する GUI を含むフロントエンドが数多く提供されています。

リリースは、次の4つのレベルで行なわれています。

  1. stable: 厳密に安定性を検証した公式のリリース。リリースは2009年より2年の間隔をもっておこなわれ、奇数年の 12 月にフリーズし、翌年の偶数年前半に公開されます。
  2. testing: 次期の安定版となる公開テスト中のリリース。unstable で一定期間致命的なバグが発見されなかったパッケージが testing に組み入れられる。
  3. unstable: 開発者向けリリース。コードネームは常に sid と呼ばれます。
  4. experimental: 影響が大きなパッケージ群が、unstable に採用される前に一時的に置かれ、unstable との組合せによりしばらく実験が行われます。

Wikipedia の Debian のページの説明を参考にして、本記事用に再構成しました。

Debian 9.4 のライブイメージ

Debian のインストーラは、デスクトップやサーバー用途に分けられていませんが、インストールメディアやおよび入手方法が多彩で、どれにするか迷います。結局、ライブイメージを試すことにして、下記サイトから Torrent ファイル debian-live-9.4.0-amd64-gnome.iso.torrent をダウンロードしました。ファイル名にある通り、デスクトップは GNOME です。このファイルを使い Transmission で Debian のライブイメージ debian-live-9.4.0-amd64-gnome.iso をダウンロードしました。

このイメージを GNOME Boxes の仮想環境で読み込みました。grub の Main Menu で "Debian Live with Localisation Support" を選択します。次の画面で "Japanese (ja)" を選択します。すると、起動する Debian には日本語メッセージで表示されます。

※ 起動時に自動ログインしますが、パスワードは live です。

仮想環境でなんなく Debian は起動しましたが…、起動した Debian からストレージにインストールするためのインストーラがみつかりませんでした。そこで、もう一度 GNOME Boxes からイメージを読み込み直して、最初の grub のメニューで "Graphical Debian Installer" を選択しました。以下、少し数が多いのですが、インストール中のスクリーンショットを紹介します。

grub メニュー

言語関連

ネットワーク

アカウント

※ root のパスワードを空にままにしておくと、root アカウントがロックされて sudo コマンドを使う環境になります。

時刻設定

ストレージのパーティション

パッケージのレポジトリ

grub ブートローダ

インストール完了

再起動

再起動した後、しばし待つとログイン画面になりますので、インストール時に設定したアカウントのパスワードでログインします。

実機にもインストールしてみた

仮想環境へは難なく Debian をインストール出来ましたので、実機にもインストールしてみました。

Fedora Media Writer で USB メモリに起動イメージを作成し、実機へのインストールは、HP Stream 11-r016TU を使いました。

インストール途中で WiFi 関連のファームウェアが必要だというメッセージが出ますが、[いいえ]を選択、インストール後に対処することにして次へ進みました。

debian 9.4 + GNOME デスクトップ環境

USBメモリ経由で、WiFi のファームウェア関連のパッケージ [2] をコピーしてインストールします。

$ ls
firmware-iwlwifi_20161130-3_all.deb
$ sudo dpkg -i firmware-iwlwifi_20161130-3_all.deb

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

[sudo] bitwalk のパスワード:
以前に未選択のパッケージ firmware-iwlwifi を選択しています。
(データベースを読み込んでいます ... 現在 175864 個のファイルとディレクトリがインストールされています。)
firmware-iwlwifi_20161130-3_all.deb を展開する準備をしています ...
firmware-iwlwifi (20161130-3) を展開しています...
firmware-iwlwifi (20161130-3) を設定しています ...
$ 

ネットワークに繋がることを確認した後、インストール後の最初のパッケージのアップデートをします。

$ sudo apt-get update
[sudo] bitwalk のパスワード:
無視:1 http://deb.debian.org/debian stretch InRelease
取得:2 http://deb.debian.org/debian stretch Release [118 kB]
...
...
取得:12 http://security.debian.org/debian-security stretch/updates/main Translation-en [161 kB]
24.1 MB を 9秒 で取得しました (2,583 kB/s)                                     
パッケージリストを読み込んでいます... 完了
$ sudo apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージはアップグレードされます:
  apache2-bin bsdutils firefox-esr firefox-esr-l10n-ar firefox-esr-l10n-ast
  firefox-esr-l10n-bg firefox-esr-l10n-bn-bd firefox-esr-l10n-bn-in
...
...
  openjdk-8-jre openjdk-8-jre-headless openssl samba-libs thunderbird
  thunderbird-l10n-ja util-linux util-linux-locales uuid-runtime
アップグレード: 108 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
178 MB のアーカイブを取得する必要があります。
この操作後に追加で 69.6 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://security.debian.org/debian-security stretch/updates/main amd64 bsdutils amd64 1:2.29.2-1+deb9u1 [112 kB]
取得:2 http://security.debian.org/debian-security stretch/updates/main amd64 util-linux amd64 2.29.2-1+deb9u1 [981 kB]
...
...
取得:108 http://security.debian.org/debian-security stretch/updates/main amd64 util-linux-locales all 2.29.2-1+deb9u1 [999 kB]
178 MB を 36秒 で取得しました (4,826 kB/s)                                     
パッケージからテンプレートを展開しています: 100%
パッケージを事前設定しています ...
(データベースを読み込んでいます ... 現在 175930 個のファイルとディレクトリがインストールされています。)
.../bsdutils_1%3a2.29.2-1+deb9u1_amd64.deb を展開する準備をしています ...
bsdutils (1:2.29.2-1+deb9u1) で (1:2.29.2-1 に) 上書き展開しています ...
bsdutils (1:2.29.2-1+deb9u1) を設定しています ...
...
...
libimage-magick-perl (8:6.9.7.4+dfsg-11+deb9u4) を設定しています ...
libc-bin (2.24-11+deb9u3) のトリガを処理しています ...
bitwalk@debian:~$ 

Bluetooth やサウンドデバイスおよび内蔵カメラは、幸いにして Debian をインストールした状態で利用可能でした。

まとめ

項目 説明
ディストリビューション Debian GNU/Linux
プロジェクトサイト https://www.debian.org/
デスクトップ環境 Cinammon, Gnome, KDE, LXDE, Mate, Xfce
パッケージ形式 deb(管理ツール APT)
日本語入力 ibus-mozc
特記事項 ターゲットアーキテクチャとして AMD64, ARM, MIPS, PowerPC, System z など 10 のアーキテクチャ向けにリリースされています。
また Linux だけでなく、Hurd, NetBSD および Solaris のカーネルを使うプロジェクトがあります。
寸評 Debian が厳格にフリーソフトウェアであり続けていることに敬意を表します。ただ、フリーソフトウェアであり続けることの難しさを感じてしまうディストリビューションでもあります。廉価な PC で多く使われているような WiFi デバイスであっても、ファームウェアがフリーソフトウェアでないという理由でインストーラに含まれていない、そういう不便さを感じたからです。
該当するファームウェアを含むパッケージは [non-free] 扱いではあるものの、Debian から入手可能であるため、インストール後に手作業で関連するファームウェアをインストールすれば事が足りるのですが、なんだか回り道をしている気がします。
最新ではない代わりに、十分に検証されているソフトウェアで構成されているので、安定を求める用途にオススメのディストリビューションと言えます。

Debian on HP Stream 11-r016TU

参考サイト

  1. Debian -- ユニバーサルオペレーティングシステム
  2. Debian -- パッケージ検索結果 -- firmware-iwlwifi
  3. 実機にDebian(Stretch)デスクトップ環境を確実にセットアップして使えるようになるまでのTips(.. - Days of Speed(2017-12-13)
    • Debian をインストールする時、あるいはインストール後の設定について大変判り易くまとめられています。Linux 系 OS のインストールに慣れていない方に一読をオススメします。

 

ブログランキング・にほんブログ村へ
にほんブログ村