[c#] というわけでMarkdown -> Htmlを試してみる
Firefox Lockwise 一括削除 全て削除 アカウント ログイン 情報
タイトルママ
一括削除を試みようと思ったのだが、UIから設定項目を探せなかった。ググったところこんなのが。
How do i remove all passwords on firefox lockwise all at once
削除方法
Firefoxのプロフィールフォルダを開く。Roamingの方です。
(わからない場合はFirefoxのアドレス欄に下記を入力してEnter)
about:profiles
logins.jsonを削除。おわり。
新規作成(おま環かも)
Firefoxの終了、起動を繰り返してもlogins.jsonが作成される気配がなかった。その場合は、ログインとパスワードの画面を開き(右上の三みたいなやつの"ログインとパスワード")、左下の"新しいログイン情報を作成"で、URL/User/Passwordを追加する。するとlogins.jsonが作成されているでしょう。不要ならゴミ箱アイコンをクリックして削除しておくように。
おまけ
上のHow~の記事のTanner Daviesさんの回答が笑える。
[blog][markdown] うーんこの
markdown
慣れるまで、や、使い始めるまでは「なんかめんどくさいんじゃないのー?Web系のウェイウェイが騒いでるだけでさー?」ってイメージだったのだが、今ではメモするにも何するにしてもmarkdownで書いている。特に職場ではVScodeくらいしか自由に使える道具が無いので非常に有用だ。そうなってくるとこの当該クソブログもmarkdownで書きたくなるわけで。
[go] お客様の中にGoを極めた方はいらっしゃいませんかー?
golangでも同じことをやってみた
c#でのcp932で化けてしまう一部キャラクタを変換するやつ。それをgoで書いてみたのだけど……。なんだろ、遅い。正規表現は他言語と同じく遅いようで、RegexpではなくReplacer使えーとかそこらへんは考慮して書いたのだが。stopwatchの精度もスリープで確認したりなんだりで問題なさそう。未使用メソッドがあったり、処理の1,2,3を順にループさせたりするとどんどん遅くなる(なので未使用~についてはコメントアウトしてる)のが謎い。
👺 < 処理が遅い!
4826 // -> goでのこのミリセカンド表記はc#版のほうでいうと
00:00:04.0826 // -> これと同値
最終結果は同じだが、文字化け(マッピングできないキャラ)が来るとそこで試合終了っぽい。
package main
import (
"bufio"
"fmt"
"os"
"strings"
"time"
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/transform"
)
// ループの外でReplacerを持つようにした
var rep *strings.Replacer
func main() {
fmt.Println("start")
// ファイル読み込み
list := getFileData()
/*list2 := make([]string, len(list))
copy(list2, list)
list3 := make([]string, len(list))
copy(list3, list)*/
// 処理
start1 := time.Now()
// ループの外でReplacerを持つようにした
rep = strings.NewReplacer("〜", "~", "−", "-", "¢", "¢", "£", "£", "¬", "¬", "—", "―", "‖", "∥")
for i := 0; i < 1000000; i++ {
replaceUnmappingChars1(list)
}
stop1 := time.Now()
fmt.Println(stop1.Sub(start1).Milliseconds())
// ファイル書き込み
outputFile(list)
fmt.Println("end")
}
// replace unmapping chars3 -> 8293
/*func replaceUnmappingChars3(list []string) {
for i, str := range list {
sl := strings.Split(str, "")
length := len(sl)
var rep string
for j := 0; j < length; j++ {
if sl[j] == "〜" {
rep += "~"
} else if sl[j] == "−" {
rep += "-"
} else if sl[j] == "¢" {
rep += "¢"
} else if sl[j] == "£" {
rep += "£"
} else if sl[j] == "¬" {
rep += "¬"
} else if sl[j] == "—" {
rep += "―"
} else if sl[j] == "‖" {
rep += "∥"
} else {
rep += sl[j]
}
}
list[i] = rep
}
}*/
// replace unmapping chars2 -> 100万回 9946
/*func replaceUnmappingChars2(list []string) {
for i, str := range list {
var rep string
for _, c := range str {
if string(c) == "〜" {
rep += "~"
} else if string(c) == "−" {
rep += "-"
} else if string(c) == "¢" {
rep += "¢"
} else if string(c) == "£" {
rep += "£"
} else if string(c) == "¬" {
rep += "¬"
} else if string(c) == "—" {
rep += "―"
} else if string(c) == "‖" {
rep += "∥"
} else {
rep += string(c)
}
}
list[i] = rep
}
}*/
// replace unmapping chars -> 100万回 4826
func replaceUnmappingChars1(list []string) {
for i, data := range list {
//rep := strings.NewReplacer("〜", "~", "−", "-", "¢", "¢", "£", "£", "¬", "¬", "—", "―", "‖", "∥")
list[i] = rep.Replace(data)
}
}
// GetFileData return list
func getFileData() []string {
// file open
file, err := os.Open("./source.txt")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close() // c#でのusing - disposeみたいな? todo:あとでもっとよく調べる
// file read
var data []string
scanner := bufio.NewScanner(file)
for scanner.Scan() {
data = append(data, scanner.Text())
}
if err := scanner.Err(); err != nil { // どうやったらここに来るんだ?
fmt.Println(err)
os.Exit(1)
}
return data
}
// outputFile
func outputFile(list []string) {
// file create todo:上書きっぽい(あとでよく見る)
file, err := os.Create("./destination_sjis_fix.txt")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close()
// data write
writer := bufio.NewWriter(transform.NewWriter(file, japanese.ShiftJIS.NewEncoder()))
for _, data := range list {
_, err := writer.WriteString(data + "\n") // やっぱり普通はここで変換するよね(c#でも書いたのでこっちにも)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
writer.Flush() // buf(debuggerでみた)の中にWriteStringで溜めてFlushで一気に書くっぽい
}
なんか根本的にミスってるのかなー。わからん。ベンチマークメソッド?みたいなのがあるからそっちでやらないとダメなのかなー。