2018年6月6日水曜日

[linux][cygwin] unzipコマンドで "error: invalid compressed data to inflate" というエラーメッセージがでたら?

zipアーカイブの中に長さが0のファイルが含まれていると、unzipコマンドでは以下のようなエラーメッセージが表示されて、解凍することができません。アーカイブが壊れていなくてもエラーになります。
% unzip hoge.zip
  error:  invalid compressed data to inflate
このような場合には、-tzipオプションを指定して7zコマンドを実行することで、エラーを回避して解凍できます。パスワード保護されているzipアーカイブも問題なく解凍できました。
% 7z x -tzip hoge.zip

manページによると、以下のフォーマットがサポートされていて、デフォルトは7zとのこと。
The program supports 7z (that implements  LZMA  compression  algorithm),  
ZIP, CAB,  ARJ,  GZIP,  BZIP2,  TAR,  CPIO, RPM and DEB formats.

xはディレクトリ階層つきで解凍することを意味しています。eを指定するとディレクトリ階層なしで解凍されます。
% 7z --help

7-Zip [64] 15.14 : Copyright (c) 1999-2015 Igor Pavlov : 2015-12-31
p7zip Version 15.14.1 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz (306C3),ASM,AES-NI)

Usage: 7z  [...]  [...]
       [<@listfiles...>]


  a : Add files to archive
  b : Benchmark
  d : Delete files from archive
  e : Extract files from archive (without using directory names)
  h : Calculate hash values for files
  i : Show information about supported formats
  l : List contents of archive
  rn : Rename files in archive
  t : Test integrity of archive
  u : Update files to archive
  x : eXtract files with full paths


  -- : Stop switches parsing
  -ai[r[-|0]]{@listfile|!wildcard} : Include archives
  -ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
  -ao{a|s|t|u} : set Overwrite mode
  -an : disable archive_name field
  -bb[0-3] : set output log level
  -bd : disable progress indicator
  -bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
  -bt : show execution time statistics
  -i[r[-|0]]{@listfile|!wildcard} : Include filenames
  -m{Parameters} : set compression Method
    -mmt[N] : set number of CPU threads
  -o{Directory} : set Output directory
  -p{Password} : set Password
  -r[-|0] : Recurse subdirectories
  -sa{a|e|s} : set Archive name mode
  -scc{UTF-8|WIN|DOS} : set charset for for console input/output
  -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
  -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
  -sdel : delete files after compression
  -seml[.] : send archive by email
  -sfx[{name}] : Create SFX archive
  -si[{name}] : read data from stdin
  -slp : set Large Pages mode
  -slt : show technical information for l (List) command
  -snh : store hard links as links
  -snl : store symbolic links as links
  -sni : store NT security information
  -sns[-] : store NTFS alternate streams
  -so : write data to stdout
  -spd : disable wildcard matching for file names
  -spe : eliminate duplication of root folder for extract command
  -spf : use fully qualified file paths
  -ssc[-] : set sensitive case mode
  -ssw : compress shared files
  -stl : set archive timestamp from the most recently modified file
  -stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
  -stx{Type} : exclude archive type
  -t{Type} : Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
  -v{Size}[b|k|m|g] : Create volumes
  -w[{path}] : assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
  -y : assume Yes on all queries


参考:

2018年3月5日月曜日

[haskell] http-clientライブラリを利用してHaskellでHTTPクライアント機能を実装する

Haskellでは、http-clientライブラリを用いることで、HTTPクライアント機能を簡単に実装できます。http-client以外にも何種類かライブラリがありますが、今回はhttp-client, http-client-tlsの機能と使い方をまとめておきます。

本エントリで紹介するhttp-client, http-client-tlsライブラリの機能:
  • 単純なHTTP GETリクエスト
    • 主要な型の説明
  • Managerのカスタマイズ 
    • https
    • proxy設定
    • タイムアウト値の設定
  • Requestのカスタマイズ
    • ベーシック認証
    • リクエストヘッダ
  • Responseの操作
    • ストリーミング受信
    • レスポンスヘッダの参照
  • エラーハンドリング


単純なHTTP GETリクエスト

{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)

main :: IO ()
main = do
  manager <- newManager defaultManagerSettings

  request <- parseRequest "http://httpbin.org/get"
  response <- httpLbs request manager

  putStrLn $ "The status code was: " ++ (show $ statusCode $ responseStatus response)
  print $ responseBody response

デフォルトManagerと、"http://httpbin/org/get"へのRequestを生成し、それらを引数にhttpLbsを呼び出して、サーバーからのResponseを得てその内容を表示するサンプルです。
文字列リテラルをRequest, ByteStringに変換する目的でOverloadedStrings言語拡張を利用しています。

主要な型の説明:

  • Manager
    • Managerはサーバーとの間に生成するコネクションの管理するもの。
    • 複数サーバーのコネクションを管理する前提で実装されており、クライアントの中では1つのインスタンスを共有することが推奨されている。 
    • Managerに対しては以下のような設定ができる。デフォルト設定を併記。
      • プロキシ設定:環境変数(http_proxy)の値を利用
      • TLS(https):サポートなし
      • 1サーバーあたりのkeep-aliveコネクション維持数: 10
      • 最大同時オープンコネクション数: 512
      • 受信タイムアウト: 30秒
  • Request
    • 特定サーバーに対して送信する1つのリクエストを表す型。
    • parseRequest関数などでHTTP METHOD, URIを指定してインスタンスを生成する。
    • Request単位の細かい設定ができる
      • ベーシック認証情報(アカウント&パスワード) 
      • プロキシ設定、プロキシ認証情報
      • クエリストリング、bodyなどの送信データ
    • HTTPメソッド(GET, POST, DELETEなど)、ヘッダ は生成したRequestインスタンスに対して、record構文で設定する
      • メソッドのデフォルトはGET
      • Content-Length, Transfer-Encoding, Accept-Encodingが自動で設定される
  • Response 
    • サーバーに送信したRequestに対応するサーバーからのレスポンスを表す型。HTTPステータスコード、レスポンスヘッダ、レスポンスボディなどを取り出すことができます。


Managerのカスタマイズ

defaultManagerSettingsの代わりにtlsManagerSettingsを用いてManagerを生成することでhttps通信が可能になります。 以下のサンプルではhttps対応に加えて、プロキシサーバーとして"127.0.0.1:8080"をManagerに設定しています。
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)
import Network.HTTP.Client.TLS (tlsManagerSettings) -- 新たにimport文を追加

main :: IO ()
main = do
  -- manageSetProxyでデフォルトのプロキシ設定を上書く。
  -- tlsManagerSettingsを利用するとこでhttps通信が可能になる。
  manager <- newManager $ managerSetProxy (useProxy $ Proxy "127.0.0.1" 8080) tlsManagerSettings

  request <- parseRequest "https://httpbin.org/get" -- https通信に変更
  response <- httpLbs request manager

  putStrLn $ "The status code was: " ++ (show $ statusCode $ responseStatus response)
  print $ responseBody response

プロキシの設定:

  • デフォルトの挙動。環境変数(http_proxy/https_proxy) を参照する。
    • defaultProxy :: ProxyOverride
  • プロキシサーバーの設定を無視して通信する。
    • noProxy :: ProxyOverride
  • コードで明示的にプロキシサーバーを設定する。
    • useProxy :: Proxy -> ProxyOverride

レコード構文でManagerSettings値を生成する方法:

非公開APIを利用するため、オススメの方法ではありませんが以下のようにレコード構文を用いることで、Managerの細かい設定をカスタマイズすることができます。
import Network.HTTP.Client.Internal
-- tlsManagerSettingsをベースにmanagerResponseTimeoutを30→5秒に、
-- managerConnCountを10→3に変更
mySettings :: ManagerSettings
mySettings = tlsManagerSettings
             { managerResponseTimeout = responseTimeoutMicro 5000000
             , managerConnCount = 3
             }


Requestのカスタマイズ

以下のコードはRequestに対して、リクエストヘッダ、クエリーパラメタ、ベーシック認証情報を設定するサンプルです。Requestに対して設定できる項目の詳細は、Request type and fieldsを参照してください。
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)

main :: IO ()
main = do
  manager <- newManager defaultManagerSettings

  initialRequest <- parseRequest "http://httpbin.org/anything"
  let request = initialRequest
          { method = "POST"   -- "GET", "PUT", "DELETE"などのメソッドを指定
          , queryString = "foo=bar&xxx=yyy" -- parseRequestのuriに記述してもよい
          , requestHeaders =  -- ヘッダはタプル(名前、値)のリストで指定
              [ ("User-Agent", "New Agent!")
              , ("Content-Type", "text/plain")
              , ("Added-Header", "hoge")
              ]
          , requestBody = "body string."
          }
  let authRequest = applyBasicAuth "user" "pass" request -- ベーシック認証情報付与
  response <- httpLbs authRequest manager

  putStrLn $ "The status code was: " ++ (show $ statusCode $ responseStatus response)
  print $ responseBody response



Responseの操作

httpLbs関数はRequestとManagerを引数にとり、IO (Response ByteString)を返します。Response型クラスの関数で、Responseからステータスコード、レスポンスヘッダなどの情報を取り出すことができます。ResonseのAPIリファレンスはこちら
httpLbsは全データを受信しますが、大きなデータをレスポンスとして受信する場合はhttpLbsの代わりに、withResponseとbrReadを利用して逐次受信することが推奨されています。以下にそのサンプルを記載します。
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)
import qualified Data.ByteString as B

main :: IO ()
main = do
  manager <- newManager defaultManagerSettings

  request <- parseRequest "http://httpbin.org/get"
  withResponse request manager receiveResponse


receiveResponse :: Response BodyReader -> IO ()
receiveResponse response = do
  putStrLn $ "response version: " ++ (show $ responseVersion response)
  putStrLn $ "status code: " ++ (show $ statusCode $ responseStatus response)
  putStrLn $ "response header: " ++ (show $ responseHeaders response)

  -- receive body data block by block
  let loop = do
        bs <- brRead $ responseBody response
        if B.null bs
          then putStrLn "\nFinished response body"
          else do
            print bs
            loop
  loop



エラーハンドリング

以下は、urlのパース(parseRequest)、及び、サーバーとの通信(httpLbs)のエラーハンドリングを行うサンプルです。これらの関数はエラー時にはHttpExceptionをスローします。サンプルではtry関数を用い、Left eでスローされたHttpExceptionの情報を表示しています。
{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Client
import Network.HTTP.Types.Status (statusCode)
import Control.Exception (try)
import System.Environment (getArgs)


createRequest :: [String] -> IO Request
createRequest [] = do
  putStrLn "NOTE: no argument is given. so use not existing url."
  parseRequest "http://unknown-host:80/" -- valid but not exists
createRequest args = do
  let url = head args
  eRequest <- try $ parseRequest url
  case eRequest of
    Left e -> do
      print (e :: HttpException)
      putStrLn $ "given url (1st argument) is invalid: " ++ url
      error "error!"
    Right request -> return $ request


main :: IO ()
main = do
  args <- getArgs
  manager <- newManager defaultManagerSettings
  request <- createRequest args

  eResponse <- try $ httpLbs request manager
  case eResponse of
    Left e -> do
      print (e :: HttpException)
      putStrLn $ "cannot reach server with given url: " ++ (head args)
    Right response -> do
      putStrLn $ "The status code was: " ++ (show $ statusCode $ responseStatus response)
      print $ responseBody response


他のライブラリ:

このエントリではhttp-clientの使い方を紹介していますが、これ以外にも以下のようなライブラリがあるようです。これらのライブラリも利用する機会があれば比較などを含めて記事にしたいと思います。

参考:

2018年2月25日日曜日

[haskell] stack install cryptoniteがno such instruction: `rdrand %r8'エラーで失敗する問題の対処方法

手許の環境(mac)で、cryptoniteライブラリのビルドがエラーになる問題が発生したが、ネットの情報を元に解決できたので、その症状と手順をblogに残しておく。


エラーの症状:

stack install cryptoniteで以下のようなエラーが発生。
% stack install cryptonite
--  While building custom Setup.hs for package cryptonite-0.24 using:
      /Users/xxx/.stack/setup-exe-cache/x86_64-osx/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-osx/Cabal-2.0.1.0 build --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
    Process exited with code: ExitFailure 1
    Logs have been written to: /Users/kurokawa/.stack/script/lts-10.4/.stack-work/logs/cryptonite-0.24.log

    Configuring cryptonite-0.24...
    Preprocessing library for cryptonite-0.24..
    Building library for cryptonite-0.24..
    [  1 of 120] Compiling Crypto.Cipher.DES.Primitive ( Crypto/Cipher/DES/Primitive.hs, .stack-work/dist/x86_64-osx/Cabal-2.0.1.0/build/Crypto/Cipher/DES/Primitive.o )

... snip ...

    [120 of 120] Compiling Crypto.Tutorial  ( Crypto/Tutorial.hs, .stack-work/dist/x86_64-osx/Cabal-2.0.1.0/build/Crypto/Tutorial.o )
    
    /private/var/folders/3f/7fg601f92_33t43jhn2p0v0w0000gn/T/stack47334/cryptonite-0.24/cbits/cryptonite_rdrand.c:89:0: error:
        no such instruction: `rdrand %r8'
       |
    89 |         asm volatile ("rdrand %0; setc %1" : "=r" (*buffer), "=qm" (err));
       | ^
    
    /private/var/folders/3f/7fg601f92_33t43jhn2p0v0w0000gn/T/stack47334/cryptonite-0.24/cbits/cryptonite_rdrand.c:89:0: error:
        no such instruction: `rdrand %r8'
       |
    89 |         asm volatile ("rdrand %0; setc %1" : "=r" (*buffer), "=qm" (err));
       | ^
    
    /private/var/folders/3f/7fg601f92_33t43jhn2p0v0w0000gn/T/stack47334/cryptonite-0.24/cbits/cryptonite_rdrand.c:89:0: error:
        no such instruction: `rdrand %r8'
       |
    89 |         asm volatile ("rdrand %0; setc %1" : "=r" (*buffer), "=qm" (err));
       | ^
    `gcc' failed in phase `Assembler'. (Exit code: 1)



原因:

ビルド環境のbinutil (or gcc)でrdrandインストラクションがサポートされていないと、このエラーが発生する。


解決方法:

cryptoniteのデフォルトはrdrandインストラクションを利用する設定になっているため、-support_rdrandを指定してrdrand利用コードを無効化する。
% stack install cryptonite --flag cryptonite:-support_rdrand
cryptonite-0.24: configure
cryptonite-0.24: build
cryptonite-0.24: copy/register
--flag cryptonite:-support_rdrandは、crptoniteパッケージのビルド処理において-support_rdrandフラグを適用することを意味する。
cabalをを利用 している環境では、以下の指定で同様の効果が得られるはず(未確認)。
% cabal configure --flag='-support_rdrand'
OR
% cabal install --constraint="cryptonite -support_rdrand"


参考:

2018年2月18日日曜日

[windows] Windows10セットアップ・設定項目のメモ

Windows10セットアップ時の設定項目、インストールアプリの備忘録。

スタートメニュー・タスクバーの設定

  • タスクバーの設定 
    • 小さいタスクバーボタンを使う:オン
    • [スタート]ボタンを右クリックするかWindowsキー+Xキーを押したときに表示されるメニューで、コマンドプロンプトをWindows PowerShellに置き換える:オフ
    • タスクバーボタンを結合する
      • 「タスクバーに入りきらない場合」を選択
    • タスクバーをすべての ディスプレイに表示する:オフ
    • システムアイコンのオン/オフの切り替え
      • 入力インジケーター: オフ
  •  Quick Launcherを表示する
  • スタートメニューにコントロールパネルを表示する
  • スタートメニューにピン止めするアプリ:
    • Windowsシステムツール
      • コントロールパネル
    • Windowsアクセサリ
      • ペイント
    • パワーポイント
    • エクセル
    • Acrobat Reader
    • VisualStudio
    • Astah

エクスプローラの設定

  • フォルダーオプション
    • 表示タブ
      • ナビゲーションウィンドウ
        • 開いているフォルダーまで展開にチェック
      • ファイルおよびフォルダー
        • タイトルバーに完全なパスを表示する :外す
          • タスクバーもすべてc:\xxxで始まり見分けがつかなくなる
        • ファイルとフォルダーの表示:「隠しファイル、隠しフォルダー、および隠しドライブを表示する」を選択
        • フォルダーとデスクトップの項目の説明をポップアップで表示する:外す
        • フォルダーのヒントにファイルサイズ情報を表示する:外す
        • フォルダーの結合の競合を非表示にする:外す 
          • (移動・コピー時のマージ前の確認ダイアログ)参考
        • ログオン時に以前のフォルダーウィンドウを表示する:チェック
        • 暗号化や圧縮されたNTFSファイルをカラーで表示する:チェック
        • 空のドライブは表示しない:チェックを外す
        • 縮小版にファイルアイコンを利用する:チェックを外す
        • 常にアイコンを表示し、縮小版は表示しない:チェック
        • 登録されている拡張子は表示しない:チェックを外す
        • 別のプロセスでフォルダーウィンドウを開く:チェックを外す
        • 保護されたオペレーティングシステムファイルを表示しない:チェックを外す

デスクトップの設定

  • デスクトップ

ウィンドウズ設定(スタートメニュー→設定)

  • 更新とセキュリティ→Windows Update
    • アクティブ時間の変更
      • 8:00~2:00
    • 詳細オプション
      • Windowsの更新時に他のMicrosoft製品の更新プログラムも入手します:チェック
    • ※更新プログラムのインストールにおいて、自分で再起動の時刻を指定する(勝手に再起動されないようにする)
  • 個人用設定 
      • 透明効果:オフ
    • ロック画面
      • スクリーンセーバー設定
    • スタート
      • スタートにタイルを縮小して表示:オン
      • スタート画面またはタスクバーのジャンプリストに最近開いた項目を表示する:オン
  •  システム
    • マルチタスク
      • スナップ(Windows10 - スナップ機能のオン/オフ
        • ウィンドウを画面の横または隅にドラッグしたときに自動的に整列する:オフ
        • ※ウィンドウが画面の端に移動されたとき自動的に整列されないようにする
    • 電源とスリープ
      • 画面:1時間
      • スリープ:なし
  • デバイス

 コントロールパネルの設定

  • コンピューターの簡単操作
  • システム
    • システムの詳細設定 
      • 詳細設定タブ:以下のチェックを外す
        • アイコンの代わりに縮小版を表示する
        • ウィンドウを最大化や最小化するときにアニメーションで表示する
        • コンボボックスをスライドして開く
        • タスクバーでアニメーションを表示する
        • デスクトップのアイコン名に影をつける
        • ヒントをフェードまたはスライドで表示する
        • メニューをフェードまたはスライドして表示する
        • メニュー項目をクリック後にフェードアウトする
        • リストボックスを滑らかにスクロールする
        • 半透明の[選択]ツールを表示する
  • ハードウェアとサウンド
    • デバイスとプリンター
      • マウス
        •  ポインターオプションタブ
          • ポインターを自動的に規定のボタンの上に移動する:チェック
          • CTRLキーを押すとボタンの位置を表示する:アンチェック 
  • コントロール パネル\時計、言語、および地域
  • デバイス→入力→キーボードの詳細設定→言語バーのオプション
    • 言語
      • 詳細設定 
        • 既定の入力方式の上書き:ATOK
        • 入力言語の切り替えー言語バーのホットキーの変更
          • 「キーの詳細設定」 タブ
            • 言語バーのホットキーの変更
              • 入力言語を切り替える:(なし)へ
          • 「言語バー」タブ
            • 言語バー:タスクバーに固定する
              • ↑に設定しても、アクティブなアプリによって表示・非表示が切り替わることがある・・・
            • (対処方法)
              • 「タスクバーの設定→システムアイコンのオン/オフの切り替え」で「入力インジケーター」をoffにすることで、常時非表示になる
              • https://itojisan.xyz/trouble/12211/

その他




アプリケーションのインストール

  • FireFox
  • KeySwap
    • 以下の3項目の設定で幸せになれる。
      • 「caps lock」→「左ctrl(1D)」
      • 「変換」→「全角/半角(29)」
      • 「全角/半角」→「Esc(01)」
      • 「変換」 →「ひらがな(70)」
        • ※firefox上でjiraのコメント入力で「変換」を押下するとフォーカスを失ってしまうのでワークアラウンド・・・。 (ATOK参照)
    • ※ユーザーごとの設定はできない模様・・・。システム共通設定になります。
  • keyhac
  • ATOK(2017)
    • 環境設定
      •  入力補助
        • テンキーからの入力を必ず半角にする:チェック
        • キー操作でのカナロックON/OFFを無効とする:チェック
        • カナ入力時に自動的にカナロックを行う:アンチェック
        • スペースで入力する空白文字:半角
          • Sheft+スペース:スペースの逆
      • 表示
        • カーソル位置に入力モードを表示:しない
      • 半角全角変換
        • 入力中の文字に対しても有効にする:アンチェック
    • キーバインドの変更
      • 「変換」「無変換」「ひらがな」をATOKの起動・終了にバインド
    • ATOKイミクルの停止
  • TortoiseSVN
    • Settings
      • General
        • Context Menu
          • Checkout
          • Commit
          • Update to revision
          • Revert
  • powerpoint2016
    • 拡張ディスプレイでスライドを表示した再に発表者ビューをオフにする
    • オプション
      • 詳細設定
        • (編集オプション)
          • 文字列の選択時に、単語単位で選択する:チェックを外す
        • (切り取り、コピー、貼り付け)
          • スペースを自動的に削除または挿入する:チェックを外す
  • outlook2016/2013
    • ファイル ー オプション
      • 基本設定
        • ユーザー名
        • 頭文字
      • メール
        • <メッセージの作成>
        • メッセージ作成形式:テキスト
        • 編集オプション
          • オートコレクト
            • 文の先頭文字を大文字にする:外す
            • 表のセルの先頭文字を大文字にする:外す 
          • 入力オートフォーマット
            • 左右の区別がない引用符を、区別がある引用符に変更する:外す 
            • 序数(1st, 2nd, 3rd, ...)を上付き文字に変更する :外す
            • ハイフンをダッシュに変更する:外す
            • *, _で囲んだ文字列を太字、斜体に書式設定する:外す
            • 長音とダッシュを正しく使い分ける:外す
            • ------
            • 箇条書き(行頭文字&段落番号):外す
            • ------
            • Tab/Space/BackSpaceキーでインデントとタブの設定を変更する:外す
            • '記'などに対応する'以上'を挿入する:外す
            • 頭語に対応する結語を挿入する:外す
            • 参考)「入力オートフォーマット」は入力時の変換。「オートフォーマット」は入力後の一括変換機能。
        • 詳細設定
          • 切り取り、コピー、貼り付け
            • 貼り付け時に自動調整する:設定
              • 文と単語の感覚を自動的に調整する:外す
        •  署名
        • ひな形およびフォント
          • テキスト形式のメッセージの作成と読み込み:「MSゴシック」
        • <outlookウィンドウ>
        • 閲覧ウィンドウ
          • 次の時間ウィンドウで表示するとアイテムを開封済みにする:チェック
            • 0秒
          • 常にメッセージのプレビューを表示:チェック
            • (参考) https://pcclick.seesaa.net/article/467714241.html
        • <メッセージ受信>
          • マウスポインターを変更する:チェックを外す
        • <返信・転送>
          • 返信と転送を新しいウィンドウで開く:チェック
          • メッセージに返信するとき:元のメッセージの行頭にインデント記号を挿入する
        • <メッセージ送信>
          • 返信後、受信トレイの会議出席依頼と通知を自動的に削除する:外す
        • <メッセージ形式>
          • インターネットメールの受信者にリッチテキスト形式のメッセージを送信する際、以下の形式を使用する:テキスト形式に変換
          • 指定の文字数で自動的に文字列を折り返す: 132
        • <その他>
          • メッセージにアイテムを貼り付けるときに「貼り付けオプション」ボタンを表示する:外す
      • 検索 
        • 検索対象範囲
          • 「現在のフォルダー」にチェック
            • ※受信トレイのとき「現在のメールボックス」にならないようにする
    • ビューの設定
      • 「コンパクト」
        • 列の順序:「送信者」を「件名」の後ろにすると、メッセージ一覧で件名の方が大きいフォントで表示されるようになる
    • Outlook2013・2016でメール本文が表示されて見にくい場合の対処事例。Outlook2010以前のように差出人・件名の下に本文を表示させたくない。
  • DF
    • ファイル比較ソフト
  • Stirling
    • バイナリエディタ
  • 秀丸
  • Kindle for PC
    • インストール後「ネットワークに接続できません。ネットワークの設定とプロキシの構成を確認をしてください…」 というエラーが出る場合
      • 「ツール」-「オプション」-「コンテンツ」より「現在のコンテンツフォルダ」の場所を確認し、エクスプローラーからフォルダの中を空にするとよい
      •  VPN回線だとダメで、いったんVPNを切断してアプリを起動(amazonへ機器登録)すると接続でき、その後VPNにつないでもOKという情報あり。自分の環境でもドメインに接続した状態だと機器登録できなかったが、ドメインの外でインターネットにつなぐと機器登録できた。
  • Acrobat Reader
  • IObit Unlocker
  • ConEmu
    • Settings
      • Main - Task bar
        • Show overlay icon:  アンチェック
    • (iconの変更)
      • https://github.com/Maximus5/ConEmu/blob/master/PortableApps/App/AppInfo/appicon.ico
      • 上記ファイルをDLし、起動時に -icon オプションで icon ファイルを指定する
        •  "ConEmu.exe -icon appinfo.ico"


Q&A

  • PCのシャットダウン時にすべてのアプリを終了している状態にもかかわらず「起動中のアプリケーションがあります」 という警告が出る
    • Windows8以前の環境では問題なかったが、以下のアプリ をインストールしているのが原因だった。アンインストールしたところ、正常にシャットダウンできるようになった。

2018年1月17日水曜日

[cygwin] cygwinセットアップ・環境構築手順メモ

主に自分向けの防備録です。windows10上で確認。インストーラーはここからDLする。

<<設定>>



<<環境変数>>

  • HOME
    • ホームディレクトリを切り替えられる
  • SHELL
    • "/bin/tcsh"とすることでデフォルトのシェルが切り替わる
    • ※/etc/passwdの設定を変えても反映されないので注意
  • DISPLAY
    • ":0.0"を設定


<<インストールするパッケージ>>

  • Admin
    • shutdown
  • Archive
    • bzip2
    • p7zip
    • unzip
    • zip
  • Database
    • libsqlite3-devel
    • libsqlite3_0
    • mysql
    • postgresql-client
    • sqlite3
    • sqliteman
  • Devel
    • autoconf
    • automake
    • bashdb
    • binutils
    • clang
    • clang-analyzer 
    • cmake
    • cppunit
    • ctags
    • dmalloc
    • doxygen
    • gcc
    • gdb
    • git
    • gitk
    • jlint
    • libiconv-devel 
    • libtool
    • make
    • mercurial
    • ocaml
    • patch
    • patchutils
    • subversion
  • Doc
    • cygwin-doc (libc関連man page)
  • Editors
    • emacs
    • emacs-anthy
    • emacs-w32
    • emacs-X11
    • vim
  • Libs
    • libcurl
    • libiconv
    • libncurses-devel
  • Net
    • curl
    • httperf
    • inetutils  (telnet)
    • iperf
    • openldap (ldapsearch)
    • openssh
    • openssl
    • ssh-pagent
  • Python
    • pylint 
    • python2-pip
    • python3-pip
  • Ruby
    • ruby
    • ruby-devel
    • ruby-sqlite3
  • Shells
    • fish
    • rxvt-unicode
    • tcsh
    • xterm
  • System
    • ping
  • Text
    • aspell
    • aspell-en
    • enscript
  • Utils
    • cppcheck
    • gnupg
    • keychain
    • lv
  • Web
    • ping Systemに移動?
    • wget
    • wput
  • X11
    • xhost
    • xinit
    • xlaunch
    • xmodmap
    • xorg-server
    • xwininfo
      • font-util   X.Org font utilities and font maps
        fontconfig  Font configuration utilities
        showfont    X.Org font server font information utility
        xfd         Displays all characters in an X font
        xfontsel    X font selector
        xfs         X.Org Font Server
        xfsinfo     X.Org font server information utility
        xorg-x11-fonts-*   X11 core fonts
  • =================================
  • gitビルド用に追加
    • glib2.0-openssl
    • subversion-perl
    • gettext
    • gettext-devel
    • expat
    • expat-devel
    • zlib
    • zlib-devel


手動インストール



その他、はまった問題

Q: windows10上でcygwin-xを新規インストールしたが、スタートメニューにCygwin-Xフォルダ、XWin Serverアイコンが表示されず、xwin-xdg-menuを起動できない

A:
なぜか、以下のフォルダのアクセス権設定がインストールした自分のアカウントからアクセスできない状態になっていた。アクセス権を変更してやると、スタートメニュー上に表示されるようになりました。
  C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Cygwin-X
参考にしたページ:Install Cygwin On Windows 10

Q: windows10上でcygwinを新規インストールした際、/etc/group, /etc/passwdが自動生成されなかった。どうすればよいか?

A: mkpasswd/mkgroup -c -lで再生成する。-cオプションを指定することで、ドメインないの全情報を取得しないで、自分のアカウントの情報だけが追加される。
参考にしたページ:巨大ドメインに参加している PC での /etc/passwd, /etc/group ファイルのつくりかた

Q: ~/.ssh/configの設定が読まれない。

A: パーミッションを600に設定していても、読み出してくれない現象に遭遇(-Fで明示的にファイルを指定すると読み出してくれるのだが・・・)。/etc/ssh_configにコピーすると正しくロードしてくれた。
参考:[ssh] OpenSSHのアップデートでssh-agentがパスワードを覚えてくれなくなった問題への対処


過去の手順

不要:pingのエラー回避

2018.1.17現在、最新版のcygwinでは管理者権限がない状態でもpingが正しくどうさするようになっている。