2020/05/10

스캔 완료

필름로그에 지난 주 맡겼던 필름 스캔이 완료됐다.
카메라에 거의 2년 동안 방치 돼 있던 필름이라서 상태가 괜찮을까 했는데 36장 중에 35장이 인화 가능했던 모양이다.

제주에 필름 현상 아직까지 해주는 데가 연동에 딱 한군데 남아있다고 들었는데, 원래는 거기에 맡기려고 했었다.
몇 주 전 화요일인가, 마침 병원 가는 날이라 오전 반차도 썼겠다, 한 번 가볼까 했는데 하필 그 날이 쉬는 날.
어쩔 수 없지, 또 미뤄뒀다가, 그냥 또 제주 필름 현상소를 다시 검색해봤더니 필름로그 제주점이 한 달 전에 생겼다는 소식이!
주말에 스시 먹으러 전농로 이노찌 가는 길에 들렀다.
원래 학교 앞 분식점이던 곳을 개조했는지 아주 레트로(..?)한 분위기의 가게. 각종 필름과 카메라들도 전시 돼 있어서 필름 구경하면서 잠깐 정신을 빼놨다가,
엑타크롬 E100, 포트라 160 한 개 씩 챙기고 필름을 맡겼다.

필름은 택배로 서울에 보내서 현상/스캔 해서 롤 별로 사이트에 올려준다. 인화는 별도.
마침 방문한 날이 연휴 직전이라 좀 오래 걸렸지만, 아래 처럼 사진이 나왔다.


Pentax MX + Kodak Gold 200
렌즈는 주로 A50.4 인데 아닌 것도 있는 것 같다.

주말 출근 했는데 햇볕이 너무 좋아서

두 컷이나 찍었다


맛있는 윙 먹고 싶다


케왕이와 동수2 .. 인 것 같다


튤립 인 것 같다

대충 이정도 느낌인데, 나머지는 거의 망했거나 얼굴이 찍혀서 웹에 올리긴 좀 그렇고, 사실 이번 롤에 있던 사진들은 크게 맘에 드는 게 없다.
일단 있던 필름 빼내고 새 필름 껴서 필름 사진 다시 시작하는게 목표였던 거라 뭐 일단 새 필름을 사서 넣었으니 만족.
그리고 슬라이드 필름도 하나 사놨으니 만족. 마지막으로 필름로그를 찾았으니 만족.

오랜만의 포스팅 끝.

2020/02/16

Unreal 4.2x 이후 Visual Studio 빌드 오류 인코딩 깨짐

집에서 설치판으로 가지고 놀다보니 답답하길래 대충 고쳤다.
utf8과 ascii를 섞어쓰는 양코백이 놈들이 잘못했다.

2020/02/16
4.24.2 설치형 + VS2019 기준으로 작성

Unreal Build Tool에서 입력 출력이 틀려먹었는데,
정확히는 DotNETUtilities에서 잘못 하고 있는게 맞다.

1. 출력
UBT 실행 결과를 VS로 던질 때 UTF-8로 던져야 한다.
Engine\Source\Programs\DotNETCommon\DotNETUtilities\Log.cs
@@ -232,6 +232,7 @@
                        IncludeCallingMethod = true;
                        IncludeCallingMethodForConsole = false;
                        ColorConsoleOutput = true;
+                       Console.OutputEncoding = Encoding.UTF8;
                }

                /// <summary>

2. 입력
컴파일러를 DotNETUtil의 ManagedProcess를 사용해 병렬 처리를 하는데,
실행되는 프로세스의 인코딩을 Console.OutputEncoding과 일치한다고 생각하고 사용하고 있다.
아쉽게도 우리는 cp949로 실행된다.

그래서 일단 두 군데를 고치는데,
ManagedProcess가 초기화 될 때 ReadStream 의 인코딩을 Encoding.Default로 지정해주고,
ReadAllLines에서 ReadStream.CurrentEncoding 을 이용해서 문자열을 해석 하도록 할 것이다.


UE_4.24\Engine\Source\Programs\DotNETCommon\DotNETUtilities\ManagedProcess.cs
@@ -481,7 +481,7 @@

                                        // Create the stream objects for reading the process output
                                        InnerStream = new FileStream(StdOutRead, FileAccess.Read, 4096, false);
-                                       ReadStream = new StreamReader(InnerStream, Console.OutputEncoding);
+                                       ReadStream = new StreamReader(InnerStream, Encoding.Default);

                                        // Wrap the process handle in a SafeFileHandle
                                        ProcessHandle = new SafeFileHandle(ProcessInfo.hProcess, true);
@@ -648,7 +648,7 @@
                                {
                                        if(NumBytesInBuffer > 0)
                                        {
-                                               OutputLines.Add(Console.OutputEncoding.GetString(Buffer, 0, NumBytesInBuffer));
+                                               OutputLines.Add(ReadStream.CurrentEncoding.GetString(Buffer, 0, NumBytesInBuffer));
                                        }
                                        break;
                                }
@@ -664,7 +664,7 @@
                                        {
                                                if(Buffer[Idx] != '\n' || LastCharacter != '\r')
                                                {
-                                                       OutputLines.Add(Console.OutputEncoding.GetString(Buffer, LastStartIdx, Idx - LastStartIdx));
+                                                       OutputLines.Add(ReadStream.CurrentEncoding.GetString(Buffer, LastStartIdx, Idx - LastStartIdx));
                                                }
                                                LastStartIdx = Idx + 1;
                                        }

이렇게 하면 나중에 readstream encoding만 변경하면 readalllines 도 같이 바뀌겠지
뭔가 조금 더 정리해서 적고 싶지만 졸리니까 나중에..

어쨌든 이걸 적용하면 UBT 등등 dotnetutils를 사용해서 외부 프로세스를 띄운 다음 로그를 받아서 에디터나 vs로 띄우는 과정에서 생기는 인코딩 오류가 전체적으로 사라질 것인다.
물론 외부 프로세스 자체가 utf-8 출력을 지원하는 경우에 또 ManagedProcess의 기본값이 Default이기 때문에 오동작 할 수 있을거 같은데 다른 방식으로 풀 수 있지 않을까 싶음