Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

特定のフォルダ以下で拡張子がmp3のファイルだけ残したい

f:id:fa11enprince:20200626231955j:plain
大掃除がてら音楽を整理していたら、
10年くらい前に持っているCDをmp3化したファイルがあって
歌詞が載っているリンクやhtmlのファイルが
ご丁寧に一緒に入っていました(;´・ω・)
htmlファイルとかどうでもいいからmp3ファイルだけ残したい。
しかし、まともに消していたら日が暮れる……
ということで、Windowsの場合Explorerから検索して消すっていう手もあるのですが、
あまり効率のいいやり方ではありません。

コマンドラインでやる方法を紹介します。
cdで対象のmp3以外を消したい一番上のディレクトリに移動しておきます。
その直下を再帰的にmp3以外のファイルを消しに行くコマンドです。

Unix系(Linux, Cygwinなど)、またはMac

消すファイルの確認

find . -not -iname "*.mp3" -type f

これで消そうとする対象のファイルをピックアップできます。
良さそうであれば消しにかかります。

削除実行

find . -not -iname "*.mp3" -type f -delete

これで消えてくれます。LinuxとMacはこれでいいのですが、
問題はWindowsです。Cygwinを入れている酔狂な人はそんなにいないでしょうから。

コマンドプロンプトの場合

無理!
むりやりバッチファイルでも作らない限り……

PowerShellの場合(Windows 7以降なら標準搭載)

消すファイルの確認

Get-ChildItem -Recurse -Exclude "*.mp3" | Where-Object { Test-Path $_ -PathType Leaf } | Remove-Item -WhatIf

削除実行

Get-ChildItem -Recurse -Exclude "*.mp3" | Where-Object { Test-Path $_ -PathType Leaf } | Remove-Item

PowerShellは長ったらしいですね。一応Get-ChildItemはls、Remove-Itemはrmに書き換えられますが……
にしても長い。ちなみにWhere-Object { Test-Path $_ -PathType Leaf }
ファイルだけっていう絞込みをしています。もっとスマートな方法がないものか……

しつこいようですが、ちゃんと目的のディレクトリにcdできたことを確かめて実行してくださいね!
でないと大事故になりますので(;^ω^)

はてなブログのサイドバーのカテゴリーの簡単カスタマイズ


はてなブログのサイドバーに設置できるカテゴリーのパーツいいのですが、
縦1列に並んで、非常に長くなっていやだ(´・ω・`)というのがあります。
カテゴリーが多くなると余計に長くなっていやだ。
ということで、ちょっとだけデザインを加えてカスタマイズしました。

適用前


なにこのカテゴリー長すぎ(´・ω・`)……

改造方針

inline-blockを使って、li要素を横に並ぶようにします。
あとはhoverを使ってマウスオーバーしたときにちょっと光るようにします。

コピペでデザインCSSに追加しましょう

下記のコードをデザインCSSに貼り付けます。

/**
 * サイドバーのカテゴリーモジュール
 */
div.hatena-module-category div.hatena-module-body ul li a {
    color : #ffffff;    /* 文字色 */
}
div.hatena-module-category div.hatena-module-body ul li {
    display: inline-block; /* 横並びに変更 */
    border-radius: 6px;
    line-height: 10px;
    transition: none;
    background-color: #8CB2A3; /* お好きな色に */
    margin-top: 0.5em; /* 要素の間隔調整 */
} 
div.hatena-module-category div.hatena-module-body ul li:hover {
    background-color: #9fc9b8; /* お好きな色に */
}

貼り付け場所はここ!

ここをクリックして……

ペタリ。
コメントを描いているところはお好きなように変更してください。
色見本はこのサイトが良いですよ。

適用後


カテゴリーが多くて根本的な解決にはなっていませんが、
縦に長い状態が解消されました。

参考にしたサイト

https://www.nxworld.net/tips/css-only-button-design-and-hover-effects.html
ここを見るともっとゴージャスなものができたりします。

お詫び

なんでかCSSの閉じの波かっこ(brace)が切れていました。修正いたしました。

Windowsのジャンクション(junction)とシンボリックリンク(symblic link)違い



2020-08-18更新 記載が間違っていたので修正しました。

概要

Windowsにはショートカットと似た機能のジャンクション(junction)とシンボリックリンク(symblic link)が存在します。
他にもハードリンクという機能がありますが、ほとんど使わないので無視します。

ジャンクションとシンボリックリンクはショートカットのようなものです。
ディレクトリとはフォルダのことです。
特に使うのはシンボリックリンクでプログラム等からフォルダを扱うときに便利だったりします。
ジャンクションはほぼ使わないですが、C:\Users\All UsersC:\ProgramDataへのジャンクションだったりします。

細かい違いはここに書いてあります。

ジャンクションとシンボリックリンクの違い

大まかな違いを簡単にまとめます

機能 ジャンクション シンボリックリンク
ファイルシステム NTFS NTFS
作成に必要な権限 一般ユーザー権限 管理者権限が必要
ファイルへのリンク ×
ディレクトリへのリンク
dirコマンド出力での表記 JUNCTION SYMLINK SYMLINKD
ネットワーク先へのリンク(*1) ×(ローカルのみ)
他マシンから参照(*2) ×
作成コマンド mklink /j mklink / mklink /d
エクスプローラの表示 アイコンに矢印 アイコンに矢印

ネットワーク先へのリンクについて

(*1)ネットワーク先へのリンクについては〇の場合UNCもZとかに割り当てたネットワークドライブも使えます。
マシンAがあったとして

マシンA
C:\Data> dir /a
  <DIR>            MyDataX

C:\Data\MyDataXは共有をしています。
このときマシンBでmklink /d [リンク] [ターゲット]で、

マシンB
C:\> mklink /d SharedLink \\マシンA\Data\MyDataX
C:\> dir /a
  <SYMLINKD> SharedLink [\\マシンA\Data\MyDataX]

とすればマシンBから、C:\SharedLinkでマシンAのC:\Data\MyDataXにアクセスできます。

他マシンから参照について

(*2)他マシンから参照についてはどういうことかというと、リンクの解釈は実際の使用時に(クライアント側が)行うということです。
マシンAのフォルダ(ディレクトリ)構成

マシンA
C:\Data> dir /a
  <SYMLINKD> MyDataA [C:\Data2\MyDataX]
  <SYMLINKD> MyDataB [C:\Data2\MyDataY]
  <JUNCTION> MyDataC [C:\Data2\MyDataZ]
C:\Data2> dir /a
  <DIR>            MyDataX (共有)
  <DIR>            MyDataY (非共有)
  <DIR>            MyDataZ (非共有)

C:\Dataは共有設定があるものとします。
C:\Data2\MyDataXは共有設定があるものとします。
C:\Data2\MyDataYは共有設定がないとします。
C:\Data2\MyDataZは共有設定がないとします。

こうなっていた時に、
マシンBから\\マシンA\Data\MyDataAを見たときにはマシンAのC:\Data2\MyDataXは見れます。
マシンBから\\マシンA\Data\MyDataBを見たときにはマシンAのC:\Data2\MyDataYを見に行こうとして
「ファイルが存在しません」となります。
マシンBから\\マシンA\Data\MyDataCを見たときにはマシンAのC:\Data2\MyDataZを見れるということです(共有していないにもかかわらず)。

どちらを使えばよいか

基本的にはシンボリックリンクを使っておけばよいです。

結論

特段事情がない限り、
ショートカット > シンボリックリンク > ジャンクション > ハードリンク
で使うのが良いかと思います。

参考


簡単な線形計画法問題の解法

f:id:fa11enprince:20120720075237j:plain
線形計画法、大学の講義かもしかしたら大学受験の時に
やっていたような気がするんですが、
毎度なんでか解き方忘れてしまって、
その場で時間をかけて考えてしまうんですよね。
いい加減、解法を丸暗記しないとなぁとメモです。
IT系の試験ではなぜか頻出です。

問題例

意図的に簡単な問題を出しています。
都合のいい問題を作り出すために
何度か書き換えているので間違いがあるかもしれません。

とある内職をしている美人な人妻A子が
部品Xと部品Yを作っています。
部品Xと部品Yの数により納品物ができ、
1つの納品物あたりのもらえるお金は
次の表に示すとおりです。
やる気の問題なのかよくA子にもわからないのですが、
部品Xの1日に作れる数は36個で、
部品Yの1日に作れる数は12個という謎の制約があります。
このとき、1日のもらえるお金を最大にするように部品Xと部品Yを作った時の
利益はいくらでしょうか。

部品X 部品Y お金(ドル)
納品物1 6 3 4
納品物2 1 2 3

解き方

中学校程度の数学知識があれば解けます。

制約条件を導きます

人妻A子の制約条件を式にすると以下です。
部品Xの数をxとして、部品Yの数をyとします。
 x \geqq 0
 y \geqq 0
 6x + 3y \leqq 36 (納品物1)
 1x + 2y \leqq 12 (納品物2)
①、②は当たり前として、③、④は人妻の生産能力を表している式ですね。

目的関数を記述します

ここで、納品物1と納品物2を収めることによってもらえるお金をzとします。
 z = 4x + 3y

制約条件をグラフに書きます。

③、④を表したx, yの2次元グラフを書きます。
元の式のままでもx, yに具体的な数を入れてみて線を引っ張ってもよいのですが、
中学数学からのやり方になれている人がほとんどだと思いますので、
 y = ax + bの形に式変形をします。
③について
 3y \leqq -6x + 36
 y \leqq -2x + 12
傾き: -2, y軸の切片が12ですね。
④について
 2y \leqq -x + 12
 y \leqq -\frac{1}{2}x + 6
傾き: -1/2, y軸の切片が6ですね。
f:id:fa11enprince:20150714034449p:plain
こんな感じでしょうか(´・ω・`)

目的関数をざっくり書きます。

⑤についてzをとりあえず定数と見てやります
 3y = -4x + z
 y = -\frac{4}{3}x + \frac{z}{3}
このときzについては全く重要でないので、-4/3の傾きのグラフを考えます。
そこで部品XとYで囲まれたの中で最大の値を取るところを探します。
本当にテキトーにひきます。
少なくとも部品XとYの間の傾きなのでそれさえわかってしまえばいいのです。
f:id:fa11enprince:20150714034848p:plain
と、これを見ると交点の部分がちょうど最大だとわかるので、
③、④から方程式を解いてもよいのですが、(x, y) = (4, 4)だとわかります。
よって、最大のもらえるお金は
 z = 4 \times 4 + 3 \times 4
で28となります。

動画で解説

http://www.youtube.com/watch?v=eQByNPoS4rw
これ凄いわかりやすかったです。
ここで書いていることはすべて説明していますね(*´Д`)

Pythonで頑張っている人も

satomacoto: Pythonで線形計画法を解いてみる

ってあれ?Googleでグラフかけるの(゚Д゚;)!

書いてみた……
検索窓に下記のように書くとグラフができますよっと。
-2*x + 12, -1/2*x + 6