Recommended ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Building the Game Server both API and Realtime via c#
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
The Usage and Patterns of MagicOnion
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
MagicOnion~C#でゲームサーバを開発しよう~
ネットワーク ゲームにおけるTCPとUDPの使い分け
Apache Arrow - データ処理ツールの次世代プラットフォーム
ネットワークOS野郎 ~ インフラ野郎Night 20160414
Unityではじめるオープンワールド制作 エンジニア編
【Unite Tokyo 2019】Understanding C# Struct All Things
BuildKitによる高速でセキュアなイメージビルド
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
More Related Content ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Building the Game Server both API and Realtime via c#
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
The Usage and Patterns of MagicOnion
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
What's hot (20) 【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
MagicOnion~C#でゲームサーバを開発しよう~
ネットワーク ゲームにおけるTCPとUDPの使い分け
Apache Arrow - データ処理ツールの次世代プラットフォーム
ネットワークOS野郎 ~ インフラ野郎Night 20160414
Unityではじめるオープンワールド制作 エンジニア編
【Unite Tokyo 2019】Understanding C# Struct All Things
BuildKitによる高速でセキュアなイメージビルド
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
Similar to C#の強み、或いは何故PHPから乗り換えるのか (20)
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
[2001/05/30] .NET Developer Conference 2001 May / Visual Studio.NET による.NET対応...
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
More from Yoshifumi Kawai (20) A quick tour of the Cysharp OSS
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Implements OpenTelemetry Collector in DotNet
Deep Dive async/await in Unity with UniTask(EN)
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
Memory Management of C# with Unity Native Collections
Deep Dive async/await in Unity with UniTask(UniRx.Async)
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity
NextGen Server/Client Architecture - gRPC + Unity + C#
How to make the Fastest C# Serializer, In the case of ZeroFormatter
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
C#の強み、或いは何故PHPから乗り換えるのか5. Typing : Static vs Dynamic
コンパイルでの検出ってやっぱ大事
ユニットテストがあるからなくても大丈夫?→NO
コンパイルエラーはIDEが「リアルタイム」に検出する
リアルタイムは速さであり軽さ
文法エラーを気にしながら書くな
んて人間のやることじゃない。そ
んなの機械に任せよう。
8. Type for Refactoring
Ctrl + .を押してその場で確実な名前変更
コンパイルエラーを回って(エラー一覧ダブルクリックでその行に飛ぶ)書き換えたりも可
一括置換でリネーム?危なっかしい!
危なっかしいという感情は、手を止めてしまいませんか?
その躊躇いが、負債を増やし続けます
テストがあれば大丈夫だ、って?どのぐらいのカバレッジ?
PHP用のIDEがあるって?実際、会社ではPHPStormを使っていて、手動置換よりは全然いい
ですが安心感はそれほどない(そもそも生連想配列の箇所とかも……)
参照している別プロジェクトやユ
ニットテストの名前なども、漏れ
なく完全に一括で置換される
11. Type is Speed
Lightweight Languageと比較すると、重い、本当に?
何が重いって?
ローカル変数を宣言するのにいちいち型指定するのがダルい
ダルい。面倒。自明なことを、わざわざ意識させられるのは辛い
そこで型推論!
軽い、むしろ軽い
自動生成と違って読みやすさにも寄与する(自動生成最強、ではない)
型推論 = 静的言語と動的言語のイイとこどり!
C#, OCaml, Scala, Haskell, F#, TypeScript
型をダラダラ書くJ***と$地
獄なP**は辛ぽよ
C#の推論能力はこの中では最弱!
ですが、強すぎる能力はIDEの入力
補完との相性が悪くなる。そのト
レードオフを忘れてはならない
14. The Evolution of C#
Java/Delphi
Generics
LINQ
Dynamic
Async
2002 C# 1.0
2005 C# 2.0
2008 C# 3.0
2010 C# 4.0
2012 C# 5.0
15. Language should be evolve
言語は進化しなければならない
C#はJavaのようなもの、の時代はとうに終わってます
言語の進化は複雑怪奇にしたいからではない、楽させるための進化
PHPも進化を止めていない、その点は偉い
弊社はPHP 5.4を採用、ラムダ式(クロージャ,無名関数)をフル活用
自社製LINQモドきライブラリで主に利用
でも、継ぎ接ぎ感が否めなくて正直アレだとは思う
進化はキメラ化とのバランス感覚が重要
Anders Hejlsberg(C#設計者)はその点が天才的
16. C# 3.0 - LINQ
ウェブアプリケーション = コレクション処理
といっても過言ではない
JOINをどこで行うか?DB上で全て整形されている?
負荷分散のため、DB上でまとまっていないケースも少なくない
LINQ to Objectsによるインメモリ結合
普通にやると生産性落ちるしバグの元
LINQ to Objectsを使えばSQLより、むしろ書きやすい
18. C# 4.0 - Parallel
並列処理などもお手の物かつ簡単に記述できる
バッチなどの重たい処理を高速に行える
foreachをParallel.ForEachに変えるだけのお手軽さ
弊社内では実際30分→2分などの実例あり
スレッドプールに投げるのも簡単
ジョブキュー使うまでもないけど、後に回したい
みたいな粒度のものは、それだけで解決するかも?
20. Async : PHP vs C#// 並列通信用マルチハンドルを用意
$mh = curl_multi_init();
// 通信先ごとにCurl Handleを作り、それを $mh にaddしていく
$ch_news = curl_init("http://dailynews.yahoo.co.jp/fc/entertainment/rss.xml");
curl_setopt($ch_news, CURLOPT_RETURNTRANSFER, TRUE);
curl_multi_add_handle($mh, $ch_news);
// 同様に
$ch_music = curl_init("http://magazine.music.yahoo.co.jp/rss/ALL/rss.xml");
curl_setopt($ch_music, CURLOPT_RETURNTRANSFER, TRUE);
curl_multi_add_handle($mh, $ch_music);
// 同様に
$ch_trend = curl_init("http://searchranking.yahoo.co.jp/rss/trend-rss.xml");
curl_setopt($ch_trend, CURLOPT_RETURNTRANSFER, TRUE);
curl_multi_add_handle($mh, $ch_trend);
// せーので複数の通信を同時実行。whileで全て返ってくるのを待ちます
do { curl_multi_exec($mh, $running); } while ( $running );
// 個々のXMLは、それぞれのCurl Handleを指定することで取得できる
$rss_news = curl_multi_getcontent($ch_news);
$rss_music = curl_multi_getcontent($ch_music);
$rss_trend = curl_multi_getcontent($ch_trend);
// 後始末
curl_multi_remove_handle($mh, $ch_news);
curl_close($ch_news);
curl_multi_remove_handle($mh, $ch_music);
curl_close($ch_music);
curl_multi_remove_handle($mh, $ch_trend);
curl_close($ch_trend);
curl_multi_close($mh);
// リクエストするClientの用意
var client = new HttpClient();
// 非同期リクエスト
var news = client.GetStringAsync("http://dailynews.yahoo.co.jp/fc/ente
var music = client.GetStringAsync("http://magazine.music.yahoo.co.jp/r
var trend = client.GetStringAsync("http://searchranking.yahoo.co.jp/rs
// 非同期待機
await Task.WhenAll(new[] { news, music, trend });
// 個々のXMLは変数のResultを指定するだけで取れる
Console.WriteLine(news.Result);
Console.WriteLine(music.Result);
Console.WriteLine(trend.Result);
PHPの例は以下のYahooのTech Blogより引用
http://techblog.yahoo.co.jp/architecture/api1_c
url_multi/