Skip to main content

5 posts tagged with "python"

View All Tags

PyCon 2024 心得

· 2 min read

這個週末不耍廢,參加 PyCon 增加知識 Level Up Up ! 這次 PyCon 難得搬到南部來辦,感覺真的是一個很棒的機遇!

於是,我便速速在早鳥階段買票

  • 拿到了衣服
  • 玩了一些大地遊戲
  • 聽了一些議程
  • 吃了一些便當和點心XD

第一天

第一天我參加的幾乎都是 Tutorial , 我其實蠻喜歡 PyCon 這個 Part 的,學習怎麼去看 CPython 原始碼、以及 LLM的相關知識實作,真的複習我在工作上練習的那些東西...

研究 CPython 的議程也有點激勵我想讀 PHP 原始碼呢!

記錄一些自己第一天的筆記和連結:

PyNight

老實說這個活動真的讓我為這個 Conf 有特殊的印象...不過作為I人的我, 沒什麼和其他人交流實在有點可惜...也沒吃到什麼東西 QAQ

第二天

第二天老實講我有點耍廢躺平...哈,沒有太認真的聽議程...沒有加入 Tutorial, 窩在會議廳做自己的事情...用講員的聲音當作背景音哈

結論

我覺得 PyCon 英文感覺特別的多、特別的國際化呢!所以也給我一些提醒就是要真的學好英文,期待下次我聽英文議程時,可以有更高的理解度...不過,我也覺得和我幾年前參加 其他的Conf, 我真的有發現就算不是自己的吃飯工具(我主力不是 Python XD), 我聽懂與理解度都越來越高拉...謝謝 ChatGPT、謝謝過去努力的自己,當然也有可能,我剛好選的是簡單的議程?!

by the way , 我也覺得現場女生越來越多...看來寫 Python 的女生也越來越多了?! 會寫 Python 的女生很帥!

success

我覺得 Pycon 真的是一個適合 E人參加的 conf, 我這個 I 人做到團體任務就覺得蠻尷尬的XDD

MQTT筆記

· 3 min read

一種在應用層的比HTTP還輕量之通訊協議,常常被物聯網所使用。至於他的核心在於有一個名詞名為Broker,負責讓大家subscribepublish

作為 Client 端一旦與這個Broker連結之後,他可以sub也可以pub

使用 Dockerfile 起 MQTT Broker

其實網路上有很多教學再告訴你怎麼架設一個 MQTT Broker, 目前市面上分佈最廣的的是開源專案:Mosquitto, 不過我這裡為了方便示例與教學,就使用Dockerfile來快速啟動,而他也是Mosquitto 提供的image。

$ docker run -it -p 1883:1883 -p 9001:9001 -v mosquitto.conf:/mosquitto/config/mosquitto.conf -v /mosquitto/data -v /mosquitto/log eclipse-mosquitto

Let's Try MQTT, 以 Python 為例

我們這邊就需要有人去訂閱以及發布它,建立兩個python檔案分別做subscribepublish 建立subscribe.py

# encoding: utf-8
import paho.mqtt.client as mqtt

# 當地端程式連線伺服器得到回應時,要做的動作
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
print(msg.topic+" " + str(msg.payload))


client = mqtt.Client()

client.on_connect = on_connect
client.on_message = on_message


client.connect("localhost", 1883)

client.subscribe('ack')
client.loop_forever()

建立publish.py

import paho.mqtt.client as mqtt

# 建立 MQTT Client 物件
client = mqtt.Client()

# 設定登入帳號密碼(若無則可省略)
# client.username_pw_set("myuser","mypassword")

# 連線至 MQTT 伺服器(伺服器位址,連接埠)
client.connect("localhost", 1883)

client.publish("ack","Hello World")

然後讓我們先在終端機上面執行subscribe.py : python subscribe.py 之後再開一個新終端機或者另一個tab執行publish.py: python publish.py 之後你會在subscribe.py那個畫面看到publish的訊息喔

publish不只是可以傳送文字、也可以傳送bytearray,當sub端接收到這些bytearray時就可以實現建立檔案,這樣 MQTT 也可以傳送檔案了。

關於 MQTT & Security

至於 MQTT 肯定是要考慮一些安全的部分。老實講我在MQTT是個初心者。。。

但有上網找到這一篇文章,值得大家參考 [物聯網協定與資安的距離] MQTT 通訊協定淺談

success

第一次碰 MQTT 耶

RabbitMQ筆記

· One min read
Send.py

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('10.10.80.234'))
channel = connection.channel()

channel.queue_declare(queue='epd_handler')

result = channel.basic_publish(exchange='',
routing_key='epd_handler',
body='{"hello": "world"}')
print(result)
# print(" [x] Sent 'Hello World!'")


connection.close()
Receive.py
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('10.10.80.234'))
channel = connection.channel()

channel.queue_declare(queue='hello')


def callback(ch, method, properties, body):
print(" [x] Received %r" % body)


channel.basic_consume(queue='hello',
auto_ack=True,
on_message_callback=callback)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()


談Python: Lambda, Map , Filter 及 Reduce

· 2 min read

從大二開始研究怎麼當一名駭客之後,開始接觸Python, 出社會後也常常用Python 開發我個人的工具包,可說是這幾年來個人 Python 的功力大漲!

最近在邊寫邊查資料的過程當中,認識到Python的 Lambda,Map和Reduce

於是,就讓我寫一篇文章記錄這一切吧 ^^

此 Lambda 不是 AWS的Lambda ,我也不知道為什麼這裡要取和AWS的Lambda一樣的名稱哈哈,總之他是一種Python裡面的表示式,可以更加簡便、更加Function programming 的呈現程式碼,不多贅述,我最喜歡 Show me the code了!

# 通常我們定義Function是長這個樣子(順便我也想練習強型別,Python也支援喔)
def demoX(x:int) -> int:
return x + 10;

print(demoX(20)) //output-> 30

其實蠻落落長的,所以Python說,要有Lambda , 就有Lambda

demoX = lambda x: x+10

print(demoX(20))

好了,我附上參考網址結束這一切:

Map和Reduce

Map , FilterReduce 我想要放在一起說,如果常寫Function Programming的對這兩個單字一定不陌生,Laravel的Collection也有這些方法。沒錯,他們的用法其實和他們的單字意思很像呢!

# map(function_to_apply, list_of_inputs)
a = list(map(lambda a: a+2,[1,2,3]))
print(a) # [3,4,5]

map 其實就會迭代列表中的每一個項目,最後回傳出來的是一個map的物件,記得之後要用list才能把它印出來喔

a = list(filter(lambda a: a>2,[1,2,3,4,5,6]))
print(a) # [3, 4, 5, 6]

filter 其實和map很像,只是它是過濾項目,一樣他是個filter的物件,一樣需要list,所以你的function裡面請回傳出boolean,這我就不多說明啦~

from functools import reduce

a = reduce(lambda a,b: a+b,[1,2,3])
print(a) # 6

至於 reduce需要先 import 喔,只要有一個有兩個參數的function , 他就會迭代這清單的項目做出最後的結果

參考網址:

小君曰:Python也能Function Programming !

Python Paramiko 筆記

· One min read

在以前公司工作的時候,有點忘了是遇到什麼情境,總之我就看到Python 有這樣的一個套件庫:Paramiko

話不多說,我們就給大家來看文件吧:http://www.paramiko.org/

然後就結束這一回合(阿不是!

他是一個和SSH 有關的套件庫,是可以使用Python 直接在遠端給他執行程式起來... 啊寫文章的同時我就想到了!之前我們好像是要做那個資料庫備份什麼的, 然後有發現說有時server 會不夠空間backup , 所以後來我就用這個套件透過本機去連結遠端執行 df -h 的指令,以方便告訴我到底有沒有足夠的空間這樣.... 不然每次連線打指令實在很麻煩...

然後 , 我最喜歡的是: show you the code !

import paramiko

paramiko.util.log_to_file('paramilo.log')
key = paramiko.RSAKey.from_private_key_file("pem path...")

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='......',username='user',pkey=key)

stdin, stdout, stderr = ssh.exec_command('df -h')

result = open('log.txt','wb')
result.write(stdout.read())
result.close()

ssh.close()

小君曰:我到底寫了什麼...?