ikeh1024のブログ

ZennやQiitaに書くにはちょっと小粒なネタをこちらに書いています

py2app触ってみた

概要

  • PythonMacアプリを作るためのモジュール
  • ひとまず動かせるところまで確認。個人ツール用途までならあり。

-w250

  • ソースがそのままリソースに同梱されるので非公開にしたい内容がある場合はNG

感想

  • インストールまでちょっと手間取った。
  • Cocoaのブリッジ部の書き方、またpy2appで学習コストは別途かかりそう。
    • Objective-Cを知らずにいきなりPyObjCなんてもっと辛いかも…。
    • VSCodeの補完が効かない?ので辛い。
    • 情報も乏しいので辛そう
  • やっぱりネイティブは良いですね(ポジショントーク

作業メモ

Python: libpython3.5.dylib not found?

Python env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.8.0

  • Pythonのバージョンが新しすぎると怪しい?

Release history¶
269: Py2app didn’t work with Python 3.8

  • またpythonの削除やpip uninstallアンインストールをごにょごにょしていったらエラーは解消した。

課題

2021-01-21 iOSエンジニアカジュアル雑談会

iOSエンジニアカジュアル雑談会 - クラシルTechTalk

どのような人材がほしいか

  • プロダクトの使いやすさだったり情熱を追求できるひと
  • プロダクトにコミットできる人
  • チームに馴染むか
  • チームの生産性を下げないか
  • 新しい技術を学んで、チームに新しい風もちこんでイケる人

動画視聴: 「UDフォントをもっと知ろう!」筆順フォントを使ってみよう

動画

メモ

  • TypeAとTypeBがある

  • 複数レイヤーの組み合わせで下記のような教材が作成できる

  • E,Jはそれぞれ英単語の通り

実際に使ってみる

-w1427

  • 辞書の中身を見て察するに、使わない文字に筆順フォントのグリフを当てはめている

まとめ

  • 筆順フォントは、フォントの仕様をうまく転用して作られていると感じた(というふわっとした感想です)

Macのクラッシュレポートを読むときのヒント

Crashed Thread:        0  Dispatch queue: CompilerConnectionSerialQueue
Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

The Swift runtime uses trace traps for specific types of unrecoverable errors—see Addressing Crashes from Swift Runtime Errors for information on those errors. Some lower-level libraries, such as Dispatch, trap the process with this exception upon encountering an unrecoverable error, and log additional information about the error in the Additional Diagnostic Information section of the crash report.

ということなんだな〜という流れ。 (とはいえ詳細にクラッシュレポートを見ても分からないことも多いのではと思っている。)

MySQL環境構築の忘備録

mysql -u root -p test_db < xxx.sql 
Enter password: 
ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci'
# (1) アンインストール
$ brew uninstall mysql

# (2) mysqlの実体ファイルを削除 (DB消えるため、必要に応じてバックアップ)
$ sudo rm -rf /usr/local/mysql*

# (3) 再インストール
$ brew install mysql
  • しかし再インストールしてもバージョンが変わらず。
<user_name>@<PC名> ~ % mysql --version

mysql  Ver 14.14 Distrib 5.7.32, for osx10.15 (x86_64) using  EditLine wrapper

-w674

  • やっとSQLのバージョンが更新された!
<user_name>@<PC名> ~ % mysql --version
mysql  Ver 8.0.22 for osx10.15 on x86_64 (Homebrew)
  • ただし/usr/local/var周りのエラー
  • 再インストールを行いなんとか動く状態になった。
<user_name>@<PC名> ~ % mysql.server start
Starting MySQL
./usr/local/Cellar/mysql/8.0.22_1/bin/mysqld_safe: line 653: /usr/local/var/mysql/<PC名>.local.err: No such file or directory
Logging to '/usr/local/var/mysql/<PC名>.local.err'.
/usr/local/Cellar/mysql/8.0.22_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/<PC名>.local.err: No such file or directory
/usr/local/Cellar/mysql/8.0.22_1/bin/mysqld_safe: line 199: /usr/local/var/mysql/<PC名>.local.err: No such file or directory
/usr/local/Cellar/mysql/8.0.22_1/bin/mysqld_safe: line 916: /usr/local/var/mysql/<PC名>.local.err: No such file or directory
pp/usr/local/Cellar/mysql/8.0.22_1/bin/mysqld_safe: line 144: /usr/local/var/mysql/<PC名>.local.err: No such file or directory
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/<PC名>.local.pid).
<user_name>@<PC名> ~ % 

後日

(メモ)Android Office Hours #2 Androidエンジニアのキャリアパスについて

Android Office Hours #2 Androidエンジニアのキャリアパスについて

31:20​ androidって潰しが効かなそうって言われることがありますがどう思いますか?

  • Android歴は10年選手が多い
    • 視聴者には1~3年目も多い
  • 色々わからないこともある。キャリアに再現性もない。
  • 話を真に受けず自分なりに解釈をするのが良いですよとのこと。
  • 就職理由: 人に依存する(好きな人がいるとか)・ライフスタイル・キャリアに合わせて
  • Androidの潰しがきかない問題。
    • 概念や考え方か、設計やテストは言語に関わらないので問題ない。
    • 不安なら支流でiOSやサーバサイドを触ってみて、同じだなあという感触をつかめばいい。
    • 不安で何もしないというのが一番良くない。触ってみると良いよ。

39:45​ Q. Manager職って経験したほうが良いと思いますか?

  • マネージャー職って?
    • 人による
    • 世話好きな人・給料上げたい人
    • プログラム書いていたほうが楽ではある
    • 向いていない人は辛いだけなのでやめたほうが良い。

44:36​ Q.業務上で課題に感じていることって何かありますか?

  • Androidの辛い所
    • 古いコード・地層を保守しないといけない
    • 当時の思想とか…
  • Androidエンジニアの数はやっぱり少ない
    • iOSDCの数と比べると…
    • 参加者的には2割ほど増えてるけど
    • 両方書ける人は表に出てきてないだけかも

49:30​ これからどう生きるか、今後のキャリアについて。何歳まで働きたい?個人開発してる?副業は?

  • なるべく働かないようにしたい。
    • 一発当てる。個人開発してる。
    • 77億人中の7700万人に使われる、グローバルで使ってもらうものを作りたい。カナダに行きたい。
    • 一方福岡に戻って働きたい意見も。
    • 個人開発や歳を取ると指摘されなくなる。今は会社で優秀な人に揉まれたい。
    • (inメルカリ)会社の半数が外国人で割と使うけど100%のコミュ力は発揮できない、2年ほど英語の勉強をしている。

59:15​ 転職するなら大事だと考えているポイントはなんですか?

  • 年収・優秀な人と働いて学んで成長したい
  • 基本ステップアップにならないものじゃないときつい。今の自分に必要なもの、が得られるもの。能力や実績やら。ネガティブよりはポジティブな理由が良い。

Teams会議で接続状態が悪くなった場合はキャッシュを削除

  • Teams会議で音声がブツブツ途切れるなどの調子が悪い。こういうときは下記の通りキャッシュ削除をすれば改善した覚えがある。

Teams - High CPU Usage and Crashing on macos Catalina

Close Teams Navigate to following folders and delete them. ~/Library/Caches/com.microsoft.teams ~/Library/Caches/com.microsoft.teams.shipit ~/Library/Application Support/Microsoft/Teams Restart Teams

Qiita: エンジニアの劣等感との付き合い方

エンジニアの劣等感との付き合い方

発表するのが怖い

しかし、その恐怖に耐えながら登壇してみると、意外にウケが良かったりするものです。 知識が初心者レベルの人は、初心者レベルの視点での発表ができることが「強み」なのです。

  • これは実際に自分でやってみないと怖さは取れ無さそう。

自分の強みが何なのかわからない

自分の人生をふりかえってみると、個人でアプリ開発している時間が、何よりも楽しいのです。 「楽しさ」というのは、最強の強みになります。 「楽しい」というだけで、勝手に作業がはかどり、知識が付き、気がついたらその道のプロに到達しています。

  • 目の前の問題をスラスラ解けて、振り返ったときにいい結果が積み重なっているのを見ると、充足感があって好き。
  • アプリ開発でレビューがもらえると嬉しい。
  • 学問を実践できれば、正しい道のように思える。

新人エンジニア時代は、劣等感で心が折れやすい

「最近、技術に対する興味がないんです。プログラムの勉強するのがイヤになっちゃいました。このままでも給料もらえているから、まぁいいかと我慢する日々です。でも、このままでいいでしょうか?」

自分の人生のコントロール権を取り戻す。 「楽しさ」ドリブンで、勉強をしていると、自分の人生のコントロール権を取り戻すことができます。

  • 義務感だけだと長続きしない。

UICollectionViewを触ってみる

UICollectionView Tutorial: Getting Started

OverView

  • この記事では基本的な実装のみ

GitHub

Supplement

a collection view is a UIScrollView subclass.

-w430

  • チュートリアルEstimate SizeNoneにする、が抜けているので補足しておくこと。

-w1290

UICollectionView Tutorial: Reusable Views, Selection and Reordering

OverView

  • ちょっと発展的な内容
  • 選択とかドラッグ・アンド・ドロップとか

GitHub

Supplement

you’ll use UICollectionReusableView.

This class is similar to UICollectionViewCell, except it usually displays headers and footers.

  • Tips: Command-Shift-LでStoryboardにおいてライブラリを表示できる

Fontsフォルダをエクスプローラでプレーンな状態で表示する(Windows)

C:\WINDOWS\system32>cd C:\Windows\Fonts

C:\Windows\Fonts>dir *.ini
 2019/03/19  13:49                65 desktop.ini
               1 個のファイル                  65 バイト
               0 個のディレクトリ  1,702,299,574,272 バイトの空き領域

C:\Windows\Fonts>REN desktop.ini _desktop.ini
2019/03/19  13:49                65 _desktop.ini
               1 個のファイル                  65 バイト
               0 個のディレクトリ  1,702,299,545,600 バイトの空き領域

Apple公証でエラーとなる原因と解決方法(you must first sign the relevant contracts online (1048))

概要

  • いつものようにApple公証しようとすると下記のエラーが発生。
Release use$ xcrun altool --notarize-app --primary-bundle-id "jp.co.xxx" --username "xxx@xxx.co.jp" --password "xxxx-xxxx-xxxx-xxxx" --file xxx.app.zip
2020-01-27 10:02:23.325 altool[88404:4425471]  Error:
[2020-01-27 10:02:17 JST] <main>  INFO: Configuring logging...
[2020-01-27 10:02:17 JST] <main>  INFO: Logging level set to eXtreme
[2020-01-27 10:02:17 JST] <main>  INFO: Transporter is searching for new software components.
[2020-01-27 10:02:17 JST] <main>  INFO: INFO: using cached repository.xml file.
[2020-01-27 10:02:18 JST] <main>  INFO: Update check complete.
(...)
Package Summary:
1 package(s) were not uploaded because they had problems:
    /var/folders/x4/g46gr94s1bl47q047f5s4sxm0000gn/T/60A1095C-B14A-4644-A315-316AF63F29EF/Untitled.itmsp - Error Messages:
        You must first sign the relevant contracts online. (1048)
2020-01-27 10:02:23.393 altool[88404:4425468] *** Error: You must first sign the relevant contracts online. (1048)

you must first sign the relevant contracts online (1048)

  • オンライン規約を承認してくださいとのこと。
  • https://appstoreconnect.apple.com/を開くと警告が出ている。

解決方法

  • Admin権限のアカウントで下記ページにアクセスし、EULAに同意することで解決。
    • https://appstoreconnect.apple.com/

参考

NSAlertのWindowLevelはどれなのか

  • macOS 10.14 frameworks内の定義より引用
  • 単純に数字の大小では決まらない…?
    • NSFloatingWindowLevelは最前面に来ますよね…
typedef NSInteger NSWindowLevel NS_TYPED_EXTENSIBLE_ENUM;
static const NSWindowLevel NSNormalWindowLevel = kCGNormalWindowLevel;
static const NSWindowLevel NSFloatingWindowLevel = kCGFloatingWindowLevel;
static const NSWindowLevel NSSubmenuWindowLevel = kCGTornOffMenuWindowLevel;
static const NSWindowLevel NSTornOffMenuWindowLevel = kCGTornOffMenuWindowLevel;
static const NSWindowLevel NSMainMenuWindowLevel = kCGMainMenuWindowLevel;
static const NSWindowLevel NSStatusWindowLevel = kCGStatusWindowLevel;
static const NSWindowLevel NSModalPanelWindowLevel = kCGModalPanelWindowLevel;
static const NSWindowLevel NSPopUpMenuWindowLevel = kCGPopUpMenuWindowLevel;
static const NSWindowLevel NSScreenSaverWindowLevel = kCGScreenSaverWindowLevel;
/* Definitions of older constant values. */
#define kCGBaseWindowLevel              ((CGWindowLevel)INT32_MIN)
#define kCGMinimumWindowLevel           ((CGWindowLevel)(kCGBaseWindowLevel + kCGNumReservedBaseWindowLevels))
#define kCGMaximumWindowLevel           ((CGWindowLevel)(INT32_MAX - kCGNumReservedWindowLevels))

#define kCGDesktopWindowLevel           ((CGWindowLevel)(kCGMinimumWindowLevel + 20))
#define kCGDesktopIconWindowLevel       ((CGWindowLevel)(kCGDesktopWindowLevel + 20))
#define kCGBackstopMenuLevel            ((CGWindowLevel)-20)
#define kCGNormalWindowLevel            ((CGWindowLevel)0)
#define kCGFloatingWindowLevel          ((CGWindowLevel)3)
#define kCGTornOffMenuWindowLevel       ((CGWindowLevel)3)
#define kCGModalPanelWindowLevel        ((CGWindowLevel)8)
#define kCGUtilityWindowLevel           ((CGWindowLevel)19)
#define kCGDockWindowLevel              ((CGWindowLevel)20)
#define kCGMainMenuWindowLevel          ((CGWindowLevel)24)
#define kCGStatusWindowLevel            ((CGWindowLevel)25)
#define kCGPopUpMenuWindowLevel         ((CGWindowLevel)101)
#define kCGOverlayWindowLevel           ((CGWindowLevel)102)
#define kCGHelpWindowLevel              ((CGWindowLevel)200)
#define kCGDraggingWindowLevel          ((CGWindowLevel)500)
#define kCGScreenSaverWindowLevel       ((CGWindowLevel)1000)
#define kCGAssistiveTechHighWindowLevel ((CGWindowLevel)1500)
#define kCGCursorWindowLevel            ((CGWindowLevel)(kCGMaximumWindowLevel - 1))

(デスクトップ) < kCGDesktopWindowLevel < (アイコン)  < kCGDesktopWindowIconWindowLevel  < NSNormalWindowLevel < kCGDockWindowLevel < (ドック)  < kCGUtilityWindowLevel < kCGHelpWindowLevel < kCGDraggingWindowLevel  < NSFloatingWindowLevel < NSModalPanelWindowLevel  < NSStatusWindowLevel < NSPopUpMenuWindowLevel  < NSTornOffMenuWindowLevel < NSMainMenuWindowLevel < (メニュー)  < NSScreenSaverWindowLevel < kCGAssistiveTechHighWindowLevel  < kCGCursorWindowLevel

NSDate_01

 現在の日時を表す文字列を作成する

参考

コード

// 現在日時の文字列を返す。e.g. 20190930_093503
- (NSString *)createNowDateString {
    NSDate          *now           = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyyMMdd_HHmmss";
    return [dateFormatter stringFromDate:now];
}