"Could not load file or assembly 'Microsoft.VisualStudio.VisualC.Utilities'"というエラー(Unity)

UnityプロジェクトをVS2017で開こうとしたときの問題

エラー文言の抜粋

Description: Could not load file or assembly 'Microsoft.VisualStudio.VisualC.Utilities, Version=15.0.0.0,

C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\VisualStudio\15.0_cc4d9d72 \ActivityLog.xml にエラーがあると書かれていても、あんまりわからなかったのでメモ。

対処法

このエラーが出たときは、Visual Studio Installer([ツールと機能を取得]メニューから)から、「C++によるデスクトップ開発」にチェックを入れる。と良いようです。

f:id:aoki1210:20181219001806p:plain
VSの変更

参考

stackoverflow.com

「プロジェクトマネジメント」を知ると幸せになれるかも

こんにちは。青木です。

これは、NEXTSCAPE クラウドインテグレーション事業本部 Advent Calendar 2018 - Qiitaの12/10のエントリです。

一年ぶりのブログ更新です!

今年の登壇

今年は、下記のような登壇を行いました。

「実践ドメイン駆動設計」 から理解するDDD

www.slideshare.net

モデリングフォーラムで登壇したもので、CodeZineで連載してきた内容を1つのスライドにまとめてみました。

HoloLensアプリ設計パターン

www.slideshare.net

HoloLensの設計について紹介してみました。

あとは、Azure Event GridについてACE等でLTしました。

このような設計、開発、技術といったテーマでの発表が多かった私ですが、開発手法や技術要素を極めるだけでは、プロジェクトを成功させることは難しいと感じています。

知っていて損はない「プロジェクトマネジメント」

私の仕事はプロジェクトマネージャ(ときにスクラムマスターやプロダクトオーナー)だったり、プリセールスです。 プロジェクトマネジメントはリーダーだけが実行するものと思われるかもしれませんが、プロジェクトを成功させるためには、少しでも多くのエンジニア(プログラマ)も知っておくと良いと感じています。

学ぶことが難しい「プロジェクトマネジメント」

ネクストスケープではPMBOKの研修を社員が受けることになっているので、比較的学びやすい環境ではあります。

それでも、実業務の役割と乖離(自分の役割がプロジェクトマネージャでないとき、興味を持ちにくい)していることも多いため、PMBOKを学ぶことは容易ではありません。

そのような場合は、開発者の文化に根ざしたアジャイルの方法論からプロジェクトマネジメントを理解していくと興味を持ちやすいです。

アジャイル手法「XP(eXtreme Programing)」によるマネジメント

私自身もプログラムをたくさん書いていた頃に、XP(エクストリーム・プログラミング)というアジャイル手法に出会い、プロジェクトマネジメントの片鱗を学びました。

- eXtreme Programmingの魅力を探る

いくつかをピックアップします。

最も基本となる「4つの変数」

ソフトウェア開発には以下の四つの変数が存在します。

  1. コスト
  2. 時間
  3. 品質
  4. スコープ

特にスコープは一番管理するべき重要なものです。

この4つの変数には相互関係があります。例えば、スコープが増えると時間とコストが増え、品質が下がります。

この4つの変数を常に意識し、共通の認識を持つことが重要です。

「車の運転を学ぶ」ことに例えられるプロジェクト管理

XPでは、ソフトウェア開発の管理に必要なことを「車の運転を学ぶ」という「メタファー(比喩)」にて紹介しています。

突然車が車道を離れ、砂に乗り上げたとき、ふと我に返った。 母はゆっくりと車を車道に戻した。それから実際に運転を教えてくれた。

「運転は車を正しい方向に進ませればいいってものじゃないの。常に注意を払い、こっちへ少しあっちへ少しと修正するものなの。」

これがXPのパラダイムである。直っ直ぐで平坦ではないのだ。物事が完壁に進んでいるように見えても、道から眼を逸らさない。 ~中略~。要求は変化する。設計は変化する。ビジネスは変化する。テクノロジは変化する。チームは変化する。チームのメンバは変化する。変化自体は問題ではない。変化は起こりうるものだ。問題は変化が起きたときに対処できないことだ。

自動車のハンドル操作と同じく、ソフトウェア開発においても、大きな修正を数回行うのではなく、小さな修正を数多くすることが重要となります。

監視とコントロールを適切に行うことで、道から外れたというフィードバックを得て、4つの変数の調整を行います。

アジャイル手法を整理した「アジャイルサムライ」

アジャイル手法をまとめた概念を学ぶには書籍「アジャイルサムライ」がおすすめです。

アジャイルサムライ−達人開発者への道−

アジャイルサムライ−達人開発者への道−

プロジェクトの計画書「インセプションデッキ」

アジャイルサムライは効果的なプラクティスが凝縮された良い本ですが、その中でも、インセプションデッキがおすすめです。

インセプションデッキはプロジェクト立ち上げ時に作成するドキュメントです。

プロジェクトの背景、目的、優先度などを10枚のスライドで記述することで、学びます。

www.slideshare.net

上図スライドでは、ノートに解説を書いていますので、簡単にインセプションデッキを作れます。

インセプションデッキを書くことで、プロジェクトマネジメントに必要なポイントを見える化することができます。

個人的にはゴールを合意することが最も重要だと考えています。

顧客との会話に使いやすい「PMBOK(ピンボック)」

とはいえ、アジャイルの用語は開発者に近い場合も多いため、顧客との会話が成り立ちにくいことがあります。 その点PMBOKでは、IT関係者には認知されている用語が多いため、顧客と共通認識を得やすくなります。

プロジェクトマネジメントの指針「PMBOK」とは

プロジェクトマネジメント知識体系ガイド PMBOKガイド 第6版(日本語)

プロジェクトマネジメント知識体系ガイド PMBOKガイド 第6版(日本語)

プロジェクトマネジメント知識体系ガイド「PMBOK(ピンボック)」(Project Management Body of Knowledge)とは、1987年に米国プロジェクトマネジメント協会(PMI)から発刊された世界中のプロジェクトマネジメントから得られた知見や実務慣行を収集した指針です。

図解入門よくわかる 最新PMBOK第6版の基本

図解入門よくわかる 最新PMBOK第6版の基本

現在、第6版まで発刊されています。この6版からは、ウォータフォールだけではなく、アジャイルによるプロジェクトマネジメントについても多く触れられるようになりました。

うろ覚えしておけば良い「10個の知識エリア」

PMBOKのすべてを覚えることは大変ですので、まずは「10個の知識エリア」という分類があることだけ覚えておけば良いでしょう。 自分の担当しているプロジェクトに問題があった場合、どの知識エリアを掘り下げて、整理するべきかわかればOKです。

名称 説明
統合マネジメント 活動の特定、定義、結合、統一、調整等を行うために必要なプロセス
スコープ・マネジメント 作業の範囲を明確にするとともに、作業の遺漏や余剰を防御
スケジュール・マネジメント 所定の時間で完了するようにマネジメント
コスト・マネジメント 承認済みの予算内で完了するための、計画、見積り、予算化、資金調達、財源確保
品質マネジメント 品質要求事項の計画、コントロール、組織の品質方針
資源マネジメント 人的資源、物的資源を特定、管理
コミュニケーション・マネジメント 情報ニーズが効果的な活動を通して充足
リスク・マネジメント 影響を与える可能性があるリスクをコントロール
調達マネジメント チームの外部から購入または取得
ステークホルダー・マネジメント 影響の強い個人やグループを特定し管理

詳細を知りたい場合には、先に紹介した書籍や下記のリンクを読んでみるといいでしょう。

ksk-2g.hatenablog.jp

ITの現場で発生している課題を打開することは容易ではありません。

このような困ったシチュエーションでは、自分の経験から課題や問題点を整理したくなると思います。

しかし、あえてPMBOKというプロジェクトマネジメントの基礎知識を整理したバイブルを参考にしたほうが「どの視点が漏れているのだろうか」「どのように意識合わせをすれば良いのか」「なにがうまく行っていないのだろうか」という点が明確になるメリットがあります。

ぜひ活用してみてください。

さいごに

これまでプロジェクトマネジメントを学ぶことをおすすめしてきました。

なお、プロジェクトマネージャーのスキルを学ぶには時間がかかります。

理由としては、机上で学んだ知識に加えて、周りの人を動かすだけの経験や自信といったバックボーンが必要になるためです。

しかし、時間はかかるものの、ある程度の努力を続ければ、確実に成果を出すことができます。

チームメンバー間で「このリスク対策は、軽減させる、それとも回避させる?」とか「ステークホルダーのXXさんの権力と関心度は高い?低い?」とかいった会話ができるようになるので、プロジェクトをスムーズに推進できるようになります。

これらにより、失敗プロジェクトを減らせます。

「プロジェクトマネジメント」は、自分自身とチームメンバーが幸せになれる「費用対効果の高い知識」といえるでしょう。

さいごのさいごに

ここまで話してきてなんですが、個人が獲得する技術スキルというものは、本当に地道で、真剣な努力(情熱)がいるものだと感じています。

それゆえにプログラミング、デザイン、CGモデリングアーキテクチャ設計、英語、など一朝一夕で成長できないスキルこそ非常に大きな価値があります。

www.infoq.com

上記の記事の最後に書いていますが、

「プログラミングとは芸術です。(中略) つまり、あなたは毎日小さな奇跡を起こしながら作業を進めるのです。これは大変な仕事です。」

というフレーズに尽きるのではないかと思います。

開発者という芸術家の方に、プロジェクトマネジメントという「買い手の意見を聞いて変えてくださいよー」とか「絵のことをもっと説明してくださいよー」とかお願いするのは無粋な気もするのですが、それでも、ソフトウェア開発は顧客を含めたチームで作り上げる芸術ですので、プロジェクトマネジメントという共通のフレームワークを知ることで、みんながもっと幸せになれるんではないかなぁと思ったりしています。

以上、徒然ですが、読んで頂きましてありがとうございました。自分自身のコア技術というものを改めて見つめ直したいと思う今日この頃です。

12年かけてIT技術記事を100本書いたよ

会社でアドベントカレンダーを書くことになり、ネタを考えていたところ、Webで書いた記事が100本を超えていることに気づきました。

「あー、12年もかけて100本も書いたんだなー」ということでざっくり振り返ってみました。

印象に残っている記事

たくさん書きましたが5本ほどピックアップしてみました。

好きなことをアピールできた「アジャイルサムライ」

www.infoq.com

こういうレポート系は滅多に書かないのですが、自分のアジャイルへの熱い思いがひしひしとした入っていて、感慨深いものがあります。 日本ではアジャイルが流行らないのかなぁと残念に思った時期もあり、最近普通になってきたことが嬉しい限りです。

エンジニアとの新しい出会いがあったよ「Seasar.NET」

codezine.jp

記事自体書くのも大変でしたし、当時ブームだったDIについて書き、理解できて楽しかったという思い出があります。 記事を読んだ当時のリーダーの杉本さんに誘っていただき、Seasar.NETのコミッタになり、Seasar界隈のいろいろな人な出会いがあったのが懐かしいです。

メディアの立ち上げに関われて嬉しい「log4net

codezine.jp

Webメディアの「CodeZine」が2005年に始まったときに書いた記事です。この記事の番号(URL)は71番ですが、最近は1万番を超えていて、 感慨深いものがあります。 立ち上げ当時は翔泳社さんにこの記事を結構プッシュしてもらえたことが懐かしいです。

うまくかけた& 読まれてる「Visual Studio & GIT」

codezine.jp

自分がGitを勉強したいなぁーという理由で書いたのですが、VisualStudioをクライアント、VSTSのGITをサーバとした、チュートリアルがいい感じで一筆書き(重複なく、説明が前後しない)できた満足できる記事でした。 うまくかけた記事のPVがいいかというと全くそんなことは無いのですが、この記事はPVもまあまあ良かったので、嬉しい限りでした。 そのうちVS2017版を書きたいとは思いつつ、結構たいへんなので、そのうち・・・

共著したよ「@IT記事など」

最近はほとんどしてないですが、7本ほど、同僚と執筆しています。 執筆を勧めた方が今も書いていたりするとなんとなく嬉しい気持ちになります。 ちなみに当時はJavaがすごい盛り上がっている時代で、その時の@ITのJavaTipsにかけるなんて嬉しいーという記憶がありました。

なぜ100本も書いたのか

今の仕事と直結しない、将来的に重要な技術を深く学ぶためかもしれないです。例えば今書いているIDDD連載がそのひとつです。DDD(ドメイン駆動設計)が重要な技術で、それを理解し、わかりやすく周りの人に伝えたいという思いがあります。

codezine.jp

今の仕事に直結するビジネス書や技術書は必要に迫られて読みますが、今すぐ追わなくても良い主要技術や最新技術やきっかけがないと理解は困難です。深く理解するためにはアウトプットすることが一番だと思っています。アウトプットはブログでも良いのですが、性格的に締切があって多くの人に見てもらう商用記事のほうがあっているようです。 また、自分がどういう技術が好きかということをアピールすることは、エンジニアとして生きやすくなります。自分の熱い技術について自己開示することは、素敵な仲間を集めるときにも有効に働きます。同じ関心がある人と話すことは、理解を深めたりモチベーションを維持するために有効に働きます。

mayonez.jp

記事を書きたい方は

ちなみに執筆テクニックを身につけたい方は、身近に執筆経験者がいれば、その方に相談してみると良いかと思います。 また、私が参加しているWINGSプロジェクトのようなIT執筆を得意とするプロジェクトもありますので、そういうチームに参加して、執筆をしてみるのも良いかと思います(山田さんいつもありがとうございます)。

www.wings.msn.to

正直、執筆を続けることは大変なのですが、書かなかったら書かなかったらで後悔するので、仕事に支障ない限りで今後も地道に書き続けていけたらと思っています。 執筆に興味をもたれた方は、執筆の世界に踏み込んでみてはいかがでしょうか。

会社のアドベントカレンダーの記事

ちなみに冒頭で書いたアドベントカレンダーの記事はこちらになります。よろしければ、こちらもご覧くださいませ。

blog.nextscape.net

過去記事インデックス

ご参考まで、過去のWeb記事一覧です。

  1. ASP.NET MVCアプリのURLのテストを簡単に行う[C#] - Build Insider

  2. 動画サービスを柔軟に作れるAzure Media Servicesのススメ

  3. オープンソースCMS「DotNetNuke」を日本語化

  4. オープンソースCMS「DotNetNuke」のセットアップ

  5. OSS CMS「DotNetNuke」と無償Web開発環境「WebMatrix」のインストール

  6. あれから10年、いまアジャイルが熱い。アジャイルサムライ他流試合レポート

  7. http://technet.microsoft.com/ja-jp/sqlserver/sql_katsuyo.aspx

  8. http://technet.microsoft.com/ja-jp/sqlserver/sql_katsuyo08.aspx

  9. http://technet.microsoft.com/ja-jp/sqlserver/sql_katsuyo10.aspx

  10. 実践DDD本 第8章「ドメインイベント」~出来事を記録して活用~ (1/3):CodeZine(コードジン)

  11. 実践DDD本 第7章「ドメインサービス」~複数の物を扱うビジネスルール~ (1/4):CodeZine(コードジン)

  12. 実践DDD本 第6章「値オブジェクト」~振る舞いを持つ不変オブジェクト~ (1/4):CodeZine(コードジン)

  13. 実践DDD本 第5章「エンティティ」 ~一意な識別子で同一性を識別~ (1/4):CodeZine(コードジン)

  14. 実践DDD本 第4章「アーキテクチャ」 ~レイヤからヘキサゴナルへ~ (1/4):CodeZine(コードジン)

  15. 実践DDD本 第3章「コンテキストマップ」~「境界づけられたコンテキスト」の関係を俯瞰する地図~ (1/3):CodeZine(コードジン)

  16. ASP.NET Coreの雛形コードを見てみよう (1/3):CodeZine(コードジン)

  17. 実践DDD本 第2章「ドメイン」「サブドメイン」「境界づけられたコンテキスト」を読み解く (1/4):CodeZine(コードジン)

  18. ASP.NET Coreアプリケーションをビルドして起動してみよう (1/4):CodeZine(コードジン)

  19. ASP.NET Coreの概要を理解してセットアップしよう (1/3):CodeZine(コードジン)

  20. ドメイン駆動設計のメリットと始め方 ~ 1章「DDDへの誘い」 (1/3):CodeZine(コードジン)

  21. .NETアプリケーションをMacで開発してDockerで動かそう! (1/3):CodeZine(コードジン)

  22. Gitを用いてVisual Studio開発をしよう (1/6):CodeZine(コードジン)

  23. クラウド時代に最適化されるASP.NET vNextとは ~Visual Studio14(CTP4)とK Projectの紹介 (1/4):CodeZine(コードジン)

  24. ASP.NETに採用されたBootstrapでCSSデザイン変更 (1/4):CodeZine(コードジン)

  25. ASP.NETに採用されたBootstrapのグリッドシステム&ナビゲーション (1/4):CodeZine(コードジン)

  26. ASP.NET MVC5で導入されたBootstrapを理解しよう (1/3):CodeZine(コードジン)

  27. .NETからGoogle Analytics APIを呼び出し、データを取得する (1/4):CodeZine(コードジン)

  28. .NETからOAuthでGoogle APIを呼び出す設定を行う (1/4):CodeZine(コードジン)

  29. S2Dao.NETでXMLレスなO/Rマッピングを行う (1/3):CodeZine(コードジン)

  30. MSBuildを活用して開発時の作業を自動化する (1/3):CodeZine(コードジン)

  31. Log Parserでログを統合的に扱い運用保守に役立てる(実践編) (1/4):CodeZine(コードジン)

  32. Log Parserでログを統合的に扱い運用保守に役立てる(基本編) (1/4):CodeZine(コードジン)

  33. iTextSharpを利用して.NETでPDF帳票を出力する (1/4):CodeZine(コードジン)

  34. RegexDesigner.NETを使って.NETでの正規表現をマスターする (1/5):CodeZine(コードジン)

  35. テンプレートエンジンNVelocityを活用してテキストを生成する (1/3):CodeZine(コードジン)

  36. NAntを活用して開発時の作業を自動化する (1/4):CodeZine(コードジン)

  37. S2DaoでXMLレスなO/Rマッピングを行う (1/3):CodeZine(コードジン)

  38. S2Container.NETのDIとAOPを活用し生産性の高いシステムを構築する (1/3):CodeZine(コードジン)

  39. NHibernateを利用してSQLを書かずにデータベースにアクセスする方法:CodeZine(コードジン)

  40. iBATIS.NETにてO/Rマッピングを行う(DAO Framework編):CodeZine(コードジン)

  41. iBATIS.NETにてO/Rマッピングを行う(SQL Maps編):CodeZine(コードジン)

  42. log4netでデバッグや障害解析に役立つログを出力する (1/4):CodeZine(コードジン)

  43. JakartaPOIでExcel形式の帳票を出力する:CodeZine(コードジン)

  44. BlogEngine.NETでブログを作成してみよう (1) インストールはWebPIと手動の2通りの方法で可能 | マイナビニュース

  45. Visual Studio 2010の拡張機能を活用しよう【後編】 (1) Javascriptファイルの構造の可視化、右クリックメニューを便利にするツールを紹介 | マイナビニュース

  46. Visual Studio 2010の拡張機能を活用しよう【前編】 (1) Visual Studio全般の機能向上、コマンドを追加できるツールを紹介 | マイナビニュース

  47. LightSwitchで業務アプリケーションを簡単に作ってみよう (1) マイクロソフトの最新技術を用いるLightSwitch | マイナビニュース

  48. 簡単&快適! 新たなWeb開発環境「Microsoft WebMatrix Beta」が登場 (1) SQL Serverの管理画面を提供 | マイナビニュース

  49. xUnit.NETでユニットテストをしてみよう【後編】 (1) Assertクラスの検証メソッド | マイナビニュース

  50. xUnit.NETでユニットテストをしてみよう【前編】 (1) xUnit.NETの入手と環境設定 | マイナビニュース

  51. Microsoft Ajax MinifierでJavaScriptを縮小化しよう (1) インストールは1ファイルをダブルクリックするだけ | マイナビニュース

  52. FiddlerとWatcherでWebサイトのセキュリティをチェックする (1) FiddlerとWatcherのインストール | マイナビニュース

  53. ロギングライブラリ「NLog」で簡単ログ出力 (1) log4netに比べて導入が簡単 | マイナビニュース

  54. SeleniumとNUnitでWebサイトのテストを自動化する【後編】 | マイナビニュース

  55. SeleniumとNUnitでWebサイトのテストを自動化する【前編】 (1) Visual Studio 2008ベースのテスト環境を準備する | マイナビニュース

  56. コンソールアプリの引数を簡単に扱える「Command Line Parser Library」 (1) コマンドラインパーサーとは | マイナビニュース

  57. .NET向けHTMLパーサー「Html Agility Pack」で簡単スクレイピング (1) Html Agility Packとは | マイナビニュース

  58. AutoMapperでオブジェクト間のデータコピーを行う (1) AutoMapperとは | マイナビニュース

  59. 「Open DBDiff」でSQL Serverのスキーマを比較/同期する (1) データベース間の相違をチェック | マイナビニュース

  60. C#でZIPファイルを扱えるDotNetZip (1) .NETで書庫を作成、圧縮 | マイナビニュース

  61. PALでWindowsインフラのパフォーマンスをチェックする (1) PALとは | マイナビニュース

  62. Moqを活用して.NETでモックを使ったテストを行う (1) Moqとは | マイナビニュース

  63. Monoで.NETアプリケーションを動かしてみよう (1) Monoとは | マイナビニュース

  64. T4 TemplateとL2ST4でモデルからソースコードを生成する (1) T4 Templateとは | マイナビニュース

  65. F#、IronPython、Booまで使えるフリーの統合開発環境「SharpDevelop」 (1) インストールと設定 | マイナビニュース

  66. PHPExcelを使ってPHPでExcelファイルを出力する (1) PHPExcelとは | マイナビニュース

  67. C#とWPFで実装されたモデリングツール「MiniUML」 (1) MiniUMLとは | マイナビニュース

  68. LightSpeedで始める.NETでの光速開発 - 応用編 (1) 条件指定(QueryExpression) | マイナビニュース

  69. LightSpeedで始める.NETでの光速開発 - 基本編 (1) EntityとUnitOfWork | マイナビニュース

  70. LightSpeedで始める.NETでの光速開発 - モデリング編 (1) LightSpeedとは | マイナビニュース

  71. テストプラットフォーム「Gallio」を理解する - CUIテスト編 (1) CUIテストランナー「Echo」 | マイナビニュース

  72. テストプラットフォーム「Gallio」を理解する - GUIテスト編 (1) GUIテストランナー「Icarus」 | マイナビニュース

  73. テストプラットフォーム「Gallio」を理解する - 導入編 (1) .NETのテストフレームワーク(NUnit/csUnit) | マイナビニュース

  74. Transact-SQLの関数を理解しよう - NULLと型変換編 (1) NULL値の関数、CASE関数 | マイナビニュース

  75. Transact-SQLの関数を理解しよう - 日付/数学編 (1) 日時妥当性、現在日時 | マイナビニュース

  76. Transact-SQLの関数を理解しよう - 文字列編 (1) 取り出し、検索、置換 | マイナビニュース

  77. SubSonicを使ってASP.NETで簡単にDBアクセスする - 開発TIPS集 (1) 開発TIPS集1 | マイナビニュース

  78. SubSonicを使ってASP.NETで簡単にDBアクセスする - プログラミング編 (1) データの追加 | マイナビニュース

  79. SubSonicを使ってASP.NETで簡単にDBアクセスする (1) SubSonicとは | マイナビニュース

  80. 最初にマスターしたいVisual Studioのデバッグ機能 - 応用編 (1) ステップオーバー/ステップアウト | マイナビニュース

  81. 最初にマスターしたいVisual Studioのデバッグ機能 - 基本編 (1) ブレークポイント | マイナビニュース

  82. SandcastleでXMLドキュメントコメントからヘルプを生成する - ヘルプ生成編 (1) ヘルプの種類とヘルプコンパイラの入手 | マイナビニュース

  83. SandcastleでXMLドキュメントコメントからヘルプを生成する - HTML生成編 (1) XMLドキュメントコメントの書き方 | マイナビニュース

  84. C#とSharpMapで地図を描画するアプリケーションを作る -高機能編 (1) ズームと中央位置を設定 | マイナビニュース

  85. C#とSharpMapで地図を描画するアプリケーションを作る -シンプル編 (1) プログラム作成のための準備 | マイナビニュース

  86. Strutsベースのアプリケーション環境を用意(AppFuse):JavaTips 〜Apache/Jakarta編 - @IT

  87. Antでwarファイルを作成する:JavaTips 〜Apache/Jakarta編 - @IT

  88. MergeDocでEclipseのポップアップ表示を日本語化する:JavaTips 〜Eclipse活用編 - @IT

  89. Eclipse 3.0のインストールと日本語化を行う:JavaTips 〜Eclipse活用編 - @IT

  90. Strutsでコンフィグレーションファイルを分割する:JavaTips 〜Apache/Jakarta編 - @IT

  91. Antの活用(ファイル操作):JavaTips 〜Apache/Jakarta編 - @IT

  92. Strutsのプラグインを作る:JavaTips 〜Apache/Jakarta編 - @IT

  93. Antの活用(ファイルセットの利用):JavaTips 〜Apache/Jakarta編 - @IT

  94. POIを使用してJavaからExcelデータを読み込む:JavaTips 〜Apache/Jakarta編 - @IT

  95. Antでアプリケーションのデプロイ作業を効率化する:JavaTips 〜Apache/Jakarta編 - @IT

  96. Strutsの設定ファイルから仕様書を生成する:JavaTips 〜Apache/Jakarta編 - @IT

  97. POIを使用してExcelの書式を設定する:JavaTips 〜Apache/Jakarta編 - @IT

  98. EclipseでライブラリとJavadocを関連付ける:JavaTips 〜Eclipse活用編 - @IT

  99. POIを使用してJavaからExcel出力を行う:JavaTips 〜Apache/Jakarta編 - @IT

  100. Eclipseでライブラリとソースコードを関連付ける:JavaTips 〜Eclipse活用編 - @IT

  101. Eclipseのソース管理にVisual SourceSafeを活用:JavaTips 〜Eclipse活用編 - @IT

  102. Eclipseのソース管理にVisual SourceSafeを活用:JavaTips 〜Eclipse活用編 - @IT

  103. EclipseのCVS機能で排他的な開発を行う:JavaTips 〜Eclipse活用編 - @IT

Azure SQL DatabaseのbacpacでSQL Serverインポートエラー(CREATE MASTER KEY失敗 : SQL72045)

Azure SQL Databaseからエクスポートして生成したbacpacファイルを、ローカルのSQL Server(2012,2014,2016など)にSSMSでインポートする場合、以下のエラーがでることがあります。

パッケージをインポートできませんでした。

Error SQL72045: スクリプトの実行エラーです。実行されたスクリプト:

CREATE MASTER KEY;

内容

Azure SQL Database側で、マスターキーが設定されています。

回避策は以下のMSDNブログに書いている通りです。

Exported database from Azure SQL failed to be imported to Azure SQL or to local SQL Server – Azure SQL Database Support

原因

AuditやTDE(透過的暗号化)を使うときマスターキーが使用されます。Azure SQL Databaseではパスワードがないマスターキーの作成が可能ですが、ローカルのSQL Serverではマスターキーのパスワード設定が必要です。

回避策

選択肢1 (設定変更)

  • Azureでエクスポートする前に、エクスポート元の既存DBのマスターキーを変更する。

選択肢2(PowerShellパッチ)

  • PowerShellファイルをダウンロードして「RemoveMasterKey.ps1 -bacpacPath “C:¥BacPacs¥Test.bacpac"」というコマンドを実行→拡張子にpatchが付与されたファイルが追加されます。このファイルを使ってインポートする。
  • PowerShellの中では、以下の処理を実施している
    • スキーマやセキュリティ情報を含むmodel.xmlからマスターキーオブジェクト(<Element Type=“SqlMasterKey” />)と資格証明オブジェクト(SqlDatabaseCredential)を削除
    • model.xmlを変更していないかを示すチェックサムがあるので、計算して、Origin.xmlに記載

選択肢3(手動パッチ)

  • 選択肢2がうまくいかない場合のため、手動によるBacpacの編集を解説しています。
    • 手動でZIP(bacpac)を解凍し、model.xmlとOrigin.xmlを編集し、再度ZIP圧縮します。
    • 詳細の説明はこちら→ Editing a .bacpac file – Azure SQL Database Support 。ここにはOrigin.xmlに保存するハッシュを計算するps1もあり。
    • トラブルシューティングのための説明となります。DBファイルサイズが大きい場合などに発生しうるのかもしれません。
    • なお、model.xmlなどのファイル名の大文字小文字は重要です。
    • 設定そのものとDataフォルダの中身(BCP用データ)に関係はないため、Dataフォルダを軽いものだけにしてテストをすると良いと思います。Windows標準のZIPではだめでしたが、別のZIP圧縮ツールではうまく行ったということもありました。

選択肢2が楽で良いのですが、まれに選択肢3を使わなければ行けない場合がありました。

参考

1日で基本が身に付く! JavaScript超入門


たった1日で基本が身に付く!  JavaScript 超入門

たった1日で基本が身に付く! JavaScript 超入門

「たった1日で基本が身に付く! JavaScript超入門」を読みました。

 このエントリーは、WINGSプロジェクトのレビュアーに応募し献本してもらいましたので、その書評となります。

 

この本の良いところは、効率よくJavaScriptの基本を学べるところではないかと思います。

JavaScriptは、歴史も長く、関連するオープンソースも多数あり、情報量が非常に多い言語です。

書籍のメイン部分については、素のJavaScriptを使って、環境構築方法や構文を学べます。

そして、HTMLの操作や、イベントといったつまずきがちな部分を1章ずつ取って、わかりやすく説明しています。

さらに、WebAPIやJSONについて説明しつつ、実際にWebプログラミングを書いてみて動的なサイトを作ってみることができます。

最後には、W3Schoolsやjsdo.itといったサンプルサイトや、JQueryの概要について紹介しています。

JavaScriptに興味ある人が最初に手に取る一冊として最適ではないかと思いました。

 

 

「たった1日で基本が身に付く! HTML&CSS 超入門」を読みました

たった1日で基本が身に付く!  HTML&CSS 超入門

たった1日で基本が身に付く! HTML&CSS 超入門

「たった1日で基本が身に付く! HTML&CSS 超入門」を読みました。著者の方は、スクールの講師としてWebを教えるなどされていることもあり、大変読みやすい一冊でした。

この書籍の良さは、HTML/Web技術の変遷を踏まえつつ、抑えるべきポイントをシンプルに説明していることだと思います。

このエントリーは、WINGSプロジェクトのレビュアーに応募し献本してもらいましたので、その書評となります。

HTML関連(前半)

HTML4.01、XHTML1.0、HTML5が存在する中で、違いを理解しつつ要点を学ぶことができます。

  • サンプルは、主に最新のHTML5が主体で解説されています。ただ、HTML4のときは△△のように書いていたが、HTML5で○○のように書くという補足もあります。そのため、実際のWebサイトのHTMLを読んだときの理解も捗ります。
  • HTML構文の説明だけではなく、Web制作の流れや、ディレクションする上で必要な用語の解説も含まれています。また、divタグの使い所やid/classの使い分けなどの実践的なノウハウも書かれています。
  • さらにHTMLのフォームについても紹介しています。

CSS関連(後半)

HTML同様にCSSについても、わかっているようでわかっていない違いをうまく整理されています。

  • まず、子セレクタと子孫セレクタといったセレクタの種類と違いに関する説明を始めに行っています。
  • そして、デザイン崩れの調査時に理解するべきスタイルの継承について解説しています。親要素に指定したプロパティ値が子要素へと引き継がれる仕組みや、テキスト、リスト、テーブル関連以外の要素に対しても継承するinheritキーワードの解説をしています。
  • そして、スタイルの競合についても紹介しており、作成者スタイルシート>ユーザー(閲覧者)スタイルシート>ブラウザデフォルトの優先度を!importantにて上げる方法や、セレクタの詳細度、詳細度が同じ場合の場所による優先度(後勝ち)について紹介しています。
  • さらに、CSSとして重要な、ボックスモデルのcontent、height、width、padding、border、marginについて紹介し、色指定、テキスト、フォントについても紹介しています。
  • 実際に段組みレイアウト設定を用いて、固定レイアウト(px)と可変レイアウト(%)の違い、ブロックレベル要素(改行されて表示され親要素と同じ幅をもつh1-h6,p,table.ul,ol,dl,div)とインライン要素(横並びに配置でき、高さや上下マージンが指定できないa,em,img,span)などについて紹介しています。
  • またフロートレイアウトについても図を用いてわかりやすく解説しています。

最後に

  • 初心者向けとしてははもちろんですが、すでにHTMLやCSSの概要を把握しつつも、いま一つ理解が足りなかったり、人に教えることができないといったレベルアップを考えている方にもおすすめしたい一冊です。
  • HTMLやCSSを学びたいときに、分厚いリファレンス本を買ってもポイントが分からず使いこなせないことがあります。また初心者向けの本は簡単過ぎて得るものが無いことがあります。この本のバランスはとても良いため、知っている知識を体系的に理解するために最適な内容だと思いました。

よろしければ一度、読んでみてはいかがでしょうか。

macOS SierraでWindows PC風のキーバインド(ショートカット)を設定

問題

そろそろ安定しているから大丈夫だろうとMacBookAireの「OS X El Capitan」から「macOS Sierra」にアップグレードしたところ、他の方と同様にkarabinerが使えないという点でハマりました。

www.apple.com

私はWindowsでの作業も多いので、PC風のキーバインドにしています。(Cntl+Cでコピーだったり、Cntl+Aで全選択だったり、また、FN+左でHome、FN+右でEndなど。)

対策

対策は他の方と同様で、Hammerspoon、キーバインドの変更となりました。

Hammerspoon

www.hammerspoon.org

Hammerspoonは、macOS の操作を自動化できるツールです。 Luaという記法で記載します。

Lua - Wikipedia

Init.luaを次のように記載します。

HammerspoonのConfig (Init.lua)
hs.hotkey.bind({"ctrl"}, "c", nil, function() hs.eventtap.keyStroke({"cmd"}, "c") end) 
hs.hotkey.bind({"ctrl"}, "v", nil, function() hs.eventtap.keyStroke({"cmd"}, "v") end) 
hs.hotkey.bind({"ctrl"}, "w", nil, function() hs.eventtap.keyStroke({"cmd"}, "w") end) 
hs.hotkey.bind({"ctrl"}, "q", nil, function() hs.eventtap.keyStroke({"cmd"}, "q") end) 
hs.hotkey.bind({"ctrl"}, "f", nil, function() hs.eventtap.keyStroke({"cmd"}, "f") end) 
hs.hotkey.bind({"ctrl"}, "a", nil, function() hs.eventtap.keyStroke({"cmd"}, "a") end) 
hs.hotkey.bind({"ctrl"}, "x", nil, function() hs.eventtap.keyStroke({"cmd"}, "x") end) 
hs.hotkey.bind({"ctrl"}, "z", nil, function() hs.eventtap.keyStroke({"cmd"}, "z") end) 
hs.hotkey.bind({"ctrl"}, "s", nil, function() hs.eventtap.keyStroke({"cmd"}, "s") end) 

「コントロール+C」を「コマンド+C」に変換したりしてます。

DefaultKeyBinding.dictで、キーバインド変更

続けて、MacOSキーバインドを変更して、Fnキーと矢印キーの調整します。

qiita.com

DefaultKeyBinding.dictというファイルを作って、キーバインドを設定します。

 mkdir -p ~/Library/KeyBindings
 cd ~/Library/KeyBindings
 touch DefaultKeyBinding.dict
 open -a TextEdit DefaultKeyBinding.dict

エディタが開いたら次のように記述(UTF-8)。

{
     /* home */
    "\UF729"  = "moveToBeginningOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";

    /* end */
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";

    /* page up/down */
    "\UF72C"  = "pageUp:";
    "\UF72D"  = "pageDown:";
}

MACを再起動で反映されます。

だいたい動いたので、しばらくはこれで行こうかと思います。

今後は、karabiner elementsの発展に期待です。

参考

https://groups.google.com/forum/#!topic/osx-karabiner/xkh0oZfY7pk slongwell.github.io

aoki1210.hatenablog.jp