Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録

「シグネチャ」を含む日記RSS

はてなキーワード:シグネチャとは

2025-10-09

関数引数が多すぎるという理由Configクラスを作るのはアンチパターンなの?

いいえ、関数引数が多すぎる(「Too Many Arguments」)問題解決策としてConfigクラス(またはパラメータオブジェクト)を使用すること自体は、一般的アンチパターンとは見なされていません。

しろ、多くの場合で推奨されるプラクティスです。

Configクラスが推奨される理由

関数引数が多すぎる状態は「コード臭い(Code Smell)」の一つとされており、Configクラスなどの単一オブジェクト引数をまとめることは、その問題を軽減するための一般的解決策です。

メリット説明
可読性の向上 長い引数リストコードを読みにくくしますが、関連する引数を一つのオブジェクトにまとめることで、関数シグネチャ定義)が簡潔になり、何を受け取っているのかが明確になります
引数の順序間違いの防止位置引数が多いと、呼び出し側で引数の順番を間違えるリスクが高まりますオブジェクトとして渡せば、プロパティ名でアクセスするため、この種のエラーを防げます
変更容易性の向上 新しい引数必要になった場合関数シグネチャを直接変更する代わりに、Configクラスに新しいプロパティを追加するだけで済みます。これにより、関数の呼び出し元すべてを変更する必要がなくなり、マージの競合も減らせます
引数グループ化・関連付け論理的に関連する引数(例:`name`, `lastname`, `city`, `country` → `Address`オブジェクト)をまとめることで、その意図コンテキストが明確になります

このような引数をまとめるためのオブジェクトは、Data TransferObject (DTO) やParameterObjectとも呼ばれます

潜在的アンチパターンになるケース(注意点)

Configクラス自体問題なのではなく、そのクラス使用方法や、そもそも引数が多いという事実がより深い設計上の問題を示している場合があります

1. 「やりすぎているクラス」の兆候

引数が多い関数は、しばしば単一責任原則(Single Responsibility Principle / SRP)に違反している大きなクラス(Large Class)や長いメソッド(Long Method)の兆候であることがあります

Configクラスを作っても、根本的な問題解決しない:引数クラスにまとめただけで、関数クラスが多くの異なる責任を持ちすぎているという根本的な問題解決しません。

対処法: この場合Configクラス作成する前に、関数が実行している処理をより小さな責任を持つ複数関数クラスに分割することを検討すべきです。

2.Configクラスが膨大すぎる

Configクラス自体が、もはや数十のフィールドを持つ巨大な「すべてを持つクラス」になってしまっている場合、それは設計上の問題です。

対処法: その巨大なConfigクラスフィールドを、論理的なサブグループ(例: `DatabaseConfig`, `NetworkConfig`, `LoggingConfig`など)に分割することを検討します。

3. 不必要な複雑さの追加

引数が数個(例: 2~3個)しかない関数に対して、引数をまとめるためだけにConfigクラス作成すると、不必要オーバーヘッドと複雑さが増すだけで、メリットが薄い場合があります

対処法:Configクラス使用は、引数の数が多すぎて(一般的に5個以上が目安とされることが多い)管理が難しくなった場合限定するのが賢明です。

まとめ

結論として、関数引数が多すぎる問題Configクラス解決するのは、有効設計パターンです。

ただし、その解決策を適用する前に、「なぜこの関数はこんなに多くの情報必要なのか?」と自問し、それがより大きな設計上の問題(SRP違反など)の単なる症状ではないか確認することが、クリーンコードを書く上で最も重要です。

Permalink |記事への反応(0) | 06:48

このエントリーをはてなブックマークに追加ツイートシェア

2025-09-10

anond:20250910190931

アイデアロールよりこのPGPシグネチャとか言うののほうがよく分からん文字だろ

Permalink |記事への反応(1) | 19:19

このエントリーをはてなブックマークに追加ツイートシェア

2025-08-18

文撫文撫と 夜も寝られず

睡眠欲求ミトコンドリア機能と好気性代謝に深く関連していることが示唆されています [1-3]。

主要な発見結論は以下の通りです。

**睡眠喪失による脳内分子変化の特定**:

*研究者たちは、**休息状態睡眠不足状態ハエの脳から単一細胞トランスクリプトームを解析**しました [1, 4]。

* その結果、睡眠誘導・維持する役割を持つ**背側扇状体投射ニューロン(dFBNs)**において、睡眠不足後に発現が上昇する転写産物ほとんどが、**ミトコンドリア呼吸とATP合成に関わるタンパク質をコードしている**ことが明らかになりました [1, 5]。

*対照的に、シナプス集合やシナプス小胞放出に関わる遺伝子産物選択的にダウンレギュレーションされていました [5]。

* このトランスクリプトームの「睡眠喪失シグネチャー」はdFBNsに特有のものであり、他の脳細胞集団では検出されませんでした [5]。

**ミトコンドリア形態変化と電子過剰**:

*睡眠不足は、dFBNsのミトコンドリアの**断片化サイズ・伸長・分岐の減少**を引き起こしました [1, 6]。

* また、ミトコンドリアの分裂を促進するDrp1が細胞からミトコンドリア表面に移動し、**ミトファジー機能不全のミトコンドリアの除去)と小胞体との接触部位が増加**しました [1, 6-8]。これらの形態変化は、回復睡眠後に可逆的であることが示されています [1, 7]。

* **目覚めている間、dFBNsではATP濃度が高くなる**ことが示されました [2]。これは、神経活動抑制されATP消費が減少するためと考えられます [1, 2]。

* 高いATP濃度は、ミトコンドリア電子伝達鎖における**電子過剰**を引き起こし、**活性酸素種(ROS)の生成を増加**させます [1, 2, 9]。このROS生成がミトコンドリア断片化の引き金になると考えられています [10]。

*CoQプールからの**余分な電子排出経路を設ける(AOXの発現)ことで、基本的睡眠欲求が軽減**されました [1,10,11]。また、ミトコンドリアATP需要を増加させる(脱共役タンパク質Ucp4AまたはUcp4Cを過剰発現させる)ことで、**睡眠が減少**しました [11]。逆に、電子ではなく光子ATP合成を促進すると、dFBNsにおけるNADH由来の電子冗長となり、**睡眠が促進**されました [1,11]。

**ミトコンドリアダイナミクス睡眠に与える影響**:

* dFBNsのミトコンドリアを**断片化させる**(Drp1の過剰発現やOpa1のRNAiによる減少)と、**睡眠時間が減少し、睡眠剥奪後のホメオスタティックな回復抑制**されました [1,12-14]。同時に、dFBNsのATP濃度は低下し、神経興奮性も低下しました [1, 14, 15]。

*ミトコンドリアの**融合を促進する**(Drp1のノックダウンやOpa1とMarfの過剰発現)と、**基礎睡眠および回復睡眠が増加**し、覚醒閾値が上昇しました [1,12-14]。これによりdFBNsの神経興奮性が高まり睡眠を誘発するバースト発火が増加しました [1, 14]。

*ミトコンドリアの融合には、カルジオリピンから生成される**ホスファチジン酸**が重要であり、そのレベルを調節するタンパク質(zucchiniやMitoguardin)への干渉睡眠喪失再現しました [16]。

**睡眠進化起源代謝役割**:

*睡眠は、好気性代謝の出現と共に、特にエネルギーを大量に消費する神経系において発生した古代代謝必要性を満たすために進化した可能性が示唆されています [3]。

*睡眠量と質量特異的酸素消費量との間に経験的なべき乗則存在し、これは哺乳類においても睡眠代謝役割を果たすことを示唆しています [3]。

* **ヒトのミトコンドリア病の一般的な症状として、「圧倒的な疲労感」が挙げられる**ことも、この仮説と一致しています [3,17]。

*哺乳類における飢餓関連ニューロン(AgRPニューロン)とdFBNsの間のミトコンドリアダイナミクス類似性は、**睡眠欲求と空腹感の両方がミトコンドリア起源を持つ**可能性を示唆しています [18]。

この研究は、睡眠が単なる行動や神経学現象ではなく、**細胞レベルでのエネルギー代謝特にミトコンドリア機能に深く根ざした生理学プロセス**であることを示しています [1, 3]。 <h3>o- **</h3>

この研究は、**睡眠が好気性代謝の避けられない結果である**という画期的な仮説を提唱し、睡眠圧の根源がミトコンドリア機能にある可能性を探求しています [1, 2]。これまで物理的な解釈が不足していた睡眠圧のメカニズムを解明するため、研究者らはショウジョウバエ(*Drosophila*)をモデルに、脳内分子変化を詳細に分析しました [3]。

睡眠不足がdFBNsのミトコンドリアに与える影響**

研究の中心となったのは、睡眠誘導と維持に重要役割を果たす特定ニューロン集団、**背側扇状体投射ニューロン(dFBNs)**です [1, 3]。休眠状態睡眠不足状態ハエのdFBNsから単一細胞トランスクリプトームを解析した結果、驚くべきことに、**睡眠不足後にアップレギュレートされる転写産物が、ほぼ独占的にミトコンドリアの呼吸とATP合成に関わるタンパク質をコードしている**ことが判明しました [1, 4]。これには、電子伝達複合体I〜IVATP合成酵素(複合体V)、ATP-ADPキャリア(sesB)、およびトリカボン酸回路の酵素クエン酸シンターゼkdn、コハク酸ヒドロゲナーゼBサブユニットリンゴ酸デヒドロゲナーゼMen-b)の構成要素が含まれます [4]。対照的に、シナプス集合、シナプス小胞放出、およびシナプス恒常性可塑性に関わる遺伝子産物選択的にダウンレギュレートされていました [4]。このミトコンドリア関連遺伝子のアップレギュレーションというトランスクリプトームのシグネチャは、他の脳細胞タイプ(例:アンテナ投射ニューロンやケーニヨン細胞)では検出されず、dFBNsに特有現象でした [4]。

これらの遺伝子発現の変化は、ミトコンドリア形態機能に顕著な影響を与えました。睡眠不足は、dFBNsのミトコンドリアサイズ、伸長、および分岐を減少させるという**ミトコンドリア断片化**を引き起こしました [5]。さらに、ミトコンドリア外膜の主要な分裂ダイナミンである**ダイナミン関連タンパク質1(Drp1)**が細胞からミトコンドリア表面へ再配置され、オルガネラの分裂を示唆するミトコンドリア数の増加も確認されました [5]。加えて、睡眠不足は**ミトコンドリア小胞体ER)間の接触数の増加**および損傷したミトコンドリア選択的に分解するプロセスである**マイトファジーの促進**を伴いました [1, 6]。これらの形態学的変化は、その後の回復睡眠によって可逆的であり、電子伝達鎖における電子溢流(electronoverflow)の設置によって緩和されました [1, 5]。

ミトコンドリア電子過剰と睡眠誘導**

研究は、**睡眠と好気性代謝根本的に結びついている**という仮説に、客観的な支持を提供しています [7]。dFBNsは、その睡眠誘発性スパイク放電ミトコンドリアの呼吸に連動させるメカニズムを通じて睡眠を調節することが示されています [7]。このメカニズムの中心には、電圧依存カリウムチャネルShakerのβサブユニットである**Hyperkinetic**があります。Hyperkineticは、ミトコンドリア呼吸鎖に入る電子運命を反映するNADPHまたはNADP+の酸化状態を反映するアルド-ケト還元酵素であり、dFBNsの電気活動を調節します [7-9]。

ATP合成の需要が高い場合、大部分の電子はシトクロムcオキシダーゼ(複合体IV)によって触媒される酵素反応でO2に到達します [7]。しかし、少数の電子は、上流の移動性キャリアであるコエンザイムQ(CoQプールから時期尚早に漏洩し、スーパーオキシドなどの**活性酸素種(ROS)**を生成します [7,10]。この非酵素的な単一電子還元確率は、CoQプールが過剰に満たされる条件下で急激に増加します [7]。これは、電子供給の増加(高NADH/NAD+比)または需要の減少(大きなプロトン動起力(∆p)と高ATP/ADP比)の結果として発生します [7]。

dFBNsのミトコンドリアは、覚醒中にカロリー摂取量が高いにもかかわらず、ニューロン電気活動抑制されるためATP貯蔵量が満たされた状態となり、この**電子漏洩**のモードに陥りやすいことが分かりました [7]。実際、遺伝子コード化されたATPセンサー(iATPSnFRおよびATeam)を用いた測定では、一晩の睡眠不足後、dFBNs(ただし投射ニューロンではない)のATP濃度が安静時よりも約1.2倍高くなることが示されました [7,11]。覚醒を促す熱刺激によってdFBNsが抑制されるとATP濃度は急激に上昇し、dFBNs自体を刺激して睡眠模倣するとATP濃度はベースライン以下に低下しました [7,11]。

ミトコンドリア電子過剰が睡眠圧を軽減または促進する実験証拠複数得られました** [12]。

**代替酸化酵素(AOX)の導入**: dFBNsのミトコンドリアホヤのAOXを導入し、CoQプールからの余分な電子の出口経路を開放すると、**基礎的な睡眠圧が軽減された**だけでなく、過酸化脂質の分解産物除去能力が損なわれたハエの過剰な睡眠需要改善されました [12]。

**脱共役タンパク質(Ucp4)の過剰発現**: dFBNsの電子需要を増加させる(内膜(IMM)のプロトン電気化学的勾配を短絡させる)ことで、**睡眠が減少しました** [12]。

**光駆動プロトンポンプによるATP合成**:電子ではなく光によってATP合成を駆動する(ミトコンドリア標的型デルタロドプシン照射する)と、dFBNsにおけるNADH由来の電子冗長となり、**睡眠が促進されました** [1,12]。これは、電子供給ATP需要の間の不一致を悪化させることで、睡眠を誘発することを示唆しています [1]。

これらの結果は、**ミトコンドリア電子伝達鎖に入る電子数とATP生成に必要電子数との不一致が、睡眠根本原因である**という強力な証拠提供するものです [12]。

ミトコンドリアダイナミクス睡眠を変化させる**

ミトコンドリアの分裂と融合のバランスの変化が、睡眠圧の増減を引き起こすNADH供給ATP需要の不一致を修正するフィードバックメカニズムの一部であるならば、dFBNsにおけるこれらの恒常的応答を実験的に誘発することは、睡眠の**設定点**を変化させるはずであるという予測が立てられました [13]。

この予測検証するため、研究者らはミトコンドリアダイナミクスにおいて中心的な役割を果たす3つのGTPase(分裂ダイナミンDrp1、内膜タンパク質Opa1、外膜タンパク質Marf)を実験的に制御しました [13]。

**分裂の促進**: dFBNsのミトコンドリアをDrp1の過剰発現、またはOpa1およびMarfのRNAi介在性枯渇によって断片化すると、**睡眠が減少し** [14]、睡眠不足に対する恒常性応答が失われました [14, 15]。さらに、睡眠履歴に関わらずdFBNsのATP濃度が減少しました [20, Extended DataFig. 7d]。電気生理学的な測定では、Drp1を過剰発現する短時間睡眠ハエのdFBNsは、対照動物ニューロンよりも電流-スパイク周波数関数が浅いことが示されました [16]。

**融合の促進**: Drp1のdFBNs限定ノックダウン、またはOpa1とMarfの過剰発現は、**ベースライン睡眠およびリバウンド睡眠を増加させ** [14]、覚醒閾値を上昇させました [20, Extended DataFig. 9a,b]。融合を促進する操作を行った場合のdFBNsは、電流-スパイク周波数関数がより急峻であり [16]、強化された応答の一部として、より多くの睡眠誘発性バーストを生成しました [16]。これらの介入は、投射ニューロンやケーニヨン細胞を標的にした場合には睡眠に影響を与えませんでした [20, Extended DataFig.10]。

また、ミトコンドリアの融合反応において重要役割を果たす**ホスファチジン酸**の関与も明らかになりました [17]。睡眠不足の脳では、この脂質が枯渇することが知られています [17]。ミトコンドリアホスホリパーゼD(mitoPLD)であるzucchini、または触媒的に活性なmitoPLDを安定させたり、他の細胞からミトコンドリアリン脂質を輸送したりする外膜タンパク質Mitoguardin(Miga)の発現に干渉すると、これらのニューロンタンパク質ベースの融合機構が標的とされた場合に見られた睡眠損失が再現されました [17]。これは、**融合反応におけるホスファチジン酸の重要性**と、**睡眠調節におけるミトコンドリア融合の重要性**を裏付けています [17]。

広範な生物学的意義と進化論的示唆**

研究は、**睡眠が好気性代謝の避けられない結果である**という説に、強力な経験証拠提供するものです [1, 2]。好気性代謝は、地球大気中の酸素濃度が2回大きく増加した後、真核生物電子伝達から得られる自由エネルギー収量を最大化することを可能にした画期的進化であり、これにより、電力を大量に消費する神経系が出現し、それに伴って睡眠必要性が生じたと考えられています [2]。睡眠はその後、シナプス恒常性記憶の固定などの追加機能も獲得した可能性がありますが [2]、哺乳類においても1日の睡眠量と質量特異的O2消費量を関連付ける経験的な**べき乗則**が存在し、これは睡眠古代代謝目的を果たすことを示唆しています [2, 18, 19]。

もし睡眠が本当に代謝的な必要性を満たすために進化したのであれば、睡眠エネルギーバランス制御するニューロン類似メカニズムによって調節されることは驚くべきことではありません [20]。哺乳類視床下部において、食欲増進性ニューロンと食欲不振ニューロンミトコンドリアは、分裂と融合の位相が逆のサイクルを経ており、これらのサイクルはマウスエネルギーバランスの変化と結びついています [20, 21]。これは、ショウジョウバエのdFBNsにおけるミトコンドリアの分裂と融合のサイクルがハエ睡眠バランスの変化と結びついているのと同様です [20]。AgRPニューロン電気的出力は、体重増加と脂肪蓄積を促進するためにミトコンドリア融合後に増加しますが、これはdFBNsのPermalink |記事への反応(0) | 19:25

このエントリーをはてなブックマークに追加ツイートシェア

2025-05-16

万博の河瀨直美パビリオン

なんかシグネチャパビリオンで予約取れねーかってガチャガチャやってたらこれが取れてしまったので、河瀨直美大嫌いなのに行ってきたけどやっぱりダメだった。

なんだあれ……

最初に「気持ち悪い」って思ったのがアナウンスでいわれた「お帰りなさい」。メイドカフェすら行ったことねえのに、帰属意識ゼロのところで言われるとこのセリフこんなに気持ち悪いんだって思った。


パビリオンなどが廃校になった学校3校の木材で作られてるっていうのもなんだかなぁって。新たに長い寿命のある建物に使われるならともかく、寿命半年万博パビリオンに使われるだけなら「消費」とどう違うんだ?少なくともその辺は解説しないとダメじゃね?むしろ廃校万博のために3つ消えましたってそういう話じゃね?

中身はLEDだけど蛍光灯を摸しましたって照明も、まず蛍光灯照明装置に見えない。蛍光灯が裸で設置されて光ってる。チカチカもまったくしない。うーん、LED

メインの展示は、遠隔地にいる誰か(2名のうちどちらからしい)と、パビリオン入場者の中から選ばれた1名の対話を、遠隔地の誰かがしゃべってるのを大写しでスクリーンにってやつ。

遠隔地参加者って、日本役者全く知らないので誰か全くわからなかったけど、なんかの役者かそれに類する人っぽい。その人と、参加者の一人があるテーマについて会話するのを延々聞かされる。参加者の方は勿論素人なのでドモったりまともな返答にならない時もある。そういうの含めてのインスタレーションなのかもしれんが、いやぁ無いわ。素人の人責める気はこれっぽっちもないけどさ。

この展示の直前の映像でも色々気持ち悪い事聞かれて「あっ気持ち悪い」「また気持ち悪い」って思ったのを覚えてる。一番気持ち悪かったのが「今日は何人にありがとうっていいましたか?」みたいな問い。鳥肌たっちゃったね。ゼロだよ勿論ゼロ

幸せな人しか来ないのか万博は。そうかそうかもしれんな。しにてー

Permalink |記事への反応(0) | 23:13

このエントリーをはてなブックマークに追加ツイートシェア

2024-11-15

anond:20241115000009

ブコメ

そうなんだ。じゃあ私は引き続き絵にシグネチャノイズを入れるね。個人の数十枚なんて問題にならないんだったら私が何やったって問題ないでしょ?

この手の絵師そもそもの話としてモデル学習データノイズゴミウォーターマークの入った画像が今まで含まれてなかったとでも思ってんのかな?

 

自分たちがやることが特別有意義で尊く高尚な行いだと思い込みすぎ

ゴミだらけの画像なんてとっくの昔に大量に学習されてんの

なんならゴミの多さを指定して再現することもできんの

Permalink |記事への反応(1) | 14:04

このエントリーをはてなブックマークに追加ツイートシェア

2024-09-02

anond:20240902113934

一見シンプルに見えるのが可読性高いわけじゃないんだよ

全部まとめちゃってそもそも中身をみないと何が来てるのかわからないのは、全くの素人シグネチャだけみたら簡潔に見えるかもしれないけど

実際には可読性かなり下がってる

他の人が指摘してるように

引数無茶苦茶ふえてるのがそもそも問題だし

クラスにするというのもそのとおり

もう一つ付け加えると引数名前見て何だか全くわからない

Permalink |記事への反応(0) | 11:43

このエントリーをはてなブックマークに追加ツイートシェア

2021-07-05

今週も、エクセルスクショぺたぺた・関数リスト丸写し作業がはじまる

先週金曜日は久しぶりにコーディングした

クソコードの引き継ぎで不快まりなかったがな

今週はまた、エクセル

する作業

先方の秘伝のエクセル方眼紙の体裁に合わせなきゃならん

無駄に罫線の使い方とかが細かく決まってる

誰がやっても70時間はかかる

氏ね

Permalink |記事への反応(2) | 15:39

このエントリーをはてなブックマークに追加ツイートシェア

2021-06-21

かれこれ1ヶ月これ。頭がおかしくなりそう

Permalink |記事への反応(1) | 20:32

このエントリーをはてなブックマークに追加ツイートシェア

2021-01-27

Nicehashでビットコインマイニング始めたんだけどマイニング始めるとノートン先生が怒り狂ったかのようにSystem Infected: Miner.Bitcoinminer Activity って警告出してくる。

ファイアウォール侵入シグネチャのチェック外してもまたすぐチェックついてるしどうすればええねん。

Permalink |記事への反応(1) | 20:15

このエントリーをはてなブックマークに追加ツイートシェア

2021-01-11

anond:20210111130405

多少の違和感はあるけど、時間のかかる処理である(ゆえに非同期処理になっている)ことをシグネチャで示せるのは進化だとも思うし、スレッドをうまく隠蔽しているとも思う。

並列処理なんかは async/await でないと記述できないようなイディオムも登場しているわけで、一口に悪とは思わない。

個人的にはメソッドチェーンが書きにくいのが気に食わないぐらいで概ね言語としては正当な進化だと思っている

Permalink |記事への反応(0) | 13:24

このエントリーをはてなブックマークに追加ツイートシェア

2020-12-06

anond:20201205152256

BOM headerとか、BOMシグネチャみたいに言えば、

エンジニアなら感覚にわかるんでねと思った。

詳しく知りたいならググレカスって話だな。

Permalink |記事への反応(0) | 23:19

このエントリーをはてなブックマークに追加ツイートシェア

2020-06-14

「こいつプログラミングセンス無いな」と思う奴の特徴

頼むからセンスのない奴はプログラマにならないでくれ。迷惑から

不要ものを作りたがる

これが最もプログラマになってはいけないタイプ犯罪行為などの言うまでもないことを除けば)。

たとえば

等。

組織で開発する上で、こういう人がいるメリットは無い。

不要ものを作ることで、プログラムは複雑になり、メンテナンスの手間は増え、バグは発生しやすくなる。

一定レベル以上のプログラマが最も自然だと同意するような実装(「実装しない」という選択肢もふくめて)をパッと思い付けない奴は、センスが足りていない。

将棋で言えば、駒がぶつかったら先ず取る手を考えるといった基本的な手筋が思い浮かばないようなもので、現実的に使い物にならない。

基本的コードなんて書かないに越したことはない。

これは、「Code Complete」「The Pragmatic Programmer」等の著名なプログラミングの本に共通する結論である

DRY原則を守らない

すべての知識は、システム内において単一の、曖昧さのない、そして信頼できる表現を有していなければならない。

これが「The Pragmatic Programmer」にあるDRY原則である

要するに、すべての情報単一ソースから決定されるべきということだ。情報が二重化すると、それらの間で不整合が生じバグの原因になる。また、二重化した情報は、修正の手間が二倍になる。

たとえば、ユーザープロフィール管理するレコードクラスに「生年月日」と「年齢」を同時に保持する必要はない。年齢は生年月日から計算できるからだ。

世の中には、「xxxFlag」みたいな不要変数を作ったり、共通ロジック抽出せずにコピペコード濫造するダメプログラマーが多すぎる。

もちろん、合理的理由があって、この原則適用されない場合もある。

たとえば、多くの言語組み込み配列文字列は、その要素と長さを二重に管理している。配列の長さは要素を数え上げることで求まるが、それには要素数に比例した計算時間がかかるためだ。

ただし、こういう場合でも、公開されたメソッドによる操作では、必ず内部の変数は同期されるように作ることが可能である。それをしないのは、怠慢でしかない。

変数命名が雑

文字変数とか連番とかは論外だが、「ary」とか「setData()」みたいな何の情報も伝えないような変数名・関数名を付けるやつ。

正直、コードの読みやすさなんて6〜7割くらいは変数名の付け方で決まると思っている。

名著「TheArt of Readable Code」も、半分以上が変数名の付け方に関連する内容だ。

なぜ変数名が曖昧になるのかと言えば、怠慢を除けば理由は2つある。

1つは、コードを書いた奴自身が、そのコード機能を明確に言語化できないということ。

もう1つは、1つの関数で多くのことをやりすぎたりしていて、その変数役割曖昧になっているということ。

スコープを広げたがる

変数関数を参照できる範囲のことをスコープという。

たとえば、関数の内部で宣言した変数は、多くの言語では関数の外からは参照できない。

スコープは狭い方が良い。これはほとんど全ての状況に適用できるプログラミング大原則だ。

スコープが広いということは、ソースコードの多くの場所からその情報を参照・変更できることを意味する。

たとえば、クラスのメンバ変数は各々のインスタンス内でしか参照できないが、静的な変数はすべてのインスタンス共通に持つ。このため、静的な変数を変更すると、すべてのインスタンスに影響を及ぼし、影響範囲の把握やテストが困難になる。

スコープを広げるか狭めるか、2つの選択肢があったとして、広げる方に心が傾く奴は、プログラマをやめた方がいい。

結果的メンテナンス困難なコードを生むというのも勿論だが、単に書くだけでも、スコープが広い方が書きづらいのだ。つまり必要もないのにわざわざ変数スコープを広げようとする奴は頭のおかしい奴しかいないということになる。

コードが長い

複雑なメトリクスなどを持ち出すまでもなく、たとえば1メソッドの行数が何百行もあるとか、1クラスのメンバ変数が何十個もあるとか言うの。

これは論外であるプログラマとしての能力云々以前に、明らかな怠慢であり、社会人としての常識が疑われる。

定期的にメンテナンスされ続けているOSSソースコードなどを見ると、関数メソッド)の行数は平均して5〜10行。20行を超えるものは稀である

長いものであっても、外部で定義した関数を順番に呼び出しているだけであったり、リクエストハンドリングして各々の処理に振り分けているだけのようなものほとんどである

それを超えているコードは、合理的理由があってそうなっていることよりは、単に悪い設計であることの方が多い。

結論

これらは実はプログラミング云々というより、内容の理解力国語力の問題なのである

ある情報を得るために必要十分な情報は何かが分かってないから、余計な変数を作ったり、無駄変数スコープを広げたりする。

そして、自分が作るものを正確に理解していないから、適切な名前がつけられないし、適切なモジュール分割ができない。

それがすべての原因。

こういう人がまず身につけるべきは、プログラミングテクニックではなく、日本語を正しく読む力。

低学歴が「プログラミングなら自分でもできるかも」なんて思っちゃいけないってこと。もちろん、下請けSIerとかで使い捨てコード書きとして働くことはできるが、上に書いたような最低限の力がないなら、それ以上を望んではいけない。

ちなみに、上に書いていることと反対のことを思っている人も世の中にはいる。

特に、昔からプログラミングをしてきた自称ベテランに多い。その人は、能力があるというよりも、単に現代の開発に際して必要知識がないだけなので、真に受けないように。

また、大学コンピュータサイエンスの基礎を学びたての学生なども、知識をひけらかしたくて上と反対のことを言う傾向がある。その程度のことは、良識のあるプログラマはみんな分かっているのだが。

Permalink |記事への反応(6) | 15:39

このエントリーをはてなブックマークに追加ツイートシェア

2020-02-14

シグネチャに連絡先が書いてないっておこられた

よほどだな

Permalink |記事への反応(0) | 22:01

このエントリーをはてなブックマークに追加ツイートシェア

シグネチャに連絡先が書いてないっておこられた

よほどだな

Permalink |記事への反応(0) | 22:01

このエントリーをはてなブックマークに追加ツイートシェア

2020-02-02

scanz、スキャンコレクション

anond:20200201113849

グラビアスキャン画像蒐集する趣味を楽しんでいた時期がある。

グラビアと言っても日本週刊誌アイドル雑誌グラビアではなく、主に海外ソフトコア雑誌セレブ誌のグラビアである

飽きてやめてしまうまでの数年間、日本人の同好の士とは出会えなかったので、たぶん日本人でそれをしていた人はごく少数だったんじゃないかと思う。

自分はただのエンジョイ勢だったのでそれほど深い知識があるわけじゃないけど、日本語の文献も見つからないようだし、思い出としてちょっと書き留めておこうと思う。

だいたい20年くらい前の昔話。

この趣味名称

よくわからないが、OnlineScan Collection とかscanzwarezのノリ?)と呼ばれていたと思う。

概要

スキャナと呼ばれる職人が配布する画像ファイル(主にグラビア)をコレクターが集めたり、コレクター同士でトレードしたりする遊び。スキャナーはコレクターを兼ねていたりもするし、コレクタースキャナーとなって配布を始めたりもする。

スキャン

配布される画像スキャンと呼ばれる。紙媒体で売られている雑誌グラビアを高解像度フラットベッドスキャナで読み取り、もとが印刷物であったことなどわからいくら美麗にレタッチされたJPEG画像である。600dpiクラススキャナと高機能レタッチソフト(ほぼPhotoShop一択)がたぶん必須

題材は大半がセクシー女性グラビアで、ヌードでもPLAYBOYPENTHOUSEに載る程度のおだやかなもの水着下着姿のものも多い。が、たまに美しい風景シリーズがあったりもする。

画像の片隅にはそれを作ったスキャナーのシグネチャ(かっこいいアイコンなど)がウォーターマークとして付される。

あ、上で「日本人はごく少数」と書いたが、おそらく日本人だろうというスキャナはいた。中でも印象に残っているのはKuniScan という2万枚ほどのシリーズで、題材が日本グラビアだったし名前からして日本人だろう。KuniScan画像検索すると今でも彼の作品の一部を見ることができる。

一次配布

今でもそうだが印刷物スキャンして配布するのは明白にコピーライト違反であるし、ことに題材が肖像権にがっつり抵触していることもあって、一次配布はきわめて目立たないかたちで行われていた。

スキャナーたちが「新しいのできたよー」と最初の配布を行うのはおそらくIRCチャンネルだったと思う。自分外人たちと英語リアルタイムチャットをする自信がまったくなかったのでIRCにはほとんど近寄らなかった。なので一次配布の現場のことはよく知らない。

当時はimgurのような匿名画像アップロードサイトなどもなかったのでこのような個人間のやりとりで配布が行われていたのだろうと思う。

この時、スキャナーは画像とともにスキャンリストも一緒に配布するのであるが、それについては次で述べる。

シリーズスキャンリスト

スキャンは数十枚~100枚程度のテーマを持ったシリーズとしてリリースされる。テーマモデルであったり、雑誌であったり様々。

最新リリースには必ずそのシリーズに含まれファイルの一覧を記したCSVが添えられる。

このリストこそがコレクションキモになる。

リストに記されているのは[ファイル名,ファイルサイズ, CRC32 ] の3項目(CRC32はファイル指紋のようなもので、データ同一性確認するのに用いられる通信技術)。

この3項目が一致していないとオリジナルデータと認められず、集めたことにならない。

たとえばWebで目当てのファイル名の画像を見つけたとしても、それが何者かの手によってリサイズされていたり再圧縮されていたりするとCSVと数値が一致せず、コレクションに加えることができない。

シリーズには継続中のシリーズとすでに完結したシリーズがあり、CSVファイルに[finished]といった名前がついているのが完結したシリーズである。これに載っているスキャンを全部集めたらコンプリート

CSVはこんな感じで今でも配っているのを見つけた。

http://www.scancollections.com/CSV/list_csv.php

(私がかつてひとつだけスキャナーとして配布したシリーズも含まれていた。なんだかうれしい)

蒐集

一次配布時にIRCを通じてスキャナから直接手に入れることのできなかったスキャンは別の手段で探すことになる。

Webにアップされているものを探したり、同好の士トレードしたり、alt.binaries(ニュースグループ)でも交換が行われていたように思う。

私は主にWebサイト経由で集めていたのだけれど、当時個人ホームページの割り当てボリュームは数MB程度がふつうだったので、スキャンをアップしてくれるサイトも古いものはどんどん消されてしまった。しかも1枚1枚がやたらでかい。今でこそ一辺が1000ピクセル以上あるような大きな画像でも表示は一瞬だけれど、DSLすらなかった時代の混み合うテレホーダイISDN回線では300KB程度のJPEGでも上からじわじわ表示されてくるのを待つ感じだった。

海外同好の士からトレードを持ちかけられることもあった。トレカの要領。ロシア台湾コレクターと、お互い非母国語英語でたどたどしく「おまえこれ持ってるか」「おれのこれやる」トレードのやり取りをするのである。基本は1:1で持ってないもの同士を交換というタテマエだけど、自分は持っているものは気前よく差し上げていた。ドイツコレクターとはたまたま音楽趣味が合ったのでしばらく文通してたな。

そうやって新しく手に入ったスキャンがあると、コレクションマネージャーみたいなソフトを使ってCSVと照合する。CSVと一致しないデータを取り除いてくれたり、リネームフォルダ分けを自動でやってくれたりするスキャンコレクションに特化した管理ソフトがあったのである

やめてしまった理由

自宅のネット回線FTTH常時接続に変えたとたんにコレクションがつまらなくなった。

どんなサイト画像もピュンピュン一瞬で表示されるし、コレクションがウン千枚詰まったZIPファイルですらたちまちダウンロードされて、「苦労して一生懸命集める」という手応えがなくなって、やりがい」がなくなってしまったである

DSL常時接続の普及にともなってネット上には高解像度データがあふれるようになり、スキャンしか見ることのできなかった美麗画像の希少性がどんどん下がっていったこともあると思う。

同好の士

「それ俺もやってた!」って人いますか?

Permalink |記事への反応(1) | 16:29

このエントリーをはてなブックマークに追加ツイートシェア

2019-07-14

大まかな処理の流れとしては関数型言語のやり方はスマートだと思うけど、純粋関数型言語みたいなやりすぎはよくないですね

適切に関数を小分けできていれば一時的ミュータビリティとかは言うほど悪ではないし

「そこで失敗するようだったらプログラム全体が死んでいいよ」っていう副作用を扱うのにいちいち関数シグネチャ変えるのはアホくさい

Permalink |記事への反応(0) | 11:44

このエントリーをはてなブックマークに追加ツイートシェア

2018-02-26

iPhoneから送信

よく考えたらこシグネチャ意味何なん?

受け取る方には超どうでもよくね?

Permalink |記事への反応(2) | 17:57

このエントリーをはてなブックマークに追加ツイートシェア

2016-08-31

http://anond.hatelabo.jp/20160830100438

思い出せないな。

シグネチャ最初ネコ絵文字で書いた人の話とかあったんだけど。

フォーラムBBS黒歴史でもあるんだよね、きっと。

からあったんだよ、場を和ませようとする人が優し過ぎて争いの種になる事。

どんな表現でも、できればたくさんの人のいい思い出になっていくといいね

Permalink |記事への反応(0) | 23:20

このエントリーをはてなブックマークに追加ツイートシェア

2011-05-13

http://anond.hatelabo.jp/20110513123216

内容は全く覚えてないんだけどね。「角度とか」っていうキーワードと「頭悪そう」っていう印象だけ覚えてる。

しかし「シグネチャ的に」ってことはやっぱ同一人物だったのかな。新キャラ「角度増田誕生だな。

漏れ」とか「超絶」とか、高齢オタっぽい特徴を突っ込まれてた奴も昔見た気がする。それとも同一人物だったりするのかな。

Permalink |記事への反応(1) | 12:36

このエントリーをはてなブックマークに追加ツイートシェア

2010-08-06

http://anond.hatelabo.jp/20100806110841

QSetやQVectorって確かintel提供するSTLシグネチャ互換テンプレートライブラリじゃなかったっけ?

アレは処理系から提供されてるSTLと比べてプロセッサにかなり踏み込んだ部分まで最適化されてあるから滅茶苦茶速いはずだよ。

うろ覚えだけど。

Permalink |記事への反応(1) | 11:12

このエントリーをはてなブックマークに追加ツイートシェア

2007-09-05

http://anond.hatelabo.jp/20070905224255

サーバーシグニチャってどうやってしらべるの?

http://www.kantei.go.jp/

ここをつんつんしてみたけど、エラーは吐くのにシグネチャ載ってこないよ。

と、思って他のサーバーを見てみたら、httpパケット普通に載ってた。

なんだ、日本政府が隠蔽しているだけか。←つかってみたかっただけ。

で、パケットモニタみたいなので追わないとみれないもの?

普通ブラウザhttpみてて、センドフォームとかヘッダ情報を表示させるモードがあったらいいのに。

・・・。もしかしてアドオンとかであるのかな?

Permalink |記事への反応(4) | 23:09

このエントリーをはてなブックマークに追加ツイートシェア

2007-06-12

増田おもしろくないからさ、シグネチャ付きで書くってのはどうだろう★

Permalink |記事への反応(0) | 00:32

このエントリーをはてなブックマークに追加ツイートシェア

2007-04-20

俺ぐらいのレベルになるとエポック病が意味わからん

LiveDoor認証がでたらしいので、とりあえず寝際にちゃちゃっと書こうとしたのだけどなんかうまくいかない。

ログインURLの有効期限が切れています」とかでちゃうんだ。

なにか間違ってるかな?

phpで書いてみたのだけど、エロイ人アドバイスにょろり。

<?php //LiveDoor認証に必要なリンクの生成// 定数がクラス内に切ってあるので環境にあわせ変更してくださいinclude_once('authlivedoor.class.php');//Livedoor認証用クラス$obj_auth = new AuthLiveDoor(LIVEDOOR_APIKEY, LIVEDOOR_SECRET);$livedoorloginurl = $obj_auth->getLoginUrl();?><div style="border:solid 1px #666666;"><ahref="<?= $livedoorloginurl ?>">ライブドア認証を利用してログインする<br /><imgsrc="http://auth.livedoor.com/img/cmn/head_livedoor.gif"border="0"><imgsrc="http://auth.livedoor.com/img/cmn/head_logo.gif"border="0"></a><br />


authlivedoor.class.php

<?php// this code is writen byutf-8 &amp;lf //http://auth.livedoor.com/login/?app_key=<app_key>&amp;perms=<perms>&amp;t=<time>&amp;v=1.0&amp;userdata=<userdata>&amp;sig=<sig>//LiveDoor外部認証APIを利用する// キーは各開発者ごとに取得が必要です。http://auth.livedoor.com/ ここより取得できます。// コールバックURLには authlivedoor.php を指定してください// --- 下記宣言を環境に合わせて変更してください。 ---define("LIVEDOOR_APIKEY" ,"");//アプリケーションキーdefine("LIVEDOOR_SECRET" ,"");//LiveDoor認証秘密キー// --- ここまで ---class AuthLiveDoor {const LIVEDOOR_AUTH_PORT = 80;//ポートconst LIVEDOOR_AUTH_TIMEOUT  = 10;//タイムアウトconst LIVEDOOR_AUTH_VERSION  = '1.0';// 認証APIプロトコルバージョンconst LIVEDOOR_AUTH_PERMS  = 'id';// 認証APIアクセスconst LIVEDOOR_AUTH_FORMAT  = 'xml';// 認証APIの取得フォーマットconst LIVEDOOR_AUTHURL = "auth.livedoor.com";//LiveDoor認証URLprivate $login_state = false;private $login_id = "";private $err_msg = "";private $apikey = "";private $secret = "";public function __construct($apikey, $secret) {$this->apikey = $apikey;$this->secret = $secret;}// // $cert = $_GET['token'];    public function getAuth($token) {if ($token == "" ) {return;}$api_time = date('U');//エポック秒で$param_ary = array($this->apikey,AuthLiveDoor::LIVEDOOR_AUTH_FORMAT,$token,api_time,AuthLiveDoor::LIVEDOOR_AUTH_VERSION);sort($param_ary);$api_sig = hash_hmac('sha1',implode('',$param_ary),$this->secret);$param = "app_key=".$this->apikey."&amp;format=".AuthLiveDoor::LIVEDOOR_AUTH_FORMAT."&amp;token=".$token."&amp;t=".$api_time."&amp;v=".AuthLiveDoor::LIVEDOOR_AUTH_VERSION."&amp;sig=".$api_sig;$fp = fsockopen(AuthLiveDoor::LIVEDOOR_AUTHURL, AuthLiveDoor::LIVEDOOR_AUTH_PORT, $errno, $errstr, AuthLiveDoor::LIVEDOOR_AUTH_TIMEOUT);if (!$fp) {$this->err_msg = "$errstr ($errno)<br />\n";} else {$out = "POST /rpc/auth?$paramHTTP/1.1\r\n";$out .= "Host: auth.livedoor.com\r\n";$out .= "Connection: Close\r\n\r\n";fwrite($fp, $out);$ret = "";while (!feof($fp)) {$ret .= fgets($fp, 2048);}fclose($fp);}//LiveDoorの認証XMLパターン$pattern = '/(\s*<livedoor_id>)(.*)(<\/livedoor_id>)/';preg_match_all($pattern,$ret,$getAry);$livedooruserid = $getAry[2][0];//ユーザーIDを取得できた場合if ($livedooruserid != "") {//ログイン成功$this->login_state = true;$this->login_id = $livedooruserid;return ture;} }public function getLoginState(){return $this->login_state;}public function getLoginId(){return $this->login_id;}public function getLoginUrl() {#http://auth.livedoor.com/guide/#http://auth.livedoor.com/login/?app_key=<app_key>&amp;perms=<perms>&amp;t=<time>&amp;v=1.0&amp;userdata=<userdata>&amp;sig=<sig># app_key 必須 登録時に発行されたアプリケーションキー # perms 必須 要求するアクセス権、現状userhashとidの2種類がある # t 必須URLが生成された時間をエポック秒で表したもの # v 必須プロトコルバージョン現在は1.0で固定 # userdata 任意 コールバックURLに引き継ぎたい値を255バイトまで自由に設定できる #sig 必須 このURLの正当性を確認するためのシグネチャ //ログインURLの有効期限が切れています// ヾ(。o、゜)ノ ここらへんがわからん!! //$api_time =time()+32400;//エポック秒で$api_time = date('U')+32400;//エポック秒で//$api_time = date('U');//エポック秒??もしかして、それはポエティック病ではありませんか?$param_ary = array($this->apikey,AuthLiveDoor::LIVEDOOR_AUTH_PERMS,api_time,AuthLiveDoor::LIVEDOOR_AUTH_VERSION//,data);sort($param_ary);$api_sig = hash_hmac('sha1',implode('',$param_ary),$this->secret);$loginurl = "http://auth.livedoor.com/login/"."?app_key=".$this->apikey."&amp;perms=".AuthLiveDoor::LIVEDOOR_AUTH_PERMS."&amp;t=".$api_time."&amp;v=".AuthLiveDoor::LIVEDOOR_AUTH_VERSION//."&amp;userdata="."&amp;sig=".$api_sig;return $loginurl;}}

もう疲れたので寝る。ライブドアなんてーーーー!!!

訂正。

秘密キーとか、そのままのっけちゃった (ーωー|||)

そしてなかなか訂正できなくてあせった。。

Permalink |記事への反応(1) | 03:25

このエントリーをはてなブックマークに追加ツイートシェア

 
ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp