IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

Preview版のVisual Studio for Mac の削除

下記を参考にしました。

Uninstalling Visual Studio for Mac | Microsoft Docs

How to uninstall Visual Studio for Mac Preview version?

Uninstalling Visual Studio for Mac | Microsoft Docs

自分の場合は下記で削除しました(それぞれの環境で異なると思いますので参考までです。)。

sudo rm -rf /Applications/Visual\ Studio.app
sudo rm -rf /Applications/Xamarin\ Profiler.app
sudo rm -rf /Developer/MonoTouch
sudo rm -rf /Developer/MonoAndroid
sudo rm -rf /Library/Frameworks/Mono.framework
sudo rm -rf /Library/Frameworks/Xamarin.Mac.framework
sudo rm -rf /Library/Frameworks/Xamarin.Interactive.framework
sudo rm -rf /Library/Frameworks/Xamarin.Android.framework
sudo rm -rf /Library/Frameworks/Xamarin.iOS.framework
sudo rm -rf ~/Library/Caches/VisualStudio
sudo rm -rf ~/Library/Caches/com.microsoft.visual-studio
sudo rm -rf ~/Library/Caches/com.xamarin.fontconfig
sudo rm -rf ~/Library/Logs/VisualStudio
sudo rm -rf ~/Library/Preferences/VisualStudio
sudo rm -rf ~/Library/Preferences/Xamarin
sudo rm -rf ~/Library/Preferences/com.microsoft.visual-studio.plist
sudo rm -rf ~/Library/Saved\ Application\ State/com.microsoft.visual-studio.savedState
sudo rm -rf ~/Library/Application\ Support/XamarinStudio-6.0
sudo rm -rf ~/Library/Developer/Xamarin
sudo rm -rf ~/Library/Developer/Xamarin
sudo rm -rf ~/Library/Logs/VisualStudio/
sudo rm -rf ~/.local/share/Xamarin/
sudo rm -rf /private/var/db/receipts/com.xamarin.*
sudo rm -rf /private/var/db/receipts/xamarin.*
sudo rm -rf ~/.local/share/MonoForAndroid
sudo rm -rf ~/.config/.mono
sudo rm -rf ~/Library/Caches/XamarinInstaller/
sudo rm -rf ~/Library/Logs/XamarinInstaller/

私の場合sudo pkgutil --forgetは必要ありませんでした。

Basic認証のユーザIDとパスワードを削除する方法がわからない

Web検索をしても情報が見つからず。。。

  • Safari
    • バージョン 9.0.3 (10601.4.4)
  • 試したこと
    • メニュー -> Safari -> 環境設定 -> パスワード
      • 該当のサイトの情報なし
    • メニュー -> Safari -> 環境設定 -> 自動入寮
      • 該当のサイトの情報なし
    • メニュー -> Safari -> 環境設定 -> プライバシー -> Cookie と Webサイトのデータ -> 該当サイトの情報削除
      • 削除されていない(もとのユーザIDとパスワードが残ったまま)
    • メニュー -> Safari -> 履歴の消去 -> すべての履歴を消去
      • 削除されていない(もとのユーザIDとパスワードが残ったまま)
    • キーチェーンアクセス -> ログイン
      • 該当のサイトの情報なし
  • 回避策

  • Firefox

    • 52.0.1
  • 試したこと
    • メニュー -> Safari -> 環境設定 -> セキュリティ -> 保存されているログイン情報
      • 該当のサイトの情報なし
    • メニュー -> Safari -> 履歴 -> 最近の履歴を消去 -> すべての履歴を消去 -> 今すぐ消去
      • 消えた。

なぜトーラスやメビウスの輪が重要かわかる動画

トポロジーの入門書をみると、必ずトーラスやメビウスの輪が出てきます。しかし、そもそも論として「なぜトーラスやメビウスの輪を考察することが重要か?」ということはほとんど述べられていないと想います。その疑問に答える一つの回答の動画が下記です。 コメントをみると、"the video of the year"と言っている人もいますね。

www.youtube.com

ServantチュートリアルのBasic認証でIO

http://haskell-servant.readthedocs.io/en/stable/tutorial/Authentication.html

チュートリアルだとユーザIDパスワードチェックのコードがハードコードされています。一見、どこでIOできるのかわからなかったので試してみました。

Servant Basic Auth by using IO

ServantのルーティングでのIO

ServanthandlerでのIOの取り回しのサンプルはWebに情報があるのですが、:>で記述していくルーティングでのIOの取り回しがわからず四苦八苦していました。

HasServerという型クラスでルーティングを記述していきますが、このクラス自体にIOが明示的にはない(と思う)ので、ルーティング中にデータベースとかにアクセスしたい場合どうするのかと疑問に思っていました。ソースを読んでも、Delayedという処理を貯めといて最後に処理をする仕組みのため、なかなかコードが読めませんでした。

さらにDelayedのコードを読むとデータコンストラクタ中にDelayedIOがあります。これが、隠蔽化されているようにも思えますが、DelayedIO定義自体は隠蔽化はしていません。DelayedIOという名前にIOがついているので、これを使えばIOができることは推測できるのですが、具体的にどうすればよいかわかりませんでした。

DelayedIOの定義をみると、モナドトランスフォーマーのスタックの最後(最初?)にIOがあるので、これが目標になります。結局、liftしてやればIOができるということでした。

newtype DelayedIO a = DelayedIO { runDelayedIO' :: ReaderT Request (ResourceT (RouteResultT IO)) a }
  deriving ( Functor, Applicative, Monad, MonadIO, MonadReader Request, MonadBase IO, MonadThrow, MonadResource)

DelayedIOを手繰り寄せるには、withRequestが使えます。

Servant.Server.Internal.RoutingApplication

このwithRequestIOを使うコードを下記を参考に追加してみました。lift自体はControl.Monad.BaseliftBaseを使います。

元ネタ

Jacob Errington | Token authentication with Servant

IOを追加したコード

Token Authentication with Servant with IO