合同会社ひめぽーと は、愛媛の店舗、生産者様のホームページ作成・制作・管理、ネットショップ作成・制作・管理、パソコン関連サポートなど、バックアップ致します。

作者別: himeport

掲載日:
作者別: himeport

Windows環境でListがOut of Range


Linux環境で作成したPythonプログラムが、Windows環境ではout of range

マルチプラットホーム対応で、Webアプリへの転用もできるので、主にPythonでプログラムの作成をしていますが、仕事PCのメインOSをLinuxに移行した関係でプログラム作成、確認も必然的にLinux環境が主となってしまいます。

しかし、お客様の環境は、殆どがWindows7/10ですので、Windows環境で動作することが必要となります。

ところが、残念ながら、pythonで作成したプログラムが、Linux上では問題ないのにWindows上ではエラーを吐いたり、画面表示やライブラリーの動作が異なることが多々あります。

その1つが、「Out of Range」

ファイルの読み書きをする場合に起きやすいエラーですが、CSVファイルの扱いに関しては、以下の盛り込むことで、ファイルの読み書きに関しては対策できます。

書き込み時、
withopen(data_file, 'w', newline='', encoding='utf-8') as fo:
    writer = csv.writer(fo)
    writer.writerows( myFile )
 
読み出し時、
withopen(data_file, 'r', newline='', encoding='utf-8') as fi:
    reader = csv.reader(fi)
    myFile = [row for row in reader]

out of Rangeの要因は、改行の扱いで、「newline=”」を指定することで余分な改行が回避されて正常に読み書きできるようになります。

また、プラットフォームの違いによりエンコードでエラーとなることも多々ありますので、明示的に「encoding=’utf-8’」コード指定しておきます。

その他、ファイルがないのにファイルOpen すると当然エラーなりますので、以下でファイルの有無の判定をします。
if os.path.exists(data_file):
   with open(data_file, 'r', newline='', encoding='utf-8') as fi:
            reader = csv.reader(fi)
            myFile = [row for row in reader]

ファイルがない場合に新規にファイルを作りたい場合は、

if not os.path.exists(data_file):
     with open(data_file, 'w', newline='', encoding='utf-8') as fo:
          writer = csv.writer(fo)
          writer.writerows(myFile)

補足:

data_fileは、パスを含めたファイル名を指定します。

myFileは、読み書きするデータとなります。csv」の場合リストとなります。

wxPython wx.ColourDatabaseのサンプル色表示プログラム

wx.ColourDatabase

wx.ColourDatabaseのサンプル色表示プログラム

Pythonで、少々本格的?な業務アプリケーションを作成するのに色サンプルがほしかったので、簡単なプログラムを作成してみました。

ただ、色見本を表示するだけのプログラムです。

骨組みをwxGladeで作って、Visual Studio Codeで修正して作成しています。

本来は、コピー・ペースト機能も欲しいところですが、まぁ今回は色見本なので…..(-_-;)

やっぱり、できると実用的なので、盛り込みました。

表示の色名を

wxColour("CADET BLUE")

といった感じで使用します。

 

修正版:

マウス右ダブルクリックで該当色を”(r, g, b)”でクリップボードにコピーするように少しコードを追記しました。
“[r,g,b]”の方が使いやすい場合は、(こっちのほうが使いやすいかもしれません。)
 
self.clickcolor = r, g , b
pyperclip.copy(str(self.clickcolor))
 
の所を以下に書き換えます。
 
pyperclip.copy(str([r,g,b]))
 
事前に「pyperclip」をインストールしておく必要があります。
sudo pip3 install pyperclip
(Windows10の場合は、sudoは不要)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# generated by wxGlade 0.9.2 on Thu Mar 21 10:05:00 2019
#
# マウス右ダブルクリックで該当色を”(r, g, b)”でクリップボードにコピー

import wx
import pyperclip

# begin wxGlade: dependencies
# end wxGlade

# begin wxGlade: extracode
# end wxGlade


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((900, 800))

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("wx.ColourDatabase")
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_6 = wx.BoxSizer(wx.VERTICAL)
        sizer_5 = wx.BoxSizer(wx.VERTICAL)
        sizer_4 = wx.BoxSizer(wx.VERTICAL)
        sizer_3 = wx.BoxSizer(wx.VERTICAL)
        label_69 = wx.StaticText(self, wx.ID_ANY, "  ** マウス右ダブルクリックで該当色(r, g, b)をクリップボードにコピー **")
        sizer_1.Add(label_69, 0, wx.ALL | wx.EXPAND, 1)
        label_70 = wx.StaticText(
            self, wx.ID_ANY, "AQUAMARINE", style=wx.ALIGN_CENTER)
        label_70.SetBackgroundColour(wx.Colour("AQUAMARINE"))
        label_70.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_70, 0, wx.ALL | wx.EXPAND, 1)
        label_2 = wx.StaticText(
            self, wx.ID_ANY, "BLACK", style=wx.ALIGN_CENTER)
        label_2.SetBackgroundColour(wx.Colour("BLACK"))
        label_2.SetForegroundColour(wx.Colour(255, 255, 255))
        sizer_3.Add(label_2, 0, wx.ALL | wx.EXPAND, 1)
        label_71 = wx.StaticText(
            self, wx.ID_ANY, "BLUE", style=wx.ALIGN_CENTER)
        label_71.SetBackgroundColour(wx.Colour("BLUE"))
        label_71.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_71, 0, wx.ALL | wx.EXPAND, 1)
        label_72 = wx.StaticText(
            self, wx.ID_ANY, "BLUE VIOLET", style=wx.ALIGN_CENTER)
        label_72.SetBackgroundColour(wx.Colour("BLUE VIOLET"))
        label_72.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_72, 0, wx.ALL | wx.EXPAND, 1)
        label_73 = wx.StaticText(
            self, wx.ID_ANY, "BROWN", style=wx.ALIGN_CENTER)
        label_73.SetBackgroundColour(wx.Colour("BROWN"))
        label_73.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_73, 0, wx.ALL | wx.EXPAND, 1)
        label_74 = wx.StaticText(
            self, wx.ID_ANY, "CADET BLUE", style=wx.ALIGN_CENTER)
        label_74.SetBackgroundColour(wx.Colour("CADET BLUE"))
        label_74.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_74, 0, wx.ALL | wx.EXPAND, 1)
        label_75 = wx.StaticText(
            self, wx.ID_ANY, "CORAL", style=wx.ALIGN_CENTER)
        label_75.SetBackgroundColour(wx.Colour("CORAL"))
        label_75.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_75, 0, wx.ALL | wx.EXPAND, 1)
        label_76 = wx.StaticText(
            self, wx.ID_ANY, "CORNFLOWER BLUE", style=wx.ALIGN_CENTER)
        label_76.SetBackgroundColour(wx.Colour("CORNFLOWER BLUE"))
        label_76.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_76, 0, wx.ALL | wx.EXPAND, 1)
        label_77 = wx.StaticText(
            self, wx.ID_ANY, "CYAN", style=wx.ALIGN_CENTER)
        label_77.SetBackgroundColour(wx.Colour("CYAN"))
        label_77.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_77, 0, wx.ALL | wx.EXPAND, 1)
        label_78 = wx.StaticText(
            self, wx.ID_ANY, "DARK GREY", style=wx.ALIGN_CENTER)
        label_78.SetBackgroundColour(wx.Colour("DARK GREY"))
        label_78.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_78, 0, wx.ALL | wx.EXPAND, 1)
        label_79 = wx.StaticText(
            self, wx.ID_ANY, "DARK GREEN", style=wx.ALIGN_CENTER)
        label_79.SetBackgroundColour(wx.Colour("DARK GREEN"))
        label_79.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_79, 0, wx.ALL | wx.EXPAND, 1)
        label_80 = wx.StaticText(
            self, wx.ID_ANY, "DARK OLIVE GREEN", style=wx.ALIGN_CENTER)
        label_80.SetBackgroundColour(wx.Colour("DARK OLIVE GREEN"))
        label_80.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_80, 0, wx.ALL | wx.EXPAND, 1)
        label_81 = wx.StaticText(
            self, wx.ID_ANY, "DARK ORCHID", style=wx.ALIGN_CENTER)
        label_81.SetBackgroundColour(wx.Colour("DARK ORCHID"))
        label_81.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_81, 0, wx.ALL | wx.EXPAND, 1)
        label_82 = wx.StaticText(
            self, wx.ID_ANY, "DARK SLATE BLUE", style=wx.ALIGN_CENTER)
        label_82.SetBackgroundColour(wx.Colour("DARK SLATE BLUE"))
        label_82.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_82, 0, wx.ALL | wx.EXPAND, 1)
        label_83 = wx.StaticText(
            self, wx.ID_ANY, "DARK SLATE GREY", style=wx.ALIGN_CENTER)
        label_83.SetBackgroundColour(wx.Colour("DARK SLATE GREY"))
        label_83.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_83, 0, wx.ALL | wx.EXPAND, 1)
        label_84 = wx.StaticText(
            self, wx.ID_ANY, "DARK TURQUOISE", style=wx.ALIGN_CENTER)
        label_84.SetBackgroundColour(wx.Colour("DARK TURQUOISE"))
        label_84.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_84, 0, wx.ALL | wx.EXPAND, 1)
        label_85 = wx.StaticText(
            self, wx.ID_ANY, "DIM GREY", style=wx.ALIGN_CENTER)
        label_85.SetBackgroundColour(wx.Colour("DIM GREY"))
        label_85.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_3.Add(label_85, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
        label_86 = wx.StaticText(
            self, wx.ID_ANY, "FIREBRICK", style=wx.ALIGN_CENTER)
        label_86.SetBackgroundColour(wx.Colour("FIREBRICK"))
        label_86.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_86, 0, wx.ALL | wx.EXPAND, 1)
        label_102 = wx.StaticText(
            self, wx.ID_ANY, "FOREST GREEN", style=wx.ALIGN_CENTER)
        label_102.SetBackgroundColour(wx.Colour("FOREST GREEN"))
        label_102.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_102, 0, wx.ALL | wx.EXPAND, 1)
        label_87 = wx.StaticText(
            self, wx.ID_ANY, "GOLD", style=wx.ALIGN_CENTER)
        label_87.SetBackgroundColour(wx.Colour("GOLD"))
        label_87.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_87, 0, wx.ALL | wx.EXPAND, 1)
        label_88 = wx.StaticText(
            self, wx.ID_ANY, "GOLDENROD", style=wx.ALIGN_CENTER)
        label_88.SetBackgroundColour(wx.Colour("GOLDENROD"))
        label_88.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_88, 0, wx.ALL | wx.EXPAND, 1)
        label_89 = wx.StaticText(
            self, wx.ID_ANY, "GREY", style=wx.ALIGN_CENTER)
        label_89.SetBackgroundColour(wx.Colour("GREY"))
        label_89.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_89, 0, wx.ALL | wx.EXPAND, 1)
        label_90 = wx.StaticText(
            self, wx.ID_ANY, "GREEN", style=wx.ALIGN_CENTER)
        label_90.SetBackgroundColour(wx.Colour("GREEN"))
        label_90.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_90, 0, wx.ALL | wx.EXPAND, 1)
        label_91 = wx.StaticText(
            self, wx.ID_ANY, "GREEN YELLOW", style=wx.ALIGN_CENTER)
        label_91.SetBackgroundColour(wx.Colour("GREEN YELLOW"))
        label_91.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_91, 0, wx.ALL | wx.EXPAND, 1)
        label_92 = wx.StaticText(
            self, wx.ID_ANY, "INDIAN RED", style=wx.ALIGN_CENTER)
        label_92.SetBackgroundColour(wx.Colour("INDIAN RED"))
        label_92.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_92, 0, wx.ALL | wx.EXPAND, 1)
        label_93 = wx.StaticText(
            self, wx.ID_ANY, "KHAKI", style=wx.ALIGN_CENTER)
        label_93.SetBackgroundColour(wx.Colour("KHAKI"))
        label_93.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_93, 0, wx.ALL | wx.EXPAND, 1)
        label_94 = wx.StaticText(
            self, wx.ID_ANY, "LIGHT BLUE", style=wx.ALIGN_CENTER)
        label_94.SetBackgroundColour(wx.Colour("LIGHT BLUE"))
        label_94.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_94, 0, wx.ALL | wx.EXPAND, 1)
        label_95 = wx.StaticText(
            self, wx.ID_ANY, "LIGHT GREY", style=wx.ALIGN_CENTER)
        label_95.SetBackgroundColour(wx.Colour("LIGHT GREY"))
        label_95.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_95, 0, wx.ALL | wx.EXPAND, 1)
        label_96 = wx.StaticText(
            self, wx.ID_ANY, "LIGHT STEEL BLUE", style=wx.ALIGN_CENTER)
        label_96.SetBackgroundColour(wx.Colour("LIGHT STEEL BLUE"))
        label_96.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_96, 0, wx.ALL | wx.EXPAND, 1)
        label_97 = wx.StaticText(
            self, wx.ID_ANY, "LIME GREEN", style=wx.ALIGN_CENTER)
        label_97.SetBackgroundColour(wx.Colour("LIME GREEN"))
        label_97.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_97, 0, wx.ALL | wx.EXPAND, 1)
        label_98 = wx.StaticText(
            self, wx.ID_ANY, "MAGENTA", style=wx.ALIGN_CENTER)
        label_98.SetBackgroundColour(wx.Colour("MAGENTA"))
        label_98.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_98, 0, wx.ALL | wx.EXPAND, 1)
        label_99 = wx.StaticText(
            self, wx.ID_ANY, "MAROON", style=wx.ALIGN_CENTER)
        label_99.SetBackgroundColour(wx.Colour("MAROON"))
        label_99.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_99, 0, wx.ALL | wx.EXPAND, 1)
        label_100 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM AQUAMARINE", style=wx.ALIGN_CENTER)
        label_100.SetBackgroundColour(wx.Colour("MEDIUM AQUAMARINE"))
        label_100.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_100, 0, wx.ALL | wx.EXPAND, 1)
        label_101 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM BLUE", style=wx.ALIGN_CENTER)
        label_101.SetBackgroundColour(wx.Colour("MEDIUM BLUE"))
        label_101.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_4.Add(label_101, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_4, 1, wx.EXPAND, 0)
        label_103 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM FOREST GREEN", style=wx.ALIGN_CENTER)
        label_103.SetBackgroundColour(wx.Colour("MEDIUM FOREST GREEN"))
        label_103.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_103, 0, wx.ALL | wx.EXPAND, 1)
        label_104 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM GOLDENROD", style=wx.ALIGN_CENTER)
        label_104.SetBackgroundColour(wx.Colour("MEDIUM GOLDENROD"))
        label_104.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_104, 0, wx.ALL | wx.EXPAND, 1)
        label_105 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM ORCHID", style=wx.ALIGN_CENTER)
        label_105.SetBackgroundColour(wx.Colour("MEDIUM ORCHID"))
        label_105.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_105, 0, wx.ALL | wx.EXPAND, 1)
        label_106 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM SEA GREEN", style=wx.ALIGN_CENTER)
        label_106.SetBackgroundColour(wx.Colour("MEDIUM SEA GREEN"))
        label_106.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_106, 0, wx.ALL | wx.EXPAND, 1)
        label_107 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM SLATE BLUE", style=wx.ALIGN_CENTER)
        label_107.SetBackgroundColour(wx.Colour("MEDIUM SLATE BLUE"))
        label_107.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_107, 0, wx.ALL | wx.EXPAND, 1)
        label_108 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM SPRING GREEN", style=wx.ALIGN_CENTER)
        label_108.SetBackgroundColour(wx.Colour("MEDIUM SPRING GREEN"))
        label_108.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_108, 0, wx.ALL | wx.EXPAND, 1)
        label_109 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM TURQUOISE", style=wx.ALIGN_CENTER)
        label_109.SetBackgroundColour(wx.Colour("MEDIUM TURQUOISE"))
        label_109.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_109, 0, wx.ALL | wx.EXPAND, 1)
        label_110 = wx.StaticText(
            self, wx.ID_ANY, "MEDIUM VIOLET RED", style=wx.ALIGN_CENTER)
        label_110.SetBackgroundColour(wx.Colour("MEDIUM VIOLET RED"))
        label_110.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_110, 0, wx.ALL | wx.EXPAND, 1)
        label_111 = wx.StaticText(
            self, wx.ID_ANY, "MIDNIGHT BLUE", style=wx.ALIGN_CENTER)
        label_111.SetBackgroundColour(wx.Colour("MIDNIGHT BLUE"))
        label_111.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_111, 0, wx.ALL | wx.EXPAND, 1)
        label_112 = wx.StaticText(
            self, wx.ID_ANY, "NAVY", style=wx.ALIGN_CENTER)
        label_112.SetBackgroundColour(wx.Colour("NAVY"))
        label_112.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_112, 0, wx.ALL | wx.EXPAND, 1)
        label_113 = wx.StaticText(
            self, wx.ID_ANY, "ORANGE", style=wx.ALIGN_CENTER)
        label_113.SetBackgroundColour(wx.Colour("ORANGE"))
        label_113.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_113, 0, wx.ALL | wx.EXPAND, 1)
        label_114 = wx.StaticText(
            self, wx.ID_ANY, "ORANGE RED", style=wx.ALIGN_CENTER)
        label_114.SetBackgroundColour(wx.Colour("ORANGE RED"))
        label_114.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_114, 0, wx.ALL | wx.EXPAND, 1)
        label_115 = wx.StaticText(
            self, wx.ID_ANY, "ORCHID", style=wx.ALIGN_CENTER)
        label_115.SetBackgroundColour(wx.Colour("ORCHID"))
        label_115.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_115, 0, wx.ALL | wx.EXPAND, 1)
        label_116 = wx.StaticText(
            self, wx.ID_ANY, "PALE GREEN", style=wx.ALIGN_CENTER)
        label_116.SetBackgroundColour(wx.Colour("PALE GREEN"))
        label_116.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_116, 0, wx.ALL | wx.EXPAND, 1)
        label_117 = wx.StaticText(
            self, wx.ID_ANY, "PINK", style=wx.ALIGN_CENTER)
        label_117.SetBackgroundColour(wx.Colour("PINK"))
        label_117.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_117, 0, wx.ALL | wx.EXPAND, 1)
        label_118 = wx.StaticText(
            self, wx.ID_ANY, "PLUM", style=wx.ALIGN_CENTER)
        label_118.SetBackgroundColour(wx.Colour("PLUM"))
        label_118.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_118, 0, wx.ALL | wx.EXPAND, 1)
        label_119 = wx.StaticText(
            self, wx.ID_ANY, "PURPLE", style=wx.ALIGN_CENTER)
        label_119.SetBackgroundColour(wx.Colour("PURPLE"))
        label_119.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_5.Add(label_119, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_5, 1, wx.EXPAND, 0)
        label_120 = wx.StaticText(
            self, wx.ID_ANY, "RED", style=wx.ALIGN_CENTER)
        label_120.SetBackgroundColour(wx.Colour("RED"))
        label_120.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_120, 0, wx.ALL | wx.EXPAND, 1)
        label_121 = wx.StaticText(
            self, wx.ID_ANY, "SALMON", style=wx.ALIGN_CENTER)
        label_121.SetBackgroundColour(wx.Colour("SALMON"))
        label_121.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_121, 0, wx.ALL | wx.EXPAND, 1)
        label_122 = wx.StaticText(
            self, wx.ID_ANY, "SEA GREEN", style=wx.ALIGN_CENTER)
        label_122.SetBackgroundColour(wx.Colour("SEA GREEN"))
        label_122.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_122, 0, wx.ALL | wx.EXPAND, 1)
        label_123 = wx.StaticText(
            self, wx.ID_ANY, "SIENNA", style=wx.ALIGN_CENTER)
        label_123.SetBackgroundColour(wx.Colour("SIENNA"))
        label_123.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_123, 0, wx.ALL | wx.EXPAND, 1)
        label_124 = wx.StaticText(
            self, wx.ID_ANY, "SKY BLUE", style=wx.ALIGN_CENTER)
        label_124.SetBackgroundColour(wx.Colour("SKY BLUE"))
        label_124.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_124, 0, wx.ALL | wx.EXPAND, 1)
        label_125 = wx.StaticText(
            self, wx.ID_ANY, "SLATE BLUE", style=wx.ALIGN_CENTER)
        label_125.SetBackgroundColour(wx.Colour("SLATE BLUE"))
        label_125.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_125, 0, wx.ALL | wx.EXPAND, 1)
        label_126 = wx.StaticText(
            self, wx.ID_ANY, "SPRING GREEN", style=wx.ALIGN_CENTER)
        label_126.SetBackgroundColour(wx.Colour("SPRING GREEN"))
        label_126.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_126, 0, wx.ALL | wx.EXPAND, 1)
        label_127 = wx.StaticText(
            self, wx.ID_ANY, "STEEL BLUE", style=wx.ALIGN_CENTER)
        label_127.SetBackgroundColour(wx.Colour("STEEL BLUE"))
        label_127.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_127, 0, wx.ALL | wx.EXPAND, 1)
        label_128 = wx.StaticText(
            self, wx.ID_ANY, "TAN", style=wx.ALIGN_CENTER)
        label_128.SetBackgroundColour(wx.Colour("TAN"))
        label_128.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_128, 0, wx.ALL | wx.EXPAND, 1)
        label_129 = wx.StaticText(
            self, wx.ID_ANY, "THISTLE", style=wx.ALIGN_CENTER)
        label_129.SetBackgroundColour(wx.Colour("THISTLE"))
        label_129.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_129, 0, wx.ALL | wx.EXPAND, 1)
        label_130 = wx.StaticText(
            self, wx.ID_ANY, "TURQUOISE", style=wx.ALIGN_CENTER)
        label_130.SetBackgroundColour(wx.Colour("TURQUOISE"))
        label_130.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_130, 0, wx.ALL | wx.EXPAND, 1)
        label_131 = wx.StaticText(
            self, wx.ID_ANY, "VIOLET", style=wx.ALIGN_CENTER)
        label_131.SetBackgroundColour(wx.Colour("VIOLET"))
        label_131.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_131, 0, wx.ALL | wx.EXPAND, 1)
        label_132 = wx.StaticText(
            self, wx.ID_ANY, "VIOLET RED", style=wx.ALIGN_CENTER)
        label_132.SetBackgroundColour(wx.Colour("VIOLET RED"))
        label_132.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_132, 0, wx.ALL | wx.EXPAND, 1)
        label_133 = wx.StaticText(
            self, wx.ID_ANY, "WHEAT", style=wx.ALIGN_CENTER)
        label_133.SetBackgroundColour(wx.Colour("WHEAT"))
        label_133.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_133, 0, wx.ALL | wx.EXPAND, 1)
        label_134 = wx.StaticText(
            self, wx.ID_ANY, "WHITE", style=wx.ALIGN_CENTER)
        label_134.SetBackgroundColour(wx.Colour("WHITE"))
        label_134.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_134, 0, wx.ALL | wx.EXPAND, 1)
        label_135 = wx.StaticText(
            self, wx.ID_ANY, "YELLOW", style=wx.ALIGN_CENTER)
        label_135.SetBackgroundColour(wx.Colour("YELLOW"))
        label_135.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_135, 0, wx.ALL | wx.EXPAND, 1)
        label_136 = wx.StaticText(
            self, wx.ID_ANY, "YELLOW GREEN", style=wx.ALIGN_CENTER)
        label_136.SetBackgroundColour(wx.Colour("YELLOW GREEN"))
        label_136.SetForegroundColour(wx.Colour(0, 0, 0))
        sizer_6.Add(label_136, 0, wx.ALL | wx.EXPAND, 1)
        sizer_2.Add(sizer_6, 1, wx.EXPAND, 0)
        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        # end wxGlade

        label_2.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_70.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_71.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_72.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_73.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_74.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_75.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_76.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_77.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_78.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_79.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_80.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_81.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_82.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_83.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_84.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_85.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_86.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_87.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_88.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_89.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_90.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_91.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_92.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_93.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_94.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_95.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_96.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_97.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_98.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_99.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_100.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_101.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_102.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_103.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_104.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_105.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_106.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_107.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_108.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_109.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_110.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_111.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_112.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_113.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_114.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_115.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_116.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_117.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_118.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_119.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_120.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_121.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_122.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_123.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_124.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_125.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_126.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_127.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_128.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_129.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_130.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_131.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_132.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_133.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_134.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_135.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)
        label_136.Bind(wx.EVT_RIGHT_DCLICK, self.Clicpcolorcode)

    def Clicpcolorcode(self, event): 
        get_object = event.GetEventObject() 
        [r,g,b,a]=get_object.GetBackgroundColour()
        self.clickcolor = r, g , b
        pyperclip.copy(str(self.clickcolor))

# end of class MyFrame


class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, wx.ID_ANY, "")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True

# end of class MyApp


if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()

このソースを「ColourDatabase.py」とでもして保存して

python3 ColourDatabase.py

ちなみに事前にwxpythonをインストールしておく必要があります。(pyperclipも)

おまけ

event処理なので、色の取得がしたい場合は、

get_object = event.GetEventObject()
[r,g,b,a]=get_object.GetBackgroundColour()
 
で、r,g,bを適当に編集して、以下のようにすると色が変えられます。
 
get_object.SetBackgroundColour([r,g,b])
 
もちろん、直接式を挿入してもOK
 
get_object.SetBackgroundColour([r-10,g-10,b-10])
xxxxxなんか処理して、色を戻す
get_object.SetBackgroundColour([r+10,g+10,b+10])
 
こんな形で元の色を気にしないで、一時的に色を変えることもできます。

 

Windows7から乗り換えLinuxの検討

Windows7/Vistaに代わるLinux

Windows7を意識したLinuxを検討

Windows7/Windows Windows7を使用してきたユーザーが、Linuxの乗り換えるのに必要な条件とは?

Microsoft Windowsで使用して使い慣れたアプリケーションがそのまま使用できるのが理想ですが、現実的には難しく、これはWindows10に移行した場合でも一部のソフトウェアでは発生する問題で、見栄え&操作は変わることは多々発生しますので、

  1. Windows7/Windows Vista環境で使用していたデータファイルを取り扱えること
  2. Windows7/Windows Vistaから違和感の少ない見た目と操作性があること
  3. 極力GUIでユーザーフレンドリーであること
  4. 長期間安定した運用が期待できること
  5. Windows7/Windows Vista世代のPCで実用性のある性能が期待できること
  6. 低コストであること

1.に関しては、マイナーなアプリ専用フォーマット以外の標準的なデータ形式にはLinuxで対応可能なので、概ねどのLinuxディストリビュートでも問題ないと思われます。

2.に関しては、従来はWindows7と酷似のUIもありましたが、最近では、感覚的に類似の見た目と操作性を提供して、なお且つ動作が軽いXfceを採用したLinuxを選択するのが良いかと思います。(Xfce以外にも類似のものはありますが、現時点ではメジャーで標準設定での類似性と軽量である点からXfce)

3.に関しては、Xfce+各種サポートツールがGUI化されていて、初期セットアップ時を除きCUIの使用が不要なものとなると思います。

4.に関しては、シェアーや積極的な活動をみるにUbuntu系を選択することになろうかと思います。

5.に関しては、Xfce採用のLinuxであれば、ほぼ問題ないと思われます。

6.に関しては、有料のLinuxももちろんありますが、基本的にはLinuxであれば無償で使用できます。

以上から…….

 

Ubuntu系の

Xubuntu

Ubuntuの公式派生ディストリビュートなので、長期運用の安心感があります。

また、参考とできる情報も多く、Ubuntuの中では軽快な部類となります。

Zorin OS

以前からWindowsを意識したGUI(現在ではXfce)を提供しており、わかりやすい優しい見た目がでWindowsユーザーにはとつきやすいと思います。

GUIのみで操作可能で、日本語化もGUIで可能です。

デフォルトでWineがインストールされていますが、使用したいと思うようなWindowsアプリが使用できる可能性は残念ながら低いように思います。

Ubuntu系ではなく、ArchLinux系となりますが、より多く、より新しいアプリを使いたい方は、ArchLinuxに初期設定からGUI化した

Manjaro Linux という選択もありかと思います。(VirtualVoxでの確認結果が良好でしたので、私のセカンダリーPCのOSとして評価継続中)

ArchLinuxは、一般にはかなりハードルが高いですが、 Manjaro Linux XFCE Edition だと軽量なうえGUI化されており、セットアップ時の日本語化で少しCUIを使用するだけで、運用自体はGUIで可能となります。標準設定ではArch User Repositories(AUR)の安定版を更に確認後提供しているので、新しいアプリをより安心して使用できます。また、多少の設定変更でAURも利用可能となりますので、Linuxで無償で提供されているアプリの多くを動作させることができます。(ライブラリのリビジョンの違いとかでコンパイルに失敗してセットアップできないこともあるようです。)

ガンガン自分用にカスタマイズしたい方は、KDE Plasmaデスクトップなので多少マシンパワーが必要(Core2、2GBなら十分実用的)になりますが、Manjaro Linux KDE Edition も良いかもしれません。デフォルトのパッケージマネージャがOctopiなので詳しい方でないと扱いにくいのでpamacをインストールしてこちらをパッケージマネージャに使用するとカテゴリ別表示ができて、随分とユーザーフレンドリーになり、比較的簡単に目的のアプリケーションを見つけてインストール/アンインストールできます。

その他、Ubuntu系でKDEのデモとして提供されている「 KDE neon 」も評判がよくUbuntu本家についで使用されているようですが、残念ながら私のテスト環境では、Live CDは起動するもののインストール後起動せずで、評価できていません。KDE Plasmaデスクトップなので、軽量ではないはずですが、以外に軽快に動作するらしいです。

 

LinuxマシンにWindows10 64bitsをインストールする。

LinuxホストVirtualBoxにWindows10(x64)をインストール

LinuxホストVirtualBoxにWindows10(x64)をインストール

UbuntuのソフトウェアからインストールできるVirtualBoxは5.xでx86しかサポートしていないので、6.0をダウンロードしてインストールします。

Download VirtualBox for Linux Hosts

から、使用しているLinuxにあったものをダウンロード、インストールします。

インストールしたあと、Kernelの再構成が必要です。

sudo /sbin/vboxconfig

これを行っていないと仮想環境が起動できない場合があります。

あと、システムBIOSでVT-x(Intel CPU)/AMD-V(AMD CPU)を有効にしておきましょう。メーカ製PCの場合、有効になってない場合が多いかと思います。

Windows10インストール環境作成

システム メインメモリ:2GB(ホストのシステムメモリより小さい値にします。)

システム プロセッサー:ホストが4コア以上であれば、コア数は2以上

あとは、初期値で良いと思いますが、ディスプレイの2Dアクセラレータくらいは有効にします。

Windows10をインストール

Windows10のインストール媒体もしくはイメージをVirtualBoxの仮想マシンのCDにマウントして、仮想マシンを起動すると通常のWindows10のインストールが始まるので、標準通りインストールをします。

インストールが完了したら、仮想マシンのウインドウメニュのデバイス配下の「Insert Gues Additions CDイメージの挿入」を選ぶとインストールプログラムが起動するので指示通りインストールをすすめて最後に再起動したら完了です。

これで、マウスはバリアフリーでホストOSとゲストOS間を意識しないで行き来できますし、フルスクリーン表示も問題なくできるようになります。

さらにVirtualBoxの仮想マシンの環境設定で一般->高度にあるクリップボードとドラック&ドロップを双方向に、あと共通フォルダーの設定をしておくと起動後はホストOSからほとんどゲストOS(今回はWindows10)を意識しないでデータのやり取りもできるようになります。

トラブル対応

Windows10のインストーラが途中で止まってしまう場合は、VirtualBoxのシステム・アクセラレーションの準仮想化インターフェースをLegacyにすると良いようです。

Linuxでヤマト運輸「送り状発行システムB2クラウド」を使用

Linux(ubuntu)でクロネコヤマト(ヤマト運輸)の「送り状発行システムB2クラウド」

クロネコヤマト(ヤマト運輸)の「送り状発行システムB2クラウド」を使用する

クラウドなので、Linux上で使用するのもWindows10で使用するのも同じです。

事前にプリンターを事前に手動で設定しておく必要があります。この設定方法が異なるだけで、送り状発行システムB2クラウドの操作に違いはありません。

プリンタードライバーをインストールする。

本格的な業務用プリンターを導入されている場合は、経費面でリース導入されている場合が多いと思います。この場合は、リース会社にご相談いただくのが良いと思います。ここでは手持ちのプリンターを使用する場合を記載します。

OSはUbuntu(Xubuntu)18.05

プリンターは、EPSONの格安業務用プリンターPX-105 Amazonなどを見ていると色々悪い評価もあるようですが、基本的には価格以上に働いてくれます。不安であれば、複数台用意しておいても良いくらいのお値段で入手できます。

エプソン プリンター A4 インクジェット PX-105

新品価格
¥6,444から
(2019/2/9 16:38時点)

A5マルチ用紙(インクジェット専用)への印字も特に問題ありません。

もちろん、最初の1回だけ位置合わせだけは若干調整が必要ですが、これはどのプリンターを使用しても期待した正確な位置への印字するには必要な作業となります。(B2クラウド->各種設定の変更->プリンタ・送り状レイアウト)

このプリンターはドライバーのインストールが事前に必要になります。

セイコーエプソン株式会社のLinuxドライバーダウンロードへ

ここでPX-105のドライバーを検索、xxxx.deb(通常は64ビット版)をインストールします。

次に設置マネージャーのプリンタを開きます。直接接続であれば、ここでプリンターを接続するだけで表示されると思いますが、表示されていない場合やネットワークプリンターの場合、追加をクリック、ネットワークプリンターだとネットワークプリンターのところを選ぶと接続されているプリンターが表示されているので、接続したいプリンターを選択して指示に従います。

「プリンタードライバのインストールしています。ドライバーのインストールが必要です」と言われますが、待っていいると事前にインストールしたドライバーを認識して表示が変わりますので、あとは指示通りで完了です。

気がついた問題

Firefox65ですと2019年2月時点では印刷ダイアログが開かないようです。Chromium(確認バージョン: 71.0.3578.98)を使用するのが良さそうです。

おそらく、Google Chromeでも問題ないと思われます。(未確認)

Windows 7 / Office 2010ともに来年2020年にサポート終了対策


Windows 7 / Office 2010ともに来年2020年にサポート終了します。

OSにはサポート有効期限があります。

Windows XPサポート終了で大騒ぎしたのは、ご存知と思います。

ユーザーが少ないせいかあまり知られてないように思いますが、一昨年(2017 年 4 月 11 日)には、Windows Vistaサポートが終了しています。

来年(2020 年 1 月 14 日)には、Windows 7のサポートが終了します。企業向けには有料(年単位・台数あたりで費用が発生します)サポート「Windows 7 Extended Security Updates(ESU)」がありますが、費用がかさみますし、結局3年(2023年1月)でサポートが終了します。

ちなみにOffice2010も2020年10月にサポートを終了します。

サポートが終了したらどうなるか

OSにバグが発覚しても、修正対応はされませんし、問い合わせ対応もしてもらえなくなります。

昨今は、ウィルスや情報漏洩など危険がいっぱいなので、セキュリティ問題に対する対策もされなくなり、危険性が大幅に増して、とても業務用には使えなくなります。

また、サポートを終了したOSでは、セキュリティ対策を重視するサイトにはアクセスができなくなります。例えばネットショップ・銀行金融関係、動画サイトなどは使えなくなります。

インターネットの利用が、セキュリティ上危険になるだけでなくアクセスそのものができなくなる場合が増えます。

さらに使用しているアプリケーションもバージョンアップなどで使えなくなる場合が多々発生します。とくにセキュリティ関連ソフトは確実に使用できなくなります。

Windows Vista / Windows 7 OSサポート終了対策

基本的には以下のような対策となります。

  1. Windows10搭載のパソコンを新規購入(もしくはレンタル)・置き換える。
  2. Windows Vista / Windows7搭載のパソコンのOSをWindows10にアップグレードする。
  3. Windows Vista / Windows7搭載のパソコンのOSをLinuxに変更する。
  4. シンクライアントに変更する。

1.の場合、設備投資・レンタル費用が発生します。置き換えには廃棄費、セットアップ費用・工数が発生します。また、Windows10はWindows7と異なる部分も多々ありますし、既存の古いアプリケーションは動かなくなる可能性があり、古いアプリケーションのアップグレードも必要になります。

お気軽にお問合せ下さい
(パソコンの選択・手配・セットアップなど)

2.の場合、Windows10 OS購入費用とセットアップ費用・工数が発生します。メーカ製PCの場合、メーカが動作確認していない場合は、動作保証されませんし、ドライバーがなく動作しなくなる機能がある場合もあります。(スキルのある技術者がいる場合は、パソコンメーカーがドライバを供給してなくても対応できる場合もあります。)

ただし、Windows10は32ビットサポート終了してしまいましたので、CPUが64ビット未サポートの場合は、この対策は利用できません。

お気軽にお問合せ下さい
(Windows10のセットアップ、事前確認など)

3.の場合、オープンソースのLinuxを使用するとセットアップ費用・工数のみ発生します。ビデオチューナなど専用IC/特殊なUSBデバイスなどの場合は動作しなくなる可能性はありますが、基本的なハードウェアは大概動作します。

ただし、基本的には現状のWindowsアプリは、Linuxのアプリケーションへの切り替えが必要になります。

お気軽にお問合せ下さい
(Linuxのセットアップ、事前確認、運用サポートなど)

4.の場合、ネットワークインフラが充実していることが大前提となります。ローカルには端末のみとして、ネットワークサーバー上にパソコンを仮想構築します。レンタルサーバーのサービスに依存すること、定期的に費用が発生すること、それなりに太く信頼性のあるネットワークが必要になります。特殊な周辺機器が必要な場合、高速なグラフィックが必要な用途には、向きません。(対応はできる場合もありますが、ローカル環境のほうが良いと思います。)

LinuxでWindowsアプリを使う

Linux(Xubuntu)でCINEBENCH R15

Linux上でWindowsアプリを動作させる環境の構築

性能はともかく安定して動作させるのは、VirtualBOXのような仮想マシン上にWindows OSをインストールして動かすのが簡単ですが、別途Windows OSを購入しなければならないですし、実マシン(Linux)からメモリを固定的に割くことになります。また、Linuxから敷居なし(Windowsを意識しない)というわけにもいかなくなりますから面白くありません。

Linux上で動作しない常時必要なWindowsアプリがあるなら、別途Windowsマシンを用意してリモートコンソールでWindowsマシンを使ったほうがよいと思います。

ということで、ここでは「wine」を使って、Linux上でWindowsアプリを動作させる環境を作りたいと思います。

Wineですが、日々Updateされており、安定バージョンでも良いのですが、少しでも動く可能性を広げたいと思い、ここでは、最新版をインストールしたいと思います。(使用したいWindowsアプリが動作するWineのレビジョンがわかる場合はそのバージョンを準備したほうが良い場合もあります。)

Ubuntu 18.04の場合:それ以外は、Repositoryの部分が異なります。

sudo dpkg --add-architecture i386 
wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'
sudo apt update
sudo apt install --install-recommends winehq-devel

これでwineがインストールされました。

ライブラリ、フォント、タスクマネージャなどをフォローしてくれる「Winetricks」もソフトウェアからインストールします。

Windowsアプリをインストールする前に

LinuxとWindowsではフォントに指定がことなりますので、最低限Windowsの日本語フォントの代替えを設定しておかないとインストール中に文字化けばかりで読めません。

とりあえず、WinetricksのInstall Fontsで「xxx japan xxx」日本語関係のフォントをインストールしちゃいます。

その他、インストールしたいWindowsアプリが必要といているライブラリがわかっている場合は、事前にWinetrickでインストールしておくとインストールがスムーズに完了します。

Windowsアプリをインストールする

ここではちょっと専門的なツールをインストールします。

USB接続のプログラマーTL866_IIPlusの制御プログラムはWindows版しかないのでこれをLinux上で動作するようにします。

まず、ここからTL866II Plus Application softwareをダウンロードします。rarのままでは使えないので、解凍してexeを抽出しておきます。

USBでデバイスを認識させるために少し細工が必要なので、こちらからプログラム「setupapi.dll」をダウンロードと手順を参考にします。

sudo echo 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="a466", ATTRS{idProduct}=="0a53", GROUP="plugdev", MODE="0666"' > /etc/udev/rules.d/51-minipro.rules

sudo udevadm trigger

wine XgproV811_Setup.exe

「setupapi.dll」を「~/.wine/drive_c/Xgpro/」にコピー

これで完了です。

Windowsアプリによっては、以下を単純に実行するだけでインストールできることもあります。ただ実行時カレントディレクトリは、デスクトップは避けましょう。

wine <インストールプログラム>

例えば、圧縮解凍ツール7ZipはLinuxでもありますが、日本語GUI表示にならないようなのでWindows版をインストールしちゃいます。

最新のインストール実行ファイルをダウンロード

linux Wine 7zip

このままOKでWine Windowsプログラムローダーで開くとインストールを始めます。あとは指示通りでインストール完了。

WindowsでいうところのスタートメニューのWineのアイコンからインストールしたWindowsプログラムが起動できますし、ファイルマネジャーThunarでファイルを右クリックするとコンテキストメニューに圧縮解凍メニューも出て、あたかもLinuxネイティブのように使用できるようになります。

試しにCINEBENCH R15を動作させてみました。適当なフォルダーにおいて、実行ファイルをクリックするだけで動きました。インストールが不要なプログラムはLinux環境であることを全く意識しないで実行でき、ちょっと感動します。しかもOpenGLというのもありなかなかの結果。

ただし、DirectX/VB6などが必要なプログラムはそれらのライブラリ(DLL)を事前にインストールしておく必要があります。(wine自前で動作する場合もあるらしい。)

今後試して、ぜひ動かしたいWindowsアプリ

・公的個人認証サービス

問題は非接触カードリーダーをアプリに見せるところか…..

・JDL IBEX出納帳

これは、一部ネット関係の機能が気になるけど、….

・e-TAX

Web版は、OS/IEのチェックをしてくるが、これはクリアできる。しかし、ActiveXを要求してくるのでだめ。

さて、ダウンロード版が使えるかどうか。

・松井証券 ネットストック・ハイスピード(最近貧乏なので触れてないが(-_-;))

推奨環境がIE11/Edgeとなっているが、これらはいずれも現状Wineにはインストールできないようなのでだめかも。ただ、推奨環境の記述から可能性も残されているような….

一部のサービスはGoogle Chromeで動作するようなので、試してみたい。

・CLIP STUDIO PAINT Pro

動かなければ、代替え手段はあるけれど、仕事でバーナーや写真修正に愛用しているので、動くと嬉しい。

掲載日:
作者別: himeport

Linuxのススメ その5


Linux(Xubuntu)のアプリケーションについて その3

あると少し幸せになるアプリケーション

◆ディスク管理

GNOME Disks。ディスクの検査や新規ディスクのフォーマットなど

あと、常駐機能はないが、Smart情報でディスクの健康状態の確認もできます。時々確認しておくと、ディスクやSSDの消耗を事前に知ることができる場合があります。

◆ディスク管理 その2

MATE ディスク使用量解析。ディスクの使用容量が簡単に確認できます。

パソコンに詳しくない方が、パソコンの調子が最近悪いと言われる要因の1つ。ディスクの空き容量不足の確認に使用できます。

また、新規にディスクを追加、交換する際の目安確認にも利用できます。

◆スケジュール・ToDo管理

アドオン(プラグイン)ですが、スマートフォンとの連携できると大変便利ですので、Googleカレンダーを利用するのが簡単と思います。

メーラーにThunderbirdを使用していれば、

◆連絡先/アドレス帳

これもアドオンですが、メーラーにThunderbirdを使用していれば、vCard標準の連絡先「CardBook」

◆マインドマップ

FreeMind

考えをまとめたい時、煩雑なことを整理し、解決策を検討する。小説や作文の骨子をまとめるなどさまざまな使いみちがあるツールです。

 

 

 

◎補足

 

Linuxのススメ その4


Linux(Xubuntu)のアプリケーションについて その2

ちょっと専門的なアプリケーション

◆FTP

定番FileZillaでしょう。Windows版もあります。

◆ソフトウェア開発環境

定番?Visual Studio Codeでしょう。Windows版もあります。

html,java,php,pytonなど様々に対応。ホームページなどの作成にとどまらず、マイコンのソフト開発もできちゃいます。拡張機能で対応範囲は無限

sudo apt-get install curl

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg

sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

sudo apt-get install apt-transport-https

sudo apt-get update

sudo apt-get install code

◆電子回路設計 CAD

Kicadでしょう。Windows版もあります。

インストールも簡単。ちょっとインストール時間はかかります。

ターミナルコンソールから、最後に言語パッケージを入れると日本語表示もできるようになります。

sudo add-apt-repository --yes ppa:js-reynaud/kicad-5
sudo apt update
sudo apt install kicad
sudo apt install kicad-locale-ja

ちなみにインストール直後は回路図エディタなどがグレーアウトしていますが、プロジェクトを作成すると使えるようになります。

◆ウェブ開発

先のVisual Studio Codeで十分と思いますが、もっとお手軽なのは、Bluefish、以前確認したときには若干不安定でしたがWindows版もあります。

◆リモートデスクトップ

Remminaでしょう。

◆3D CAD

完全無料となると、FreeCADでしょう。Windows版もあります。

sudo add-apt-repository ppa:freecad-maintainers/freecad-stable
sudo apt-get update
sudo apt-get install freecad freecad-doc && sudo apt-get upgrade

 

◎補足

そうそう「ソフトウェア」からインストールする場合、同名の場合☆のある方を選びましょう。

(順次追加予定)

Linuxのススメ その3


Linux(Xubuntu)のアプリケーションについて

お勧めのアプリケーション

xubuntuをインストールすると初めから基本的なアプリケーションがインストールされていますが、Windows10からの移行だとこのままでは物足りませんので、少しアプリケーションを追加します。

◆ブラウザ

標準では、FireFoxがインストールされています。このままでも良いのですが、より軽い動作が期待できるChromiumにすると古いパソコンでも幸せになれると思います。ただし、まだまだ主流のFlashplayerや、著作権保護のDRMに未対応なので、快適に使うには少しインストール手順が必要となります。

まず、Chromeをインストールします。そのあとChromiumをインストールします。こうするとChromeのFlashplayerとDRM機能をChromiumから使えるようになります。(Chromeをインストールしない方法もあります)

Amazon Prime Videoを見る為には、Chromiumに拡張機能「User-Agent Switcher」(提供元: https://www.esolutions.se)を入れます。そして、先にインストール済みのChromeのUser Agentを調べて(Chromeで、https://www.esolutions.se/whatsmyinfoをアクセスする。)、「User-Agent Switcher」のChrome for Ubuntuを編集して最新のUser Agentに書換えます。

さらにVP8/9ハードウエアコーデックをサポート(i3-7xxx以降、Nvidia gtx950/gtx1030以降)出ない場合は、youtubeを快適にみる為に、Chromiumに拡張機能「h264ify」を追加して、youtubeがvp9を使用しないようにします。また、HD動画が重い場合は、「h264ify」の60fpsブロックを有効にします。60fps動画を30fpsに間引きして表示することで、そこそこ鑑賞できるようになります。

補足1:

上記の手順で、AmazonPrimeVideoが再生できない。Flash動画でFlashPlayerが認識されない場合などは、Chromeで動作するのを確認後、Chromiumを一度削除、再度インストールするとうまく行く場合があるようです。

補足2:

なぜ、Chromeではなく、Chromiumなのか? オリジナルソースはGoogleとはいえオープンソースで、Chromiumの方が動作が軽い為

◆メール

標準でインストールされるThunderbirdで問題ないと思います。Windows版もあります。

◆ファイルマネージャー(Windowsでいうエクスプローラ)

標準でインストールされるThunar ファイルマネージャーで問題ないと思います。

◆動画プレーヤー/DVDプレーヤー

標準でインストールされるParoleでも問題は少ないと思いますが、より軽く標準でほとんどのフォーマットに対応して、Windows10のメディアプレーヤー的なSMPlayerを推奨します。SMPlayerは、mplayerのフロントエンドなので、同時にmplayerもインストールされます。SMPlayer経由でmplayerを使用することで、ハードウェア動画再生支援などが自動的に設定され、操作性もユーザーフレンドリーになります。Windows版もあります。

ちなみにYoutubeも「動画のURLのコピー」してSMPlayerでURLを開くで軽快に表示されます。

SMTubeを入れるとブラウザなしでSMPlayerからYoutubeから見たい動画を探して再生できるようになります。

 

sudo add-apt-repository ppa:rvm/smplayer

sudo apt-get update

sudo apt-get install smtube

◆音楽プレーヤー

先のSMPlayerで良いと思いますが、音楽専用にこだわるなら定番の「Audacious」が安心と思います。

◆画像表示/簡易修正

表示だけなら、標準でインストールされるRistrettoでも良いと思いますが、多少の編集は出来ると便利ですので、nomacsが良いと思います。そこそこ軽いですし、トリミング、色彩補正などちょっとした修正もできます。

◆グラフィックツール

PHOTOペイント系の定番はgimpですが、ちょっととっつきにくいのと、初心者(一般ユーザ)には機能が多すぎたり、起動時間が多少必要などありますので、Kritaをお勧めします。ちゃんと日本語入力も対応しています。Windows版(Windows Storeからだと有償ですが、直接ダウンロードなら無料)もあります。

ただし、「ソフトウェア」からインストールした場合、日本語表記にできないようです(2019・1月現在)ので、インストール後、ターミナルコンソールから「sudo apt install krita-l10n 」を実行します。これで日本語表記が選択できるようになります。

ドローイング系は、定番Inkscapeでしょう。Windows版もあります。

◆オフィスソフト

標準でインストールされるLibreOfficeで問題ないと思います。パワーポイントも使う方は、「ソフトウェア」からLibreOffice Impressをインストールします。Windows版もあります。

標準でインストールされているものが不安定な場合、以下の手順で最新安定版をインストールします。私の環境では、システムがフリーズするなどの現象が発生したので、以下の手順で入れ直しました。

ソフトウェアで、現状インストールされているLibreOfficeをすべて削除後、

sudo snap install libreoffice

これでLibreoffice関連がすべてインストールされます。

◆家計簿・経理ソフト

GnuCashが日本語の解説もされており良いと思います。「ソフトウェア」からGnuCashをインストールします。

◆エディタ

Linuxといえば、viが有名ですが、一般向けではないですし、標準でインストールされているmouspadで十分とは思いますが、もう少し便利なgedit をおススメします。

◆動画変換

HandBrakeでしょう。Windows版もあります。「ソフトウェア」からインストールできますが、最新版を使いたい場合は以下

sudo add-apt-repository ppa:stebbins/handbrake-releases
sudo apt-get update
sudo apt-get install libdvd-pkg
sudo apt-get install handbrake-gtk handbrake-cli

日本語で表示されないかもしれませんが、慌てずにOSを再起動してみます。それでも日本語表示されない場合は、日本語 Remixのページにあるトポロジーの追加をして、Updateします。(日本語で使用するなら、はじめからこれをやっておくと良い)

wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt update

sudo apt-get upgrade

このあと、一度再起動して、更新を確認して更新します。これで日本語表示になります。

◆CD/DVD書込み

Xfburnでしょう。

◆動画編集

Shotcutでしょう。Windows版もあります。

snapが使えるので以下で簡単インストール。

sudo apt install libsdl2-dev

snap install shotcut --classic

VAAPIでハードウェア エンコードを使用する場合にグラフィックカードを使用しているとIntel CPUのQSVを認識してくれない(バージョン 18.12.23)ので、QSVを使用したい場合は明示てきに指定する必要があります。「高度」「その他」に以下の記述を追加します。「*」は/dev/driの下を確認して適当なものを設定します。

vaapi_device=/dev/dri/card*

ちなみに指定したdeviceが正しいかどうかは、「vainfo –display drm –device /dev/dri/card* 」で対応する機能を確認することでできます。

◆パスワード管理

KeePassXCでしょう。ほとんどのプラットホームで共通に使用できますし、割符キーを使えば、セキュリティも万全となります。

KeePassXCをセットアップして、KeePassXCブラウザ統合を有効にして、ブラウザ側に拡張機能「KeePassXC-Browser」を組み込んでおくと幸せになれます。

「ソフトウェア」でインストールできるものは少々古いようで、KeePassXC-Browserから警告されることがあるようです。最新版をインストールできるようにします。

sudo add-apt-repository ppa:phoerious/keepassxc

sudo apt-get update

sudo apt install keepassxc

◆ドキュメントビュア

Okularをおすすめします。PDFやテキストをサムネイル付きで見られる便利なツールです。

Okularは様々フォーマットに対応して、動作も軽いので良いのですが、残念ながら、(2019.2時点)ePUB(電子書籍)の縦書き表示に対応できていません。ほぼ同じ見た目と機能で、縦書き表示もできる「Atril Document Viewer」の使用をおススメしたいと思います。

◆電子書籍

calibreが便利そうです。Windows版もあります。

書庫管理、書籍フォーマット変換など多彩な機能があり、ビューアーも備えています。

残念ながら、縦書き表示には対応できていないので、縦書き書籍の閲覧には別途ビューアを用意しないといけません。

手持ちの書籍の管理と手持ちのKindleへの配信などができるようですが、USB接続して、Documentsファルダーに作成したAZW3ファイルを置いちゃうのが簡単です。

プラグインにより機能拡張ができ、購入したDRMで保護された書籍を気に入った方法で読むこともできます。しかし、今の日本の著作権保護法では、使用法次第でアウトですので、ここでは記載しません(たくさん記載された記事が散見されますので、そちらをご参考にしてください)。

◆Adobe Flashplayer

まだまだ必要なサイトがあるので。chromeを使用であればはじめから含まれているので不要です。

「設定」->「ソフトウェアとアップデート」の「他のソフトウェア」でCanonical パートナーリポジトリが有効化して
sudo apt install adobe-flashplugin
sudo apt install browser-plugin-freshplayer-pepperflash

◆画面キャプチャ

ソフトウェアから「simplescreenrecorder-mardy」をインストールすれば良いのですが、現時点(2018.1)では日本語フォントが化けてしまいます。化けないようにするには、以下のようにフォントを指示する方法がありますが、他にも影響する可能性もあるので、おススメしません。

sudo mount -o ro,bind /usr/share/fonts /snap/core/current/usr/share/fonts

最新のsimplescreenrecorderをインストールすれば、日本語も正常に表示されます。

sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
sudo apt-get update
sudo apt-get install simplescreenrecorder

このソフトを使うと、パソコンの画面を動画で記録できます。

 

補足:

iphone/ipadと使われている方は、まだiTunesを使われている方も多いと思いますが、iCloud(有料でもかなり安い)を使い、Linuxからicloud経由してデータを共有できます。

Chromiumに拡張機能「iCloud Dashboard」を追加しておくとより簡単にアクセスできます。

残念ながら音楽データなどは、この方法は使えないので、iphoneに「EZMP3 Player 」をインストールして、ファイル転送するような手法になると思います。(iphoneは持ってないので未確認。ゴメンナサイ)


ホームページ、ネットショップの作成管理などのお役立ちリンク