- ホームスクリーンのなにもないところで長押しする
- 「ウィジェット」をタップ
- 下へスクロールし「設定のショートカット」を長押しする
- 「設定のショートカット」から「通知ログ」をタップ
Author Archives: admin
Visual Studio Codeにpythonの拡張がインストールできない
どうやらダウンロードのLimit値に引っかかってダウンロードできないことがあるみたい
直ったやり方
- C:\User\(UserName)\.vscodeフォルダを削除する
- https://marketplace.visualstudio.com/items?itemName=ms-python.pythonへ行って”Download Extension“から拡張子vsixのファイルをダウンロードする。
- VSCodeを起動して以下のようにインストールする
アンドロイドアプリでE/Google Maps Android API: Authorization failure.
アンドロイドアプリでGoogleMapを使おうとすると地図が表示されず、アプリの出力にいかのエラーが表示されている。
1 2 3 4 5 6 |
E/Google Maps Android API: Authorization failure. Please see https://developers.google.com/maps/documentation/android-api/start for how to correctly set up the map. E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com) Ensure that the "Google Maps Android API v2" is enabled. Ensure that the following Android Key exists: API Key: zzzzzzzzzzzzzzzzzzz Android Application (<cert_fingerprint>;<package_name>): xx:xx:...;com.example.test |
GCPのCredentialsで自分のAPIキーとフィンガープリントが上記のエラー出力と一致しているかを確認する。
フィンガープリントはどこ
Windowsの場合はC:\Users\
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
c:\(PathToAndroidStudio)\AndroidStudio\jre\bin\keytool.exe -v -list -keystore c:\Users\(UserName)\.android\debug.keystore Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry Alias name: androiddebugkey Creation date: Jul 4, 2020 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: C=US, O=Android, CN=Android Debug Issuer: C=US, O=Android, CN=Android Debug Serial number: 1 Valid from: Sat Jul 04 00:12:18 JST 2020 until: Mon Jun 27 00:12:18 JST 2050 Certificate fingerprints: SHA1: xx:xx:.... SHA256: xx:xx:.... Signature algorithm name: SHA1withRSA (weak) Subject Public Key Algorithm: 2048-bit RSA key Version: 1 |
cygwinが壊れた。Error: Could not fork child process: Resource temporarily unavailable (-1).
Linuxでdotnetをやってみる
インストール
いろいろなインストール方法があるようだが最も原始的なshファイルをダウンロードして実行する方法で行う。
1 2 3 4 5 6 7 8 9 10 |
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.10 DISTRIB_CODENAME=groovy DISTRIB_DESCRIPTION="Ubuntu 20.10" $ mkdir dninst $ cd dninst $ wget https://dot.net/v1/dotnet-install.sh $ chmod +x dotnet-install.sh $ ./dotnet-install.sh -c Current |
これで~/.dotnet/にインストールされる。しかしパスが張られないので自分でやる必要がある。
1 |
$ export PATH=$PATH:$HOME/.dotnet |
これで使えるようになった。使えるようになったかテスト。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ dotnet --info .NET SDK (global.json を反映): Version: 6.0.101 Commit: ef49f6213a ランタイム環境: OS Name: ubuntu OS Version: 20.10 OS Platform: Linux RID: ubuntu.20.10-x64 Base Path: /home/ebisu/.dotnet/sdk/6.0.101/ Host (useful for support): Version: 6.0.1 Commit: 3a25a7f1cc .NET SDKs installed: 6.0.101 [/home/ebisu/.dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 6.0.1 [/home/ebisu/.dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 6.0.1 [/home/ebisu/.dotnet/shared/Microsoft.NETCore.App] To install additional .NET runtimes or SDKs: https://aka.ms/dotnet-download $ |
sdk,runtimeともに6.0.1がインストールされた。sdkは開発ツール、runtimeは実行環境。
コンソールアプリをつくる
1 2 3 4 5 6 |
$ mkdir -p ~/T/dntest $ cd ~/T/dntest/ $ dotnet new console $ ls Program.cs dntest.csproj obj/ $ |
つれくた。Program.csはC#のソースファイル、dntest.csprojはプロジェクトファイル。
実行してみる
1 2 3 |
$ dotnet run Hello, World! $ |
できた
GUIアプリをつくってみる
WindowsではWinFormを使ったGUIアプリをつくれるが、Linuxではつくれない。そこでavaloniaというライブラリを利用してGUIアプリをつくってみる。まずはavaloniaテンプレートをインストールする必要がある。このテンプレートがあると新規アプリがつくれる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$ mkdir -p ~/T/avatest $ cd ~/T/avatest/ $ dotnet new avalonia --search テンプレートを探しています... テンプレートソースからの一致: NuGet.org これらのテンプレートは、入力: 'avalonia' と一致しました テンプレート名 短い名前 作成 言語 パッケージ ダウンロード -------------------- ------------------------- ------------------- ------- ---------------------------------- ------ Avalonia .NET Cor... avalonia.app AvaloniaUI [C#],F# Avalonia.Templates 18k Avalonia .NET Cor... avalonia.mvvm AvaloniaUI [C#],F# Avalonia.Templates 18k Avalonia Cross Pl... avalonia.xplat AvaloniaUI [C#] Avalonia.Templates 18k Avalonia FuncUI App funcUI.basic JaggerJo F# JaggerJo.Avalonia.FuncUI.Templates 4k Avalonia FuncUI A... funcUI.full JaggerJo F# JaggerJo.Avalonia.FuncUI.Templates 4k Avalonia FuncUI Q... funcUI.quickstart JaggerJo F# JaggerJo.Avalonia.FuncUI.Templates 4k Avalonia Resource... avalonia.resource AvaloniaUI Avalonia.Templates 18k Avalonia Styles avalonia.styles AvaloniaUI Avalonia.Templates 18k Avalonia Template... avalonia.templatedcontrol AvaloniaUI [C#] Avalonia.Templates 18k Avalonia UserControl avalonia.usercontrol AvaloniaUI [C#],F# Avalonia.Templates 18k Avalonia Window avalonia.window AvaloniaUI [C#],F# Avalonia.Templates 18k Epoxy.Avalonia MV... epoxy-avalonia Kouji Matsui (@k... [C#],F# Epoxy.Templates 3k テンプレートを使用するには、次のコマンドを実行してパッケージをインストールします。 dotnet new --install <PACKAGE_ID> 例: dotnet new --install Avalonia.Templates $ $ dotnet new --install Avalonia.Templates $ dotnet new avalonia.app テンプレート "Avalonia .NET Core App" が正常に作成されました。 $ ls App.axaml App.axaml.cs MainWindow.axaml MainWindow.axaml.cs Program.cs avatest.csproj $ |
つくれた。axamlファイルはウインドウの定義ファイル。
実行してみる
1 2 3 4 5 6 7 8 9 10 11 |
$ dotnet run It was not possible to find any compatible framework version The framework 'Microsoft.NETCore.App', version '5.0.0' (x64) was not found. - The following frameworks were found: 6.0.1 at [/home/ebisu/.dotnet/shared/Microsoft.NETCore.App] You can resolve the problem by installing the specified framework and/or SDK. The specified framework can be found at: - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=5.0.0&arch=x64&rid=ubuntu.20.10-x64 $ |
ランタイムの5.0がないため実行できないようだ。先程確認したように、今は6.0しかインストールされていない。
5.0をインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
$ cd ~/dninst/ $ ./dotnet-install.sh -c 5.0 $ dotnet --info .NET SDK (global.json を反映): Version: 6.0.101 Commit: ef49f6213a ランタイム環境: OS Name: ubuntu OS Version: 20.10 OS Platform: Linux RID: ubuntu.20.10-x64 Base Path: /home/ebisu/.dotnet/sdk/6.0.101/ Host (useful for support): Version: 6.0.1 Commit: 3a25a7f1cc .NET SDKs installed: 5.0.210 [/home/ebisu/.dotnet/sdk] 6.0.101 [/home/ebisu/.dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 5.0.13 [/home/ebisu/.dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 6.0.1 [/home/ebisu/.dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 5.0.13 [/home/ebisu/.dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 6.0.1 [/home/ebisu/.dotnet/shared/Microsoft.NETCore.App] To install additional .NET runtimes or SDKs: https://aka.ms/dotnet-download $ |
SDK、ランタイムとも5.0がインストールできた。
再び実行してみる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
$ cd ~/T/avatest/ $ dotnet run Unhandled exception. System.InvalidOperationException: Default font family name can't be null or empty. at Avalonia.Media.FontManager..ctor(IFontManagerImpl platformImpl) in /_/src/Avalonia.Visuals/Media/FontManager.cs:line 33 at Avalonia.Media.FontManager.get_Current() in /_/src/Avalonia.Visuals/Media/FontManager.cs:line 53 at Avalonia.Media.TextFormatting.TextCharacters.TryGetRunProperties(ReadOnlySlice`1 text, Typeface typeface, Typeface defaultTypeface, Int32& count) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 129 at Avalonia.Media.TextFormatting.TextCharacters.CreateShapeableRun(ReadOnlySlice`1 text, TextRunProperties defaultProperties) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 62 at Avalonia.Media.TextFormatting.TextCharacters.GetShapeableCharacters() in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 40 at Avalonia.Media.TextFormatting.TextFormatterImpl.FetchTextRuns(ITextSource textSource, Int32 firstTextSourceIndex, TextLineBreak previousLineBreak, TextLineBreak& nextLineBreak) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs:line 280 at Avalonia.Media.TextFormatting.TextFormatterImpl.FormatLine(ITextSource textSource, Int32 firstTextSourceIndex, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs:line 15 at Avalonia.Media.TextFormatting.TextLayout.UpdateLayout() in /_/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs:line 221 at Avalonia.Media.TextFormatting.TextLayout..ctor(String text, Typeface typeface, Double fontSize, IBrush foreground, TextAlignment textAlignment, TextWrapping textWrapping, TextTrimming textTrimming, TextDecorationCollection textDecorations, Double maxWidth, Double maxHeight, Double lineHeight, Int32 maxLines, IReadOnlyList`1 textStyleOverrides) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs:line 71 at Avalonia.Controls.TextBlock.CreateTextLayout(Size constraint, String text) in /_/src/Avalonia.Controls/TextBlock.cs:line 475 at Avalonia.Controls.TextBlock.get_TextLayout() in /_/src/Avalonia.Controls/TextBlock.cs:line 166 at Avalonia.Controls.TextBlock.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/TextBlock.cs:line 521 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding, Thickness borderThickness) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 39 at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Presenters/ContentPresenter.cs:line 366 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46 at Avalonia.Controls.Primitives.VisualLayerManager.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Primitives/VisualLayerManager.cs:line 133 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625 at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 559 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625 at Avalonia.Controls.Window.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Window.cs:line 888 at Avalonia.Controls.WindowBase.MeasureCore(Size availableSize) in /_/src/Avalonia.Controls/WindowBase.cs:line 243 at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 364 at Avalonia.Layout.LayoutManager.Measure(ILayoutable control) in /_/src/Avalonia.Layout/LayoutManager.cs:line 287 at Avalonia.Layout.LayoutManager.ExecuteInitialLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 174 at Avalonia.Controls.Window.ShowCore(Window parent) in /_/src/Avalonia.Controls/Window.cs:line 688 at Avalonia.Controls.Window.Show() in /_/src/Avalonia.Controls/Window.cs:line 626 at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.ShowMainWindow() in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 141 at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 130 at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 187 at avatest.Program.Main(String[] args) in /home/ebisu/T/avatest/Program.cs:line 14 $ |
エラーが出てしまった。ここでは以下のようにして実行できた。
1 2 3 |
$ sudo apt install ttf-mscorefonts-installer $ fc-cache --force $ LC_ALL=C dotnet run |
どうやら日本語環境だとエラーがでてしまうようだ。
RESTとは何か
RESTがいつもわからなくなるので覚書
一行回答
HTTPプロトコルで単純なデータのやりとりのこと
目的
ステートレス
ステートレスとはURIのレスポンスがいつも一意で他の情報によってレスポンスが変わったりしないこと。よってクッキーが関わるとステートレスではない。
キャッシュできるように
クライアントからは見えないところで最適化できるようにするためにキャッシュできるようになってること。URIにセッション情報を含めるとできなくなるのでだめ。セッション情報とは個別のクライアントに設定される値のこと
それ以外
RESTはSOAPなどとは違ってプロトコルではなくざっくりとしたスタイルのこと
何が嬉しいか
クライアントは難しいことを考える必要なく簡単にアクセスできる。
/usr/bin/env python3って何?
前提知識
スクリプトの最初の行の#!で始まるものはshebangと呼ばれる。
スクリプトを書いて、実行するときにシステムによってこの行が読まれ、この実行ファイルで当該スクリプトを実行する機能がLinux系のOSにはある。
pythonで実験
以下のファイルを作成 hello.py
1 |
print('hello') |
実行してみる
1 2 3 4 5 6 7 8 9 10 11 12 |
ebisu@minpsrv ~/T/g$ python3 hello.py hello ebisu@minpsrv ~/T/g$ ./hello.py -bash: ./hello.py: Permission denied ebisu@minpsrv ~/T/g$ chmod +x hello.py ebisu@minpsrv ~/T/g$ ./hello.py ./hello.py: line 1: syntax error near unexpected token `'hello'' ./hello.py: line 1: `print('hello')' ebisu@minpsrv ~/T/g$ bash hello.py hello.py: line 1: syntax error near unexpected token `'hello'' hello.py: line 1: `print('hello')' ebisu@minpsrv ~/T/g$ |
python3を明示式に指定して実行すればちゃんと実行できるが、そうでない場合はbashとして実行されている事がわかる。
ここでshebangを加えてみる。
1 2 |
#! /usr/bin/python3 print('hello') |
実行
1 2 3 4 5 |
ebisu@minpsrv ~/T/g$ python3 hello.py hello ebisu@minpsrv ~/T/g$ ./hello.py hello ebisu@minpsrv ~/T/g$ |
ちゃんと実行できる。
pythonの特殊解釈
しかしpythonのスクリプトではshebangが/usr/bin/python3ではなく、/usr/bin/env python3と記述されている。
/usr/bin/envは引数を起動するだけのプログラムでオプションで環境変数を変更する機能がある。Linuxがこのshebangを読むと/usr/bin/env python3が起動してenvはをPATHなどから探してpython3を実行するものと思われる。
python3ではWindowsとの互換性のために/usr/bin/envがvirtual commandと解され、PATHからpython.exeを見つけるようになるのだと思う。
Windowsの場合は、python.exeの他にpy.exeがシステムディレクトリにインストールされているので、まずpy.exeがスクリプトのshebangを見て適切なpython実行ファイルを探して実行するものと思われる。
githubでソースコードの一部をハイライトするリンクを作成する
ソースを表示する
例:https://github.com/ambiesoft/SceneExplorer/blob/master/src/docinfodialog.cpp
行の左側の・・・をクリックして[Copy permalink]を選択してコピーする
URLの最後のフラグメントで範囲を指定する
例えば10行目から15行目なら#L10-L15になる。
Visual Studio Codeで拡張機能がインストールできない
Visual Studio 2022で子プロセスのデバッグ
拡張をインストール
Microsoft Child Process Debugging Powertoolをインストール
有効にする
プロジェクトを開いて子プロセスのデバッグを有効にする。
ブレークポイント設定
プログラムの最初の方にブレークポイントをセットすれば、デバッグ対象プロセスから新規生成されたプロセスでブレークポイントがヒットする。もちろん同じ実行ファイルの場合。プロジェクトが違う場合
違うプロジェクトの実行ファイルを起動する場合は、起動元のプロジェクトが.NETならまず初めにプロジェクトの設定のデバッグ欄でで、「ネイティブコードデバッグを有効にする」をチェックする。
次に拡張機能の設定で2番目のプロジェクトタイプを設定する。