----->>>>

네스프레소 오리머신 구매

단비의 일상/생활 2021. 12. 13. 23:03

원래 버추오 네스프레소 머신을 쓰고 있었다. 그런데 버추오머신은 물 양이 저절로 정해지기 때문에 아메리카노라면 모르지만 나같은 라떼파의 경우는 라떼 만들어먹기 좋은 만큼만 끊어먹어야 했다.

라떼를 먹기에는 40ml, 80ml 정도가 적당하니 180ml나 230ml 정도 되는 캡슐은 늘 끊어먹어야 했다. 그런데 잘 알아보니 반대 컨셉의 캡슐커피가 존재했다. 무조건 40ml나 110ml로 추출되고 물을 더 타야하는…

더 큰 용량의 캡슐이라 하더라도 끊어먹어야 하는 상황이니 무조건 40ml로 추출하는 머신이 더 좋아보였다.

그래, 투머신으로 가는거야.

국내 정품은 좀 비싸고, 오리 머신은 고장이 잘 나지 않는다니 AS 불가를 무릅쓰고 직구를 한다. Q10에서 샀는데, 역시 싸긴 싸다.

일주일 여를 기다리니 택배박스가 도착했다.

뭐, 크기도 아담하다.
택배 박스를 벗기면 제품 상자가 나온다.

제품 상자를 열기 위해서는 종이로 만들어진 버클을 풀어야한다.
종이 버클을 살짝살짝 당기면 된다.

일단 본체는 꺼내서 가지고 있던 버추오와 같이 배열해보있다.  좌측이 버추오, 우측이 에센자 미니다. 같이 늘어놓으니 식탁 한줄이 꽉 찬다.

일단 본체를 설치했으니 같이 딸려온 것들을 보자.
맛보기 캡슐과 설명서 3개가 있다.

그런데… 독일어라서 읽을 수가 없다. 영어 설명, 아니 한글 블로그라도 찾아봐야겠다.

마지막으로 맛보기 캡슐. 그동안 버추오는 여러번 먹어봤는데, 오리는 뭘 먹어야 할 지 감을 잡지 못하겠다. 맛보기 캡슐로 한번 알아봐야지.



설정

트랙백

댓글

델파이로 만든 안드로이드 앱에서 외부 앱 호출하기

어쩌다보니 언젠가부터 자꾸 델파이로 앱을 만들고 있다. Android App.

그런데, Android Studio 자료는 많지만 델파이 자료는 없다보니 삽질 중인데, 어차피 안드로이드 앱이라는게 Java API를 래핑한 것이라 Android Studio 자료만 가지고서도 약간만 응용하면 델파이에서 사용할 수 있다.
외부 앱 실행을 위한 코드는 아래와 같다. 인텐트니 뭐니 다른 것 생각할 필요도 없고 그냥 실행만 시키는 코드다. 아, 실행시킬 앱이 폰에 설치되어 있지 않을 수 있으니 그것에 대한 오류 처리는 해야 한다. 그 오류 처리를 위해 VarIsNull 함수를 썼었는데 원하는 결과가 나오지 않았다.

결국 NULL 체크를 하는데 가장 유용한 try ... except 구문으로 NULL 처리를 했다.

일단 사용 유닛들은 다음과 같다. 안드로이드 앱 만들때, 사용 유닛들 정리가 귀찮아서 내가 주로 쓰는 것을 모두 uses 절에 넣어놓는다. 그러면 웬만한 에러는 나지 않는다.

 {$IFDEF ANDROID} 
 Androidapi.JNI.Os, // 권한 호출용 unit 
 Androidapi.JNI.JavaTypes, // 권한 호출용 unit 
 Androidapi.Helpers, // 권한 호출, 종료 확인용 unit 
 Androidapi.JNI.Telephony, // 전화번호 가져올때 쓰는 unit 
 Androidapi.JNIBridge, 
 Androidapi.JNI.GraphicsContentViewText, 
 FMX.Helpers.Android, 
 {$ENDIF}

그러면 패키지 이름만 가지고 다른 앱을 부를 수 있다. 아래가 그 코드다.

procedure TfrmMain.lunchApp;
var
  s : String;
  PackageManager: JPackageManager;
  Intent : JIntent;
begin
  s := 'com.chbreeze.jikbang4a'; // 폰에 존재하는 앱으로만 해야 함
  try
    Intent := TJIntent.Create;
    PackageManager := SharedActivityContext.getPackageManager;
    Intent := PackageManager.getLaunchIntentForPackage(StringToJString(s));
    Intent.setAction(TJIntent.JavaClass.ACTION_MAIN);
    SharedActivity.startActivity(Intent);
  except
    on e:Exception do
    begin
      MessageDlg('실행하려는 앱이 설치되지 않았습니다 종료하시겠습니까?', System.UITypes.TMsgDlgType.mtInformation,
        [
          System.UITypes.TMsgDlgBtn.mbYes,
          System.UITypes.TMsgDlgBtn.mbNo
          //System.UITypes.TMsgDlgBtn.mbCancel
        ], 0,
        procedure (const AResult: TModalResult)
        begin
          if AResult = mrYes then SharedActivity.finish;
        end
        );
    end;
  end;
end;

 

그런데, 저 위 코드를 실행시키기 위해서는 앱에 권한을 추가로 부여해야 한다. Query all packages 권한을 부여한다. 위험한 권한이 아니기 때문에 추가로 승인을 받을 필요도 없다. 그냥 툴에서 퍼미션 체크만 해주면 된다.

 

설정

트랙백

댓글

.bashrc 파일이 없을때 복구하기

IT 등/POGOPLUG 2021. 10. 3. 20:32

가끔 예전 리눅스나 계정 생성 과정을 잘못 만진 경우 계정은 생성되지만 부속 파일들이 세팅되지 않을 경우가 있다. 예를들어 .bash_profile 이나 .bashrc 등.

그냥 잘 쓰다가도 스크립트를 만진다던가, alias 를 만지려할때 저것이 없으면 당황하기 쉽다.

어차피 시스템 공통으로 쓰이는 /etc/bashrc 파일은 존재할테니 각 계정별 파일만 만들어주면 된다.

.bashrc 파일을 생성하고 그 안에 내용을 넣으면 되는데, 가끔 그게 적용이 되지 않을때가 있다. 저 위에서 말한 .bash_profile 파일이 생성되지 않아서이다.
profile 파일의 이름은 시스템마다 다르다.

.bash_profile 인 경우가 있고 .profile 인 경우도 있다.

그때는 해당 파일을 생성하고 아래 내용으로 만들어주면 된다.

# ~/.profile: executed by the command interpreter for login shells. 
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login 
# exists. 
# see /usr/share/doc/bash/examples/startup-files for examples. 
# the files are located in the bash-doc package. 

# the default umask is set in /etc/profile; for setting the umask 
# for ssh logins, install and configure the libpam-umask package. 
#umask 022 
# if running bash 
if [ -n "$BASH_VERSION" ]; then 
    # include .bashrc if it exists 
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc" 
    fi
fi

# set PATH so it includes user's private bin if it exists 
if [ -d "$HOME/bin" ] ; then 
    PATH="$HOME/bin:$PATH" 
fi

 

설정

트랙백

댓글

RadStuio MessageDlg 한글로 표시하기

RadStudio를 사용하면 델파이로 앱을 개발할 수 있다. 그런데 외산 툴의 한계가 있어서 MessageDlg등의 명령어를 사용하여 다이얼로그 박스를 만들면 종료 메시지는 한글로 쓸 수 있지만 예, 아니오 등의 기본 언어가 영어로 나온다.

그것을 해결하는 방법은 어렵지 않다.

FMX.Consts.pas 파일을 프로젝트 디렉토리로 복사해 온 후, 아래 내용을 영어에서 한글로 바꿔주면 된다. 프로젝트 디렉토리로 pas 파일을 복사해 오면 그 프로젝트에만 해당 내용이 반영된다.


기본적으로 영어로 되어 있으니 표현하고자 하는 부분을 한글로 바꿔준다.


이런 것을 보면, MS의 툴들은 다국어를 잘 지원하지만 델파이는 아직은 멀었다… 싶기는 하다

설정

트랙백

댓글

RadStudio WebView Zoom Control 없애기

웹뷰를 이용한 앱을 만들고 있는데, 화면에서 pinch Zomm In/Out 기능을 건드리다보니 뭘 잘못건드렸는지 이상한 표시가 생겼는데 그게 눈에 거슬렸다.

이런 아이콘이 생겨서 눈에 무지하게 거슬렸다. 

Zoom Control

그래서 그 해결책을 찾아봤더니 이분 블로그에 있었다. 

그런데 인터넷에서 앱 관련 모든 자료는 안드로이드 스튜디오 기준이다. 하지만 난 RadStdudio로 개발하고 있으니 그에 대응하도록 해서 반영했다.

먼저, 디폴트 값을 바꿀것이니 소스 중 FMX.WebBrowser.Android.pas 파일을 가져다가 프로젝트 디렉토리에 복사한다. 그러면 프로젝트 디렉토리에 있는 파일의 내용을 반영한다.

그리고 소스 중 일부 내용을 바꿔준다. -> setDisplayZoomControls(False)로 바꿔준다.

FMX.WebBrowser.Android.pas 파일 중 일부

그러면 Zoom Control이 없어진다.

그 외에도 상세하게 API를 제공하지 않는 델파이 컴포넌트의 속성을 변경할때 소스파일을 가져다가 내용을 변경하면 적용된다. 그렇기 때문에 델파이는 높은 수준의 API 접근성을 굳아 제공하지 않는 경우도 있다.

설정

트랙백

댓글

델파이 WebView Zoom IN/Out 해결

요즘 간간히 앱을 만들고 있었다.

그런데 요구사항 중 하나가, 특정 사이트에서 핀치 줌/아웃이 되게 해달란다. 그 사이트는 메타태그로 핀치 줌인을 막아놓고 있는 것이었다.

<meta name="viewport" content="width=device-width, user-scalable=no"> 

문제는, 이런 비슷한 해결방법들이 Android Studio에는 많치만 상대적으로 사용자가 적은 델파이(RAD Studio)에는 잘 알려지지 않았다는 거다.

그래서 답은 안드로이드 스튜디오 용으로 일단 찾아놓고.. https://yenne.tistory.com/4 이분이 답을 알려주셨다.

어차피 델파이도 언어가 델파이(오브젝트 파스칼)이라서 그렇지 SDK는 Android Studio를 쓰니 방법은 같을 것이라는 생각에 똑같이 해봤다.

거기 나온 방법대로 WebView 초기값을 주기위해 FMX.WebBrowser.Android.pas 파일을 프로젝트 디렉토리에 복사해 놓고 수정해보기도 하고.... 그런데 별로 소용이 없었다.

처음에는 D.P.F 패키지를 깔아서 해결하려 했는데, 설치도 어렵고... 버전업도 안되고 했는데 기본 컴포넌트로 해결하는 방법이 있었다.

TWebbrowser 컴포넌트 자체에 자바스크립트를 실행시키는 프로시저가 존재했다. 그것은 EvaluateJavascript 라는 프로시저인데, 프로시저 이름에서 풍기는 포~쓰! 그렇다. 아주 쉽게 자바스크립트 실행이 가능했다. 이걸 몰라서 D.P.F 패키지를 깔기 위해 그 뻘짓을 했으니... 

방법은 간단하다.

웹뷰가 문서를 다 로드한 시점에 실행되는 DidFinishLoad 이벤트에 다음 코드를 넣어주면 된다.

그런데 한번 넣어서는 안되고, initial-scale=0 으로 한번 initial-scale=1.0 으로 한번 도합 두번을 넣어주어야 한다.

procedure TfrmMain.WebBrowser1DidFinishLoad(ASender: TObject);
begin
  WebBrowser1.EvaluateJavaScript('document.querySelector("meta[name=viewport]").setAttribute("content", "width=device-width, initial-scale=0, maximun-scale=2.0, user-scalable=yes");');
  WebBrowser1.EvaluateJavaScript('document.querySelector("meta[name=viewport]").setAttribute("content", "width=device-width, initial-scale=1.0, maximun-scale=2.0, user-scalable=yes");');
end;

설정

트랙백

댓글

거실에 널브러진 NAS 나부랑이 정리

단비의 일상/생활 2021. 6. 20. 21:47

거실에 TV 옆에 전자제품이 하나 둘 늘어난 것은 약 10년 정도 전부터 였나보다.

처음에 NAS 대용으로 포고 플러그를 들이고, 또 한대 더 들이고, 라즈베리파이를 들이고, 영화를 보려고 WD Live TV를 들이고. 공유기를 설치하고, 포트가 모자라니 허브를 사다 달고…

거기다 PS4를 들이고 닌텐도 스위치를 들였다.

이렇게 한대 한대 늘다보니 더 이상 손 쓸 수 없는 지경이었는데,

65인치 TV를 사겠다는 결정을 하고보니 어떻게든 치워야 하는 상황이 된거다. 내가 집에 없을때 배송이 올텐데, 설치 기사보고 치워가며 설치하라고 할 수는 없는거니까.

그래서 다이소에 가서 정리함 두개를 사다가 일단 치워봤다. 처음에는 엄두가 나지 않았지만 고딩 아들이랑 하니 할만 했다. 단언하건데, 혼자는 죽어도 못할거다.

정리할게 좀 많아야지. 결국 정리해 놓았고 그 사진이다.


설정

트랙백

댓글

이제 앱 개발도 해보네.

IT업계에서 일한지 25년쯤 되어가나보다.

이제는 개발에서 손 놓은지도 꽤 됐는데, 이 사점에서 앱을 만들었다.
이제는 손도 다 굳고… 예전에 쓰던 개발툴의 신버전에서 앱개발을 지원한다기에 한자 한자 두드려가며 만들었다.
그래도 하던 가락이 있어서인지 뭔가 산출물이 나오기는 한다.

아파트 커뮤니티 사용량을 보는 앱인데, 실상은 웹으로 다 만들어 둔 것인데 앱으로 껍데기만 입혀봤다.

안드로이드 개발자 등록은 일회성 비용만 지불하면 되서 아무런 문제가 없는데, 아이폰은 매년 비용을 지불해야되기도 하고 가장 중요한 맥북이 없다.

일단 안드로이드만 만들었다.

앱을 업로드하고 구글 검수를 기다리는 중인데 곧 되겠지.(5/6에 첫 업로드)

아래 사진은 초기화면. 앱이니 폰 전화번호를 받아다가 바로 적용했다. 기존 웹은 너무 입력화면이 많았다.

 

 

개인정보 넣던 화면은 다 없앴고 전화기에서 전화번호를 받아오니 굳이 인증 화면을 둘 필요가 없었다. 전화번호로 인증되면 바로 내역조회로 넘어간다.
은행 ARS에 연결하면 바로 본인인증이 되던 것에서 착안했다.

 

 

연, 월을 입력하면 사용 내역이 보인다. 이렇게 간편한 UI라야 쓸만하지.

 

 

그러다가 좀 예외상황이 발생하면 이전 화면으로 리다이렉션 시킨다. 입력화면이 많아야 보안이 확보되지.

 

 

향후에, 앱 버전을 올렸을때를 대비해서 구버전 앱을 쓰면 안내가 나오게 했다.

 

 초기버전을 만들고 플레이스토어에 퍼블리싱도 했다.
https://play.google.com/store/apps/details?id=com.embarcadero.DMCPVX_COMM_I
그런데 특정사용자만을 위한 앱인지라 사용자가 없다.

 

설정

트랙백

댓글

마스크 쓸때 안경에 김 서리지 않게하기

단비의 일상/생활 2020. 12. 19. 22:39

금년들어 코로나19의 영향으로 늘 마스크를 쓰고다니게 되었다.

그런데 겨울이 되니 문제가 생겼다. 마스크를 쓰지 않을때는 따뜻한 곳에 있다가 갑자기 추운 곳으로 나올때만 김서림을 주의하면 됐지만 이제는 항상 김이 껴서 안경을 뿌옇게 만들어버린다.

왜그런고 하니 숨쉬고 나온 공기가 마스크를 따라 옆으로 빠져나오면서 코 옆으로 빠져나오기 때문이다.


이것에 대한 해결책은 없을까? 하고 찾아봤더니 종이테이프로 해결이 된단다.

요런걸로.

직접 마스크에 붙여보자. 요정도 모양이 된다.


종이 테이프 붙인 부분만 확대해보면 아래 사진 처럼 된다.


이걸 붙인채 안경을 쓰면 되는데, 생각보다 모양이 나쁘지 않다.


실제 착용해봤더니 진짜 김이 "덜"끼기는 한다. 이때의 체크포인트는 종이 테이프를 옆으로 "넓게" 붙여야 한다는거다.

종이 테이프도 폭이 좁은것, 넓은것 두가지를 파는데, 넓은게 쓰기 편하다.

설정

트랙백

댓글

라즈베리파이로 홈서버 만들기

IT 등/라즈베리파이 2020. 12. 14. 00:38

사실 이 글이 가장 앞에 있어야 하는데 라즈베리 관련 여러 글을 쓰고서야 설치 얘기를 하게되었다. 그게, 처음 설치 후에 갑자기 라즈베리가 동작하지 않아 애태우다가 글 쓸 타이밍을 놓쳐버렸었다.

각설하고,

집에서 영화보고, 파일 관리하는데 꼭 필요한게 NAS다. 그래서 그걸 Pogoplug를 해킹해서 리눅스를 만들어 굴린게 벌써 7년 전이다. 그동안은 archlinix로 잘 썼었다. 사실, 집에서 리눅스를 굴린다고 해 봐야 토렌트 다운로드을 위해 트랜스미션만 잘 돌아가면 되는 것이었으니까.

그런데, 사람의 욕심이라는게 참… MySQL을 깔고 mysqldump를 하는데 잘 안된다. 그 이유가 뭔고하니 메모리 부족이란다. 그래 256M 정도니… 인정해 줄께.

VitrualHosting 하는 것도 워낙 저가로 했더니 mysql은 설치가 되지만 mysqldump로 조금만 큰 데이터를 넣으려 해도 실행이 되지 않았었다. 그런데 그 해결책이 생긴 것이다.

그래서 라즈베리파이를 구매했다. 기존에 라즈베리파이4에 4G 메모리 버전이 있는 것은 알았는데, 신제품으로 메모리 8G 버전이 나왔다는 것을 보고는 홀리듯 구매해버렸다.

라즈베리파이 스펙을 살펴보자.

라즈베리파이4 8GB가 되면서 CPU는 그대로지만 RAM이 늘었고 네트워크가 향상되었다.

이정도로 스펙을 알아봤으니 배송받은 라즈베리파이 외양을 본다.

빨간(정열적인?) 박스에 본체와 거기 붙일 방열판이 왔다. 방열판 기본 내장인 것으로 보아 열이 많이 나는가 보다.

포장을 뜯고 내용물을 꺼내봤다. 단일 기판에 모든 것이 조밀하게 들어있는데 CPU 및 랜포트 등 필요한 것은 다 있는 것 같다.

뒷면을 뒤집어 보자. 아하, 마이크로SD 꽃는 곳이 아래에 있었다. 거기 끼우니 딱 맞네.

열이 많이 난다고 하니 같이 포장되어 온 방열판을 붙이자. 부품도 몇개 안되지만 그 위에 붙이니 크기도 딱 맞는다. 추가로 케이스를 구매했는데 저 방열판은 크기가 맞지 않아 떼어버려야 했다.

라즈베리파이를 위해 어떤 OS를 깔아야 할까. 리눅스를 다룰 줄 알다보니 당연히 내 선택은 Ubuntu Server였다. 제공되는 버전은 20.04 LTS다. 늘 터미널로만 쓰다보니 X-window 연결은 고려대상 밖이다. 또한 8G 메모리이니 64bit 버전을 사용한다.

우분투 서버 설치를 위해 설치 툴인 winimager32와 우분투 이미지를 다운로드 받았다. 우분투 이미지는 압축시에 670메가 정도 밖에 되지 않았지만 압축을 푸니 3G정도 사이즈가 된다. 저 압축 푼 파일로 작업을 할 것이다.

파일과 MicroSD가 준비되면 이미지 툴로 구우면 된다. 기존에 준비된 이미지를 굽는 것이기 때문에 시간도 별로 걸리지 않는다.

굽고나면 그림처럼 완료 메시지가 뜬다.

그리고 윈도우에서 리눅스 이미지를 구웠음에도 불구하고 뭔가 파일 목록이 보인다. 그것이 뭔고 하니 부팅 이미지다.
아래 그림에서 처럼 60MB 가량읔 FAT32인 부분이 있어서 윈도우에서도 일부 보이게 된다.

이제 설치를 마쳤으니 SSH로 로그인 할 수 있다. 로그인 해 보자. 그러면 초기 세팅이 UTC로 되어 있음을 알 수 있다.

이것을 KST로 바꿔보자. 터미널에서 dpkg-reconfigure tzdata 라고 입력하면 TimeZone을 고를 수 있는 화면이 나오고, 거가서 "Asia/Seoul"을 골라주면 된다. 이 작업은 root 권한으로 해야 한다.



설정

트랙백

댓글