해당글은 아이센스라는 회사를 다닌 여정에 대한 글이며 

아웃사이더님의 https://blog.outsider.ne.kr/1339을 보고 영감을 얻었습니다.


Work

2014.5.21~2018.1.12

1. Flex 프로젝트 유지보수 (2014.5~2015.12)

2. MFC 프로젝트 유지보수(VC 6.0, VS2008) (2014.5~)
- 생산 공정 프로그램
- 각종 지원프로그램

3. QT프로젝트 개발(2015.1~)
- 데이터 관리 프로그램
- 생산공정 프로그램
- 각종 지원프로그램

4. 닷넷(WPF)프로젝트 개발(2015.12~)
- 생산공정프로그램
- 병원의 병동 설치 프로그램
- 병원 시스템(EMR, OCS, HIS)과의 Interface 프로그램 
  + 해당 프로그램 개발을 위한 각 병원,업체과의 미팅을 포함한 모든 작업
- 웹서비스 감시 프로그램

5. 웹서비스개발(RubyonRails) (2015.12~) , 설치 및 운용
- DevOps 역할 수행

6. 모바일개발(iOS)
swift - 자사앱 유지보수
objective c - 과제 수행용 앱개발 + watchOS app

개인의 skill set을 고려치 않고 할 수 있는 것은 다 했다
company specific /field specific 정보를 알아간다고해서 안주하지 않으려고 노력했다

나쁜 상황을 헤쳐나가기 위해서 더 스스로를 채찍질하는 시기였다.

혼자 살아남으려고 하지 않고 팀 혹은 내 사람들과 함꼐 성장하려고 노력했다.


Study

업무 이외의 공부를 하는 것이 짧은 호흡이 아니고 꾸준한 내성이 생기기 시작한 시기이다

그 중심엔  과선배이자 스윙고수님이시자 개발자 멘토이신 김대현형 블로그https://medium.com/@hatemogi  - 여기서 공부와 개발에 대한 영감을 얻었다

와 

인프런이  https://www.inflearn.com/  - 이상하게 그 전에 여러 인강 사이트에서 못 느낀 뭔가가 있었다!!! 

누군가가 물어보면 자신있게 최애한다 혹은 인프런에서 배웠어요 라고 말할 수 있다.

있었다.


Blog

15.1.9 구글 애드센스가 승인나면서 본격적으로 사용함 - 

17년도 글 11 개 

16년도 글 29 개 

15년도 글 24 개 

앞으로 일하다가 막혀서 해결한 이력을 남기는 것 이외에 더 많은 내용을 담아볼려고 노력할 예정입니다.

People

힘든 순간에서 가장 힘이 된 것은 역시나 사람 사람 사람입니다.

내가 가장 사랑하는 아내와 2번째 사랑하는 아들

대부님, 앤디형~


늘 영감을 주시는 대현이형~

인프런을 만들어주신 이형주님 그리고 인프런 강의에서 감동을 주신 박순영님

외부 멘토 유부 강태우 - 귀찮을텐데 진짜 도움을 많이 줌 ㅋ 


아쉬운 아이센스 사람들

심승은대리,서민우과장님, 이승천과장님,김진호 대리,한치현대리,박효선대리,류광열차장님,이다연씨


아쉬운 갑 사람들

강원협팀장님, 김기욱차장님, 박태곤대리, 한진영대리, 현유섭씨


그리고 2년간 나의 office wife가 되어준 박무현 과장에게 특히 심심한 감사를 남깁니다.

같이 개발하고 같이 리뷰하고 같이 출장다니고 같이 욕먹고 같이 힘내고

덕분에 나가는 순간까지 아름다울수 있어서 감사하고 고맙고 미안하고


Books

2017>

국가란 무엇인가 0929

야밤의 공대생반화 0829

서버 인프라 엔지니어를 위한 devops 0717

손의 제곱법칙 0531

노무현 운명이다 돌베개 0312

객체 지향의 사실과 오해 0217

2016>
십자군 정쟁 1209

사랑하기 위하여 기도를 배운다 자크필립 10.5

눈먼자들의 국가 5.18

지옥설계도 3.10

대통령의 글쓰기 11.28-1.2


2015>
노인과 바다 어니스트 헤밍웨이 11.27

미친듯이 심플 11.22

마왕신해철 10.31

결국 디자인이다. 9.4

도나 플로르와 그녀의 두 남편 1, 2권  열린책들 from 감정수업 8.,25

욕망을 디자인하다 정경원 8.10

서른에 법구경을 알았더라면 3.18 아버지

화폐전쟁3. 1권 끝 2권 끝3 권 끝

법륜 엄마수업 1.25

2014>

폴오스터 - 선셋파크 12.1

이정명 별을 스치는 바람. 2권 0810

메가쇼킹 더도말고 덜도 말고 쫄깃 0628

여덟단어 5.25

Private

야근 주말 근무 하는 중에도 열심히? 소개팅하고 선보고!!!

연애해서 결혼 하여 아들 출산!

또한 야근 주말 근무 하는 중에도 열심히? 예비자교육 받고 세례성사로 천주인 이 되고 견진성사까지 받음.


Next

더 발전하는 개발자가 될 거 같은 안암역 근처에 있는 회사로 1.25일에 입사합니다. 

이 이야기는 겪어본 다음에 남길게요


by 무위자연 2018.01.11 08:50


  string strUri_get_stripinfos = strUri + DMCMD_get_stripinfos;


            try

            {

                WebRequest wrGETURL;

                wrGETURL = WebRequest.Create(strUri_get_stripinfos);


                Stream objStream;

                objStream = wrGETURL.GetResponse().GetResponseStream();


                StreamReader objReader = new StreamReader(objStream);


                string sLine = "";

                int i = 0;


                while (sLine != null)

                {

                    i++;

                    sLine = objReader.ReadLine();

                    if (sLine != null)

                    {

                        Console.WriteLine("{0}:{1}", i, sLine);

                        if (sLine.Contains("stripinfos") == true)

                        {

                            string response = sLine.Replace("\\", "");

                            response = sLine.Replace("\"", "");

                            response = response.Replace("{", "");

                            response = response.Replace("}", "");

                            response = response.Replace("stripinfos:", "");

                            response = response.Replace("[", "");

                            response = response.Replace("]", "");

                            string[] valuelist = response.Split(',');

                            if (valuelist.Count() > 0)

                            {

                                int selectedindex = -1;

                                List<string> striplist = new List<string>();

                                stripinfolist.Clear();

                                for (int k = 0; k < valuelist.Count(); k++)

                                {

                                    string[] temp = valuelist[k].Split('/');

                                    int tempvalue = 0;

                                    StripInfo info = new StripInfo();

                                    info.lot_number = temp[0];

                                    striplist.Add(temp[0]);

                                    if (temp.Length > 1 && temp[1] == "true")

                                    {

                                        selectedindex = k;

                                        info.aisdefaultatportable = true;

                                    }


                                    if (temp.Length > 2 && int.TryParse(temp[2], out tempvalue) == true)

                                    {

                                        info.min_cs_A_value = tempvalue;

                                    }


                                    if (temp.Length > 3 && int.TryParse(temp[3], out tempvalue) == true)

                                    {

                                        info.max_cs_A_value = tempvalue;

                                    }


                                    if (temp.Length > 4 && int.TryParse(temp[4], out tempvalue) == true)

                                    {

                                        info.min_cs_B_value = tempvalue;

                                    }


                                    if (temp.Length > 5 && int.TryParse(temp[5], out tempvalue) == true)

                                    {

                                        info.max_cs_B_value = tempvalue;

                                    }


                                    stripinfolist.Add(info);                                    

                                }                               


                                stripinfocombobox.IsEnabled = true;

                                stripinfocombobox.ItemsSource = striplist;

                                stripinfocombobox.SelectedIndex = selectedindex;

                                break;

                            }

                            else

                            {

                                

                            }

                        }

                    }

                }


            }

            catch (Exception err)

            {

                string error_msg = "서버에 접속하지 못했거나 해당 기능이 서버에 반영되지 않았습니다. \r\n접속 주소는 " + strUri_get_stripinfos + " 입니다\r\n메세지 :: " + err.Message;

                LogManager.Log(3, error_msg);

                stripinfocombobox.ItemsSource = null;

                stripinfocombobox.IsEnabled = false;

            }

by 무위자연 2018.01.10 17:12

1 include header file

#include <QTcpSocket>

  #include <qabstractsocket.h>


2. declare a variable

QTcpSocket *tcpClient = Q_NULLPTR;


3 connect slot

connect(tcpClient, SIGNAL(connected()), this, SLOT(connectedToDM()));//check connected server

connect(tcpClient, SIGNAL(readyRead()), this, SLOT(ReceiveServerData())); //receive data from server

connect(tcpClient, SIGNAL(disconnected()), this, SLOT(disconnectedfromDM())); //receive signal when disconnected

connect(tcpClient, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError)));//// check socket error from server


4. try to connect to server

tcpClient->connectToHost(m_dm_ip, 8000);


5. try to disconnect from server

tcpClient->disconnectFromHost();


6. send message to server

qint64 result = tcpClient->write(data.constData());


7. receive data from server

void MainWindow::ReceiveServerData()

{   

QByteArray servermsg = tcpClient->readAll();    

    QString msg = QString::fromUtf8(servermsg.constData());

 }



8. control socket error

void MainWindow::displayError(QAbstractSocket::SocketError socketError)

{

    Log();

    if (socketError == QTcpSocket::RemoteHostClosedError)

        return;

by 무위자연 2017.12.19 09:50

uiactionsheet deprecated at iOS8


so we have to change uiaction sheet to uialertcontroller


<example at UIViewController>

let alertController = UIAlertController(title: "등록된 혈당측정기를 삭제하시겠습니까?".localized, message: "", preferredStyle: .alert)

        let confirmAction = UIAlertAction(title: "확인".localized, style: .default, handler: { (action) -> Void in

            //do something

        })

        let cancelAction = UIAlertAction(title: "취소".localized, style: .cancel, handler: { (action) -> Void in

            //self.tableView.setEditing(false, animated: true)

        })

        alertController.addAction(confirmAction)

        alertController.addAction(cancelAction)

        self.present(alertController, animated: true, completion: { () -> Void in

            //do something

        })


//handle event selections

func selecttypeitem(action : UIAlertAction){

        var buttonIndex:Int = 0

        for title in self.termTitles {

            if(action.title == title)

            {

                break

            }

            buttonIndex = buttonIndex + 1

        }

}


<example at UIView>

 self.present to use like below

UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: false, completion: nil)


* we cant use sender.tag

* we can use only one action type cancel! if you add multiple cancel action, it will occur exception!

by 무위자연 2017.12.04 11:43


2 바이트를 읽어서

7 비트 / 4비트 / 5비트로 쪼개서 데이터를 parsing하는 예제


//2 바이트를 하나의 값으로 계산을 한다

 int value = (qint8(rcvPacket[1] & 0x0F) * 16) + qint8(rcvPacket[2] & 0x0F) + ((rcvPacket[4] & 0x0F)*16 + (rcvPacket[5] & 0x0F)) * 256;


//하위 비트를 제거하기 위해서 9만큼 쉬프트를 한다 그 다음에 7비트가 모두 1인 값(0x7F)와 AND 연산을 한다

 int year = (value >> 9) & 0x7F;


//하위 비트를 제거하기 위해서 5만큼 쉬프트를 한다 그 다음에 4비트가 모두 1인 값(0x0F)와 AND 연산을 한다

 int month = (value >> 5) & 0x0F;


//하위 5비트와 AND연산을 한다.

  int date = value & 0x1F;


by 무위자연 2017.11.29 15:10

냉무~

170911_모바일개발과iOS.pdf


by 무위자연 2017.09.12 08:40


Rails에서 이미지, javascript등을 미리 컴파일을 해서 동작 속도를 개선하는 방법이 있다


명령어 방법은


>rake assets:precompile


근데 이 때. 뒤에 환경을 써주지 않으면 development로 동작한다


그러면 production모드에서 쓸 것들이 모두 compile되지 않는다 


그러므로 production에서 빠르게 할려면 명시적으로 써준다


rake assets:precompile RAILS_ENV=production

by 무위자연 2017.08.19 22:11


string '1234' 를 8자로 만들 때 '00001234'로 0으로 채워넣고 싶을 때

(padding 한다고 할 수 있다)

value = value.PadLeft(8, '0'); //참 쉽죠

by 무위자연 2017.08.19 22:06



NSUserDefaults  - c#의 Setting에 가까운 것
키를 이용해서 저장
NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];
저장된 값을 확인.
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
  stringForKey:@"preferenceName"];


by 무위자연 2017.05.19 15:51


timezone / utc string to NSDate

ex 2017-05-15T18:49:00+0900"
dateformat은 yyyy-MM-dd'T'HH:mm:ssxxxx
xxxx가 핵심 swift와 공통


by 무위자연 2017.05.19 15:50