What Should I do?
2025년 달력입니다. 프린트해서 쓰세요.
A4용, A5용, B5용으로 만들었습니다. 심플하게 만들었으며, 다음 과 같은 특징이 있습니다. 24절기 표기 15일 단위 음력표기 초복, 중복, 말복 표기 2026년 1월 포함 A4용 2025 달력_A4.pdf 다운로드 A4용 입니다. 대부분의 가정용 프린터가 A4를 출력하기에 그냥 출력해서 쓰시면 됩니다. B5용 2025 달력_B5.pdf 다운로드 B5용지가 있으신분은 다음파일을 다운로드 하시면 됩니다. A4용지에 찍는 B5
VSFTP 서버 설정하기 - 참 할 것 많다.
VSFTP 서버 설정하기 - 참 할 것 많다. FTP - 모하는 거지.. FTP(File Transfer Protocol)은 단순히 서버와 파일을 주고 받기 위한 것이다. 파일을 주고 받기위한 것에만 특화되어 있다. 일단 이 글은 Unbuntu를 기존으로 설명하겠다. 설정파일은 당연히 다음의 경로에 존재한다. /etc/vsftpd.conf 이 파일을 루트사용자 권한으로 열어서 수정하면 된다. Active 모드 vs Passive 모드 ftp로 파일이 전송되는 과정은 다음과 같다. 사용자가 ftp서버에 접속하면(주로21번 포트) 이 포트로는 명령만을 주고 받는 역할을 한다. 실제 파일이 전송되는 것은 다른 포트를 사용하게 된다. Active모드는 클라이언트에서 포트를 열어 서버가 클라이언트에 접속해 파일을
javascript base64 js코드 - 그냥 만듬
javascript base64 js코드 - 그냥 만듬 이 글과 관련된 이전 글의 링크는 다음과 같다. 관심있는 사람은 한번 읽어보기를 바란다. Javascript Base64 한글 등 특수문자 처리 참내.. btoa, atob함수는 Uint8Array를 지원하기 전에 나온 것이라 한글 처리 등에 문제가 있다. 따라서, base64 인코딩/디코딩을 하기 위해서는 약간의 트릭을 써야 한다. escape함수를 통해서 처리하는 것이다. 하지만 escape함수가 deprecated되었기 때문에, 쓰기에는 좀 찜찜한 실정이다. 솔직히 escape함수를 사용하는 코드가 너무 많을 것이기에, 이 escape함수를 완전히 없애는 것이 가능할 지는 의문이지만, 그래도 찜찜하기는 마찬가지다. 이제 거의 모든 브라우저가 te
JS - 브라우저에서 이미지 포맷 변환하기
Canvas의 toBlob() 함수 Canvas Element에는 toBlob() 함수가 있다. 이 함수를 이용하면 jpeg, png, webp로 데이터를 받아올 수 있다. 굳이 서버에서 이미지를 변환할 필요가 없다. 이미지 포맷을 변환하는 프로그램을 간단히 만들 수 있으며, 서버로 보내기전에 webp로 바꾸어 전송하면 트래픽 사용량과 저장공간도 아낄 수 있다. 이 글에서는 이 변환하는 방법을 설명한다. 어떻게 동작하나? 이미지를 로드하고 canvas를 만들어 이미지를 그린다. 그리고 canvas의 toBlob을 이용해 이미지 포맷을 변경하는 것이다. 다음은 화면에 보이든, 서버로 보내든, 다운로드하든 필요한 작업을 하면 된다. 간단히 의미별로
<img> 태그의 decoding 속성 – 'load'이벤트가 끝이 아니었다.
load는 디코딩을 포함하지 않는다. 이미지를 서버에서 다운로드 받아오면 ‘load’이벤트가 발생한다. 이 것을 이용해서 이미지가 로드되었음을 확인할 수 있는 데, 이미지는 주로 압축이 되어있기 때문에 decoding을 거쳐 pixel단위의 데이터로 변경되어야 화면에 그릴 수 있다. 이 디코딩은 언제 실행되는 지가 궁금했는 데, decoding의 속성에 따라서 실제 decoding의 실행시점이 달라지게 된다. Decoding은 필요한 경우에만 실행된다. 실제 화면에 그리는 작업을 하지 않으면 decoding이 필요가 없기 때문에 브라우저는 이미지를 다운로드 받았다고 decoding을 하지 않는다. load이벤트가 발생했다고 즉시 화면에 그릴 수 있다는 뜻이 아니라는 것이다. 실제 decoding 일어
안드로스튜디오에서 외부 JAVA소스 폴더 링크하는 법
android { .... .... sourceSets { main.java.srcDirs += 'src/main/<YOUR DIRECTORY>' } } build.gradle 파일의 android 부분에내용을 추가 한다. 여러개를 넣을경우 sourceSets { main { java.srcDirs = [ '/src/man<YOUR Directory>', 'c:/myjavapack/classes' ] } } build.gradle file의위치는 app 밑에 있는 것이다.(최상위가 아니다.) 이렇게 하고 sync하면 자동으로 프로젝트에 추가 된다.
간단한 TGA파일 구조
가장 간단한 이미지 포맷이 필요한 상황이 발생했다. BMP포맷이 있지만, 어쩌다 TGA라는 포맷이 꽂혀서 좀 찾아 보기로 했다. 구조와 순서 TGA 구조와 순서 영역 크기 설명 1. Tga Header 18바이트 이미지의 주된 정보 2. Image ID 가변 Header의 첫 바이트[idLength]에 이 크기를 지정한다. 주로 사용하지 않는다. 3. ColorMap Data 가변 Palette 이미지를 사용할 경우만 존재하며, Palette Color값이 저장된다. 4. Pixel Data 가변 이미지 픽셀 정보를 담는다. 헤더의 정보에 따라 RLE압축으로 데이터를 넣
Exif 썸네일 추출 C코드
Jpeg 파일에서 썸네일을 추출해보기로 했다. 일단 기본이 되는 함수를 만들어 보자. // You must call exif_data_unref(return value ) if return value is not null. ExifData* JpegExif_GetThumbnail( const char* pszJpegFilePathName ) { ExifData* ret = nullptr; ExifLoader *loader = exif_loader_new(); ExifData *ed = nullptr; if( !loader ) { return nullptr; } exif_loader_write_file( loader, pszJpegFilePathName ); ed = exif_loader_get_data(lo
VC 디스크 드라이브 목록 구하기
단순 드라이브 목록 단순히 드라이브목록만 구하려면 다음과 같이 할 수 있다. 방법1 - GetLogicalDrives List1 - 루트목록1 void DiplayDrives1() { DWORD drives = GetLogicalDrives(); for (int i = 0; i < 26; i++) { if ( drives & ( 1 << i ) ) { wprintf(L"%c\n", L'A' + i ); } } } bit의 위치가 SET되으면 그 드라이브가 존재한다는 뜻이다. 만약 5번째 비트가 SET되어 있다면, ABCD(E)F.. 중 E드라이브가 있다는 뜻이 된다. 대부분의 상황에서 이 방법은 잘 작동한다. 사용법은 단순하지만, 이 방법은 26번의 루프를 돌아야 될 뿐만
VC 드라이브 볼륨 시리얼번호등 정보 알아내기
디스크와 볼륨은 다른 것이다. volume의 시리얼번호만으로 대부분의 상황에 대응이 가능하니 이 글에서는 Disk의 시리얼번호가 아니고 볼륨의 시리얼번호를 다룬다. 함수명은 GetVolumeInformation으로 드라이브이름, 파일시스템형태, 기본정보를 알아낼수 있습니다. VC에서 GetVolumeInformationW까지 치고 [F1]누르면 MS의 함수명세를 볼 수 있다. GetVolumeInformation BOOL GetVolumeInformationW( [in, optional] LPCWSTR lpRootPathName, [out, optional] LPWSTR lpVolumeNameBuffer, [in] DWORD nVolumeNameSize, [out, optional] LPDWORD lpVol