PHPカンファレンス小田原

2004/4/13に小田原で開催のPHPカンファレンス小田原に参加してきました。
有限会社アリウープとしてスポンサーで参加したのでセッションはあまり見れませんでした
スタンプラリーで来訪いただける方が皆さん優しい方でチラシと少しのノベルティしか無いブースにかかわらず興味をもっていただけて嬉しかったです。

また到着してすぐに受付まで時間があったため小田原城の周辺に行ってきましたが、桜の季節でとても綺麗でした。

運営のスタッフが忍者の格好としている、セッション後の強制振り返りタイム、静岡市が協賛?後援?しての移住相談ブース、静岡のゆるきゃらにドラを持たせるという贅沢な演出、スポンサーブースに静岡銘菓をおいて参加者に配るなど良い施策がいっぱいありました。

懇親会二次会はちょっと混乱したけど、少し顔出して、終電間際になんとか帰ってこれました。

とにかく地元愛あふれる良いカンファレンスでした。

後、知り合いとも少しは話せて良かったです。結果的にこじんまりしている方がコミュニケーション取れるね。

スタッフのみなさま、おつかれさまでした。

pyenvでBUILD FAILED

手元のpython環境でpyenvで別バージョンをインストールしようとしたところ
BUILD FAILED (OS X 13.3.1 using python-build 2.3.17-4-gb3c91b37)が発生しました。
Webで検索するとXcodeの再インストールなど色々でたのですがどれも不発でした。
chatGPTとやりとりするも延々と同じところをループする羽目に色々と質問の仕方を工夫していると別の時間軸に移動してくれましたw

このエラーは、Homebrewがインストールされている場所がMacのM1チップ向けに最適化されていないため、Homebrewの推奨する方法であるM1チップ向けのパス(/opt/homebrew)に移動する必要があることを示しています。

以下の手順で、HomebrewをM1チップ向けのパスに移動してから、OpenSSLを再インストールしてください。

  1. Homebrewをアンインストールする  まず、以下のコマンドを使用して、既存のHomebrewをアンインストールします。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

  1. M1チップ向けのパスにHomebrewをインストールする  次に、以下のコマンドを使用して、M1チップ向けのパスにHomebrewをインストールします。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

そうすると何かヒントっぽい回答が!
M1に変えてからアップデートしていなかったのでそもそもHomeBrewがM1対応できていなかったのかもしれません。
これが最終回答では無いかもしれませんが、このあとpyenv install 3.7.13は成功しましたので何かの参考になればと思い記載しておきます!

tweepyのcreate_tweetで403

import tweepy
import os
from dotenv import load_dotenv

client = tweepy.Client(bearer_token=os.environ[“BEARER_TOKEN”], consumer_key=os.environ[“CONSUMER_KEY”], consumer_secret=os.environ[“CONSUMER_SECRET”], access_token=os.environ[“ACCESS_KEY”], access_token_secret=os.environ[“ACCESS_SECRET”])

client.create_tweet(text=”テスト!”)

PythonからTwitterに投稿するのにtweepyを利用していたところ403が出てどうにも投稿ができませんでした。

Access Token and Secretの部分がReadのみになっていたのが原因でした。
アプリのSetting タブのApp permissionsを変更した時はKeys and tokens タブからRegenarateを行なってください。


MySQL Workbenchでバージョンエラー

MySQL Workbenchでダンプをするときに mysqldump Version Mismatch のエラーが発生した。
対象サーバのMySQLのバージョンが古かったためローカルのmysqldumpのバージョンを合わせる必要がある
エラーのダイアログをよく見ると対象サーバのバージョンが書いてあるのでまずはそのバージョンをインストールする。
私の場合は5.7.xxxだったので
手元のMBPでbrew install mysql@5.7
とインストールする。

インストール時のメッセージ中に

If you need to have mysql@5.7 first in your PATH run:
echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> /Users/hideokashioka/.bash_profile
このようなメッセージが表示されていると思うがmysqldumpのパスは
/usr/local/opt/mysql@5.7/bin/mysqldump
となります。


Preference>AdministrationにあるPath to mysql Tool:の部分に先ほどのパスを入力して
ダイアログを閉じてください。
そうするとmysqldumpが指定のパスのものを利用するようになるのでmysqldump Version Mismatchは発生しなくなります。

VsCodeデバッグでエラー

VsCodeのpythonデバッグでエラーが発生した。

Preparing to run teams.lambda_handler locally...
Building SAM Application...
An error occurred trying to run SAM Application locally: Error with child process: pyenv: sam: command not found
,
The `sam' command exists in these Python versions:
,  3.7.0

pythonはインストールされていたはずだったがpyenvに設定して回避できた

a$ python3 --version
Python 3.7.0
$ pyenv global system 3.7.0

SAMのURLパラメタの分析にflaskを使う

template.ymlにて

  SampleFlaskFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: src/
      Handler: flask_test.lambda_handler
      Runtime: python3.7
      Events:
        HttpGet:
          Type: Api
          Properties:
            Path: '/flask'
            Method: GET
        HttpGetProxy:
          Type: Api
          Properties:
            Path: '/flask/{proxy+}'
            Method: GET

のような設定をしている時に

lambda側でパラメタを取得したい場合は

from flask import Flask, jsonify
import awsgi

app = Flask(__name__)

@app.route('/flask/<name>')
def output_name(name):
    return jsonify({'input': name})

def lambda_handler(event, context):
    return awsgi.response(app, event, context)

このようにすると取得できる

なおアクセスできるURLは
http://127.0.0.1:3000/flask/name

SAM側で振り分けたflaskというディレクトリもlambdaでも設定する必要がある。(アクセスしたパスがそのまま渡ってきているイメージか)

@app.route('/flask/<name>/test/<test>/test2/<test2>')
def output_name(name,test,test2):
    return jsonify({'value': name + test + test2}

このように複数の値の取得も可能

WordPressの翻訳プラグインBogoでリンクエラー

Bogoをアップデートしてv3.3にしたところ日本語<->英語のリンクが表示されないケースがあった。
(ショートコードので表示している部分)
固定ページの一覧を見ると英語、日本語共にドキュメントは存在している
英語ページの言語の部分を見ると

このような表示で元のページとのリンクが切れているようだ。

言語の編集部分のアップデートがあったようで以前の言語表示の部分とは違っていた。

取り急ぎ、前のバージョンに戻してしのぐ事とする。

前のバージョンはプラグインディレクトリから探すことができる

Bogo

https://ja.wordpress.org/plugins/bogo/advanced/&#8221;
このページの一番下の部分

指定するバージョンはアップデートする前のバージョーンが良い
(なお、他のプラグインなどでセキュリティアップデートなどの場合はプラグインの利用を停止するなど検討が必要)

/plugins/ディレクトリの前のプラグイン(bogo)を削除するかリネームして
いつもプラグインのアップロード方法を行うか

コンソールで
$plugins mv bogo bogo_bak
$wget https://downloads.wordpress.org/plugin/bogo.3.2.zip
$unzip bogo.3.2.zip
などとしてプラグインのダウングレードを行う。

とりあえずは前のバージョンに戻った。(根本的解決ではないので、アップデートを待つかソースコードを見てみる時間を取らないと、、、)

CircleCIでdocker-composerを使う

ローカルの環境をdocker-composerで作っていたものをCircleCIにあげたときにCI回せるように設定しました。

version: 2
jobs:
  build:
    # CircleCI側の仮想マシンを利用
    machine: true
    environment:
      # githubのリポジトリ指定
      - DOCKER_IMAGE_REPO: [github_acount]/[repository_name]
    # 作業用ディレクトリの指定(こだわりなければ何でも)
    working_directory: ~/[repository_name or somthing]
    steps:
      # githubからソースコードを取得
      - checkout

      # docker-composeコマンドをそのまま実行(buildなども可能   
      - run:
          # 実行時のカーソルに表示される(無くても良い)
          name: docker compose up
          command: docker-compose up -d
      # コマンド
      - run: 

      # 初期処理とか(初期処理用にinit.shを作っている場合)
      name: init
      command: ./init.sh

AmazonLinuxにMySql(5.7)のインストール

リポジトリの追加
sudo sudo yum -y install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
mysqlのインストール
sudo yum -y install mysql-community-server
起動設定
sudo chkconfig mysqld on
サービスの起動
sudo service mysqld start

Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]

mysqlのルートのパスワードは
sudo vi /var/log/mysqld.logの中に
A temporary password is generated for root@localhost: XXXXXXXXXXXX
という行があってここに書いてあるのがパスワードです。

mysql -u root -p
で上記パスワードを入力するとコンソールで操作が可能になります。

Laravel実際に投げているクエリーの取得(5.2)

use IlluminateSupportFacadesDB;

DB::connection()->enableQueryLog();

ここでデータベースへの問い合わせ

$queries = DB::getQueryLog();
dd($queries);

もしくは

Event::listen('IlluminateDatabaseEventsQueryExecuted', function ($query) {
var_dump($query->sql);
var_dump($query->bindings);
var_dump($query->time);
});

https://laravel.com/docs/5.0/database#query-logging
http://laravel-tricks.com/tricks/display-all-sql-executed-in-eloquent#comment-2655309790