「Json」を含む日記 RSS

はてなキーワード: Jsonとは

2024-02-03

本日趣味プログラミング

第5回 Rollup のWASM buildを利用できるようにする

自分で書いてて意味が分からない。

第4回の続き。

エラーの指示通り?に次のコマンドでrollup/wasm-nodeのなるものインストールしたハズだが状況が変わらない。

npm i @rollup/wasm-node

切り分けのために、使われないハズの「node_modules/rollup」を削除してみる。

rm -r node_modules/rollup/

もう一回、チュートリアルの指示通りにコマンドを打つとエラーの様子が変わった。

npm run dev
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'rollup' imported from ****

まりインストールしたrollup/wasm-nodeは無視されてるらしい。なんでだ。

色々しらべてpackage.jsonを弄る必要があると気付く。参考にしたやつThanks silvenon

以下の文言を追加

"overrides": {
  "rollup": "npm:@rollup/wasm-node"
}

その後、再度「npm run dev」を実行。エラーの代わり、いくつか処理がされた後「・・・・・Killed」と出る。

もう嫌だ。飽きた。

が、ダメもとでブラウザアクセスするとLaravel Breezeの画面がブラウザで開けるようになっていた。

ただし、レイアウトがぐちゃぐちゃ。Killされた影響だろう。サインアップもできたのでもう良しとする。

2024-01-31

本日趣味プログラミング

第2回 Larabelチュートリアルを参考にログインするだけのWebアプリケーション(?)を作る

第1回で終わらなかったことを褒めて欲しい。

プロジェクト作成

composer create-project laravel/laravel example-app_20240131

index.phpアクセスできることを確認

続いて、Composerを使用してLaravel Breezeインストール

composer require laravel/breeze --dev

breeze:install Artisanコマンドを実行

php artisan breeze:install

いろいろ聞かれる。わからん。とりあえずBlade/Yes/PHPUnitを選択

すると「・・・・installed successfully.」と表示されたので何かが成功したっぽい。

続いて

php artisan migrate

するとエラー

Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] Connection refused 

そもそもデータベースの準備を何もしてなかったので、エラーが出るのは当たり前だった。

サンプル用にデータベース作成し、それに合わせて.envファイル修正する。

再度、

php artisan migrate

すると「DONE」と表示。成功したっぽい

チュートリアルに従い、「ウェブブラウザアプリケーションの/loginか/register URLアクセス」。

すると、Laravelが出してるっぽいエラー

Illuminate \ Foundation \ ViteManifestNotFoundException
PHP 8.1.27
10.43.0
Vite manifest not found at: /******/example-app_20240131/public/build/manifest.json
Run npm run dev in your terminal and refresh the page.

npmとやらが「not found」だったので手順を飛ばしたのがやはりダメだった。

さくらインターネットでnpmを使うにはnode.jsインストールしてnpmをコンパイルする必要がある?

はい、もう無理。飽きたので今日はここまで。

次回があれば「さくらインターネットスタンダードプラン環境にnpmをインストールする」である

早くHello Worldとか書きたい。

anond:20240131143125

そのアプローチは非常に効果的ですね。メイン関数内での処理をシンプルに保つことで、コードの可読性と保守性が向上します。以下にその考え方を反映したサンプルコードを示します。

import json

# ビジネスロジック関数
def business_logic(data):
    # ビジネスロジックの詳細
    pass

# 設定情報ロード
def load_config(config_file):
    with open(config_file, 'r') as f:
        config = json.load(f)
    return config

def main():
    # 設定情報ロード
    config = load_config('config.json')

    # ビジネスロジックの実行
    business_logic(config)

if __name__ == "__main__":
    main()

このコードでは、メイン関数は設定情報ロードし、その情報を元にビジネスロジックを実行するだけです。技術的な詳細は関数内にカプセル化されており、メイン関数はそれらの関数を呼び出すだけです。これにより、コード自然言語を読むような形で読むことができ、技術的詳細は隠蔽されます。また、各関数担当者も明確になります。このような設計は、大規模なプロジェクトやチームでの開発に特に有効です。

[]メイン関数の書き方

メイン関数では主要な処理をざっと実行する。このときに、以下を気をつけると保守性が高くなる。

こうすると、自然言語を読むような形でコードを読めるようになり、技術的詳細は隠蔽するので、担当者をわかりやすく分離することができる。

2024-01-22

ブコメダブスタをチェックするためのスクリプト適当Pythonで書いた

エラーハンドリングは省略。標準ライブラリのみで動く。

import json
import urllib.request


# True にするとユーザー名を隠す
hide_user = False
# 以下を書き換える。sys.argv 使ってもいいんだけど
url1 = "https://www.cygames.co.jp/news/id-23172/"
url2 = "https://mtg60.com/archives/palworlddoujinsi.html"


def get_bookmarks(url: str):
    req = urllib.request.Request(f"https://b.hatena.ne.jp/entry/json/{url}")
    with urllib.request.urlopen(req) as res:
        dict = json.loads(res.read())

    user_comments = {}

    for bookmark in dict["bookmarks"]:
        if bookmark["comment"]:
            user_comments[bookmark["user"]] = bookmark["comment"]

    return user_comments


b1 = get_bookmarks(url1)
b2 = get_bookmarks(url2)

common = set(b1.keys()).intersection(b2.keys())

print(f"[1] {url1}")
print(f"[2] {url2}")
print()

for user in sorted(common):
    if hide_user:
        print(user[0] + "*" * (len(user) - 1))
    else:
        print(user)
    print(f"[1] {b1[user]}")
    print(f"[2] {b2[user]}")
    print()

[] phpコードベースを綺麗に保つ

php場合、<?php 処理 という具合に書くが、この中身にはhtmljavascript包含することができてしま

MVCフレームワークを使わないにしろ基本的にビューとバックエンド処理は分割しておくべき。

さらDB処理、ビジネスロジックプログラム処理と言ったものがあるが、

DB処理はdbhandler専用のモジュールに分けておき、さらにそのモジュールを処理するテーブルごとに分けておいた方が良い(MVCではモデルと言う)

特にビジネスロジックプログラム処理の区別だが、「商品名アダルト商品と思わしき文字列があった場合登録拒否する」という例外は「ビジネス例外であるのに対し、「商品名文字列DBで用意されたvarcharの可変文字範囲を超えた」という例外は「技術例外であるということを明確に区別するようにコードを書く。

おすすめ機能」のような凝ったアルゴリズム必要場合はそれ専用のクラスへ分離しておくこと。

あと外部化可能な設定情報jsonで分離するようにしておいた方が良い。

2024-01-16

都道府県コードってのはまあ、普通に JIS X 0401 で定められてて

普通に公開されてるんで、普通に簡単調査することができる。

そんでこれの JSON形式が欲しい場合は、ちょっと前までなら

まぁこれくらいなら手動で頑張るかーとか、スクリプトを書き捨てる感じだったんだが。

今や、Bing先生にお願いしたらやってくれるんだもん。

いい時代になったわ。

2023-12-17

anond:20231216154938

コードの重複があるわけでもない状況で、コード関数ごとに分離するメリットデメリットを知りたいという話ですよね。

コードの重複がある場合関数などに切り分けていないと、同じコードを何度も書くことになり、不具合があった時にコピーされたすべての個所に変更が必要となるというデメリットがあるので理由がわかりやすいですが、重複が無いとその点が不明確ですね。

画面に収まらないサイズコード複数関数に分割するのが一般的だとは思います

理由元増田も書かれている通り、長いと理解の限度を超えるからです。

コード意味があるまとまりで短ければ短いほど理解がしやすいと思います

グローバル変数を使わないようにすると、入力・出力が関数を読むだけで明確にわかるので、さら理解がしやすいです。

また、関数に分けておけば、関数仕様通りに動くかの確認するユニットテスト簡単に書けます

ユニットテストでは関数さらにほかの関数を呼び出している場合、呼び出される関数の代わりにテストダブルを用意することもあります

分割して、複数関数を呼び出すようにすることのデメリットは、

下手糞が切り分けるとなんでそういう切り分けになったかからないところで切り分けられてかえって可読性が損なわれるとか、

関数機能拡張してより多く・あるいは少なくの情報必要な時に関数インタフェースの変更が必要になることとか、

関数を置いているファイル内の場所を変えたときバージョン管理システムが追っかけてくれないことがあるとか

くらいでしょうか。

いずれにせよ、分割するメリットの方がデメリットを上回ることが大半なので、大抵は機能ごとに分割して小さい関数を作り、それをメインからは呼ぶようにすると思います

以下、お悩みポイントに答えます

一番はメイン/サブ関数間で右往左往するので今やってる工程が何なのかがよくわからん

まず、関数名前をやっている工程を表すものにすることですね。

データの取り込み」 とか 「データ突合せ」とかを明示すると、それを呼んでいるということはそういうことをしてくれると思うので。

また、関数が何をしてくれるのかも関数コメントとしてつけておくとよいと思います

例えば、

filename引数指定されたファイルからデータを取り込み、JSONフォーマットで返す

引数: filename

返値: JSONフォーマットされた取り込まれデータ。例: [{'employee name': '山田 太郎', 'employee id': 1}]

例外: filenameを開けない場合はFileOpenError、JSONコンバートできなかった場合はConvertError

みたいなコメントをつけておくと何をする関数なのかわかるので、その機能を調べたいとき以外は読まないでいいかなと。

あと、コード連続で読みたい場合ソースを解析してタグジャンプをつけてくれるツールやらIDEやらを使うことが普通だと思います

あとは関数ごとに変数をいちいち定義し直すのがだるいみたいなのもありますね。

これはどういう意味でしょうか?同じものを表すのに関数ごとに別の変数名を付けているとか?

もしそうだとしたら、使っているプログラミング言語の制約やプログラミング規約によるものなのでしょうか?

ある関数ローカル変数が他の関数ローカル変数に影響を与えることは無いはずなので、ローカル変数は大抵適当名前が付けられるイメージです。

今時のプログラミング言語なら変数スコープ関数の中にとどまるような書き方ができると思うのですが。

関数インタフェース定義し、そこにいちいち引数を書くのが面倒というなら...まあ、それは必要税って感じがします。

そこに引数を書いておくことでこの関数が何に影響されるのかわかるので。

参考までに。

2023-11-29

過去イチでヤバイPJを引き継いだ

弊社のビジネス創造部門的なところが作ったPJがあるんだが

どうもゴリゴリ炎上してるらしくて支援に入った

こういう仕事は割とあるんだがなかなかのヤバさだったので紹介したい

ちなみにサービスの内容は非常に良くてユーザーも万単位で付いているらしい

からこそ炎上している

バックエンド環境

バックエンドAWS EC2動作しているがログインアカウント共通化されていてパスワードを全員で共有している

ユーザーを追加しようとしたら「そのような勝手行為セキュリティ許可されていません」とのこと

本番環境とStagingはインスタンスが分かれているが運用は同じ方法

Staging上で5人ぐらいが作業しているが、ホームの下にそれぞれのユーザー自分名前ディレクトリを作って作業している

バックエンドシステム

バックエンド側のシステムは詳細は伏せるが、某システムで動いている

仮にNode.js系だとすると、package.jsonがあってnpm run installでインストールするのだが、普通にインストールしようとするとエラーになる

内容は依存関係で失敗しているのだが、本番も同じソース動作している

動作させるにはnode_modulesをまるっとコピーして、とのこと

さっきの自分名前ディレクトリ配下コピーしてきて、適当ポート番号でサーバを立ち上げれば一応は動く

このため、新しいモジュールを入れようとすると依存関係で失敗するため、便利なモジュールがあってもインストールできないし

セキュリティアップデートも当てることはできない(現にバージョンがすごく古い)

バックエンドシステム内容

ソースコードGitHub管理されているがセーブポイント感覚でcommitされているのでコミットログを見ても何が起きているのかさっぱり分からない

おまけにPRも使わずmainマージしまくっていてわけがからない

加えてソースコードコメントアウトの嵐でどこに何が書いてあるのかさっぱりわからない

データベースPostgreSQLだが山ほどテーブルがあるのに外部キー依存は入っていないしVIEWも作られていない

まぁ、他にもテーブルを見ていくとアンチパターンオンパレードで、EAV、ジェイウォークあたりは確認できたしHTMLSQLが格納されているテーブルも見つけた

ソース上でクエリを作ってAPIを作っているが、ザッと見ただけでもインジェクションし放題の状態になっていた

フロントエンドシステム

フロントエンドも詳細は伏せるが、いわゆるReact的なものを利用している

こちらは npm run installでインストールできるし npm run devでちゃんと動く

ローカル動作するので非常に助かる

ただ前述の通りバックエンドローカルで構築できないのでEC2を利用するしかなく、CORS対応のためのプロキシを自前で用意する必要があった

フロントエンドソースコード

バックエンド同様にGitHub管理されているが、管理しているだけ

バックエンドは5人ぐらいが利用しているが、ソースコード編集するのは実質1人なのでコンフリクトほとんど起こさないらしいが

フロントエンドは5人ぐらいが編集するのでコンフリクトしまくっている

解消するときデグレすることが日常茶飯事でその都度Hotfixしている

コードコメントアウトだらけなのに加えて、不必要コードが大量にあるので可読性が著しく低い

(難しい処理を読み解いて追いかけていったら最終的に使われていない、などが大量にある)

2000行ぐらいあるコードとかChatGPTに突っ込んだら20行ぐらいになる予感がある

また、DBがご覧の状態なので取得されるデータ全然抽象化できておらず、コードが膨れ上がっている

例えばProductの一覧データサーバから取得して、ユーザークリックしたProductをCartに投入するのだが、投入する情報Productではなく、CartItemにする必要があるし

OrderするときはOrderItemにしてAPIを叩く必要がある

ほとんど同じ情報なのだ微妙に変わっていたりKey名が違っていたりするのでそれぞれ変換する

他にも数え上げればキリがないが、コピペして少しだけ改変している部分などが大量にあってバグがあるのかどうかすら判別できない

セキュリティ課題

DBHTMLSQLが入っていると言ったが、調べて見るとDBから取得したHTMLをそのまま埋め込んで表示していたりした

SQLについてはフロントエンド側でSQL生成しており、そのテキストAPIに送り込んでサーバ側で実行して貰った上で格納とかしていたので

「ここにDROP TABLEとか書けばTABLE消えるんですか?」

と聞くと

「そんなことする開発者はクビだなwww

とか言われたのでことの重大さを伝えたが、まだ対処できていないようだった

認証等はOAuth2を使っていたので大丈夫そうだったが、本当に大丈夫かどうかは自信がもてない

今後の期待

システム内容はゴミのような状態だがサービス的には良いので、幹部プロダクトオーナーからは追加要望が山盛り来ている

開発チームが「稼働が足りない」という理由で断ったので「じゃぁ支援して」ということで自分のところに来たのだが

申し訳ないが、そもそもそういうレベルに無いし、全て作り直しが必要

と伝えてもどうやら伝わっていない様子

ちなみに元々の開発チームは過去にもこんな感じでサービス作ってたらしいが売れないので問題になってなかった様子

ぱっと見は動いているように見えるのが厄介なところ

正直逃げたいところではある

2023-09-18

CSSフレームワーク公式サンプルを拾ってきてDBから出力したJSON当て込むだけならそりゃ簡単

クソミソに面倒臭くなるのはデザイナークライアントのせい

anond:20230918154228

フロントエンジニアってDBから出力されたJSON変換して画面にするだけのお仕事って聞いたやで

2023-09-10

JSONPythonしか扱えないと思ってるバカ

ます人工知能開発をやめろ。

2023-07-30

Python普遍的言語になった。

いやぁ、長かったですね。Python業界デファクトスタンダードになり、シェル言語システム記述言語となる可能性が潰えて久しくなるまでが。具体的にいうと Ansible のようなクラウドの構築はTerraformになったし、Linuxブートには systemd が後継となったいま、PythonRuby と同じく「Perl のような何か」に落ちてしまった。唯一無二の人工知能の為の言語としても、高度化した人工知能の開発で新規参入者にとってはハードルが高く、API操作するぐらいだったら JavaScriptJSONコネコネする API操作するほうが賢い時代となってしまったのだ。よって Python新規採用する絶対的メリットは消えてしまった。これで「Pythonを使えます」という奴に見下される必要はなくなったのだ。これで、ここ数年間も続いた「Pythonを使えるのを凄いと勘違いしている間抜け、または人工知能の開発で Python必須なのとかぬかす馬鹿、それに Python を使えば他言語を学ぶ必要はないというキチガイ」を排除できるようになった。だってPython は数多の言語のようにチューリング完全を満たした言語の一つになったのたから。これを普遍的と言わずになんていうのだろうか。

2023-07-18

気象庁バグがずっと放置されてる

この時期になるとずっと気象庁の気温ランキングを眺めて「今日暑いなー」って見てるんだが

https://www.data.jma.go.jp/obd/stats/data/mdrr/rank_daily/data00.html

このページの「観測値」が昔からずっとバグっててめっちゃ気になってる

「35.9 ]」っていう感じで、「]」が入ってる

もうバグの原因はほぼほぼ目に見えてて、ここはJSONで「 [ 34.0, 34.5, 35.0, 35.9 ]」っていう値が入ってて

それをJSON.parseするんじゃなくてsplit()とか使ってしかもlength-1とかで最新値を取ってる

なので後ろの括弧がそのまま入ってしまってる

こんなのめちゃくちゃわかりやすバグだし、多分気象庁側も把握してるんだろうけど

多分発注しないとダメとかテスト必要だとかでずっと放置されてる

めっちゃ気になるのにずーーーーーっとこのままなのが凄くダサい

何がダサいってこういうのをアジャイルに直すことができない日本ソフトウェアに対する態度がすげーダサい

2023-06-30

フロントエンドが嫌いなの

つまんなくねえ?だからjson色付けなんちゃらっていわれるんだ

2023-05-21

世間一般的に読みにくいコードというと、コメントついてないとか

コーディング規約がどうとか言う話がよく出てくるけど、

本当に読みにくいのは名前が狂っているコード

インデントが狂ってるコードだと思う。

インデント説明することないから置いておくとして、

名前が狂ってるというのは、

JSONParserとか言いながらJSON関係していないクラスとか、

getUserみたいなメソッド名なのに引数としてuserを渡すとかそういうやつ。

JSONParserクラス名前を付けた奴は、中のコードからすると、

どうもネストした連想配列のことをJSONだと思っていたらしい。

ネストした連想配列から個別の値を取得するのがJSONParserだった。

JSONはそういうのじゃなくてデータを表す文字列から

文字列を受け取って、ネストした連想配列を返すparserメソッド

あるクラスであればJSONParserという名前で合っている。

getUseruserIdフィールドだけ値を設定したUserインスタンス

引数に渡して他の値を設定するメソッドだった。

getとか言いながらsetすんなよ。

書いた奴は、データベースから値を取得するのをgetだと思っていたのだろう。

この類の名前で嘘をつくクラスとかメソッドが多々あると強烈に読みにくい。

2023-04-05

あーFirefox最悪

拡張機能止めたらコンテナータブの設定が消えやがった

コンテナータブに依存するから依存する拡張機能有効ならコンテナータブが強制有効になるのはわかる

でも依存する全部の拡張機能を止めたらコンテナータブが無効になるってわけわからん

デフォルト機能として使ってるんですが??????

んで再度有効化したら設定がデフォルトに戻って手動追加したコンテナーも消えてるの本気で意味わからん

どうして強制上書きするんですか??????????設定にリセットボタンもつけとけ

あれやこれやのログイン情報全部消えたんですが???????????????????????????

しょうがいから思い出してコンテナー追加したけどこれ並び替えも出来ないのな

前と順番変わっててすこぶる気持ち悪い

Multi-Account Containersの拡張を使ってたらこいつを無効にしたら設定リセットになるのは百歩譲って…いや一時無効にしただけでjsonファイルデフォルト化って意味不明だけど億歩譲って我慢するわ

でもお前、標準機能だろ?お前を使うかどうかはabout:configで俺が決めさせてくれよ

なに他人拡張機能状態勝手にいじられてるんだよ

お前のその挙動で誰が幸せになるんだよ

せめてどこかに注意書き書いとけよ

書いてた?俺が悪かったその場所教えてくれ。光速ブクマするわ。さっさと出せよ。

もしかして俺の勘違いで別の操作が影響してる???謝罪するから原因を教えてくれよ通知もないか妄想で怒るしかねーんだよこっちは

もうマジで意味不明だわ最近Android版でtampermonkey復活したかちょっと株上がったと思ったらこれだよ。多分何年も放置されてる仕様だろこれマジこんなうっかり地雷しこまれると体験なうんだが

設定消えるなら警告のひとつでもだしてくれ

あとついでにグチるとCookie許可設定を変更できるようにしてくれ

なんで一度消して同じURLを再登録しないと変更できないんだよ

しかも設定画面でURLコピペできないのコイツ

URL覚えて手打ちして消して再登録しないと変更できないの

マジで死んでる終わってる何考えてるのか意味不明

リソース少ないにしても一体何に費やしてるのかまったくわからん

とりあえず年一だったけど寄付はやめるわ実害がデカすぎた

このまま加点なく減点が続くならVivaldiメインにすっから

2023-02-19

anond:20230219224030

単語表示するのはwebページ? スタンドアロンアプリ

webページを作ってスマホとかからアクセスして使うのならnode.js+express(フレームワーク)をrepl.itGlitch上に作る

スタンドアロンなら言語は問わないのでWebAPIのリクエストを投げられてJSONの読み出しができればよい WindowsならPowershellでできる

2023-02-01

anond:20230131183629

ブコメでも指摘されてるけども。

ある時を境にスターの集計先になる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年以前から今まで現役)①と②の結果を合算する

2023-01-31

なんだよブクマカの被スター数はAPIで一発じゃんかよ

これで出る。(出ない人もいる?)

ttps://s.hatena.ne.jp/blog.json?uri=http://b.hatena.ne.jp/はてなID/

はてなスターカウントAPIドキュメントブクマカの被スター数が取れるなんて書いてない。

裏技YO.

しかし私が欲するのは誰が誰にいくつスターを付けたかってことなので求めてるものとはちょっと違う。

ログイン ユーザー登録
ようこそ ゲスト さん