PayPay フリマでメモリを売ってみた♪
先日使用しているマシンの増設メモリを16GBから32GBに載せ替えた話を書きました。
http://takumats.hatenablog.com/entry/2020/06/14/110124
それに伴い、16GBメモリが余ってしまったので、PayPayフリマで売ってみることにしました。
新品が結構出品されてたので、正直売れるかどうかわからなかったのですが、無事購入者現る!
なんといっても、匿名で売り買いできるのは安心ですね。配送も、郵便局でピッとやるだけなので、とても楽です。
普段からPayPayユーザーなので、PayPayでの振り込みにも全く困らないし。
いやー、楽チン楽チン。
家にある要らないもの、使えてないもの、片っ端から売りたくなってくる。。
6/20 追記:
無事受け取り確認いただけまして売上確定。
5000円で出品して、送料と手数料引いて、4325円の収入(いったんpaypay)となりました。本人確認もしてあるので、現金化もできるみたいです。
LG gram 17のメモリを40GBに♪
2019年に購入したLG gram 17。購入時に16GB増設して24GBにしたんだけれども、32GBの安いメモリを見つけたので40GBにしちゃいました。
購入時に書いた投稿はこちら。
takumats.hatenablog.com
今回、購入したメモリはこれ。
paypaymall.yahoo.co.jp
ポイントバックを考えると13,000円くらいになるので結構お得な感じになってきたかと思います。
ローカルPC(Windows)でdockerなどを動かしたりVisual StudioやSlack, chromeを動かしておくことを考えると、メモリはあるに越したことはありませんね。
Python (pandas) でタブ区切りテキストファイル(tsv)ファイルの読み書き
pandasのタブ区切りテキストファイルファイル(tsvファイル)の読み書き
以下の感じでできるようです。
import pandas as pd df = pd.read_csv('aaa.tsv', sep='\t', header=None) print(df) df.to_csv('bbb.tsv', sep='\t')
Python (pandas) で指定時間間隔でデータを集計する方法
Python (pandas)を使って指定時間間隔のログを集計する方法
やりたかったこと
タイムスタンプ(datetime)列があるcsvデータで、ある時間範囲にある行数をカウントしたい。(5分おき、15分おき、30分おき、1時間おき、など)
pandasのresampleを使うと簡単にできます♪
import pandas as pd import numpy as np csv_files = ['1_file.csv', '2_file.csv', '3_file.csv', '4_file.csv'] FILE_HEAD='file_' for csv_file in csv_files: df = pd.read_csv(csv_file, parse_dates=True, index_col='datetime') df.resample('5T').count().rename(columns={'val': 'count'})['count'].to_csv(FILE_HEAD + csv_file[0] + '_05m.csv') df.resample('15T').count().rename(columns={'val': 'count'})['count'].to_csv(FILE_HEAD + csv_file[0] + '_15m.csv') df.resample('30T').count().rename(columns={'val': 'count'})['count'].to_csv(FILE_HEAD + csv_file[0] + '_30m.csv') df.resample('60T').count().rename(columns={'val': 'count'})['count'].to_csv(FILE_HEAD + csv_file[0] + '_60m.csv')
Azure FunctionsのTable Storageへのoutバインディングで上書きしようとしたけどできなかった件(Python)
Azure FunctionsからのTables StorageへのoutバインディングをPythonでやるには
あまりサンプルが転がってないのですが、以下あたりを参考にすると実現できます。
github.com
Table Storageへのバインディングはデフォルトでは上書きできない
Table StorageはPartitionKeyとRowKeyでユニークになる必要がありますが、Table Storageへのバインディングはデフォルトでは上書きできません。実際、キーが重複するようなメッセージがでて書き込みできません。
一方で以下によるとETagというのを指定すると、上書きできそうです!
stackoverflow.com
でいろいろ試行錯誤して結局できませんでした。他、いろいろ調べると、C#以外の?ETagの使用にはバグがあるみたいです。
github.com
結局はoutバインディングは使わず・・・・。
検討しましたが、上書きするにはbindingだけでは解決できないようです。で、結局TableServiceクラスを使わざるを得ないという結論に至りました。
docs.microsoft.com
ETagが正常に動作するようになるまでの暫定として、削除のみをこのクラスで行い、書き込みはバインディングでさせるという方法もあるのですが、このクラスを使うのだったら insert_or_replace_entity メソッドで一発で上書きできるので、まずはoutバインディングを使わない方向でよさげですね。
Azure FunctionsでQueueTriggerパラメータとバインディングのパラメータを連携させる (Python)
課題設定
やりたかったことは以下のこと。
- QueueTriggerパラメータで情報を受け取り
- その情報に応じたTable Storageのレコードを読み取る
そもそもpythonでtable storageの入出力バインドする例がほとんど見当たらなかったので少し試行錯誤しました。以下が参考になりました。
github.com
以下の感じで行けることを確認
function.jsonファイルは以下の感じ
{ "scriptFile": "__init__.py", "bindings": [ { "name": "queuemsg", "type": "queueTrigger", "direction": "in", "queueName": "myqueue", "connection": "AzureStorageConnectionStringIn" }, { "name": "tabledata", "type": "table", "tableName": "mytable", "partitionKey": "{partition_id}", "rowKey": "{row_key}", "connection": "AzureStorageConnectionStringIn", "direction": "in" } ] }
__init__.pyは以下の感じ
import logging import azure.functions as func def main(queuemsg: func.QueueMessage, tabledata) -> None: input_msg = queuemsg.get_body().decode('utf-8') logging.info('Python queue trigger function processed a queue item: %s', input_msg) logging.info('tabledata: %s', tabledata)
入力キューに設定するメッセージ
{"partition_id": "mypartition", "row_key": 1}
みたいな感じでいけるはず。で、ただinput bindingできるレコードがない場合には実行ができないのですが、その例外ハンドルを関数側でできないのが気を付けるところ。
binding時にデータを絞り込むような記述をする
partitionKeyやrowKeyを指定するのではなくfilterを指定するようにすると、条件にあったレコードを取得することができる。(複数返ってくるものも扱える) 例えば以下のような記述になります。
function.jsonファイルは以下の感じ
{ "scriptFile": "__init__.py", "bindings": [ { "name": "queuemsg", "type": "queueTrigger", "direction": "in", "queueName": "myqueue", "connection": "AzureStorageConnectionStringIn" }, { "name": "tabledata", "type": "table", "tableName": "mytable", "filter": "name eq '{name_filter}'", "connection": "AzureStorageConnectionStringIn", "direction": "in" } ] }
入力キューに設定するメッセージ
{"name_filter": "test"}