" programming(으)로 태그된 글들"

장마대비 코드 수정

2016-07-05   //   alexken작성   //   기술  //  No Comments

가장 최근 게시글이 2014년 4월 글이다.
그래 뭐라도 좀 쓰자.

심각한 결정장애자로 구성된 팀원들이 매일 점심마다 엘리베이터타고 지하 1층까지 내려와서는 서로의 눈치만 살필뿐 어디가자 말하는 사람이 없이 한동안 멍하니 서있기만 한 상황이 싫어서 만든 웹앱이 “오늘의 밥집”이다.

상암동 누리꿈스퀘어 근무자만 사용가능한 앱이다.

img_1104

오늘같이 비가 퍼붓는 날은 건물 밖에 나갈 수 없으니 날씨에 따라 추천 밥집을 유동적으로 할 필요가 있겠다 싶어 현재 날씨 관련 OPEN API를 찾아서 적용하였다.

기준은 가장 쉬어 보이는 놈으로 해서 openweathermap.org 꺼로 정했다.

http://api.openweathermap.org/data/2.5/weather?q=Seoul,uk&appid=3427...

HTTP GET 메소드로 요청하면 JSON으로 반환해준다.

{
  "coord": {
    "lon": 127,
    "lat": 37.52
  },
  "weather": [
    {
      "id": 301,
      "main": "Drizzle",
      "description": "drizzle",
      "icon": "09n"
    },

    {
      "id": 701,
      "main": "Mist",
      "description": "mist",
      "icon": "50n"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 292.66,
    "pressure": 1012,
    "humidity": 88,
    "temp_min": 290.15,
    "temp_max": 296.15
  },
  "visibility": 10000,
  "wind": {
    "speed": 1.5,
    "deg": 320
  },
  "clouds": {
    "all": 90
  },
  "dt": 1467724800,
  "sys": {
    "type": 1,
    "id": 8519,
    "message": 0.0104,
    "country": "KR",
    "sunrise": 1467663409,
    "sunset": 1467716182
  },
  "id": 1846735,
  "name": "Chamsil",
  "cod": 200
}

여기서 weather[0] –> main 에 해당하는 문자열만 끄집어 내서 Rain, Storm … 이면 건물 밖 밥집은 제외토록 하였다.

function currWeather(){
  var xhr = new XMLHttpRequest();
  var curr = "Clear";
  xhr.onreadystatechange=function() {
    if(xhr.status == 200 && xhr.readyState==4)
      curr = JSON.parse(xhr.responseText).weather[0].main;
  }

  xhr.open('GET', 'http://api.openweathermap.org/data/2.5/weather?" +
        "q=Seoul&appid=3427...'
,false);
  xhr.send();
  return curr;
}

[ruby2] (‘가’..’힣’).each{|x| print x}

2013-10-24   //   alexken작성   //   기술  //  No Comments

ruby라는 언어를 안건 1999년 이었지만, 줄곳 잊고 살다가 흥미를 가지고 배운것은 2008년 5월 이었다.

ruby 공부를 시작한지 2틀째 썼던 글인 [ruby] (‘가’..’힣’).each{|x| print x}는 ruby 1.8 시절에 내부 문자열 소팅을 unicode 순이 아닌 utf-8로 인코딩된째 소팅한다고 푸념하는 글이었다.

그때 막연한 희망으로 ruby 2.0에서는 unicode 순으로 해줬으면 좋겠다고 썼던적이 있다.

ruby 2.0이 나왔는 지 알게된 계기도, 오늘 쓴 ruby 2.0.0에서 iconv 사용 불가에서 썼듯이 우연히 MacOSX 를 Mavericks로 바꾸면서 알게 되었다.
혹시나 하는 맘에 ruby 2.0에서 문자열 소팅이 개선되었는지 확인해 보니 정말 바뀌어 있었다.

5년전에 생각했던,
‘가’에서 ‘힣’까지 출력하는 ruby code는

('가'..'힣').each{|x| print x}

한줄이면 된다.

더이상 utf-8을 unicode로 디코딩해서 소팅하고, 다시 utf-8로 인코딩 안해도 되게 되었다.
혹시나 하고 찾아 보니 이런 글 이 있네.

ruby 2.0.0에서 iconv 사용 불가

2013-10-24   //   alexken작성   //   기술  //  1 Comment

이전에 만들어 두었던 나만을 위한 EPG가 동작을 하고 있지 않았다.

/System/Library/Frameworks/Ruby.framework/... /kernel_require.rb:45:in `require'
    : cannot load such file -- iconv (LoadError)

이유를 살펴 보니, 날마다 EPG 데이터에서 HTML페이지를 생성하는 ruby 코드 내에서 사용한 iconv 때문에 requre 문에서 부터 오류가 발생했다. 문제를 추적해 가보니, 근원은 MacOSX를 “Mavericks”로 업그레이드 해서 발생한 문제였다.

  • MacOSX 10.8(“Mountain Lion”)에 기본으로 설치된 ruby 버전은 1.8.7이었다.
  • 반면 MacOSX 10.9(“Mavericks”)에서 2.0.0으로 판올림 되었다.
  • 그 과정에서 iconv가 deprecated 되었다가 1.9.3부터는 아예 빠져 버렸다고 한다. 해결책은 iconv를 추가로 까는 방법도 있겠지만, deprecated한 취지 대로, string의 encode로 바꾸었다.

기존 iconv 사용 코드

requrie 'iconv'
conv = Iconv.new('UTF-8//IGNORE','KS_C_5601-1987')
utf8_str = conv.iconv(ksc5601_str)

string.encode로 변경한 새 코드

utf8_str = ksc5601_str.encode("UTF-8", "KS_C_5601-1987")