はてなキーワード: インターフェースとは
エンジニアなの?
ただの決めつけだし、対人論証ですね
Rustでは、pubで可視性管理を管理してカプセル化し、データ構造を定義し、traitでデータ構造に対する操作のインターフェースを定義し、
ジェネリクスやトレイトオブジェクトを使ってさまざまなデータに対して多相で処理を提供することが一般的です
「RustはOOPじゃないし」に対する反論としてはこちらの方が重要であり、私がエンジニアであるかどうか、どのようなプロダクトを書いたかなどはノイズでしかなく、答える必要も、考える必要もありません
5年前ならともかく、今は全然そんなことはないです
それはそうですが、Rustがオブジェクト指向の言語かどうかには関係ありませんね
「Rustがオブジェクト指向言語なのか?」という話題においては、traitがインターフェースの機能をより一般化して強力にした機能であるとか、
そのあたりの方が「誰がどのプロダクトを作ったか」より遥かに重要ですね
実際にどんなサービスを作ったとかの話になるの
「Rustがオブジェクト指向言語なのか?」という話題においては、なりませんね
君その辺空っぽだよね
これの方がスカスカだよね
てきとーにホラ吹いてるだけだとしても、反証可能性がない
こっちはRust技術者が他にいて、Rustでそんな書き方しねえわみたいなことあったら指摘できるよね
反証可能性がある
私はPM。要件決め、設計などは得意だが、細かい技術的な部分はよくわかっていない。
チームリーダーB:経験豊富。全体設計もできて、コーディング速い。顧客折衝もできる。
新人C:経験浅い。コーディング遅め。devopsやプログラム言語についての知識がある。こだわりが強い。SNSでもいろいろ発信。
私は板挟み。
チームリーダーBは頼りになる。新人Cも最新の技術的な動向を追っていて、いろいろ知っていて関心する。いわゆるベストプラクティスというのは新人Cが提案するやり方なのかな、と思う
たとえば、クラス設計はインターフェースを用いてもっと疎結合にコードを組むべきだとか、テストコードのカバレッジをもっと上げないととか、言ってることはもっともだと感じる。
チームリーダーBはそういった細かいところにわりと無頓着なのかもしれない。ずっとやってきたやり方に固執してる部分もあるだろう。
私が若かったころは先輩のやり方は絶対だったため、こういった揉め事は少なかったように思うが、
最近は新人も学生時代にネットで多くを学んでいるため、知識が豊富で理論武装もすごいため、先輩が言い負かされてしまうケースも多い。
私の意見としてはBもCも良い部分があるため、どちらの意見も採用したいところだが、相性がよくない。
BはCのやり方だと、他のメンバー(DやE)の面倒もBが見ることになり、自分の負担が増えると言う。
ただ、保守性の高いプロダクトにしておかないと、長い目で見たときにあとあとキツくなってくる気もする。
あと、CはCで時間を掛けてばっちりテストコードを書いてるはずだが、経験が浅いせいか、テスト環境にデプロイさせると、かなりバグを発生させている。。
どうしたらよいだろう。
車のインターフェースって酷くない?
あんなに一般人向けに売ってて、すぐに事故を起こす割には全然洗練されてない。なのにどんどん機能は追加されていく一方。格ゲーのコマンド以上に複雑でわかりにくい。今の大衆車って、昔からのユーザーも新規ユーザーにもどちらにも不便じゃない?
オマケにひどいカーナビも加わってるし。あんな物理ボタンとわかりにくいUI表示ってエクセルのリボン表示をフル表示させてるレベルだよ。やりたいことが直感的にできなくて気が狂うわ。
販売をマニュアル、オートマで分けるんじゃなくて、スト6みたいな「クラシックモード」「モダンモード」に分けた方が良いのでは?って思う。諸事情なんちゃらかんちゃらで難しいんだろうね😓
アマゾンのブラックフライデーセールでピクセルウォッチ1が安くなっていたので買ってみた。
タッチ決済便利そうだなというのと先日リリースされたpip-boyデザインのインターフェース(テレビゲーム「fallout」シリーズで出てくる腕時計型ガジェット)に惹かれてしまった。
便利!ってなることもあったり、は?ってなることもあったのでこれから買おうとしている人の参考になればと思って書き残す。
2万5千円くらい出して買ってよかったかどうかについては、良かったとも言えないし失敗したとも言い切れないレベルだと思っている。
・持ち物管理が楽になった
今回スマートウォッチの導入を検討した一番の理由としては、買い物や移動のときに財布からカードもしくはどこかのポケットからカードケース出してというモタモタした手順を省きたいと思ったところであった。また、キャッシュレスタッチ決済をスマートウォッチに集約することで管理しなければいけない持ち物を減らし忘れ物を無くしたいという目的もあった。
pixel watchはgoogleペイ対応の上、suica機能も付けられるため、キャッシュレスタッチ決済が使えるシチュエーションでは金払う→腕時計を端末に寄せるという手順で済ませられるというメリットは非常に魅力的で、実際スマートウォッチ導入後は身軽に外出できるようになった。
・通知機能が思いのほか便利
使って見てスマホに来た各種通知をすぐに確認できるのは思いのほか楽なことを思い知った。メッセージ系の通知を確認できるのはもちろん、片手にスケジュール管理機能の出張所があるのは非常に便利で、スマホを使ってスケジュール管理している人には手放せなくなるアイテムといっても過言でもないだろう。
着用したまま寝ていると睡眠時のコンディションが見られるという事でやってみたところ、実際にデータが出てきており感動した。フーン程度にしか思っていなかった機能だが実際にやってみたら案外面白いものである。
どういうメカニズムでデータを採っていてどの程度信頼性があるものかはさておき、寝不足と感じるときとそうでない時を比較することで自分に適した睡眠導入ルーチンを作り効率的に回復できたらいいなと思っている。
・操作性
これはまあ当たり前すぎて仕方がないもので許容しているつもりではあるが、やっぱり操作性が悪い。
スマートウォッチからの入力は出てくるキーパッドか音声入力かとなるがいずれも操作性や反応、シチュエーションによる入力の制限がかかるのでスマートウォッチは基本スマートフォンに入力しているものもしくは出力されたものを確認するツールとして扱うべきなのだろう。
厳密にはピクセルカメラをpixel watch、google pixel両方に導入することで純正リモートカメラ機能は使うことができるようだ。逆に言うとpixelカメラを導入できないスマホ以外は現状使うことができない。自分の中では一番「は?」となった部分。
今年9月まではgoogleカメラという形でplayストアからインストールできたようだが12月現在は消え去っており非常にやきもきしている。
バッタもんのカメラリモートアプリを使うことでリモートカメラ機能は使えるが動作がぎこちなかったり広告が出たり見た目が雑だったりと異物感が強い。田舎暮らしでスポーツサークルをやっている自分の現状の生活だとタッチ決済以上に使う機能なのでこの躓きは個人的にかなり痛い。
pixelカメラではない現行機種androidユーザー全員が使えるgoogleカメラアプリを再リリースしてもらうか、wearOS用のカメラ操作アプリをリリースしてほしい。
届いたスマートウォッチのセッティングを手早く済ませ、鼻の穴を膨らませながら近くの商店でタッチ決済してみたところ接触が悪くカードを出すのと同じくらい時間がかかってしまった。といいつつも財布出さなくていいことに体の軽量化を感じたが、画面を当てまくっているとそのうち液晶が傷だらけになりそうなのはふと気になった。まあカバー付けているので気になったらカバー変えればいい話ではある。
また、スマートウォッチの位置から来るリーチの足りなさに使いにくさを感じた。おそらく自分の周りにあるお店のレジ機能の構造が手を伸ばしてお金を置く、カードを当てるという距離感になっておりスマートウォッチが付いている手首の位置だと決済機の位置まで微妙に届かず腰を曲げたり屈んだりと調整が必要なことが多々あることに「思ってたんと違う」となってしまった。
ド田舎暮らしのため上のようなシチュエーションにぶつかっているが都心部であればスマートウォッチ決済がしやすい構造のお店も多そう。
まあこの問題はスマートウォッチでのタッチ決済という動きに慣れたら解決しそうな部分である。
便利になった部分は非常に多い。しかしスマートウォッチのほとんどの機能はスマホを出せば問題ないわけで、スマートウォッチを導入すればみんながみんな楽になるとも限らない感じはする。
自分の場合はなんとなくで導入したので新しいガジェット!というワクワク感による買って良かった補正は受けているが、冷静にありがたみがあるかと言われると考え込んでしまう。睡眠データや心拍数データとかfit系アプリを上手に使っていったらメリットが増えていきそうな気もするが。
お前のいう通り書いたったわ(C#だが)。
//宇宙 namespace Universe { //あらゆる神の根底に存在する唯一神とその司る運(スーパークラス) public class GodLuck { public string Name { get; } //神の名前 public string Power { get; } //神の力 public string Plan { get; } //神の計画 public string Factor { get; } //運の要因 public GodLuck(string name, string power, string plan, string factor) { Name = name; //神の名前 Power = power; //神の力 Plan = plan; //神の計画 Factor = factor; //運の要因 } //神が何かを創造するメソッド public void Create(string thing) { Console.WriteLine($"{Name} created {thing}."); } //神が何かに対して支配や介入をするメソッド public void Control(string thing, string action) { Console.WriteLine($"{Name} {action} {thing}."); } //運が何かに対して影響を与えるメソッド public void Affect(string thing, string outcome) { Console.WriteLine($"{Name} affected {thing} and the outcome was {outcome}."); } } //恵比須様 public class EbisuSama : GodLuck { public EbisuSama() : base("恵比須様", "商売繁盛や五穀豊穣の力", "人々に幸せを与える計画", "商売繁盛や五穀豊穣の要因") { } //作物を守る public void Save(string crops) { Control(crops, "守る"); } //人間を成功させる public void MakeSuccessful(string person) { Affect(person, "成功"); } } }
(大いなる力を別のクラスに移譲したくなったが、神と大いなる力は同一のオブジェクトという要件があるからやめた)
//宇宙 namespace Universe { //神の振る舞いを定義したインターフェイス public interface IGodLuck { public string Name { get; } public string Power { get; } public string Plan { get; } public string Factor { get; } //神が何かを創造するメソッド public void Create(string thing); //神が何かに対して支配や介入をするメソッド public void Control(string thing, string action); //運が何かに対して影響を与えるメソッド public void Affect(string thing, string outcome); } //恵比須様 public class EbisuSama : IGodLuck { public string Name { get; } //神の名前 public string Power { get; } //神の力 public string Plan { get; } //神の計画 public string Factor { get; } //運の要因 public EbisuSama() { Name = "恵比須様"; //神の名前 Power = "商売繁盛や五穀豊穣の力"; //神の力 Plan = "人々に幸せを与える計画"; //神の計画 Factor = "商売繁盛や五穀豊穣の要因"; //運の要因 } //神が何かを創造するメソッド public void Create(string thing) { Console.WriteLine($"{Name} created {thing}."); } //神が何かに対して支配や介入をするメソッド public void Control(string thing, string action) { Console.WriteLine($"{Name} {action} {thing}."); } //運が何かに対して影響を与えるメソッド public void Affect(string thing, string outcome) { Console.WriteLine($"{Name} affected {thing} and the outcome was {outcome}."); } //物を守る public void Save(string thing) { Control(thing, "守る"); } //人間を成功させる public void MakeSuccessful(string person) { Affect(person, "成功"); } } }