년도별 글 목록: 2010

아이폰 무료 오디오북으로 영어공부를!

잘 사용하지 않는 아이폰기능중에 AudioBook 이라는 기능이 있습니다. 이 오디오북은 음성으로 책을 읽어준다는 개념인데요. 실제로 외국에서는 이 형식으로된 책들이 꽤 많이 팔리고 있습니다. 차로 출퇴근이 많은 미국인들이 운전중에도 책을 읽는게 가능하도록 하는거죠. 아이폰용 오디오북은 M4b 라는 파일확장자를 가지고 있습니다.

아이폰에서 이 M4b 형식의 파일이 다른 음악파일보다 나은 장점은 2가지 입니다.

  • 속도 조절이 가능하다 ( 느리게/보통/빠르게 , 아이폰에선 1/2x,1x,2x 와 같이 보입니다)
  • 듣다가 멈추고 다른작업을 하고 와도 듣던곳부터 들을수 있다 ( 자동 북마크 )

영어공부에 많이 사용하시는 특정구간반복(찍찍이)가 되면 좋겠는데 그건 안되더군요.

오디오 북을 플레이하는 기능화면은 아래와 같습니다. 음악 들을때와 마찬가지로 iPod 버튼안에 들어있습니다.

iPod Audiobook Audiobook playing

우측화면이 실제 오디오북 플레이 화면입니다. 음악과 마찬가지로 앨범커버를 지정하면 표지가 입력되고 가사입력하듯이 입력하면 스크립트를 보실수 있습니다. 물론 스크립트 자동 스크롤 같은 기능은 제공되지 않습니다. 좀더 나은 기능을 위해서는 유료 오디오북 앱을 이용하셔야 합니다.
가운데 30이라고 써있는 버튼은 30초 뒤로 되돌리기 입니다. 듣다가 잠깐 놓쳤을때 쉽게 되돌아갈수 있습니다.

커버와 스크립트를 샘플로 입력해본 화면입니다.

아이폰용 무료 오디오북 다운받기

오디오북무료로 구할수 있는곳이 몇군데 있습니다.

  • LibriVox : 자원 봉사자들에 의해 녹음된 무료 오디오 북들 2600개. MP3와 OGG 포맷으로 제공. PodCast 도 제공
  • Books Should Be Free : MP3 파일 다운가능. iTunes 링크는 각 책을 Podcast 형태로 등록하여 다운로드 가능
  • Free Classic Audio Books : 오디오북을 MP3 와 M4B 두가지 포맷으로 제공합니다.

위 3개 사이트만 이용 하셔도 영문 오디오 북을 꽤 많이 구하셔서 들어보실수 있습니다.

각 챕터당 파일이 여러개 일때는 Firefox 용 확장인 DownThemAll 을 이용하시면 쉽게 한번에 다운받으실수 있습니다.

MP3 파일을 M4B 오디오북 파일로 변환하기

혹시 기존에 가지고 계신 영어교육 MP3 같은 자료가 있으시다면 다음과 같은 방법으로 M4B파일로 변환가능합니다.
또한 위의 사이트들에서 내려받은 개별 MP3 를 하나의 파일로 합치는 것도 가능합니다.

http://www.freeipodsoftware.com/에서 제공하는 무료 변환기인 AudioBookConverter 를 받아서 실행하시면 다음과 같은 화면이 뜹니다.

MP3 to M4b Audio Book Converter

여러개의 파일을 하나로 합쳐서 변환하거나, 각각을 M4b 파일로 변환할수 있습니다. 여러개의 파일을 하나로 합칠때는 Tag Editing 도 가능합니다. 일반적인 이용패턴은 다음과 같습니다.

  1. DownThemAll로 MP3 파일 한번에 다운
  2. AudioBookConverter 로 한개의 파일로 합치기
  3. 커버입력 및 태그정리 – 가능하면 스크립트도 복사
  4. iTunes 로 아이팟에 동기화

이제 오디오북을 이용해서 아이폰으로 영어 듣기 공부를 해보세요! 🙂
아 ! English as a Second Language [아이튠스 링크] 같은 기존의 PodCast 들을 이용하시는것도 추천합니다.

트위터와 파워포인트 매쉬업하기 – Twitter + Powerpoint Mashup

트위터 API를 활용한 국내외 다양한 매쉬업 사례에서 사용한 파워포인트 파일엔 원래 매크로를 이용한 트위터 매쉬업이 들어가 있었습니다만, Slideshare 가 매크로가 포함된 파일을 받아주지 않아서 제거하고 올렸습니다. 이번엔 이 파워포인트 + 트위터 매쉬업에 대해서 소개드리겠습니다.

파워포인트에는 꽤 오래전부터 VBA(VisualBasic for Applications) 방식의 매크로를 사용할수가 있는데요. (VBA 편집기 창 여는 단축키는 Alt + F11 입니다. ) 이걸 이용하면 간단하게 트위터에 글 남기는 함수를 만들수 있습니다. 트윗남기기 소스는 다음과 같습니다.

Function Tweet(tweetmsg, uid, pwd)
     Dim objHTTP As Object
     Set objHTTP = CreateObject("Microsoft.XMLHTTP")
          objHTTP.Open "POST", "http://twitter.com/statuses/update.xml", False, uid, pwd
          objHTTP.send "status=" & tweetmsg
          Tweet = objHTTP.responseText
     Set objHTTP = Nothing
End Function

위와 같이 8줄만 있으면 트위터 서버에 HTTP Basic Authentication 을 이용해 POST 로 간단히 트윗을 남길수 있습니다. 트위터 ID/암호 와 트윗메시지만 이 함수에 남기면 바로 트윗이 됩니다. ( 이렇게 남긴글은 트위터 클라이언트에서 볼때 via API 라고 붙습니다. )

이제 이 함수를 가지고 진짜 파워포인트를 이용한 발표시에 사용할수 있도록 만들어보죠. 기본 아이디어는 다음과 같습니다.

각 슬라이드의 발표노트 부분에 주제요약문을 적어두고, 발표시 매 슬라이드마다 자동으로 그 주제요약한 내용이 트윗되도록 한다.

이를 위해서 기본 이벤트인 OnSlideShowPageChange 이벤트를 사용합니다. 이 이벤트는 슬라이쇼 진행시 매 페이지마다 파워포인트가 한번씩 자동으로 불러주는 이벤트입니다.

' 유틸리티 함수로 A 문자열부터 B 문자열 사이의 값을 읽어옵니다.
' 나나나[a]가가가[b]다다다 일때 , [a] 에서 [b] 사이의 "가가가" 문자열만 빼올때 사용합니다.
Function getStringBetween(str, sstart, send)
    PosStart = InStr(str, sstart)
    PosEnd = InStr(str, send)
    If (PosStart > 0) And (PosEnd > 0) Then
        getStringBetween = Mid(str, PosStart + Len(sstart), PosEnd - PosStart - Len(sstart))
    Else
        getStringBetween = ""
    End If
End Function
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Dim Shp  As Shape
    Dim S As String
    On Error Resume Next
    S = ""
   ' 매 페이지의 노트안에 [twitter] [/twitter] 로 묶인 문자열이 있으면 자동으로 트윗합니다.
    With SSW.View.Slide.NotesPage
        For Each Shp In .Shapes
            If Shp.Type = msoPlaceholder Then
                If Shp.PlaceholderFormat.Type = ppPlaceholderBody Then
                    S = getStringBetween(Shp.TextFrame.TextRange.Text, "[twitter]", "[/twitter]")
                    If S <> "" Then
                        strResponse = Tweet(S, "트위터 ID", "트위터 암호")
                    End If
                End If
            End If
        Next
    End With
End Sub

위 소스는 각 페이지마다 자동으로 실행되는 이벤트에서 발표 노트안에 [twitter] , [/twitter] 로 묶인 문자열이 있으면 그걸 자동으로 트윗하는 소스입니다.
이제 아래처럼 각 슬라이드의 노트에 각 슬라이드의 요약내용을 적으시면 자동으로 트윗이 됩니다.

자동으로 트윗되도록 작성한 노트 예제

이렇게 노트에 요약을 적고, 사이트의 주소까지 적어주면 트위터에서 보시는 분들은 바로 클릭해서 볼수 있어서 편리합니다.
( 이 Twumped 사이트 많이들 좋아하시더군요. 국내 도입이 시급합니다. ^^; )

그런데, 현재 소스엔 큰 문제가 하나 있습니다. 바로 소스내에 자신의 트위터 ID/암호가 노출이 된다는 것이죠. 보통 발표자료는 운영측에 먼저 제출하거나 해야하는데 자신의 암호가 노출되면 안되겠죠 ? 그래서 노출이 안되도록 해봅니다.

아래와 같이 로그인창을 하나 만듭니다. 간단하게 구현한거니 취소버튼도 없습니다 🙂

트위터 로그인창

텍스트 박스 2개의 이름을 txtUID , txtPWD 로 주고, Login 버튼의 Default 속성을 True 로 주면 끝입니다. 코딩은 필요없습니다.

이제 앞에 만든 소스를 조금 수정해 봅니다.

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Static strUID As String
    Static strPWD As String
   ' 첫번째 슬라이드 일경우 로그인창을 띄워서 트위터 ID 와 PWD 를 얻어옵니다.
    If SSW.View.CurrentShowPosition = 1 Then
        Load frmLogin
        frmLogin.Show
        strUID = frmLogin.txtUID
        strPWD = frmLogin.txtPWD
        Unload frmLogin
    End If
    Dim Shp  As Shape
    Dim S As String
    On Error Resume Next
    S = ""
    With SSW.View.Slide.NotesPage
        For Each Shp In .Shapes
            If Shp.Type = msoPlaceholder Then
                If Shp.PlaceholderFormat.Type = ppPlaceholderBody Then
                    S = getStringBetween(Shp.TextFrame.TextRange.Text, "[twitter]", "[/twitter]")
                    If S <> "" Then
                        strResponse = Tweet(S, strUID, strPWD)
                    End If
                End If
            End If
        Next
    End With
End Sub

더 멋지게 구현하려면 SlideShowBegin 시에 물어야 하겠지만 자동 이벤트가 아니여서, 클래스 선언등의 복잡한 작업이 있는지라 그냥 편하게 첫번째 슬라이드 뜰때 묻도록 했습니다. ID/암호는 그냥 Static 에 저장해두고 쓰구요. 🙂

이제 F5 키를 눌러서 슬라이드 쇼를 실행하면 아래와 같은 로그인창이 뜨고 ID/암호를 입력할수 있습니다.

트위터 ID/암호 입력

조금 더 편하게 사용하시려면, PPT 편집시 로그인 창에 자신의 트위터 ID 는 기본으로 입력해두시고, 암호창에 tabIndex 를 0번으로 해두시면 뜰때마다 암호창에 포커스가 가니까 바로 암호만 입력후 엔터치시면 됩니다.

완성된 소스입니다.

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Static strUID As String
    Static strPWD As String
    If SSW.View.CurrentShowPosition = 1 Then
        Load frmLogin
        frmLogin.Show
        strUID = frmLogin.txtUID
        strPWD = frmLogin.txtPWD
        Unload frmLogin
    End If
    Dim Shp  As Shape
    Dim S As String
    On Error Resume Next
    S = ""
    With SSW.View.Slide.NotesPage
        For Each Shp In .Shapes
            If Shp.Type = msoPlaceholder Then
                If Shp.PlaceholderFormat.Type = ppPlaceholderBody Then
                    S = getStringBetween(Shp.TextFrame.TextRange.Text, "[twitter]", "[/twitter]")
                    If S <> "" Then
                        strResponse = Tweet(S, strUID, strPWD)
                        If SSW.View.CurrentShowPosition = 3 Then
                            If (getStringBetween(strResponse, "", "") > 0) Then
                                MsgBox "파워포인트 자동트윗이 성공하였습니다 by @xguru"
                            Else
                                MsgBox "트위터 서버 연결에 오류가 있습니다. by @xguru"
                            End If
                        End If
                    End If
                End If
            End If
        Next
    End With
End Sub
Function getStringBetween(str, sstart, send)
    PosStart = InStr(str, sstart)
    PosEnd = InStr(str, send)
    If (PosStart > 0) And (PosEnd > 0) Then
        getStringBetween = Mid(str, PosStart + Len(sstart), PosEnd - PosStart - Len(sstart))
    Else
        getStringBetween = ""
    End If
End Function
Function Tweet(tweetmsg, uid, pwd)
     Dim objHTTP As Object
     Set objHTTP = CreateObject("Microsoft.XMLHTTP")
          objHTTP.Open "POST", "http://twitter.com/statuses/update.xml", False, uid, pwd
          objHTTP.send "status=" & tweetmsg
          Tweet = objHTTP.responseText
     Set objHTTP = Nothing
End Function

저는 발표중에 이 파워포인트+트위터 매쉬업을 사용한다는 것을 소개하기 위해 3번 슬라이드일 경우 트윗이 제대로 포스팅 되었는지 확인할수 있도록 메시지 창을 띄웠습니다.

기본적으로 약간의 VBA 지식이 있으셔야 해서 이정도로 설명이 잘 되었는지 모르겠네요.

예제로 제가 만든 트위터 API를 활용한 국내외 다양한 매쉬업 사례 파일을 올려드리니 한번 사용해 보시기 바랍니다. 꽤 많은 트윗메시지가 저장되어 있으니, 자신의 계정으로 바로 테스트 하지 마시고 테스트용 트위터 계정을 하나 만드셔서 해보시길 권해드립니다. 다운 받아서 오픈한후 보안경고 창에서 매크로 사용토록 확인해주셔야 기능이 동작됩니다.

▶ 예제파일 다운로드 : 트위터 매쉬업 매크로가 포함된 트위터 API를 활용한 국내외 다양한 매쉬업 사례 다운받기 – 제 Dropbox 입니다.

( 혹시 Dropbox 사용 안해보신분들은 꼭 만들어 두세요 윈도우/맥/아이폰 모두 연동되는 쓰기편한 웹하드로 2 Giga 까지 무료입니다. )

엉뚱한 개발자 구루였습니다. 문의사항 있으시면 트위터 @xguru 나 블로그에 남겨주세요.