마우스로 유명한 모 회사 제품을 꽤 오래 쓰다, 드래그 끊김이나 더블 클릭 등이 멋대로 발생. 검색해보니 마우스 스위치 내구 연한 도달하면 이런 현상이 발생한다고.
꽤나 가격이 있는 제품이라 수리 방법을 찾아보니 스위치는 꽤 싸게 팔지만 마우스 보드에서 납땜 되어 있는 스위치를 떼내고, 다시 납땜이 필요 했다. 집에 인두기도 없어 더 검색하니 아예 교체용 보드를 판매.
스위치보다 가격이 있지만 직접 납땜 하기보다 더 나아보여 교체 부품 구매. 해외 배송인데도 꽤 빨리 왔다.
교체 잘 하고 만족.
bootc 부팅 가능한 컨테이너. CoreOS 나 SteamOS 의 변종인 Bazzite 도 이 기술을 사용.
"batteries included" 란 표현을 쓰는데, 바로 사용 가능한 소프트웨어를 뜻하는 모양.
최근에 알게 되어 사용 중인 소프트웨어
Linux 네트워크 상태 확인할 수 있는 명령어 somo
duckdb 분석용도로 많이 사용하고 있었다는데 늦게 알게 됨. 웹 ui 이 juypter notebook 형태라 즉각적으로 확인하게며 작업하기 좋음. Web ui 는 offline 에서 사용할 수 없다(UI 요소를 외부에서 받아오는 부분이 있음). 우선순위 높게 잡고 작업 중이나 당장은 수정이 어렵다고. 이슈 참고 의 댓글에 패킷 덤프 후 오프라인에서 동작 하는 방법이 있으니 참고.(mitmproxy 사용)
sqlite3 랑 상당 부분 겹치는데, 플러그인을 지원하고 노트북 ui 를 제공하는 등, 사용성에 좀 더 신경을 쓴 DB 라고 봄.
수원 일월 수목원을 다녀옴. 매우 만족. 유료 수목원이고, 순천만 국가정원에 준하는 관리 상태였다.
순천만 국가정원 다녀온 이후, 자연물에 대한 관심이 높아져 날씨 좋은 기간엔 이곳저곳 방문하기로 결정. 서울 국제정원 박람회 를 서울 보라매 공원에서 열린다고 하여 다녀왔다. 무료라고 함.
다녀온 소감은 대실망.
근접성이 좋다보니 굉장히 많은 방문객이 있으나 시설(식물) 관리 상태는 많이 아쉬웠다. 순천만 국가정원으로 높아진 눈을 만족할 수 없었다. 사실 국가 정원은 국내에 단 두곳인 '국가 정원'이고 보라매 공원은 상시 운영 중인 무료 공원이니 어쩔 수 없을 것.
사실 이 정도의 내용은 정원 누리 사이트에서 이미 확인할 수 있는 내용인데, 각 시설의 사진이 공개 된 경우 유료 시설과 무료 시설의 관리 상태가 확연히 차이가 나기 때문. 정원은 상시 관리 하지 않으면 잡초 무성한 야지가 되어버리니까 사람 손이 계속 닿아야 하는데, 인건비를 어쩔 거냐.. 무료로는 감당 못하는 것.
순천만 국가정원 다녀왔는데 너무 좋았다. 반나절 일정으로는 다 볼 수 없었다. 전체 다 둘러보려면 하루 종일 봐야 할듯. 가을이나 겨울 정도에 갈대랑 철새 보러 또 가면 어떨까 싶다. 정원 누리 에 국가/지방/민간 정원을 정리한게 있다. 도장깨기처럼 하나씩 다 가보고 싶다.
주요 국가에서 꾸몄다는 컨셉의 정원이 있고, 식생을 최대한 유사하게 꾸며놓았다. 계절별로 보는 재미가 있을듯. 곳곳에 카페가 있어 쉬어갈 수 있었다. 막대한 운영비가 들어가는 시설이니 이런 수익화 사업이 들어가 있어도 나쁘게 보이지 않을 정도로 관리가 너무 잘 되어 있었다.
순천만 국가정원은 계절별로 화초를 새로 조성하는데, 그냥 버리는게 아니라 꽃 무료 나눔을 한다고. 링크. 코로나19 시기엔 튤립 드라이브 스루도 했나봄.
정원이나 수목원은 한국수목원정원관리원 에서 관리하는데... 아쉬운 점은 정원 누리엔 수목원 정보가 거의 없다. 산림청 수목원 현황 을 봐야 함.정원 누리의 정보 공개 방식이 시설 현황을 잘 알수 있으니 수목원도 정원 누리에 등록 되었으면 좋겠다. (정원 박람회 등을 하는거 봐선 정원과 수목원의 차이 때문에 분리한거 아닌가 싶다.)
차 타고 돌아 다닐 때마다 북적북적하던 생선 구이집을 직접 가봄. 생선 구이는 물론 반찬이 매우 맛있었다. 가족들이랑 같이 또 갔는데 맛있긴 한데, 더 맛있는 집이 있다고 해서 거기도 가봐야.
require('modules.inputsource_aurora')
function viminput()
local inputEnglish = "com.apple.keylayout.ABC"
local input_source = hs.keycodes.currentSourceID()
if not (input_source == inputEnglish) then
hs.eventtap.keyStroke({}, 'right')
hs.eventtap.keyStroke({}, 'left')
hs.keycodes.currentSourceID(inputEnglish)
end
hs.eventtap.keyStroke({'control'}, 'c')
end
hs.hotkey.bind( {'control'}, '[', viminput )
hs.hotkey.bind({"option"}, "space", function()
hs.application.launchOrFocus("WezTerm")
local wezterm_window = hs.window.find("WezTerm")
if wezterm_window then
wezterm_window:focus()
end
end)
do -- winmove
local win_move = require('modules.winmove')
hs.hotkey.bind({'ctrl', 'cmd'}, '0', win_move.default)
hs.hotkey.bind({'ctrl', 'cmd', 'shift'}, '0', win_move.move(1/6, 0, 4/6, 1))
hs.hotkey.bind({'ctrl', 'cmd'}, '1', win_move.left_bottom)
hs.hotkey.bind({'ctrl', 'cmd'}, '2', win_move.bottom)
hs.hotkey.bind({'ctrl', 'cmd'}, '3', win_move.right_bottom)
hs.hotkey.bind({'ctrl', 'cmd'}, 'left', win_move.left)
hs.hotkey.bind({'ctrl', 'cmd', 'shift'}, '4', win_move.move(0, 0, 2/3, 1))
hs.hotkey.bind({'ctrl', 'cmd'}, '5', win_move.full_screen)
hs.hotkey.bind({'ctrl', 'cmd'}, 'right', win_move.right)
hs.hotkey.bind({'ctrl', 'cmd', 'shift'}, '6', win_move.move(1/3, 0, 2/3, 1))
hs.hotkey.bind({'ctrl', 'cmd'}, '7', win_move.left_top)
hs.hotkey.bind({'ctrl', 'cmd'}, '8', win_move.top)
hs.hotkey.bind({'ctrl', 'cmd'}, '9', win_move.right_top)
hs.hotkey.bind({'ctrl', 'cmd'}, '-', win_move.prev_screen)
hs.hotkey.bind({'ctrl', 'cmd'}, '=', win_move.next_screen)
-- hs.hotkey.bind({}, 'left', win_move.move_relative(-10, 0), function() end, win_move.move_relative(-10, 0))
-- hs.hotkey.bind({}, 'right', win_move.move_relative(10, 0), function() end, win_move.move_relative(10, 0))
-- hs.hotkey.bind({}, 'up', win_move.move_relative(0, -10), function() end, win_move.move_relative(0, -10))
-- hs.hotkey.bind({}, 'down', win_move.move_relative(0, 10), function() end, win_move.move_relative(0, 10))
end