genpaku's footprint

忘れてもいいように、技術で日々が少し便利になることを書いていきます

Xamarinでプロジェクト名を含める場合に気をつけるべきこと

今回ハマったこと

今回は、Xamarin Studioを使ってXamarin.Formsプロジェクトを作ってみました。 そしたら、いきなりビルドエラーになってしまったというお話。

結論としては、

• App Nameにはアプリ名だけを入力しよう。App Nameにプロジェクト名.アプリ名という入力は、ビルドエラーになります。(解決方法は、#どこを修正したのか?を見てください)
• プロジェクト名はOrganization Identifierに含める(infoにも書いてあります)
• Xamarinをプロジェクト名に含めるのはやめた方がいいです。

もしかすると下記のような人が検索で引っかかってしまったら、この辺がオススメです。
・Xamarin Studioインストールしてみたいという方

blogs.msdn.microsoft.com

・Xamarin.Formsとはなんぞやということを知りたい人

https://www.xlsoft.com/jp/products/xamarin/forms.htmlwww.xlsoft.com

どんなエラーが出たの?

今回は「Test.MobileApp」というApp Nameをつけてみました。 f:id:crossroad19931110:20160905224028p:plain

どこを修正したのか?

でも何てことはない、クラス名に「.(ドット)」が入っているだけではないですか。

エラーにもしっかり、書いてあります。こう言う時、C#というよく知る言語だと落ち着いて対処できますね。 (知らない言語やツールを使ってエラーが出ると簡単なエラーで焦って失敗するのは私だけでしょうか。)

[Test.MobilAppPage.xaml.cs]

using Xamarin.Forms;

namespace Test.MobileApp
{
    public partial class MobileAppPage : ContentPage
    {
        public MobileAppPage()
        {
            InitializeComponent();
        }
    }
}

そして、もちろん。対になっている「Test.MobleAppPage.xaml」も直します。 この辺もasp.netなどに似てますね。(WPFは開発したことがないので、多分似ていると思います。)

[Test.MobleAppPage.xaml]

<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Test.MobileApp" x:Class="Test.MobileApp.MobileAppPage">
    <Label Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>

これで動くだろうと思ったのですが、iOSのデバッガで起動すると「Welcome to Xamarin Forms!」が表示されません。 なぜだ・・・。と思っていたら、iOS側で「Info.plist」も変えてあげる必要がありました。 [Info.plist] f:id:crossroad19931110:20160905230418p:plain

android側の「AndroidManifest.xml」も同様に変更してあげます。

変更は以上になります。
これで無事、iOSのデバッガで「Welcome to Xamarin Forms! 」と表示されました。

ちなみに最初の結論に記述した「Xamarinをプロジェクト名に含めるのはやめた方がいいです。 」については、 Xamarinの名前空間とかぶってしまうので、やめた方がいいです。 もちろん、globalをつけるとか回避策はありますが、面倒なことこの上ないのでオススメできません。 ちなみにXamarinAppみたいな名前は問題ありません。

まとめると、よく読まずにAppNameにアプリの名前以外を含んでしまったら、ビルドエラーになって困ったというおちょっこちょいなエラーでした。 忘れてもいいように。

Xamarinにハマった

Xamarinのいいところ

Xamarinのいいところを一言で言うと。

C#スマートフォンアプリ(ネイティブアプリ)が全部書けるところ

もちろん、ビューはXamarin.Native(※1)で書けばそれぞれに決まりを覚えなければいけない。 Xamarin.Forms(※2)を使ったとしても少し複雑なビューを作ろうと思った場合はそれぞれの決まりを覚えなければいけない。

それでも、それでも、使い慣れたC#とXMLスマートフォンアプリが作れちゃう。 それはすごく素晴らしい。今からSwiftやJavaを覚えるよりは学習コストが全然違う。

Webアプリ、スマートフォンアプリのビジネスロジックを全てC#共通で作ってしまえる。 そんなことを想像するだけでワクワクしてきます。 (実際にやろうとすると問題は山積みかもしれませんが)

でもそんな可能性を感じるツールでした。

※1 ロジック部分は共通化し、ビュー部分は個別に作るやり方
※2 ロジック部分とビュー部分の大半を共通化して作るやり方

Python Tools for Visual Studioでプロジェクトを作成する

前回、Python Tools for Visual StudioVisual Studioにインストールしたので、 早速使ってみた。

genpaku1110.hatenablog.com

まずは、プロジェクトを作成する

メニューバーから[ファイル]-[新規作成]-[プロジェクト]をクリックします。

[新しいプロジェクト]ポップアップの左メニューから「Python」を選択します。

真ん中のテンプレートに[Python Application]があるのでそれを選択します。

f:id:crossroad19931110:20160521141957p:plain

最後に[OK]ボタンをクリックします。

プロジェクトが出来ました。

環境設定をする

プロジェクトの[Python Enviroments]を右クリックして、[View All Python Enviroments]をクリックします。

f:id:crossroad19931110:20160521142435p:plain:w300

[+Custom...]をクリックします。 インストールされているPythonの環境を指定して、[Apply]をクリックします。

f:id:crossroad19931110:20160521142810p:plain:w300

Windows環境にPythonにインストールする方法はこちらから。

genpaku1110.hatenablog.com

実行してみる

PythonApplication1.pyに下記のように入力します。

print('Hello Python!')

エディター上で右クリックして、[Start without Debugging]をクリックします。

f:id:crossroad19931110:20160521143537p:plain

実行されました。

f:id:crossroad19931110:20160521143639p:plain:w300

めでたし。めでたし。

Python Tools for Visual Studio を Visual Studio 2015に導入してみる

私は、IDE がないとプログラムを書くことができない病気にかかっています。 その中でもVisual Studioは非常に優秀なIDEだと感じています。

最近、Pythonを始めたばかりの私は、Visual StudioPython用のツールがあることを知ったので早速インストールしてみました。 この手順はすでにVisual Studioが入っている状態で、Python Tools for Visual Studioを導入する手順になります。

1 . メニューバーから[ツール]-[拡張機能と更新プログラム]をクリックします。

2 . オンラインタブを選択して、「Python Tools for Visual Studio」で検索します。

f:id:crossroad19931110:20160518230657p:plain

3 . ダウンロードをクリックするとPython Tools for Visual Studioのサイトが表示されるので、ダウンロードをクリックします。

4 . ダウンロードしたファイルを実行します。

5 . インストールする機能が表示されるので、「次へ」をクリックします。

f:id:crossroad19931110:20160518230812p:plain:w300

6 . 「更新」をクリックします。

7 . Visual Studioを起動します。

8 . プロジェクトの新規作成をクリックします。

f:id:crossroad19931110:20160518231716p:plain

おーPythonのプロジェクトが追加されました。

めでたし。めでたし。

参考サイト:

postd.cc

WindowsでPythonを始めてみる

とりあえず、今更ながらPython熱が発生しました。

というわけでまずはインストールしてみました。

下記のファイルをインストールしたいフォルダにおいて、管理者権限で実行。

$scriptPath = $MyInvocation.MyCommand.Path
$currentFolder = Split-Path -Parent $scriptPath
$download = Join-Path $currentFolder "python-3.5.1-embed-amd64.zip"
# ダウンロード
Invoke-WebRequest -Uri 'https://www.python.org/ftp/python/3.5.1/python-3.5.1-embed-amd64.zip' -OutFile $download -Verbose -PassThru
# 解凍
Expand-Archive -Path $download -DestinationPath $currentFolder
# 環境変数に登録
$path = [System.Environment]::GetEnvironmentVariable('PATH', 'Machine')
$path += ';' + $currentFolder
[System.Environment]::SetEnvironmentVariable('PATH', $path, 'Machine')

あとはコマンドプロンプトpythonとタイプするだけでした。

Invoke-RestMethodを使ってみる

curlの代わりにInvoke-RestMethod

SolrをやっているとRestApiを使う機会がかなりあります。 そんな時に必ず出てくるのが「curl」というコマンドです。 カールと読むらしいです。httpだけではなく、様々なプロトコルが 使えるようです。 参考URL: cURL - Wikipedia

でも私はWindowsユーザーです。 Cygwinを入れてもいんですけど、インストールが面倒です。 それならデフォルトに入っているPowershellを使おうと思い調べてみたところ 「Invoke-RestMethod 」なるコマンドを見つけました。

※ ちなみに名前の通り、Invoke-RestMethodで使えるプロトコルは、httpとhttpsです。

参考URL: Invoke-RestMethod

Invoke-RestMethod を使ってみる

簡単に使い方をまとめておきます。

  • Invoke-WebRequestを利用してFormを取得してPOSTするのはこんな感じらしいです。(上のサイトより)
$r = Invoke-WebRequest http://website.com/login.aspx 
$r.Forms[0].Name = "MyName" 
$r.Forms[0].Password = "MyPassword" 
Invoke-RestMethod http://website.com/service.aspx -Body $r
  • Jsonファイルを利用して、POSTします。
Invoke-RestMethod -Uri $api -InFile data\book_demo.json -ContentType 'application/json' -Method Post

-Uri ・・・ 呼び出す、APIのURLを指定します。
-InFile ・・・ bodyになるファイルを指定します。
-ContentType ・・・ ContentTypeを指定します。 (content-type一覧
-Method ・・・ HTTPメソッドを指定します。

  • RSSサービスを利用して、GETでデータを取得します。
Invoke-RestMethod -Uri http://news.yahoo.co.jp/pickup/computer/rss.xml -Method Get | Format-Table -Property title,link

簡単ですね。いろいろ、使い道がありそうです。

Solr 5.4.1で外部から管理画面にアクセスする

タイトルに書いたことをやろうと思ったのですが、Solr自体に制限がかかってなかったので、 下記のポートを開けてあげればできました。

  • Windows Firewall
  • それ以外の外部Firewall

試した環境は下記のとおりです。

逆を言えばそのままだとどこからも見えてしまうので、 どこかで制限をかけてあげる必要がありそうです。

アプリケーションサーバー(jetty)で制限をかけるときに参考になりそうなありがたいブログをメモしておきます。 blog.yoslab.com

とりあえず、忘れてもいいように。