はてなキーワード: C#とは
最近だと、Scala/Java、Golang、Rust、C#、Swift、Kotlin、JavaScriptあたりを並行して使っている。
フロントは、できるとか言うと、仕事量がバカにならないので、できないことになってる。
そんなかで、と言うと、サーバサイドでは、ロジックが単純で、高速性が求められるならRust。ビジネスロジックが複雑だとか、スイート化(大規模化)する可能性があるのなら、Scala2(w/o cats/scalaz)/Java。
Golangはね、基本部分の隠蔽化がちょっと難しい感じがするので、5人を超えてくる規模だったら、お勧めしたくない。
Golangはたくさんいる。
って言われることがあるんだけど、質がね。
Rustなら大丈夫か? って言われたら、最近の生成 AI ででっち上げてくる手合いが増えてきて、大丈夫とは言い切れないんだけど、言語仕様に難しい部分が含まれているので、足切り効果で最低限の質は担保されているので、結果、採用で当たり引く確率は高くなると思う。
そう言うできるエンジニアを惹きつけるだけの魅力を備えてくれ、と言いたい。
「わからなければ書けない」
「わかってないけどなんとなく書ける」とか「完全に勘違いしてるけど書ける、動く」ってのが、発見撤去困難な遅延信管地雷をプロダクトに埋めるのだよな。
なもんで、IT技術者不足!とか言われても、一定程度のハードルがある言語にしておいた方がいいと思う。
なんとなくエンジニアを3人雇うくらいなら、その金額にちょっと色つけて、できるエンジニアを2人とか、むちゃくちゃできるエンジニアを1人雇った方が、確実に元がとれるんだよな、この世界って。
他の職種と違ってエンジニアは、下手すりゃプロダクトの生涯通してみれば、100倍くらいパフォーマンスが違ってくることも、ザラではないからね。
リンク踏めばわかるけど、c#のregexクラスはc++みたいにイテレーター(C#だと列挙子やReadOnlySequenceクラス)を渡せない。
https://ufcpp.net/study/csharp/resource/span/#first-class-span
https://qiita.com/nskydiving/items/3af8bab5a0a63ccb9893
https://ufcpp.net/study/csharp/resource/readonlyness/
https://learn.microsoft.com/ja-jp/dotnet/framework/interop/copying-and-pinning
あと、リンク先全部読めばわかるけど、Spanやreadonly structが導入されたのはC#7.2以降(.net core2.1)なんで、油断するとコピーしまくりだったりするし、win32apiやCOMを呼び出すときにコピーされることがあるから注意しろとMSDNに書いてあったりする
と質問とした所、
いい質問。ただ、**今回私が提示した C# コード(MemoryMappedFile + Parallel.For で CR を数える)**には、明確に一つの「このネット上の記事/リポジトリをそのままコピーした」元ネタはありません。
いくつか似たアイデアを使ってる部分と参考になる記事/ドキュメントはあるので、それらを紹介します:
---
*Microsoft ドキュメント — Memory-Mapped Files (.NET)*
([Microsoft Learn][1])
*Kieren Johnstone: 高速に MemoryMappedFile からバイト列を読む方法(StackOverflow)*
`MemoryMappedViewAccessor` を使って unsafe コードからポインタを取得し、Marshal.Copy で効率よく読み出す方法。
([Stack Overflow][2])
*Red-Gate: Sharing is Caring: Using Memory Mapped Files in .NET*
MemoryMappedFile を使ったキャッシングなどの応用。
*Stephen Cleary のブログ: Memory-Mapped Files と Overlaid Structs*
メモリマップトファイルへ構造体を重ねて(オーバーレイ)扱う方法など。
([blog.stephencleary.com][4])
---
もしよければ、**あなたのコード(CR を数えるもの)に特化した元ネタをさらに探してみます**。やりましょうか?
[1]: https://learn.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files?utm_source=chatgpt.com "Memory-Mapped Files - .NET"
[2]: https://stackoverflow.com/questions/7956167/how-can-i-quickly-read-bytes-from-a-memory-mapped-file-in-net?utm_source=chatgpt.com "How can I quickly read bytes from a memory mapped file in ..."
[3]: https://www.red-gate.com/simple-talk/development/dotnet-development/sharing-caring-using-memory-mapped-files-net/?utm_source=chatgpt.com "Sharing is Caring: Using Memory Mapped Files in .NET"
[4]: https://blog.stephencleary.com/2023/09/memory-mapped-files-overlaid-structs.html?utm_source=chatgpt.com "Memory-Mapped Files and Overlaid Structs"
ChatGPT:
が、出てきて、やってくれと言ったら、こういうのが出てきた。
了解しました — 広く(英語・日本語・GitHub・ブログ・StackOverflow 等)再検索しました。結論と見つかった“近い”ソースをまとめます。
結論(要点)**
「あなたが求めている**MemoryMappedFile を使い、UTF-8 バイナリ中の `CR`(0x0D)だけを数える・マルチスレッドで分割して処理する**」という **完全一致の“元ネタ”ソースコード**は、公開された web 上のリポジトリや記事の中では見つかりませんでした(複数の検索ワード/検索対象で確認)。([hyr.mn][1])
ただし、ほぼ同種の要素(メモリマップドファイルの読み方・大きなファイルの行数カウント・バイト単位カウントを高速化する手法)は複数見つかりました。これらを組み合わせれば、先に示した実装は典型的なパターンであることが確認できます。([Microsoft Learn][2])
見つかった“近い”・参考になりそうなソース(抜粋)**
1. .NET の公式ドキュメント(MemoryMappedFile の説明) — `MemoryMappedFile` の基本と CreateViewStream / CreateViewAccessor の使い方。必須の参照。([Microsoft Learn][2])
2. 「Counting lines with C#」というブログ記事(C# で改行(CR/LF)カウントに関する実装と GitHub リンク) — 行数カウントを目的とした実装パターンがある。([hyr.mn][1])
3. StackOverflow:MemoryMappedFile から高速にバイトを読む方法(`MemoryMappedViewAccessor` / unsafe ポインタ / Marshal.Copy 等の議論) — 高速実装のヒント。([Stack Overflow][3])
4. StackOverflow/Q&A:ファイル中の LF/CR の数を求める方法に関するスレッド(`grep -c $'\r'` 等の unix 例や C# でのカウント方法の議論)。([Stack Overflow][4])
5. GitHub のサンプルリポジトリ(MemoryMappedFile のテスト/サンプル) — メモリマップドファイルを使う実装例。([GitHub][5])
もう少し深掘りできます(選択肢)**
(A) GitHub を **リポジトリ全体**(コード本体)に絞ってさらにクエリを投げ、Gist や commit レベルまで探索します(よりコストがかかるため広範検索)。
(B) ブログ・技術記事を対象に **全文一致(コード断片)検索** を行い、私が先に示した C# コードの実際の一節(たとえば `mmf.CreateViewStream(offset, size)` や `Interlocked.Add(ref totalCount, localCount)` など)を直接検索して完全一致を探します。
(C) 「オリジナルは GitHub にあるはず」と思われるなら、あなたが覚えている**リポジトリ名の断片/作者名/投稿日**などを教えていただければ、それを手がかりに探します(断片情報があるとヒット率がぐっと上がります)。
どれを優先して探しましょうか?(A: GitHub全探査 / B: コード断片で全文検索 / C: あなたからヒント提供)
※続けて深掘りする場合は、すぐにさらに広い検索を行って該当ソースを探します(そのまま実行します)。
[1]: https://hyr.mn/catching-flowers-with-a-net?utm_source=chatgpt.com "Counting lines with C# - hyr.mn"
[2]: https://learn.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files?utm_source=chatgpt.com "Memory-Mapped Files - .NET"
[3]: https://stackoverflow.com/questions/7956167/how-can-i-quickly-read-bytes-from-a-memory-mapped-file-in-net?utm_source=chatgpt.com "How can I quickly read bytes from a memory mapped file in ..."
[4]: https://stackoverflow.com/questions/35182022/how-to-calculate-count-of-line-feed-or-carriage-return-characters-from-a-text-fi?utm_source=chatgpt.com "How to calculate count of line feed or carriage return ..."
[5]: https://github.com/byGeek/MemoryMappedFileTest?utm_source=chatgpt.com "test csharp code for using memory mapped file."
utf8の文字コードで構成されたバイナリーファイルがある。このファイルの改行の数を数えよ。改行はCRのみとする。このファイルにはCR が必ず含まれており、CRで分割すればマルチスレッドで処理できる。
size_t count_cr_in_file(const std::string& path) {
std::ifstream fs(path, std::ios::binary);
size_t size = fs.tellg();
fs.seekg(0);
const size_t thread_count = std::thread::hardware_concurrency();
const size_t chunk_size = size / thread_count;
std::vector<std::future<size_t>> futures;
for (size_t t = 0; t < thread_count; t++) {
size_t start = t * chunk_size;
size_t end = (t == thread_count - 1 ? size : (t + 1) * chunk_size);
futures.push_back(std::async(std::launch::async, [start, end, &path]() {
std::ifstream fs(path, std::ios::binary);
fs.seekg(start);
size_t count = 0;
for (size_t i = start; i < end; i++) {
char c;
if (c == '\r') count++;
}
return count;
}));
}
size_t total = 0;
for (auto& f : futures) total += f.get();
return total;
}
import mmap
mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
return mm.count(b'\r')
c#で書けと指示したところ、
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
{
public static long CountCRInFile(string path)
{
using var mmf = MemoryMappedFile.CreateFromFile(path, FileMode.Open, null);
using var accessor = mmf.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read);
long fileSize = accessor.Capacity;
int processorCount = Environment.ProcessorCount;
long chunkSize = fileSize / processorCount;
long total = 0;
object lockObj = new object();
Parallel.For(0, processorCount, i =>
{
long start = i * chunkSize;
long end = (i == processorCount - 1) ? fileSize : (i + 1) * chunkSize;
long localCount = 0;
byte b;
for (long pos = start; pos < end; pos++)
{
if (b == 0x0D) // CR
localCount++;
}
lock (lockObj)
{
total += localCount;
}
});
return total;
}
static void Main(string[] args)
{
long count = CountCRInFile(path);
Console.WriteLine($"CR count = {count}");
}
}
というコードが出てきた。
実際はcrlf,lfもあり得るんだが、そこは考慮しなくてもよく、そう考えるとaiはすごいとしか言いようがない。
入社して半年も経たないのにPythonもC#も、果てはReactとかもスラスラ書けるから。
ドキュメント漁ってあっという間に実装してみせる。正直俺が新人のころと比べたら雲泥の差だ。
技術的な吸収力とか慣れの速さには感心する。
でもなぁ……そのすごさに、どこか薄っぺらさも感じるんだ。
この前ちょっとした打ち合わせのときに俺が何気なく言ったんだよ。
「ノイズ除去って、要はシャノンの情報理論でいうエントロピー最小化の話だよな」って。
そしたらその場にいた新卒がきょとんとしてさ。
「シャノンって誰ですか?」なんて言うんだよ。
もう…さ。なんて言えばいいんだろうな。冗談で返す気力もなかったよ。
こっちは通信の基本中の基本として“情報=不確実性の減少”っていうシャノンの定義を叩き込まれてきた世代だ。
その「ノイズ」と「情報」の概念があったからこそ、今のコンピュータ通信も成り立ってる。
それを知らずにAIの学習データをクレンジングしてます!なんて言われてもさぁ。
うーん…なんか違うんだよなぁ…と思ってしまう。
実際、最近の子はプログラムを書くことは上手い。だがプログラムを理解することには興味がない。
なぜ動くのか。どんな理屈でそうなるのか。そこに思考が届かない。
まるで暗記で動いてるみたいに。
昔は違ったんだよ。本当に。その理由も明確だ。
昔は本を読むしかなかった。英語の原文で論文を追って、図書館で夜まで粘って必死に勉強した。
その過程で「理論」と「思想」に触れたもんなんだ。でも今は調べれば一瞬で答えが出る。
だから考える前に正解にたどり着けてしまう。それが便利であると同時に、恐ろしい。
今の時代は常にスピードを求められる。だからこそ最適解を最短で見つけることが正解のように扱われるが、果たしてそれで本当にいいのだろうか?
7:00_性欲の高まりを感じる。普段ならとっとと抜いて横になり、休むが「俺が無気力気味なのは抜いてるからでは」と思いつき、向き合うことにした
7:15_精管(精子の通り道みたいなもん)がダクダク言ってるのがわかる。あと腎臓の手前側(腎臓は背中側にある)もバクバク言ってる。理由は知らん
7:30_頭の片隅が「マ○コマ○コマ○コマ○コマ○コマ○コマ○コマ○コマ○コマ○コ」と言っている。気にせずC++26で使えるリフレクションについて調べる。C#で出来ることをなんでお前は令和になっても出来ねえんだよ
7:45_このままでは爆発するのでマックへ行く(徒歩5分)。グリドルソーセージうめえ。あまじょっぱいのがいいんだよ。甘味に塩。これは普段の生活じゃ手に入らねえ
8:00_ふたなり美少女が身長190cmの美女二人に左右を固められてペニスを愛撫される妄想をする。モレスキンのノートを開く、落書きに目を通す。「成城石井にウィスキーは期待出来ない」数か月前の落書きだが、何があったんだろうか
8:15_ブルーアーカイブでめちゃくちゃシコってるけどゲームそのものやキャラの設定を全く知らんな、これは人に興味がないということなのだろうか?半勃起している
8:30_非同期処理を多用する時のmutexlockについて復習。仕事ではC++を使わんので、頭に入るか不安。でも趣味で使うので覚えなければいけない。精管がドクドクして爆発するかと思う
8:45_めちゃめちゃ頭が活動的、めちゃくちゃマ○コについて考えてる
9:00_業務?知らねえよ 足ふみ機(10,000円ちょい、ステッパーが一般名称)で体を動かす。上下するたびに美乳について考える
9:15_なんか気が向いたので、セールスフォースのApexという言語について検索。むかーし触ったんだけど、環境が重すぎて嫌な思い出しかない。勃起と半勃起を繰り返す
9:30_VisualStudioの最新版(2026 Insiders)について評判をチェック。なんか2022より速いらしい。金髪ギャルで抜きたい(平成
で、今なんだけど(まだ射精してない)、昇華とかいうやつはこの性欲のバクバク感を誤魔化す為の行動とかなんかなーとか思った(適当です
我慢しとくかーってなった時、活動量が低いとすぐマ○コについて考えてしまうので、勉強したり運動したりすると
性欲薄い俺ですらこうなんだから、学生の頃1日3回抜いてたとかいう知り合いは大変だろう(俺は一週間に2,3回くらいだった
人に優しくしようと思った 以上
実工数:0.5h
from /Users/taneichi/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/semantic_logger-4.17.0/lib/semantic_logger/appender/async.rb:204:in 'SemanticLogger::Appender::Async#submit_request'
from /Users/taneichi/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/semantic_logger-4.17.0/lib/semantic_logger/appender/async.rb:92:in 'SemanticLogger::Appender::Async#flush'
from /Users/taneichi/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/semantic_logger-4.17.0/lib/semantic_logger/semantic_logger.rb:197:in 'SemanticLogger.flush'
from /Users/taneichi/.rbenv/versions/3.4.5/lib/ruby/gems/3.4.0/gems/semantic_logger-4.17.0/lib/semantic_logger.rb:25:in 'block in <main>'
ChatGPTに聞いたらええんちゃうか
いい質問ですね!
これ、実は「どっちが正しい」みたいな決着はなくて、言語文化や時代背景によって意見が分かれる話題なんです。
---
1. for(;;) vs while(1) vs while(true)
* `for(初期化; 条件; 更新)` のすべてを省略すると無条件ループになる。
* 昔は「最適化や挙動が明確」という理由で好まれることもあった。
* ただし「1って何?ブール値?」と初学者には直感的でないかも。
* C++やJava、C#などブール型が明確な言語では「一番可読性が高い」。
* 「ずっと真の間繰り返す」という自然な書き方なので、最近はこちらが推奨されることが多い。
* Cではtrueを使うには stdbool.h をインクルードする必要があるので、昔は避けられがちだった。
---
2. 「for(;;)派」の人は誰?
ネットでよく言われるのは、Linuxカーネルのコード規約とか古いUNIX文化の影響です。
* 「無限ループは for(;;) を使う」とカーネル開発のスタイルガイドで書かれている。
* 理由は「歴史的にCで最も標準的で、誰もが見慣れているから」。
要するに「C文化圏ではfor(;;)が王道」というだけで、現代の教育やC++/Javaなどの文脈では while(true) の方が読みやすい、という感じです。
---
3. まとめると
なので、初学者が「while(true)の方が可読性高い」と思うのは大正解です 👍
---
👉質問:
新卒2年目で、システムインテグレータ勤務1年です。
システム開発をやりたくて、SEとしてのスキルを伸ばしたいという目標がありました。
会社の研修では、C#、HTMLなどを学び、6人班で1つのシステムを作成する開発実習をしました。
そこでは、私は「ユーザ一覧画面」を担当していましたが、エラーを起こしてしまいました。
その結果、班の人に怒られて、「あなたは開発やらなくていい」と言われました。
結局、開発は全くできず、発表用のパワーポイントを作る羽目になりました。
システム開発をやりたいと主張しても全くやらせてもらえませんでした。
仕事内容も、簡単なシステム改修や単体テストなどの単純作業や資料作成でした。
上司に質問をしてもうまく通じなかったり、「あなたが客先で仕事するのが心配」「あなたがコミュニケーションをとることで業務に支障が出る」「任せられる仕事が少ない」と評価されてしまいました・・。
「このままだとやばい!!」と思い、転職活動へ。エージェントに登録しました。
しかし、職務経歴書を見せると「あなたの職務経歴書だとどこも転職できない!」「勉強しないと転職できない!」と言われてしまいました。
[WIP] .NET MAUI で Linux 向けにビルドしたい!
.NET MAUI とは
.NET MAUI は C# と XAML により GUI クロスプラットフォームアプリケーションを開発できるフレームワークです。
Linux 版
しかし、登場した当時は Linux 版はコミュニティーによる開発扱いで、現在はもはや Linux の存在は公式ドキュメントから削除されています。
現在のコミュニティーによる開発は、ほとんど停滞しており、その開発の情報はほとんど存在しません。
この資料は .NET MAUI を Linux でなんとか利用できないか試み、情報をある程度まとめたものです。
ReactNativeを使って開発を始めたので、ここに知見を溜めていく。
ちなみに筆者はウェブ系。React歴は長いけど、ReactNativeは初めて。ネイティブアプリ開発自体が初めて。
実機用の余白は SafeAreaView で対応
何も考えずに開発し、いざ実機で見てみると、余白の設定が間違っていることに気づく。
画面の上部が、実機の時刻表示やバッテリー表示部分と重なってしまっている。
https://cinemavietsub.graphy.com/courses/xemphimtutlanonlinhgiucuavietsub
https://cinemavietsub.graphy.com/courses/utlanoanlinhgiucuafullvietsubhd
[WIP] .NET MAUI で Linux 向けにビルドしたい!
.NET MAUI とは
.NET MAUI は C# と XAML により GUI クロスプラットフォームアプリケーションを開発できるフレームワークです。
Linux 版
しかし、登場した当時は Linux 版はコミュニティーによる開発扱いで、現在はもはや Linux の存在は公式ドキュメントから削除されています。
現在のコミュニティーによる開発は、ほとんど停滞しており、その開発の情報はほとんど存在しません。
この資料は .NET MAUI を Linux でなんとか利用できないか試み、情報をある程度まとめたものです。
ReactNativeを使って開発を始めたので、ここに知見を溜めていく。
ちなみに筆者はウェブ系。React歴は長いけど、ReactNativeは初めて。ネイティブアプリ開発自体が初めて。
実機用の余白は SafeAreaView で対応
何も考えずに開発し、いざ実機で見てみると、余白の設定が間違っていることに気づく。
34歳年収700万の高齢貧困弱者男性なんだが、底辺派遣エンジニアやってます。
人生なんも安定してない。
東京にいたと思ったら神奈川、次は浜松市、静岡市……って感じ。
覚え直し、気疲れ、ストレス、そしてまた転勤。
正直、今までの仕事でまともに触った言語なんてMATLABとC言語くらい。
もう終わりだよこのスキルセット😭。
あれ、昔は平気だったんだけど、最近肉眼で見えない。
目がしょぼしょぼして、ピン曲げて怒られたこともある。
これが老いか……。
で、転勤多すぎて定住できないから、家買うのも無理。
ローン?家買っても数年で引っ越しなのに買えるわけ無いだろ。
てかさ、ふと思うんだけど、俺このまま40、50になったらどうなるの?
なんのために働いてるのか、最近わかんなくなってきた。
泣けるわマジで。
なんかもう「人生詰みました」って感じ。
誰か助けてくれ……。
https://falsandtru.hatenablog.com/entry/evaluation-items-of-cache-algorithms
キャッシュアルゴリズムには実装可能性(現実的に意味のあるものが実装可能か)が言語に依存するものがある。(W-)TinyLFUはキーをブルームフィルタに変換できなければならないためこの変換コストが高いJavaScriptなどでは低レイテンシな実装が困難となり用途が制限される。またLinked ListはGCの管理により非常に低速となるためARCやLIRSなど履歴保持にLinked Listを使用するキャッシュアルゴリズムはGCなしで実装できる言語かによってレイテンシと適用範囲からのLRUに対する優位性、ひいては有用性が大きく異なる。さらにLinked Listで実装されるLRU自体も同様に低速となるため配列で実装されたClockのほうがLRUより高速となる可能性がありビット演算により高速化されたClockはLRUより高速となる可能性が高い。LRUはJavaScriptにおいて主要というか事実上唯一のキャッシュアルゴリズムだがほとんどの場合より高速なClockに対して何ら優位性がなくGC管理下の遅いLRUを無意味に使い続けているだけである。
2-Quequeアルゴリズムをライトバックキャッシュ目的で実装したときにこれは感じた。
巨大ファイルの全置換えの場合、FIFOであふれたものをそのまま書きだしたほうが早いとかどういうことだよ。