投稿

2017の投稿を表示しています

OneDrive for Business で quota を 5TB に増やす方法

E3 持っていない場合は、OneDrive for Business Plan2 という年額100ポンド程度のライセンスを購買するのが良し。既存ユーザーにこのライセンスをアサインした後、以下のようなややこしい処理を実施しないと、そのユーザーへの Quotaは変わらない模様。 https://answers.microsoft.com/en-us/msoffice/forum/msoffice_onedrivefb-mso_winother/how-to-increase-onedrive-for-business-storage/5d3463b7-dcf0-4e63-9437-1074f12d2fe6 これを実施した後も、Office365 | Admin | OneDrive | Storage では 1024GB となっているが、Windows側の Task bar の OneDrive を右クリックし、Manage Storage で飛ぶ Web page では、quota が 5120.00 GBに増えているのが見える。

Ruby / Rail のお勉強 1

K講師による Ruby / Rail 講座第一回 - 1 + 1 の + を再定義して、マイナスにしたり、掛け算にしたりできちゃう。えっ、って感じ。JSの ProtoTypeとも違うなあ。 - 新プロジェクトの作成は簡単、テンプレートが充実しているみたい。MVC の VC だけを作るとか、Mを含めて、しかも DBのSchemaの定義までオプション指定できるみたい。 - MVC の M と、DB Schema が疎な結合されているらしい。疎と言っても、何も書かないと DB Schema の properties / fields がそのまま M ですでに認識されているので、何が疎なのか理解できていない。同じ名前で、M側で異なるブツで上書きできるということなのかな。 - .NET だと、MVC の M に Entity Framework を定義して、必要に応じて、 C側で View Model を別に立てて properties を mapping する、というのが定石かと思うが、Rails では、M が 多分 View Model に相当し、DB Schemaが Entity Framework の定義に相当するのかなあ。 - C と V も、暗黙的に接続されている。Cに @abc と変数を定義し、View側で @abc と使える。この引き渡しは、explicit に書く必要ない。 - @は変数宣言、@@はクラス宣言。 - convention に則って書いていくと、驚くほどコード行数が少なさそう。 - router は、ラウターと発音せねばならない。

Web Deploy の SSL Certificate 更新

IISのSSL Certificateの期限切れ、その更新は割と簡単。 Web Deployを使用している場合、こちらのCertificateは上のとは独自の設定を持っているので、こちらも新Certificateを指定する必要がある。こちらも簡単、やりかた: https://technet.microsoft.com/en-us/library/cc770458(v=ws.10).aspx

SPA を IIS から流す際の ASP 側のルーティング

Single Page Application (SPA) にて、トップ以外のページで F5 (page reload/reflesh) を押すと、サーバーから Page Not Found が返ってくる。通常、SPA をレンダーする Web server は、基本的に、GETリクエストに対して、ごく短い 唯一のページ返すだけがお役目。\cart とか \list 等が GET で飛んできても、左様なページ(MVCだとcontroller) は存在しないので、404 エラーとなる。 そこでさっそく調べると、以下を web.config に追加せよ、とある(Web serverは IIS を想定)。     <rewrite>       <rules>         <rule name="Rewrite Text Requests" stopProcessing="true">           <match url=".*"/>           <conditions>             <add input="{HTTP_METHOD}" pattern="^GET$"/>             <add input="{HTTP_ACCEPT}" pattern="^text/html"/>             <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>           </conditions>           <action type="R...

Redux

Redux の仕様を説明をするほど勉強した訳ではあらず、これを触ってみたい思いに駆られた不純な動機あたりからぼちぼち。 まず、React コミュニティでは、かなりあちこちで Redux という単語を見せつけられる。React Router あたりを勉強していると、Routerという単語よりもむしろ多く見るかもしれない。これをそのまま素通りするは武士の一分が立たぬ。 次に、Jest による Unit Test を書き始めたところ、対象のモジュールに singleton なモジュール絡むと(それを import して何かしらすると)、Testが走る前にJest の validate に引っかかり、Unit Test自体がエラーとなることに唖然とする。 例えばだが、"Loading..." などを modal に表示する spinner モジュール等は、どこかに置いてglobal に公開し、どのモジュールからでも使わせて良いではないか。複数の Ajax request が あちこちから、ほぼ同時に post される際にも、一か所で処理できれば、無駄な render() 実行が少なくなるだろう。なので、これを singleton として実装してきた。ところが、実動作は全くOKなのだが、Unit Test でsingleton は色々と問題が出る。となると、factory 作って、、、となるかもしれないが、Reduxというのが救世主なのでは無いかとぼんやり感じていたので、勉強してみた。見事に解決してくれたので、その備忘録。 --- ReduxをC#的に乱暴に表すと、イベント群を取り扱う小さな class であり、その目的は、あちこちのクラスに分散しているであろう events の起動やリスナーを一か所で集中管理する(これはC#で普通に実施している方も多いと思う)のだが、各クラスのインスタンスの state も同時に集中管理する、というのがみそだと思う。実際に、Redux を C#に取り込むというサイトもある。 http://massivepixel.co/blog/post/redux-csharp-part1 Redux aware なモジュールは container と呼ぶそうだが、それは、a) 自己の state の変化を Re...

Jest manual mock

Jest の続き、 mockについて。Jest の documentation は悪くはないけど React のそれに比すると、ちいと本質の説明が抜けていたりする。 今回テストの対象は、小さなアプリで、Web API / React の組み合わせを TypeScript で書いたもの。Azure AD への oAuth2 と、Axios を使った API (Rest) call が存在し、これらを mock してみよう、というお題。が、壁が厚すぎるので、まずは簡単な、エラー表示だけをつかさどる Error というモジュールを Mock してみる。 error.tsx (actual): --- import * as React from "react"; interface Props {     errors: string } interface State { } export default class Error extends React.Component<Props, State> {     constructor(props: Props) {         super(props);     }     public render() {         return <h3>{this.props.errors}</h3>;     } } ./__mock__/error.tsx (mock 版) mock版は、actual版 の同フォルダに __mock__ フォルダを作成しその直下に置かねばならない + error.tsx (actual) + __mock__        + error.tsx (mock) --- import * as React from "react"; interface Props {     errors...

Jest - React 第一歩

まずは簡単に props.errors で降りてきた文字列を表示するだけの componentを作る。 import * as React from "react"; interface Props {     errors: string } interface State { } export default class Error extends React.Component<Props, State> {     constructor(props: Props) {         super(props);     }     public render() {         return <h3>{this.props.errors}</h3>;     } } 上を題材にJestの初歩を勉強する。以下、Jestに動かしてもらう Unit Test を作る。Unit Test 自体も TypeScript で書いてみることにする。以下、error.test.tsx: import * as React from "react"; import Errors from "../components/error"; import * as ReactTestRenderer from 'react-test-renderer'; test('test error component', () => {     const errorMessage = "hello world!"     const rendered = ReactTestRenderer.create(         <Errors errors={errorMessage} />     );     const ren...

Jest の テスト・スクリプトを VS Code でデバッグする術

こちらは実に簡単で、VS Codeがうまいこと処理してくれる。 左のツールバーから Debug (虫アイコン)をクリック。 上部のギア・アイコン(Open launch.json) をクリック。 初期値をセットしてくれているが、これと別に以下を追加: { "type" : "node" , "request" : "launch" , "name" : "Jest Tests" , "program" : "${workspaceRoot} \\ node_modules \\ jest \\ bin \\ jest.js" , "args" : [ "--runInBand" ], "internalConsoleOptions" : "openOnSessionStart" , "outFiles" : [ "${workspaceRoot}/dist/**/*" ] } 上をセーブし、上部のドロップダウンから "Jest Test" を選択。 左上のDEBUG をクリックして開始。 これだけ。きちんとdebugger; のところでブレークしてくれる。CLIでの苦闘が嘘のようであるが、人生無駄なものは無し、と日記には書いておこう。 なお、Break時からContinueする際のショートカットにはF8ではなく、F5がアサインされている。これを変更したい場合は、MenuのFileから Preferences | Keyboard Shortcuts で Continue を検索するかスクロールしてロケートし、左のエディットアイコンをクリック、F8を押してからリターンキー。

Jest の テスト・スクリプトをデバッグする術

React が大分わかってきた(ような気がする)ので、Unit Test に進んでみる。またまた忍び難き道を忍ばねばならなかった。以下、備忘録。この世界も jasmine だとかなんだとか、あまりに選択肢が多く目が回るが、とりあえず Jest を勉強してみようと判断。 [Jest のインストール] 以下の要領でいたって簡単。      https://facebook.github.io/jest/docs/en/getting-started.html#content CLI のどこからでも jest と叩きたいので、グローバルにもインストールした。     npm install -g jest [初期動作確認] 上のサイトの要領に従って sum のテストを実施。すんなり動作した。さほどの感激は無し。 --- ここからが実務となり、厚い壁がはだかっているのは既にわかっている。C#でも Unit Test を書くのは、普通にコードを書くのと同じぐらい大変な作業だが、プログラマのライフセーバーとも言えるので、堪えどころ。 まず、私の書く Unit Test自体にバグが発生することが分かっている。これを詳細にデバッグできないと全くお話にならない。まずはここらから検証。 [Unit Test のデバッグ] 暫し調べると、やはり本家のここにたどり着いた:      https://facebook.github.io/jest/docs/en/troubleshooting.html#content 要は、Node上で Jest.js が走り、そこから私の書いた sum.test.js が走るわけだが、Node が web server を立ててくれ、そこに Chrome からアクセスし、Chromeの F12 で Just 向けに書いた Unit Test スクリプトをデバッグ可能、というわけだ。Nodeは偉い。早速 CLI にて:    node --inspect -brk node_modules/.bin/jest --runInBand やはり、さっぱり動作しない(涙)。結論から申すと、4つの問題が上の短い一行に...

React 初歩

React には色々と感心・得心させられ、実に面白い。日本のReactを取り扱ったサイト群では、哲学という単語を使っているところもあるが、むしろ、道(どう)、というのが相応しいかと思う。武士道とか柔道の道(どう)。私がまず最初に感心したのは、Document道である。実にプレインな英語だけで、どうやってこれほど技術屋の心を擽ることができるものか。 https://reactjs.org/docs/hello-world.html この分かりやすさが、英語ネイティブではない各国のプログラマたちをも惹きつけている要因の一つではないかと思う。それが理由なのか、驚くことに日本語の翻訳サイトが存在しないのですな。 さて、以下は無論翻訳を狙ったものでは無く、上 Hellow World サイトにて、私なりに感じた重要点やReact道の備忘録。 [Component and Props] 呼ぶ側のコンポーネントから流れてくる props は、リード・オンリー。編集してはいけない。propsは、親コンポーネントから子、孫、ひ孫・・・へ、変数や関数を上から下にむかって一方向で流し込む。“top-down” または “unidirectional” data flow と呼ばれる React道のひとつ。 [State and Lifecycle] state は特殊なローカル変数であり、他のコンポーネント視点では、本コンポーネントが stateful なのか stateless なのかは全く興味の外、これもReact道のひとつ。 this.state={abc: "def"} のように直接セットできるのは constructor 内のみで許され、それ以外はダメ。必ず this.setState({comment: 'Hello'}); this.state は非同期処理されるので setState()しても即座には変化しない。変化した後に処理が必要な場合は、callback を指定できる。 // ダメな例 this . setState ( { counter : this . state . counter + this . props . increment , } ) ; // ...

Chrome の F12 map が更新されない問題

Chrome F12でデバッグ中に、しばしば map (高)レベルのソース表示と、生JSレベルの実態がずれる事がある。これを解決せしめるには、F12画面で単に ALT+R キーを押せばよい。map ファイル自体は、既にきちんとロードされているので、HTTP reqestは発生しない。殆どバグだと思うし、pull が出ているようだが、現時点 (Nov/17) では未解決。以下参照: https://github.com/webpack/webpack/issues/2478

DevExpress XPO object を Json Serialise する術

Entity Framework にて POCO で書いている場合、Json シリアライズはあまりにも簡単であり、POCOの威力を見ることになるが、DevExpress XPO の XPBaseObject は、そのままではSerialise できない。とはいえ、これを実現するには、さほどの手間はかからない。POCOに比べると、コードが少々汚れることはやむを得ず。 XPOのシリアライズ(その逆)には以下の処理を施さねばならない。 Deserialize、すなわちXPBaseObject の生成の際に、Session を渡したい場合(多くの場合そうであろう)、引数付きの constructor に Session (UnitOfWork) を渡さねばならない。ちなみに、この処理を実施しないと、XpoDefault.Session が使用される。 他クラスの object をReferenceしている property の処理。 XPOCollection の処理。 まずは、上の処理で作成した作品達を使う側の例:         [TestMethod()]         public void SerialiseWf()         {             TestHelper.ConnectToDataSource("UK Test");             ManagedUnitOfWork uow = TestHelper.uow; // 単なるUnitOfWork と読んでください             Enquiry en = uow.GetObjectByKey<Enquiry>(6915);             var settings = new JsonSerializerSettings()     ...

Azure Pay-As-You-Go Dev/Test の恩恵

Azure で動作するアプリやAPI の開発者であれば、当然 Azure 上にそれら resources を deploy し、動作試験・負荷試験をすることになる。Microsoft は、こうしたケースに便宜を図ってくれており、Virtual Machine や App Service 等々を4割程安い金額で使用できる。 この便宜を利用するのは簡単で、Pay-As-You-Go Dev/Test という種別の subscription を作成し 、その配下に各リソースを普通に配置するが、size の選択の際に表示される料金が、Pay-As-You-Go よりも安価であることがわかる。 また、VM上でMS系のソフトウェア(SQL等々)を無料で使用することができる。 Hybrid Benefit  と同じ料金、と言い換えてもよい。 本 subscription を作成できる条件は、利用者が Visual Studio Team Server のアカウントを保持していることだが、無料サービス(5名以下)アカウントも対象である。また、使用目的が開発・テストに限定、とされている。

Windows PC から MAC に RDP し、Key をうまく Mapping する術

イメージ
この歳(五十半ば)になって初めてMACを勉強することなったのは自身驚き。仕事場のスペースが限られており、Windows環境とMAC環境、それぞれのスクリーンとキーボードを別個に置くスペースは無い。Windows環境が主であることには変わりないので、MACはRemoteで操作したい。macOSにはVNCが標準装備されているが、どうも好きになれない。実際に使ってみたが、やはりもたつき感。ということで、RDPで MAC を操作できないかと思い標題となった。 macOSは無論 RDP はサポートしていないので、3rd party を探すが、これが意外とプロダクトが少ない。MACから RDP で Windows を操作するクライアントは、Microsoftが無料提供しているし、他にも山ほどプロダクトが存在するが、漸くたどり着いたのが NuoRDS 。 なんだかそっけないWebサイトだが、Free Trialがあるので早速インストール。すんなり動作した。やはりVNCよりも何かと画面の動きがスムースで良い感じ。ここまでは順調に進んだが、問題はキーのマッピングであり、ここから本題となる。 macOS自体に Comand と CTRL キーを入れ替える機能があり、また 3rd party のkey mapper も充実している( Karabiner 等 )。これらは全て物理的に接続されているキーボードではうまく動作してくれるが、リモート操作の場合、設定したマッピングは全く効いてくれないことが判明。しかも悪いことに、私の愛用するキーボードには Windows key が存在しない。古い重いでかい、IBM の化石のようなキーボードなのである。 かなり調べたつもりだが、どうにも解決できないので、様々なケースをスタディーされているであろう NuoRDSのサポートに泣きついてみた。なんと30分後にビシッとした回答を頂戴し、これにて解決に至った、ありがたや。これは全てMAC側の設定で解決できる問題なのであった。System Preference から Keyboard を選択。Modifier Keys... は何十回も設定してみたが前述のとおりリモートアクセスの際には効かない。ここではなくて、 Shortcuts タブをクリック 左の一覧で App Shortcut をク...

High CPU usage after installing .NET 4.7.1

Windows Server 2012 R2 に .NET 4.7.1 をインストール後、CPU が 常に50% 前後に張り付いて下がらない。MSのサイトに10分も待てばすれば下がるとあるが、下がらん。 以下のサイトを発見: https://deploymentresearch.com/Research/Post/386/CPU-spiking-on-Windows-Server-2012-R2-after-applying-updates PowerShellをAdmin権限で立上げ、以下を実行。 $ngens = Get-ChildItem -Path $env:windir\Microsoft.Net -Filter ngen.exe -Recurse;foreach($ngen in $ngens){& "$($ngen.Directory)\$($ngen)" executeQueuedItems} 10分弱待たされたがプロンプトに戻り完了。サーバーを一度リセットすると、解決できている。

Azure AD でパートナー会社社員を guest 登録し、これに multi-factor authentication を強制する術

[guest 登録] - Azure Active Directory を選択 - Users and Groups を選択 - All users を選択 - 上部の New guest user を選択 - メールアドレス(外部ドメイン)とメッセージ入力し、Invite する。 これにて、対象者にメールが届き、Accept すると当社の AD にguest として登録完了となる。guest のアイコンは地球儀みたいで社員と区別 付きやすい。 [guestへ MFAを強制する] - これを実施するには、Invite 側が、Azure AD Premium ライセンスを 保有していること。保有していないと、設定ができない。本目的では、P1 で十分だと思う(現在トライアル中でP2)。P1で、ユーザーあたり 4.5 GBP / Annual、というなかなか微妙な(巧いと思う)値付け。なお、ト ライアルをEnableしてから本作業を実施できるようになるまで、少なく とも10分程待たされた。直ぐにチケット発行せず、待つこと。 guest 側にはライセンスは無用。 - このライセンスは、Azure というよりは、どちらかというと Office365等と同じような扱いとなっているようで、Office 365側の管 理画面にも表示される。Azure側では、このライセンスを各ユーザーに アサインできるようになっている(まだ Preview)が、これが何を意味 するのか、まだ勉強不足。本目的には無関係のようだ(誰にもアサイン していない) - Azure Portal から Azure Active Directory を選択。 - SECURITY 直下の Conditional access を選択。 - New policy を選択。 - 適当に名前を付与し、各パラメターを入力する。MFA を強制したいユー ザー、グループや、 アプリを柔軟に指定できる。 - Enable policy を On にして、Createボタンをクリック。 - これで新ポリシーが出来上がり、わりと直ぐに適用される。 - guest さんに、MFAをテストしてもらい、オシマイ。 --- MFA関係は、なにか...

Forms authentication on Azure

どうも Membership とかの out-of-box な認証が好きになれず、今のところ必要もないので自分で forms authentication ベースで書いている。そのうち気が変わるかもしれないが。 Azure に forms authentication なアプリを deploy したら、認証が全く動作しない。すったもんだの末、以下を web.config に置いて解決。   <system.webServer>       <remove name="FormsAuthenticationModule" />       <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />     </modules> On premises IIS や開発環境では、上の定義は無用。  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config  に既に定義されているから。Azure 環境ではこれが抜けている模様。

Web Deploy with Visual Studio 2017

VSからIISへ FTP/FTPS での deploy は、処理があまりに遅くて精神によろしからず、Web Deploy 環境を作成してみた。俄然速い。 以下、IIS が走っているサーバー上での作業。 Step-1) Control Panel の Program / Uninstall で、Microsoft Web Deploy *.* が存在していたら、一度 Uninstall しちゃおう。 Step-2) Server Manager を立上げ、Web Server (IIS) をクリック。Role Services で Management Tools 下の Management Service が Installed されていなかったら、これを Install する。 Step-3) Web Deploy 3.6 の msi をMSサイトからダウンロードしインストールする。Web Installer は使わんほうが良い。ここから重要、 インストーラーのデフォルトでは、remote web deploy に必要なモジュールがインストール されない 。Custom を選択して全部インストールする!(これで2時間喰われた)。Service Manager て、Web Deployment Agent Service を Start: Automatic に変更し、Run する。その下に表示されている Web Management Service も Automatic, Started になっていることを指さし確認。 Step-4) ここまでの作業が終了すると、サーバーは port 8172 を listen していないとおかしい。netstat -na して指さし確認。 Step-5) IIS Manager を開き、Deploy 対象となる Site をクリック。Management 下に IIS Manager Permissions というアイコンが出来上がっているはず。無かったら、IIS Manager をリスタートしよう。アイコンをダブルクリック。Allow User... から、Windows の user を指定し、追加。以上で IIS サーバー側の作業はオシマイ。 Step-6) 開発環境に戻り、 V...