はてなキーワード: JSONとは
世間一般的に読みにくいコードというと、コメントついてないとか
名前が狂ってるというのは、
JSONParserとか言いながらJSONが関係していないクラスとか、
getUserみたいなメソッド名なのに引数としてuserを渡すとかそういうやつ。
JSONParserクラスの名前を付けた奴は、中のコードからすると、
どうもネストした連想配列のことをJSONだと思っていたらしい。
ネストした連想配列から個別の値を取得するのがJSONParserだった。
文字列を受け取って、ネストした連想配列を返すparserメソッドが
あるクラスであればJSONParserという名前で合っている。
getUserはuserIdフィールドだけ値を設定したUserインスタンスを
コンテナータブに依存するから依存する拡張機能が有効ならコンテナータブが強制有効になるのはわかる
でも依存する全部の拡張機能を止めたらコンテナータブが無効になるってわけわからん
んで再度有効化したら設定がデフォルトに戻って手動追加したコンテナーも消えてるの本気で意味わからん
どうして強制上書きするんですか??????????設定にリセットボタンでもつけとけ
あれやこれやのログイン情報全部消えたんですが????????????????????????????
しょうがないから思い出してコンテナー追加したけどこれ並び替えも出来ないのな
前と順番変わっててすこぶる気持ち悪い
Multi-Account Containersの拡張を使ってたらこいつを無効にしたら設定リセットになるのは百歩譲って…いや一時無効にしただけでjsonファイルをデフォルト化って意味不明だけど億歩譲って我慢するわ
でもお前、標準機能だろ?お前を使うかどうかはabout:configで俺が決めさせてくれよ
せめてどこかに注意書き書いとけよ
書いてた?俺が悪かったその場所教えてくれ。光速でブクマするわ。さっさと出せよ。
もしかして俺の勘違いで別の操作が影響してる????謝罪するから原因を教えてくれよ通知もないから妄想で怒るしかねーんだよこっちは
もうマジで意味不明だわ最近Android版でtampermonkey復活したからちょっと株上がったと思ったらこれだよ。多分何年も放置されてる仕様だろこれマジこんなうっかり地雷しこまれると体験損なうんだが
設定消えるなら警告のひとつでもだしてくれ
あとついでにグチるとCookieの許可設定を変更できるようにしてくれ
なんで一度消して同じURLを再登録しないと変更できないんだよ
ブコメでも指摘されてるけども。
ある時を境にスターの集計先になるURLが切り替わっているので、すべてのスター数を知るためには2回APIを投げる必要がありそうだ。
たぶんはてブがHTTPS化された2019年5月あたりが境目だろう
https://bookmark.hatenastaff.com/entry/2019/05/28/141208
自分のはてなIDと昔使ってたIDで試した限りではこうなっているはず。
①ttps://s.hatena.ne.jp/blog.json?uri=http://b.hatena.ne.jp/はてなID/
②ttps://s.hatena.ne.jp/blog.json?uri=https://b.hatena.ne.jp/はてなID/
2019年5月以降に作ったアカウント | ②の結果しか返らない。①を投げると403エラー |
2019年5月以前で消えたアカウント | ①の結果しか返らない。②を投げると403エラー |
それ以外(2019年以前から今まで現役) | ①と②の結果を合算する |
githubっていつのまに、ちょい古めのブラウザだとassetsの所がグルグル回ったまま、クリックしても開かないようになったんだ。
ちなみに、ちゃんと開けるブラウザを使ってだ、HTMLの検証できるサイトに行ってそのページのソースを貼り付けたらば、やっぱ古いブラウザと同じ結果になる。
ほんまにいらんことしよってからに!
ダウンロードするには、ターミナルでcurl -v https://api.github.com/repos/[目的の場所 公開してる人のアカウント名(owner)/プロジェクト(repo) ]/releases/assets
ってやるとずらっと表示される中に"browser_download_url" とあって、ブラウザでダウンロードできるURLが表示される。
releasesの右に/tag/が入ってるページの絞り込みはreleasesの横に入れればいいのかと思ったが、ちょっと分からなかった。
*ターミナルを使わなくてもcurl -v を省いて、"https://api.github.com/repos/"から"/releases"までをブラウザのURL欄に入れたら同じ内容が階層にまとまった状態で表示されるのに気づいた(三角をクリックしたら開く)
そしてグレーで「jsonを検索」って所にラベル名なんかを入れると絞り込んでくれる。
なんだこれ凄く便利じゃないか!
コンピューターサイエンスや競技プログラミングに懐疑的な人たちは決まってソートのアルゴリズムがどうとか言う傾向にあるけど、たしかに増田の言う通り、ソートなんて自力実装するような時代ではないからその辺は無視してもらって構わないとは思う。
でもソートについて「ソートだけをして終わり」なんて実装をすることはなくて他の処理と組み合わせて存在しているものじゃない?
たとえば「配列をソートしてからサーチする」「ソートしていない配列に対して都度サーチする」「配列をハッシュマップに変換してからサーチする」要求に対してどれが効率的かみたいな判断は要る場面はあるでしょう。
「今書いているコードが呼び出す機能の一つ一つがどういうふうに書かれているかがわかったとして、一体何が嬉しいんだ?」
たとえば配列に対する.find() 的な関数があると思うが、これは「配列を先頭から順にチェックして、指定のものを見つける」ような実装であることが多い。内部的には配列長に比例する時間がかかるループが書かれている、O(N)の関数。
これを自分が実装するコードのループ内で使うと、自分が書いたコード自体は一重のループにしか見えないが、実は二重ループになっているということがあり得る。
その処理がやけに遅いと思ったとき、「find()は標準の関数だから無罪!中身を見る必要なし!」って感じでスルーしてたらコードの全体像は永遠に見えないことになる。
とはいえ、勉強したくないものを無理に勉強する必要もないとは思うよ。
サンプルで実装してあげたものの一部改変などをしてもらうぶんには知識もスキルもいらないだろうし。
https://gigazine.net/news/20210302-hacker-reduces-gta-online-load-times/
JSONをパースする処理や、配列から重複を探す処理など、増田が言う通りラップされたものを使うだけでできることではあるけど、求められる出力を満たせる部品をただ並べただけではこういうダサいことが起こりうる事は知っていてほしい。
YouTuberを始めるにあたって昨日今日と環境構築をしている。
動画のジャンルは内緒として、ひたすら効率良く動画を作ることを志向してる。理想は新規のMarkdownファイルがGitHubのmainブランチにマージされたら自動でYouTubeの自分のチャンネルに動画が投稿される、みたいな状態。
まあそこまでやるのは調べるの大変だし事故とかbanが怖いしまずYouTuberとして大成しないことにはって話なので、どっかで妥協すると思う。てかCI/CD周りちゃんと仕事でやっとけばよかったな。
テキスト読み上げで商用利用するなら今はVOICEVOXが良いのかなと感じた。
ただ、作成した音声に合わせた字幕ファイルを作るのがひたすら面倒くさい。絶対自動出力できそうなのに。
VOICEVOXから直で出してくれたら楽だったんだけど、リップシンク用のファイル出力しか対応してなかった(どっかでやってる人がいるかもしれない)。
VOICEVOX公式のGitHubでissue上げることも考えたけど、俺自身がまだ動画一つも上げてないし、字幕ファイルの需要がどれほどのものかも分からないので、とりあえず変換用のスクリプトを自分で書いてみた。
VOICEVOXのプロジェクトファイルであるvvprojファイルの中身はバイナリではなくただのJSONなので、エディタやエンジンのソースコードを弄らなくても、比較的簡単に字幕ファイルに変換できる。なお今回俺はDenoを使った。
こういうシェルスクリプトみたいな小さい仕事やるのにDenoはまじで楽。
あとは動画作るときに需要ありそうだなと感じたら、SubViewer以外のマークアップに対応させてissue上げるなり俺のrepoに置いとくなりしようかな。
割りとマジだよねと思う出来事をふと思い出したので書いてみる。
といっても後輩が俺の思ってもいないところでつまづいて、それに俺がカルチャーショックを受けたというだけの話。
問題の話なんだけど、とある有名サービスのJSON APIを叩いて呼び出し結果を手元のオブジェクトにマッピングするというただそれだけのコードを書くというもの。
普通に考えて一日もしないで出来ると思うような代物だけど、三日以上悩んで彼はそれでも出来なかった。
{ ..., "count": 10000000000000000000000000000000000000, ...}
という感じで多倍長整数がリテラルとして書かれているのを前提として受け取る仕様だった。
JavaScriptの通常の整数と違って、JSONの整数リテラルは仕様上大きさの制限の記載がないので、上のようなのも合法。
で、彼の使ってたプログラミング言語のオブジェクト から JSONの変換ライブラリが、多倍長整数を文字列("")としてシリアライズするような仕様なことがわかって、彼は行き詰まった。
そこで何をやり始めたかというと、JSONの整数がそのまま1000000000000000みたいにシリアライズされるライブラリ探し始めたんだけど、それは見つからないまま。
というわけで「増田さん、詰まってるんですけど……」と言われて助け舟出すことになったはいいものの、彼のコード見るとJSONの抽象構文木クラスがそのまま使えるようだった。
なので、
String serialiaze(Ast.JsValue value) { return switch(value) { case Ast.JsNull nullValue-> "null"; case Ast.JsInt bigIntValue -> bigIntValue.toString(); case Ast.JsArray arrayValue -> arrayValue.stream().map(v -> serialize(v)).collect(Collectors.joining(", ", "[", "]")); // 他のJSONの木についても同様に処理 default -> throw new RuntimeException("cannot reach") }; }
1時間しない内にこんな感じのコード(言語はJavaじゃなかったけど、だいたいこういう感じ)を書いて無事問題解決。細かいタイポとかあるかもだけど、日記では確認してないのでそれはおいといて)。
結局、JSONの形が期待と違って、しかも既存のAPIじゃいいのがなかったのに延々API探すことしか出来なかったのが問題解決できなかった原因だけど、このくらいのは割りとちょこちょこある。
きっと、それから一週間放置しても問題解決できなかっただろうし、どうも同じチームの同僚も問題を解決できなかったようだった。
最近、APIは叩けるけど、そこでトラブルとどうにもならなくエンジニアにちょくちょく遭遇するんだけど、やっぱりもうちょっと基礎出来てないと駄目だなと思った出来事だった。
CoreKeeper側で apt に依存しているっぽいので、Ubuntu でやった方が楽だと思います。
Ubuntu 20 TLS でやる場合、/home/steam/Steam/ が /home/steam/.steam/ になってたと思うので、環境に合わせて読み替えてください。
dpkg --add-architecture i386 add-apt-repository multiverse apt-get update apt-get dist-upgrade reboot
useradd -m steam passwd steam gpasswd -a steam sudo
sudo -u steam -s cd sudo apt install steamcmd ln -s /usr/games/steamcmd steamcmd ./steamcmd +login anonymous +app_update 1007 +app_update 1963720 +quit
cd ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/ ./_launch.sh
Press Ctrl + C for Stop Core Keeper Dedicated Server
mkmir -p -m 775 /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds chown steam:steam /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds
Copy old world file (0.world.gzip) to
/home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds
Copy old setting file (*.json) to
/home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/
chmod 664 /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds/0.world.gzip chmod 664 /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/*.json
vi /etc/cron.hourly/corekeeper_backup #!/bin/bash cp -a /home/steam/.config/unity3d/Pugstorm/Core\ Keeper/DedicatedServer/worlds/0.world.gzip /home/steam/worldbackup/0.world.gzip.`date '+%Y%m%d%H%M%S'` cp -a /home/steam/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/CoreKeeperServerLog.txt /home/steam/worldbackup/CoreKeeperServerLog.txt.`date '+%Y%m%d%H%M%S'` chmod 777 /etc/cron.hourly/corekeeper_backup sudo -u steam -s cd mkdir worldbackup
sudo -u steam -s cd ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/ nohup ./_launch.sh tail -f ~/Steam/steamapps/common/Core\ Keeper\ Dedicated\ Server/CoreKeeperServerLog.txt
利用者の問題か、サーバーの問題かわかりませんが人数が10人超えると CPU4コア/メモリ4G/100Mbps で結構ラグかったです。
今は CPU6コア/メモリ8G/1000Mbps で動かしています。
6-8人以上で2-3時間サーバー動かしてると、Unityのライブラリがsegfault起こして、Core Keeper Dedicated Server が落ちます。
ログ取れたのでバグレポしましたが、改善するまでは不特定多数が好き勝手するサーバーみたいなのを長期運用するのは厳しいかなと思います。タイミングによってはアイテムロストしてしまうので。