카테고리 보관물: 쓸모있는 정보

form안의 button submit 동작 막기

옛날 옛적 HTML 홈페이지만 만들어보다 이제 웹 개발을 해보려니 정말 모르는 것이 많다.

form안의 button은 무조건 submit 동작으로 먹힌다는게 의외였는데 일반 버튼으로 사용하기 위한 방법도 매우 간단하다.

<button type="button">버튼</button>

포인트는 type을 button으로 설정해주면 된다.

애플 앱스토어 과세 논란에 대한 개인적인 정리

아이폰개발자 앱스토어 과세
문제는 세금이야, 이 바보야.

안드로이드 구글 플레이와 애플 앱스토어에 유료앱을 판매하는 입장으로써 아는 사실을 정리하자면

1. 구글 플레이는 원래 유료앱을 등록하려면 사업자 등록번호와 통신판매업신고번호가 필요했습니다. 고로 이번에 앱개발자는 무조건 사업자등록을 해야한다고 법이 바뀐게 아니라면 딱히 뭔가 변경되지는 않을 것 같습니다.

2. 애플 앱스토어는 원래 필요치 않았는데 이번에 유료, 무료 상관없이 모든 국내 계정에게 사업자 등록번호와 통신판매업신고번호를 요구하게 되었습니다. 그리고 해외 개발자 계정에게도 국내 판매를 하려면 CEO 이름, 주소, 전화번호, E-mail등을 요구하게 되었습니다. [기사]

3. 대부분의 앱 개발자들의 매출이 높지않아서 간이과세일거라는 얘기들을 봤는데 제가 알기로는 소프트웨어 개발 및 공급 업종은 간이과세배제 업종으로 무조건 일반과세자로 등록해야합니다. 그리고 통신판매업신고는 일반과세일 경우 년 4만5천원을 면허세로 내야합니다.  다른 업종으로 우회적으로(?) 등록하는 방법이 있을지는 모르겠는데 저는 그렇게 했습니다 ㅠㅠ

그래서 제 생각에는 통만판매업신고가 왜 필요하고 왜 소프트웨어 개발은 무조건 일반과세인지는 모르겠는데, 구글에서 유무료로 나눠서 시행하던 정책을 애플은 무조건 적용시킨게 문제를 크게 만든 것 같습니다. 무료앱을 만드는 사람이라면 앱스토어, 구글플레이 등록비외에 면허세까지 부담해야되는 상황이 되었고요. 해외 계정에 대해서도 국내 앱스토어에 판매할 경우 개인정보를 요구한 것도 뭔지 잘 모르겠는데 해외 개발사들의 국내앱 출시를 꺼리는 요인이 될 수 있지요. 셧다운제에 대해 엑스박스 라이브를 전면 차단하려고 했던 MS처럼 국내법에 일일이 대응하기보단 퉁쳐버리는 방식으로 아이폰 사용자가 10%정도되는 조그마한 시장이다보니 무관심한 것 같기도 하네요. 덕분에 사용자와 개발자만 힘들게 되었습니다.

 

[추가]

현재 앱스토어에 사업자등록란이 사라졌다고 하네요. 어떻게 전개가 될런지.. 구글 플레이 수준으로 바뀌는게 적정할 것 같네요.

앱스토어 개발자 등록 해프닝, 원인은 ‘전자상거래법’

[추가2]

참고로 티스토어, 올레마켓, U+앱마켓같은 국내 앱스토어는 사업자등록없이 개인사용자로 유료앱 판매가 가능했던걸로 기억.

 

안드로이드에는 Crop Intent가 없습니다.

com.android.camera.action.CROP사용하지 마세요.

No, Android Does *Not* Have a Crop Intent

일반적으로 사진을 간단히 편집해서 불러오려고 할 경우에 com.android.camera.action.CROP을 action으로 한 Intent로 startActivity()를 호출해서 처리하는 경우가 많습니다. 저도 그렇게 사용하고 있었고요.
AOSP 카메라앱에서 이 Intent를 처리할 수 있고 많은 기기들에서 이렇게 사용하는 것이 가능한게 사실이지만 동작하지 않는 기기들도 존재합니다. 그리고 그런 기기들에서는 앱이 Crash됩니다.
저 같은 경우에는 일본의 docomo arrows F-04E, F-05D 같은 기기들에서 동작하지 않는다는 리포트가 많았습니다. 저는 PackageManager로 Crop Intent를 처리할 수 있는 앱이 있는지 먼저 체크하고 있었음에도 처리가 되지 않고 있다고해서 조금 놀랐었네요.

그래서 저 글에서도 제안하고 있고 제가 처리한 방법도 오픈소스를 이용하는 방법이었습니다.
몇몇 github 라이브러리들이 존재하는데 AOSP 카메라앱에서 소스를 따온 것 들입니다.

https://github.com/lvillani/android-cropimage – 쓰기 좋게 example도 제공하고 develop 브랜치에서 빌드가 가능합니다.
https://github.com/MMP-forTour/cropimage

ADT 22 DDMS에서 Heap tab 안 뜨는 문제

Android SDK Tools 22 DDMS에서 Heap이나 Network 탭이 안뜨는 문제가 있다.

http://code.google.com/p/android/issues/detail?id=55454
http://code.google.com/p/android/issues/detail?id=55517
http://code.google.com/p/android/issues/detail?id=55394

안 그래도 메모리 디버깅 중인데ㅠㅠ

22.1에서 수정될 것이라고 하며 Standalone DDMS.bat를 사용하거나 21.1의 tools/lib/monitor* 디렉토리를 덮어씌우는 방법으로 해결 가능

21.1 SDK는 http://code.google.com/p/android/issues/detail?id=55394에서 플랫폼별로 받을 수 있다.

https://dl.google.com/android/android-sdk_r21.1-windows.zip
https://dl.google.com/android/android-sdk_r21.1-macosx.zip
https://dl.google.com/android/android-sdk_r21.1-linux.tgz

Java에서 Javascript의 encodeURIComponent 구현하기

자바에서는 URLEncoder를 사용해서 인코딩을 할 수 있는데 자바스크립트에서 사용하는 encodeURIComponent와 살짝 다르다.

Java의 URLEncoder:

  • literal characters (regex representation): [-a-zA-Z0-9._*]
  • the space character " " is converted into a plus sign "+".

JavaScript의 encodeURIComponent():

  • literal characters (regex representation): [-a-zA-Z0-9._*~'()!]

즉, 자바에서는 빈칸을 ‘+‘로 바꾸고 자바스크립트는 빈칸을 ‘%20‘으로 변환,
그리고 자바스크립트에서는 ~'()!을 그대로 두지만 자바에서는 각각 UTF-8 인코딩시킨다.

결국 빈칸과 ~'()!을 변환시키면 URLEncoder의 결과를 encodeURIComponent의 결과와 동일하게 만들 수 있다.

 

public static String encodeURIComponent(String s)
  {
    String result = null;
 
    try
    {
      result = URLEncoder.encode(s, "UTF-8")
                         .replaceAll("\\+", "%20")
                         .replaceAll("\\%21", "!")
                         .replaceAll("\\%27", "'")
                         .replaceAll("\\%28", "(")
                         .replaceAll("\\%29", ")")
                         .replaceAll("\\%7E", "~");
    }
 
    // This exception should never occur.
    catch (UnsupportedEncodingException e)
    {
      result = s;
    }
 
    return result;
  }

안드로이드에서 개발한 앱과 서버간의 통신이 제대로 안되어 헤맸었는데 빈칸이 다르게 변환되는 것이 문제였다.

Java equivalent to JavaScript’s encodeURIComponent that produces identical output?