2024/09/09

MacでPDFのサイズダウンがうまくいかず結局Webサービスを使った

タイトルの通り.

Quartz フィルタの Reduce File Size でやっても小さくならず.

ColorSyncユーティリティ.app でフィルタをカスタマイズできることがわかったのでカスタマイズしたがうまくいかず.

(解像度は確かに落ちてるのになぜかファイルサイズは変わらず) 

結局 AdobeのPDF圧縮のサービスを使うことに.

https://www.adobe.com/acrobat/online/compress-pdf.html

なんとなく釈然としない.

2024/09/01

brewで特定のバージョンをインストールする方法

Macでunisonを使った同期をしようと思ったときに,unisonのバージョンが同期先と揃える必要があったので,特定のバージョンをインストールする必要があった.

以前はダウンロードしてビルドする必要があったような気がしていたけど,brewでできそうだったので,ここ記事を参考にインストールしてみたらうまく行った.


2022/09/29

Macbook ProでLightGBMがsegmentation faultになる問題の対処法

LightGBMを回したらつい最近まで動いていたはずなのに,segmentation faultになるようになってしまった.

 brewのアップグレードがトリガー?


python -m trace --trace xxx.py


でどうやらLightGBM自体の問題っぽい事がわかったので色々試す.

https://github.com/microsoft/LightGBM/blob/master/python-package/README.rst#user-content-build-from-sources

に書いてある

pip install lightgbm --install-option=--nomp

でインストールし直したら一応動いた.

ただし,

It is strongly not recommended to use this version of LightGBM!

らしいので,ちゃんとした解決法を検討しないとダメそう.

2022/05/10

pyenv global してもバージョンが切り替わらない場合の対処法

 ググると .zshrc の記載が間違ってるとか,PATHがおかしいとか出てくるが,僕の場合はもっとアホらしい理由でした.


pyenv versions すると

* 3.5.9 (set by /Users/username/.python-version)

と出るので,なるほどホームディレクトリに .python-version があるて指定されているっぽい.


rm ~/.python-version


すれば,解決.

記憶にないが,おそらくうっかりホームディレクトリで

pyenv local 3.5.9

とかしたものと思われる.

2022/05/01

Macにshh接続しようとしたら ssh_exchange_identification: read: Connection reset by peer と言われたときの対処法

何がトリガーになったのかよくわからないが,ある日突然,Macにshh接続しようとしたら

ssh_exchange_identification: read: Connection reset by peer

と言われて繋がらなくなってしまった.


この記事を参考に以下のように解決.


過去の記事

/System/Library/launchDaemons/ssh.plist

から

/Library/launchDaemons/ssh<任意のポート番号>.plist

へファイルをコピーしていたらしいが,OSアップグレードのためか内容が若干変更されているのを確認.

(そもそもコピーした事自体完全に忘れてた)


/Library/launchDaemons/ssh<任意のポート番号>.plist

を削除して,改めてコピー.

以下の変更を加える.

<string>ssh</string>    =>     <string><任意のポート番号></string>

<key>Disabled</key><true/>    =>    <key>Disabled</key><false/>

<string>com.openssh.sshd</string>    =>    <string>com.openssh.sshd<任意のポート番号></string>


設定を反映するために以下のコマンドを実行

sudo launchctl unload /Library/LaunchDaemons/ssh<任意のポート番号>.plist

sudo launchctl load -w /Library/LaunchDaemons/ssh<任意のポート番号>.plist


2022/03/06

Fuseでマウントしたフォルダのアイコン位置が保存されなくなったときの対処法

Dropboxがシンボリックリンク非対応になった問題を解決する方法で書いた通り,Fuseを使ってデスクトップにDropboxのファイルをマウントすることで,デスクトップの同期を実現している.


この方式には概ね満足しているが,ある日突然,Macbook Proのデスクトップ上のアイコン位置が保存されなくなり,右側に名前の順に勝手に並べ替えられてしまった.
並び替えても,マウントし直したり,再起動すると,右端にソートされてしまう.
他のMacは問題ないのに,何故かMacBook Proだけ.

情報がほとんど出てこなくて,Fuseの再インストールとかさんざん試行錯誤したけど,大体のことは意味なかった.

そもそもアイコンの位置がどうやって保存されているかを調べてみると,どうやら.DS_Storeに記録されているらしい.
実際に実験してみると,.DS_Storeを削除すると,アイコン位置がリセットされている.
なるほど.

Fuseのフォルダだけ何故か.DS_Storeが作られなくなっていた.
調べてもなんにも出てこなかったが,最終的に以下の作業であっさり治った.


# .DS_Storeを作らない設定にする
defaults write com.apple.desktopservices DSDontWriteNetworkStores True

Finder再起動

# .DS_Storeを作る設定に戻す
defaults write com.apple.desktopservices DSDontWriteNetworkStores False


2022/01/10

クレームブリュレのレシピメモ

クレームブリュレのレシピ

材料
生クリーム 200cc
牛乳 50cc
卵黄 3つ
砂糖 15g (元レシピよりかなり少なめ)
カラメル用砂糖 たっぷり
バニラオイル 適量


1. 卵黄と砂糖を混ぜる
2. 生クリームと牛乳を人肌に温める
3.  1.と2.を混ぜる
4. オーブンで芯温が80度になるまで温める
5. 冷やして固めたら,砂糖を満遍なく振ってバーナーする
6. 再び冷やす

温め方法は多分何でもOK.

2021/08/01

Macでcronで定期実行しつつ,エラー発生したときだけポップアップで教えてもらう方法

Macでcronで定期実行しつつ,異常発生したときだけポップアップで教えてもらう方法


cronの実行は便利だけど,バックグラウンドで実行になるので,エラーが起きても気づかない場合がある.

いちいちログを見るのも面倒なので,ポップアップでなにか通知してくれたらいいのにと思って考えてみた.


意外と簡単で,cronに以下のように異常終了時にosascriptでダイヤログを出すようにするだけ.


 0 * * * * <定期実行するコマンド> || osascript -e 'tell app "Finder" to display dialog "異常終了しました."'


一応解説.

コマンドを || でつなぐと,異常実行時のみ続くコマンドが実行される.

osascript はMac固有のコマンドで,任意のAppleScriotを実行可能.

Apple Scriptの内容は,Finderでダイヤログを出せ.


以上.


2021/01/25

プロキシ環境下でMacOSのインストールができないと思いきや,実はできた話

iMacを購入して,バックアップからインストールを試みたら,プログレスバーが一向に進まなくなってしまった.

前にMacBookProにOSをインストールしようとしたら,プロキシに阻まれてインストールできなかったことを思い出す.

そのときぱっと調べた感じでは,プロキシ環境下におけるMacOSのインストールはできないとのことだったので,MacBookProのときはプロキシ環境外に持ち出して解決した.


しかし今回はiMacである.

さすがにiMacを持ち出すのは嫌なので,なんとかならないかといじっていたら,普通にインストール時のインターネット環境の設定画面でプロキシの項目を発見.

どうやらLANケーブルを繋いだ状態でインストールを開始すると,ネット環境の設定画面が表示されない(もしかしたら表示されたけど素通りしただけかも).

そこで,LANケーブルを抜いた状態でインストールを開始すると,ネット環境の設定画面が出てくるので,最初から表示されているWiFiなどは選ばず,

その他のネットワーク > Ethernet     (うろ覚え)

と進むとプロキシ設定ができる.

2021/01/03

iPhoneのヘルスケアのデータを他のApple IDに無料で移行する方法

iPhoneのヘルスケアのデータを他のApple IDに無料で移行する方法


やりたいことは,タイトルの通り.

Appleのヘルスケアのアプリは,xmlでデータをエクスポート可能.

にも関わらず,何故かインポートはできない意味不明な仕様.


普通にググると,Health Data Importerという有料アプリ(610円)を入れろと言われる.

https://www.softantenna.com/wp/software/health-data-importer/


そんなわけあるかと,英語で情報を探してみると,Health Backup - Export & Import Health Data というアプリを見つかった.

https://apps.apple.com/gb/app/health-backup-export-import-health-data/id1077538894?l=ja


これを使えばヘルスケアのデータを丸ごとzipでエクスポート,インポートが可能.

しかも無料で. 


使い方は拍子抜けするくらい簡単.

アプリをインストールしてExportマークの下にある共有メニューマーク(AirDropとかするときのマーク)のボタンをタップしてzipファイルの保存先を選ぶ.

Apple IDを変えて,zipファイルを開き,Health Backupで開くよう選択するだけ.


なお,移行にはそれなりに時間がかかる.




2020/08/11

pyenvでtkinterがないと言われて困った時の解決策

Djangoでmanage.pyしようとしたら,

ModuleNotFoundError: No module named '_tkinter'

と言われて困った.


解決策は下記のサイトの通り.

pyenvはパスを通さないといけないらしい.

 https://qiita.com/skyloken/items/a5f839eba1bd79cd5ef9


2020/07/23

IEICEのLaTeXフォーマットでフォントが無いと言われたときの解決策

IEICEの論文を書こうとLaTeXテンプレートをコンパイルしたら,何やらエラーが...

! Font TS1/ntxtlf/m/n/10=ts1-qtmr at 10.0pt not loadable: Metric (TFM) file not
 found.

普通に日本語を書くだけなら問題ないので,IEICE の LaTeXフォーマット固有の問題?
よくわからんが,ググったらこんな記事が出てきたので,そのとおりにしてみた.



tlmgr info ts1-qtmr.tfm

で探して,

tlmgr install tex-gyre

でインストールで解決.

tlmgr でインストールができない問題を探ったらcurlのproxyが原因だった件


tlmgr でスタイルファイルをインストールしようとしたら,長い時間待たされた挙げ句,以下のようなエラーが出て止まる.

sudo tlmgr install latexmk  --no-persistent-downloads

/Library/TeX/texbin/tlmgr: TLPDB::from_file could not initialize from: https://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/texlive/tlnet/tlpkg/texlive.tlpdb
/Library/TeX/texbin/tlmgr: Maybe the repository setting should be changed.
/Library/TeX/texbin/tlmgr: More info: https://tug.org/texlive/acquire.html

多分proxyの問題だろうと思い,以前同じような問題で止まったとき同様,以下のサイトを参考にwgetのproxyの設定をするが,うまく行かず.
https://qiita.com/yyamnk/items/2da2791bcee82643984f

どうやらcurlで止まっているっぽかったので,curlのproxy設定をしたらうまく行った.
(というか,.zshrcにproxy設定を書き忘れてた)

.zshrc に以下を記入するだけ.
export http_proxy=http://example.com:8000
export https_proxy=http://example.com:8000

コマンド実行時は,環境変数の引き継ぎを忘れずに.
sudo -E tlmgr install latexmk


2020/05/27

TimeMachineで複数のMacのバックアップをしていて片方のMacが容量を食いすぎてしまった場合の対処法

タイトルの通り.

一つのTimeCapsuleにTimeMachineで複数のiMacとMacbookのバックアップを取っていたら,一方のiMacがどんどん空き容量にバックアップをためていき,たまにしか接続しないもう一方のMacbookは残された容量をほそぼそと使うという状態になっていた.
そしてとうとう,バックアップができない状態になってしまったので,渋々対応策を探す.



まず,

tmutil listbackups 

とかするとバックアップの履歴がリストされる.
そこから例えば,

sudo tmutil delete /Volumes/Time\ Machine\ バックアップ/Backups.backupdb/<マシン名>/2019-*

のような感じで,まとめて削除.

Total deleted: 470.0G

とか出て,空き容量が増えたかと思いきや,Macbook側から見ると空容量増えず.

hdiutil detach /Volumes/Time\ Machine\ バックアップ

した後に,

hdiutil compact /Volumes/<ディスク名>/<マシン名>.sparsebundle

で圧縮.
これで空き容量が開放される.

まぁ,本来ならパーティション分けるのが正しいんでしょうね.


参考にしたサイトはこちら.
基本的にはこのサイトでやっている通り.
https://qiita.com/takc923/items/52c4f7e4d260fc89a907

2020/04/29

Djangoで継承している子クラスのオブジェクトを親クラスのオブジェクトから見つける

タイトルの通り.

子クラスの名前がわかってる場合は,
parent_obj.child
でアクセス可能だけど,継承している子クラスが複数あって,どのクラスのオブジェクトに対応づいているか不明な場合は,工夫がいる.
related_objects から対応付くクラスの一覧を取得して,getattrでテキストで指定してアクセスすればOK.
こういう書き方をしておくと,子クラスを増やしたときに,書き換える必要がないから楽.

コードは以下の通り.

class Parent(models.Model):
    def get_child(self):
        """継承する子クラスのオブジェクトを返す"""
        children = self._meta.related_objects  # 継承している子クラス一覧を見つける
        for c in children:
            try:
                child = getattr(self, c.name)  # テキストで指定したselfのインスタンス変数にアクセス
            except getattr(ImageDatabase, c.name).RelatedObjectDoesNotExist:  # テキストで指定したクラス変数にアクセス
                pass  # 対応するオブジェクトがなければ何もしない
        return child

class Child(ImageDatabase):
    parent = models.OneToOneField(to= Parent, related_name='relation')


でも,もっとちゃんとした方法があるかも.
誰か知ってたら教えてほしい.

2020/03/11

lynxでno_proxy

lynx でプロキシの問題でページが表示できなくて困っていたが,どうやら no_proxy のワイルドカードが使えないということのようだ.

2020/02/06

pipでsslモジュールが使えないと言われた場合の対処法

何がきっかけかわからないが,あるとき突然pipができなくなってしまった.
エラーは以下の通りで,sslモジュールが使えないと言われる.

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

ググると,opensslを入れ直せと出てくるが,

brew update
brew upgrade
brew uninstall --ignore-dependencies openssl
brew install openssl

とかしてみてもだめ.
色々試行錯誤の結果,以下で行けたように見えた.

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

しかし,今度はsshができなくなる.
エラー内容はこんな感じ.
dyld: Library not loaded: /usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib


最終的に以下で行けた.

brew switch openssl 1.0.2t


2019/11/25

sudo しないとアクセスできないファイルをローカルにコピーする方法

普通にscpとかを使ってもできない.
以下のようにsshすればできる.

ssh -t user@host 'echo パスワード |sudo -S cat ファイルパス' > ローカルファイル名

2019/11/06

異なるファイルが置かれた複数のデスクトップを切り替えながら使う方法

Dropboxがシンボリックリンク非対応になった問題を解決する方法 を探していたら,副産物として,デスクトップを簡単に切り替える方法を考えついたので,メモを残す.

タイトルに有る通り,別々のファイルが置かれたデスクトップを複数用意することができる方法であって,MacのMission Controlのように,隣のデスクトップに移動しても同じファイルがありつつ,ウィンドウを広げるスペースを確保する話とは全く異なるので注意.
つまり,例えば,仕事用のファイルを置いたデスクトップとプライベート用ファイルを置いたデスクトップをそれぞれ分けて使うことが可能になったりする.

使うのは,bindfsというツール.
bindfs は FUSEの仕組みを使って,任意のファイルシステムをマウントできるものらしい.
とりあえず以下でインストール.


brew cask install osxfuse
brew install bindfs

使い方は簡単で,

bindfs somedir/ mountdir/

とすると,somedirがmountdirにマウントされる.
これを使い,以下のように,任意のフォルダ(somedir)を~/Desktopにマウントすると,Desktopのファイル群がsomedirの中身に入れ替わる.
切り替えて戻しても,ファイルの配置はそのまま.

bindfs -o volname=Desktop ~/somedir/ ~/Desktop/

戻すときはアンマウント(ディスクを取り出す)すればOK.

Dropboxがシンボリックリンク非対応になった問題を解決する方法


先日,Dropboxから,今後はシンボリックリンクのファイルは同期しないようにする旨のアナウンスが来ていた.
Macでシンボリックリンクを使った 複数PCのDesktopをDropboxを使って同期する方法 が使えなくなってしまい頭を抱えてしまった.

試行錯誤の末,bindfsを使えば解決するばかりか,より良い実装にできそうということがわかったので,メモを残す.


悩んだ過程は以下の通り.

シンボリックリンクでDropboxは同期してくれない.
Googleドライブ,OneDriveも試したが,同じ仕様.
SugerSincはできるっぽいけど無料は90日限定.

ハードリンクならどうか.
ハードリンクは,High Sierra以降はファイルシステムとしてAPFSが強要されるため,ディレクトリのハードリンクは不可.
逐一ファイルごとにハードリンクを張るスクリプトを組むのは面倒臭すぎる...


結局たどり着いたのが,bindfs.
bindfs は FUSEの仕組みを使って,任意のファイルシステムをマウントできるものらしい.

とりあえずインストール.


brew cask install osxfuse
brew install bindfs

使い方は簡単で,

bindfs somedir/ mountdir/

とするだけ.
オプションを付けると色々とポリシーを変えたりできるらしい.
シンボリックリンクで実現していたときと同様に,DesktopをDropbox内にマウントしても,マウントされたファイルは同期対象にはならないので,Dropboxディレクトリ自体をDesktopディレクトリにマウントしてしまおう.
(このような使い方はAppleは想定していないと思うので,自己責任で)

以下のコマンドを打つと,Dropboxディレクトリに入っているものが,Desktopに表示されるようになる.

 bindfs -o volname=Desktop ~/Dropbox\ \(個人用\)/ ~/Desktop/

アンマウント(ディスクを取り出し)すると,元のDesktopに戻ります.
再度マウントするとちゃんと元の配置に戻るようになっている.


当然,再起動するとマウントされていない状態に戻るので,コマンドを打ち直す必要があります.
また,副作用として,ディスクとして扱われるのでDesktop外にファイルをドラッグすると,移動ではなくコピーになってしまいます.
コマンドキーを押しながらドラッグすると,移動になる(ただし,厳密には移動ではなく,コピーしてから削除なので,大きなファイルを移動するときはDropboxから直接動かしたほうが良い).

これでめでたく,複数PCのDesktopを同期することができました.