サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
oita.oika.me
作業マシンが変わるたびに毎回同じものを作ってる気がするので、メモしておく。 我々はすべてのドキュメントをプレーンテキストで、つまりMarkdownで書きたいが、人は必ずしもそうではない。 折り合いをつけるためには、読めないからWordで書いてくれと言われてしまう前に、いい感じのアウトプットを出さねばならない。 ここでは html ファイルへのコンバートを考える。 md → html の変換は Pandoc を使えば簡単だが、毎回コマンド一発で使えるようにしておくにはちょっと準備が必要。 環境 Windows 10 Home Pandoc をインストールしておく CSSの用意 いい感じのスタイルで出力するには、いい感じのCSSが必要。 ここでは GitHub スタイルのCSSを利用することにする。 以前は ↓こちら Github Markdown CSS - for Markdown Edi
PlantUML の今月リリースされたバージョン(V1.2022.2 あたり)から、デフォルトのテーマが変更になって、スタイリッシュな白黒の感じになりました。 以前のデフォルトテーマに戻す方法 あまり文句のある人もいないとは思いますが、あの以前の垢抜けない黄色の感じが好きだったとか、あるいは色弱だと見づらそうといった理由で、昔のスタイルに戻したいという人もいるかもしれない。 その場合は先頭に skin rose を書くだけで、以前の見た目に戻せるようです。 @startuml skin rose ... @enduml 不要になるskinparamあり 以前のデフォルトスタイルだと、影が濃いのが気になるということで skinparam shadowing false を指定して消していた人もいると思いますが、新しいスタイルは最初から影がついていないので、このパラメータは意味がなくなります。
年も明けたので、Evernoteを卒業します。 Webクリップにもメモにも使えて、できるだけ無料か買い切りで使えて、すぐにサービス終了してしまわなさそうなものを条件として探すと、移行先はほぼNotion一択になるかなぁと思いました。 https://www.notion.so/ Notionには公式でEvernoteからのインポート機能があるが、Webクリップや画像のインポートには対応していない。 それ自体はまあ諦めがつくものの、致命的なのは、インポート中にそういうインポートできないノートがあると、コンソールにエラーを吐き捨てて静かに処理を中止してしまうこと。 エラーとなったノートの特定も容易ではない。 この時点でちょっとNotion自体に不安も生じるところではあるが、、まあちょっと諦めずに使ってみることにします。 やること Evernoteのノートブック単位で、ノートをNotionに一括
お勉強メモ。嘘ついたらごめんなさい。 React Query で、cacheTime, staleTime と、invalidateQueries, resetQueries あたりの使い分けの話。 お試し用コードは最後に載せてます。 cacheTime, staleTime について QueryClient には以下の設定がある。 cacheTime : 取得済みのデータ(以下「キャッシュ」と呼ぶ)を保持する時間(デフォルト5分) staleTime : キャッシュが古くなったと見なして再取得する時間(デフォルト0) 以下のようなコンポーネントの場合、 const SomeComponent = () => { const { data, isLoading } = useQuery("foo", fetchData); if (isLoading) return <div>Loadin
祝 .NET 6 GA アドベントカレンダー、23日の記事になります。 .NET 6 のリリースに伴い、C# の言語バージョンがついに 10.0 となりました。 C# の進化は早く、ちょっと気を抜いている隙に、見たことのない書き方のコードがどんどん出現します。 その一方で、業務の現場では、5年前10年前に書かれたソースコードを保守することも決して珍しくありません。 新しいコードでも古いコードでも、「なんだっけこれ?」という書き方がでてきたときに、同じことを従来の書き方/現在の書き方でどうやるかのリファレンスにできるよう、主要な機能・構文ごとに縦断的に整理してみました。 以下お品書きです。 プロパティ 値の参照渡し クラス・構造体・レコード コレクションと LINQ タプル 変数の文字列化 null の扱い 型推論 メンバ名の参照 非同期処理・並列処理 IDisposable と using
タイムリープTypeScript 〜TypeScript始めたてのあの頃に知っておきたかったこと〜 アドベントカレンダー1日目の記事になります。 よろしくお願いします。 3行で TypeScript で安全に型を扱う勘所は以下2点だと思いました。 最初から最後まで型が壊れていないことを保証する 型が壊れる可能性があるものは壊れている前提で扱う 個人的背景と前提 もともと C# での開発をメインとしていました。 Web開発は、JavaScript歴 ≒ TypeScript歴くらいの型付依存者です。 そのため、型付けのゆるい言語に対する耐性がなく、本内容もそういうポジションからの見解になります。 本記事内のサンプルコードは TypeScript V4.4 で挙動を確認しています。 最近のバージョンで変更のあった点は脚注を入れています。 最初から最後まで型を壊さない C# という静的型付け言語
HttpClientクラスを使って、Web APIなんかにJSONでデータをPOST送信する。 んなもん、なんでもないやろーと思ってテキトーにやろうとしたら、あれれあれれと、意外とはまってしまった。 ので一応備忘メモ。 ↓こんなPerson的なJSONを送りたいとして { "age" : 20, "name" : "太郎" } 答えから書いてしまうと、↓こう。 var json = "{ \"age\" : 20, \"name\" : \"太郎\" }"; using (var client = new HttpClient()) { var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await client.PostAsync("http://somehost
Visual Studio Codeアドベントカレンダー 14日目に参加しています。 githubのリポジトリで、2016年8月から2018年12月現在にわたり、350件を超えるコメントがつけられているissueがあります。 Allow for floating windows #10121 なにがやりたいか 本家IDEのVisual Studioには、タブをマウスで引っぱっていって、独立したウィンドウにできる機能があるのです。 これは使い慣れるとたしかに便利なもので、僕もよく利用します。 Chromeなどのブラウザでも同じことができますね。 このissueは、VSCodeでこれをやらせてくれ!というものです。 代替策 issue内の議論で何度も出てくる代替案として、vscode自体をもうひとつ別ウィンドウ起動し、同じファイルを開くという方法があります。 手順としては、 Ctrl+Shif
IFTTT(イフト)はいろんなWebサービス同士を連携させるためのWebサービスでございます。 「 IF This Then That 」という名前の表すとおり、Thisをトリガとして、Thatのアクションを起こす (例:Instagramでいいねをつけたら、Evernoteに自動保存する) という形で連携を定義する。 この「This」のトリガ部分に、既存のサービスだけでなく、自前のアプリからのHttpリクエストを使うこともできる。 のだけど、このイフトは何回かUIや用語に大きな変更があって、調べながらやろうとしたらけっこう苦戦した。 (もう「レシピ」とか呼ばないのよ) なので、2017年9月現在の、自前トリガからスマホへのプッシュ通知を実現する手順をまとめておきます。 Web画面ベースで説明するけど、スマホアプリからでもほぼ同様。 準備 IFTTTのアカウントを作成しておく。 あと、スマ
pythonで形態素解析エンジン「MeCab」を使うのをWindows上でやろうとすると、いろいろ罠が多くてかつては大変だったようだが、今では先人たちの功績によって、たやすく構築できるようになっている。 ・・はずなんだけど、Python不慣れなのもあって、いざやってみたら細々としたところで無駄にはまってしまったので、整理しておく。 前提環境 Windows 10 (64bit) Python 3.6.5 pipenv pipさえ使えれば良いが、以下の例ではpipenvを使う pip install pipenv でインストール可能 MeCabのインストール まずは、WindowsマシンへのMeCabのインストール。 公式ページからWindows用のインストールバイナリ(mecab-0.996.exe)をダウンロードできるんだけど、ここで注意。 Pythonが64bit版でインストールされて
ちょっと話題のHyperappをTypeScriptとWebpackで試す。 今年は試行段階でもいいからもう少しまめにアウトプットしましょうということで…。とりあえず環境構築まで。 前提 ・開発マシンのOSはWindows 10(あんま関係ないはず) ・Visual Studio Code ・nodeインストール済み(記事中ではyarnを使います) webpackとtypescriptの準備 webpackもtypescriptも、グローバルインストールされていないものとします。 もちろんグローバルにインストールされていればここでのインストールは不要。 ・プロジェクト作成 > yarn init -y ・パッケージインストール > yarn add --dev typescript webpack webpackでtypescriptを読み込むためのローダも入れておく。 今回は名前がつよい
10個のスレッドを同時に走らせて並列処理したいとする。 まさか new Thread(...).Start() なんてやらないですよね。 LINQでasync/awaitだーってのもアリかもしれませんが、 素直にTaskを10個作ろうとすると↓こんな感じ。 for (int i = 0; i < 10; i++) { Task.Run(() => { Thread.Sleep(4000); //4秒くらいかかる処理 }); } もちろん10個ほぼ同時に走ってくれることを期待する。 確認してみる。 var watch = Stopwatch.StartNew(); for (int i = 0; i < 10; i++) { Task.Run(() => { var threadId = Thread.CurrentThread.ManagedThreadId; Console.WriteL
VisualStudio(というかMSBuildなんだけど)では、 ソースファイルでない任意のプロジェクトファイルについて ソリューション エクスプローラーからビルドアクションを指定するときに 出力ディレクトリへのコピー有無を指定できる。 ただし、設定できるのはコピーするかどうかを決めるモードだけで、 コピー先のディレクトリを変えたりすることはできない。 例えば、以下のような構成で Project Root\ ├ ProjName.csproj ├ AClassFile.cs ├ bin\ ├ obj\ ├ Properties\ └ img\ └ image.jpg image.jpgをプロジェクトに追加して、プロパティの 「出力ディレクトリにコピー」を「常にコピーする」にしてリリースビルドすると、 ファイルは bin\Release\img\image.jpg にコピーされる。 このコ
なんか「wpf datagrid binding」で検索して以下の記事に流れてくる人が 異様に多いようだ。 [WPF]DataGridColumnへのバインディング しかし↑の記事ではあんまり一般的でないケースの話しか書いていなくて 申し訳ない気持ちになるので、たまにはちょっと入門編っぽいことも自分なりに書いてみる。 WPFでDataGridにデータを一覧表示する場合の値の持ち方とかについて。 ちなみに、一覧上のセルから直接値を編集するような使い方は個人的にあんまりやらないので、 今回もあくまでDataGridは表示だけの用途を想定して書きます。 とにかく表示する まずはコレクションの値をとにかく一覧表示する例から。 <Window x:Class="DataGridBindingSample.MainWindow" xmlns="http://schemas.microsoft.com/
パブリックでないメンバやクラスにアクセスする手段として C#ではリフレクションのメソッド群が System.Reflection名前空間に用意されている。 たとえば、internalなクラスのprivateなメンバに 参照プロジェクトからアクセスするサンプルなこんな感じ。 アクセス先のコード。 namespace OfficeHoge.TeamA.LibA { //公開クラス public class PublicClass { } //外部から見えないクラス internal class HiddenPerson { private string firstName; public HiddenPerson(string firstName) { this.firstName = firstName; } } } アクセス方法。 //公開クラスからアセンブリを特定 var libAsse
どうも、僕です。 ザムルってもうワクワクしますよね。 ということで、Qiita XAML Advent Calendar 2014 21日目のエントリーになります。 WPFではコントロールのプロパティにバインドされた値が不正値でないかどうか 評価する仕組みとして、Validationというのを持っています。 例えば、TextBoxのTextプロパティにint型のプロパティをTwoWayでバインドして、 画面から整数でない文字を入れると赤い枠が表示されます。 これが標準装備のValidation。 このルールをもっと細かくしたい、たとえば、 入力できる数値の範囲を制限したいとします。0~100とか。 そういうときはValidationRuleを自作する。 public class IntRangeRule : ValidationRule { public int MinValue { ge
Qiita C# Advent Calendar 2014 16日目のエントリーになります。 どうも、僕です。ワクワクするコード書いてますか? NUnitのテストがオールグリーンになる瞬間ってワクワクしますよね。 ということで、NUnitのTestCaseの作り方について。 適当なテストのターゲットとして、以下のようなTimeCheckerクラスの IsValidTimeメソッドを想定しておきます。 ただ単に時間が0-23の範囲で分が0-59の間であることを確認するだけのもの。 public class TimeChecker { public bool IsValidTime(int hour, int minute) { return 0 <= hour && hour <= 23 && 0 <= minute && minute <= 59; } } ベーシックなテストの書き方からい
先日アプリケーションのStartupPathをちゃんと取得するという話を書いたのだけど、 たかがPath、されどPath、ちゃんとやろうとすると なかなか奥が深いというか面倒くさいので、もうちょっと書きます。 けっこう長くなったけど、トピックスは2つ。 ・絶対パスか相対パスかを調べる ・パスを連結する こんなんできるわ!という人も、読んでみると知らない発見があったり なかったりすると思うので読んでみたらどうでしょうか。 絶対パスか相対パスかを調べる 「C# 絶対パスかどうか」とかで検索すると、 System.IO.Path.IsPathRootedを使えという情報がすぐにヒットするけれど、 これの判定が本当に自分の望むものになっているかどうか、ちょっと注意が必要。 bool res1 = Path.IsPathRooted(@"C:\hoge")); bool res2 = Path.Is
アプリの実行ファイルがあるディレクトリのパスの取得の仕方について。 例えば実行ファイルと同じディレクトリにテキストを出力したいとき、 File.WriteAllText("hoge.txt", "テキストファイルの本文"); とでも書けば普通はちゃんと実行ファイルのディレクトリにhoge.txtが出力されるので、 横着してこう書いている人も少なくない気がするけれど、 これはたまたまカレントディレクトリと実行ディレクトリが同じだからうまく動いているだけだ。 Environment.CurrentDirectory = @"C:\"; File.WriteAllText("hoge.txt", "テキストファイルの本文"); とやればCドライブ直下に出力されてしまうし、 もっといえば、コマンドラインからexeファイルを叩いて実行した場合などは、 そのコマンドを打ったときのディレクトリがカレント
道民部 Advent Calendar 2013、24日目のエントリーになります。 どうも、@oikaです。 道外から来られた方が札幌周辺を歩かれると、 いたるところで赤い看板が目に入ってくると思います。 あるものには「さっしん」、またあるものには「ツルハドラッグ」とか 書かれていると思いますが、ここでは、 もう一つの赤い看板、 「串鳥」 についてご紹介させていただきます。 串鳥とは? 札幌開発(株)が札幌を中心に展開する焼鳥チェーン店です。 その美味しさと価格の安さで、幅広い客層に親しまれています。 道内20数店舗のほか、道外では仙台と東京にも店舗展開しており、 1号店誕生から33周年となる2013年現在もなお出店を広げています。 焼鳥専門店「串鳥」ホームページ 串鳥の魅力 ざっくり言ってしまえば、安さと美味しさ、 そして居心地の良さが串鳥の魅力だと思います。 特に札幌市内は大小様々な店
このページを最初にブックマークしてみませんか?
『OITA: Oika's Information Technological Activities』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く