"Proposal to remove C-Style For-Loops from Swift 3.0" https://github.com/apple/swift-evolution/pull/23/files 코드가 master로 merge되었다...





Posted by '김용환'
,



2015년 , stack overflow에서 개발자들을 대상으로 조사를 했다. 2만 6천명의 개발자를 대상으로 157개국 개발자에게 조사한 통계를 발표했다.


출처 : http://stackoverflow.com/research/developer-survey-2015



재미있는 내용이 많으니 볼만한다. 



기술별 연봉을 받는 금액이다. 크게 차이나지 않고 비슷비슷하다. 




가장 앞으로 사랑받을만한 언어이다. 






애매하긴 하지만, 돈을 받이 받는 개발자의 기술이다. (%가 정확히 의미하는지는 모르겠다.)




대부분 역시 IDE 바탕은 검은색을 좋아한다..


Posted by '김용환'
,


IT 책을 전문 번역하는 회사인 팩트 출판사(https://www.packtpub.com/) 책을 원서를 보다가, 

오타가 좀 있어서 열심히 오타 신고(20개 넘은 것 같아.) 를 했더니, 책이나 비디오를 볼 수 있는 공짜 토큰을 주었다. 



Posted by '김용환'
,

wireshark 2.0 출시

scribbling 2015. 11. 26. 23:36


wireshark 1.x OS X버전은 X-window 기반이라 X-window를 설치해야 했다. 그리고 화면이 엉뚱한 곳으로 이동되는 이상한 버그가 있었다. 그러나 이번 wireshark 2.0 OS X 버전은 QT 기반이라 깔끔하다. 기존 UI는 유지하면서 X-Window 기반이 아니기 때문에 쉽게 tcpdump를 볼 수 있다!!!!


다운로드는 아래에서 가능하다.


https://www.wireshark.org/download.html



Posted by '김용환'
,


2015년 9월에 javaone 2015가 열렸다. 

관련 자료의 대부분은 아래 싸이트에서 확인할 수 있다. 


https://events.rainfocus.com/oow15/catalog/oracle.jsp?event=javaone&search.event=javaoneEvent


대용량(scala/spark) 관련 내용이 좀 있었고, javafx와 javaee는 여전히 큰 포지션을 차지하였다. 그리고 java 기본, IOT, java8/java9, performance, jpa, microservice, rxjava 세션이 많았다. gradle, play2 , servlet 4, test, continuous delivery system, devops 내용은 생각보다 적었다. spring(spring boot소개는 한 개)과 google쪽은 아예 안나온 것 같다.  open jdk로 실제 서비스하는 사례들이 소개되었으며, 전체적인 내용에 대해서 좋은 느낌이 들었다.



인상적인 내용은 4 가지 정도 있었다.


1. CDI / Apache Deltaspike 

Spring 처럼 java ee에서 돌아가는 dependency injection 기반의 CDI와 CDI extension인 apache delta spike를 쓰는 사례가 많이 눈에 보였다.

https://deltaspike.apache.org/



2. JVM 클라 

Oracle JVM을 IOS에도 올릴 수 있다는 자료,

candy crash 클라 게임도 jvm 탑재했다는 자료가 있었다.



3. Pants 빌드 시스템 

scala를 좋아하는 3개 회사 트위터, 포스퀘어, 스퀘어 개발자들이 모여 java/scala 기반의 빌드 시스템을 2014년에 만들었다는데, 발표했다.

https://blog.twitter.com/2014/hello-pants-build 

http://pantsbuild.github.io/ 

https://github.com/pantsbuild/pants 



4. Graal (그랄) 프로젝트 

http://openjdk.java.net/projects/graal/ 

Graal를 기반으로 언어를 JVM 포팅할 수 있다는 내용이다.  R, python, smalltalk, ruby도 포팅할 예정이라고 한다. R의 경우는 GNUR이 너무 성능이 안좋아서 Graal 기반으로 FastR을 구현하고 있는데, 80 % 정도 compatible하다고 한다.


현재 oracle labs에서 주도적으로 만들고 있다. JVM 기반 위에서 동작하는 컴파일러는 구성하는 컴파일러와 VM을 제공한다. 아래 그림 보이시지만, 사실상 컴파일러/VM을 만들어주는 프로젝트인 거 같다. SSA, Guads, AST, method inlining, Optimization 막 나온다.






좀 더 관심있는 분은 아래 자료 보시면 좋을 것 같다.


https://wiki.openjdk.java.net/display/Graal/Publications+and+Presentations

http://openjdk.java.net/projects/graal/

http://www.javaworld.com/article/2078531/core-java/graal-java-compiler-would-enable-high-quality-code--efficient-memory-use.html

http://www.slideshare.net/ThomasWuerthinger/graal-truffle-ethdec2013

http://lafo.ssw.uni-linz.ac.at/papers/2015_CGO_Graal.pdf


Posted by '김용환'
,



http://pages.zeroturnaround.com/RebelLabs---All-Report-Landers_Developer-Productivity-Report-2015.html

jrebel로 유명한 zerotunaround.com에서 개발자 생산성 관련 리포트를 만들었다. 위 링크를 누르고 오른쪽 화면에 있는 정보를 입력하면 다운 받을 수 있다.

문제의 대부분은 DB 이슈이고, 코드로 인한 문제가 많다. 




프로파일 툴로는 visualvm이 가장 많이 쓰인다. 



Posted by '김용환'
,


구글 place api 사용시

현재 규정상 30일동안 성능상 캐시할 수 있다. 대신 place id만 마음껏 저장할 수 있다. 


map image를 사용할 때, 30일 동안이라도 캐시하고 싶지만, 

다양한 모바일 기기에서 map size를 조절할 수 없기 때문에 캐시도 쉽지 않았다. 

그리고 실시간 결과와 구글 place api 정책 이슈에 걸리지 않게 하기 위해 캐시를 작게 하는 것이 좋은 것 같았다. 


참고로,  개발하기 전에 https://developers.google.com/maps/terms 의 10항을 꼼꼼하게 봐야 한다.  




https://developers.google.com/places/web-service/policies

로고 요구사항

애플리케이션에서 지도에 Google Places API 웹 서비스 데이터를 표시하는 경우 해당 지도는 Google이 제공해야 합니다.

애플리케이션에서 페이지 또는 보기에 Google 지도를 표시하지 않는 Google Places API 웹 서비스 데이터를 표시하는 경우, 'Powered by Google'이라는 로고를 데이터와 함께 표시해야 합니다. 예를 들어 애플리케이션에서 한 탭에 장소 목록을 표시하고 다른 탭에 장소가 포함된 Google 지도를 표시하는 경우, 첫 번째 탭에'Powered by Google' 로고를 표시해야 합니다.

흰색 배경에 사용하는 경우흰색이 아닌 배경에 사용하는 경우

다음 ZIP 파일에는 데스크톱, Android 및 iOS 애플리케이션별 적정 크기의 'Powered by Google' 로고가 있습니다. 어떤 방식으로든 로고를 수정하거나 크기를 조정해서는 안됩니다.




https://developers.google.com/places/place-id

향후 사용을 위한 장소 ID 저장

장소 ID는 Google Maps API 서비스 약관의 10.1.3 조항에 명시된 캐싱 제한에서 제외됩니다. 따라서 장소 ID 값을 무제한으로 저장할 수 있습니다.




https://developers.google.com/places/web-service/policies

콘텐츠 프리페칭, 캐싱 또는 저장

Google Places API 웹 서비스를 사용하는 애플리케이션은 Google Maps API 서비스 약관을 준수해야 합니다. 약관의 10.1.3 조항에는 약관에 명시된 제한 조건을 제외하고 어떠한 콘텐츠도 프리페치, 캐싱 또는 저장해서는 안된다고 기술되어 있습니다.

장소 ID는 장소를 고유하게 식별하는 데 사용되며 캐싱 제한에서 제외됩니다. 따라서 장소 ID 값을 무제한으로 저장할 수 있습니다. 장소 ID는 Google Places API 웹 서비스 응답에서 place_id 필드에 반환됩니다.



https://developers.google.com/maps/terms 의 10항



10. License Restrictions.

Except as expressly permitted under the Terms, or unless you have received prior written authorization from Google (or, as applicable, from the particular Content provider), Google’s licenses above are conditioned on your adherence to all of the restrictions below. In this Section 10, the phrase "you will not" means "when using the Service, you will not, and will not permit a third party to."

10.1 Administrative Restrictions.

  1. No access to APIs or Content except through the Service. You will not access the Maps API(s) or the Content except through the Service. For example, you must not access map tiles or imagery through interfaces or channels (including undocumented Google interfaces) other than the Maps API(s).
  2. No access to Service without applicable Developer Identifier(s). For certain versions or features of the Maps API(s), Google may require you to use a Developer Identifier to access and administer the Service. If a Developer Identifier is required under the Maps APIs Documentation, you will not access the Service without the Developer Identifier.
  3. No hiding identity. You will not hide from Google the identity of your Maps API Implementation. You must follow the identification conventions in the Maps APIs Documentation.

10.2 General Google API Restrictions. The following restrictions apply generally to all Google Services, including the Google application programming interfaces at https://developers.google.com/products/ (or such other URL as Google may provide) (the “Google API(s)”). You will not:

  1. Sublicense a Google API for use by a third party. Consequently, you will not create an API client that functions substantially the same as the Google APIs and offer it for use by third parties.
  2. Perform an action with the intent of introducing to Google Services any viruses, worms, defects, Trojan horses, malware, or any items of a destructive nature.
  3. Defame, abuse, harass, stalk, or threaten others.
  4. Interfere with or disrupt the Google APIs or the servers or networks providing the Google APIs.
  5. Promote or facilitate unlawful online gambling or disruptive commercial messages or advertisements.
  6. Reverse engineer or attempt to extract the source code from any Google API or any related software, except to the extent that this restriction is expressly prohibited by applicable law.
  7. Use the Google APIs for any activities where the use or failure of the Google APIs could lead to death, personal injury, or environmental damage (such as the operation of nuclear facilities, air traffic control, or life support systems).
  8. Use the Google APIs to process or store any data that is subject to the International Traffic in Arms Regulations maintained by the U.S. Department of State.
  9. Remove, obscure, or alter any Google terms of service, or any links to or notices of those terms.

10.3 Quality Standards Restrictions.

  1. No violation of Google’s Software Principles. You will not violate Google’s Software Principles athttp://www.google.com/intl/en/about/company/software-principles.html (or such other URLs that Google may designate).
  2. No modification of search results. You will not modify, reorder, augment, or manipulate search results in any way unless you explicitly notify the end user of your actions.

10.4 Restrictions on Unfair Exploitation of the Service and Content.

  1. No use except under these Terms. You will not use the Service or Content except as expressly permitted under these Terms. For example:
    1. No fees. You will not charge any third party a fee to use your Maps API Implementation, the Service, or the Content, unless you have purchased an applicable Maps for Work license that expressly permits this use.
    2. No printing 5,000+ copies for direct marketing. You will not print more than 5,000 copies of sales collateral materials containing a screenshot of the Content for purposes of commercial sales lead generation.
    3. No use as a core part of printed matter. You will not incorporate the Content as a core part of printed matter (such as a printed map or guide book) that is redistributed for a fee.
  2. No use beyond transaction limits and usage policies. If your Maps API Implementation generates a high volume of transactions, Google reserves the right to set transaction limits, as described in the Maps APIs Documentationhere. Google also reserves the right to set other usage policies in the Documentation from time to time. If you want to engage in use outside these transaction limits or usage policies, you can purchase more usage capacity through the Maps API Standard pricing plan, or you can contact the Google Maps for Work sales team for licensing options to address your needs. Google may decline your request, or condition acceptance on your agreement to additional terms and/or charges for that use.
  3. Restrictions on your Maps API Implementations.
    1. No creation of a substitute service. You will not use the Service to create a Maps API Implementation that is a substitute for, or substantially similar service to, Google Maps (at https://www.google.com/maps (or such other URL as Google may provide)) ("Google Maps") or the Service.
    2. No creation or augmentation of data sets based on Google’s Content or Services. You will not use Google’s Content or Services to create or augment your own mapping-related dataset (or that of a third party), including a mapping or navigation dataset, business listings database, mailing list, or telemarketing list.
    3. No navigation. You will not use the Service or Content for or in connection with (a) real-time navigation or route guidance; or (b) automatic or autonomous vehicle control.
    4. No asset-tracking unless you have purchased the applicable Maps for Work license. Unless you have purchased an applicable Maps for Work license that expressly permits you to do so, you will not use the Service or Content for commercial asset-tracking or in Maps API Implementations whose primary purpose is to assess vehicle insurance risks.
      1. Commercial asset-tracking includes dispatch, fleet management, and Maps API Implementations that track your (or your end users’) assets (for example, private or commercial transportation applications, including taxi and vehicle-for-hire applications).
      2. Non-commercial asset-tracking implementations include applications used for a non-commercial purpose (for example, a free, publicly accessible Maps API Implementation that displays real-time public transit or other transportation status information or that allows end users to share real-time location with others).
    5. No use of Content in a listings service. You will not use business listings-related Content in any Customer Implementation that has the primary purpose of making available business, residential address, or telephone directory listings.
    6. No use of Content for an Ads product. You will not use business listings-related Content to create or augment an advertising product.
  4. No use of Content without a Google map. Unless the Maps APIs Documentation expressly permits you to do so, you will not use the Content in a Maps API Implementation without a corresponding Google map. For example, you may display Street View imagery without a corresponding Google map because the Maps APIs Documentationexpressly permits this use.
  5. No use of Content with a non-Google map. You must not use the Content in a Maps API Implementation that contains a non-Google map.

10.5 Intellectual Property Restrictions.

  1. No distribution or sale except as permitted under the Terms. You will not distribute, sell, or otherwise make any part of the Service available to third parties except as permitted by these Terms.
  2. No derivative works. You will not modify or create a derivative work based on any Content unless expressly permitted to do so under these Terms. For example, the following are prohibited: (i) creating server-side modification of map tiles; (ii) stitching multiple static map images together to display a map that is larger than permitted in the Maps APIs Documentation; or (iii) tracing or copying the copyrightable elements of Google’s maps or building outlines and creating a new work, such as a new mapping or navigation dataset.
  3. No use of Content outside the Service. You will not use any Content outside of the Service except as expressly permitted to do so in Subsection (d). For example, you will not export or save the Content to a third party’s platform or service.
  4. No caching or storage. You will not pre-fetch, cache, index, or store any Content to be used outside the Service, except that you may store limited amounts of Content solely for the purpose of improving the performance of your Maps API Implementation due to network latency (and not for the purpose of preventing Google from accurately tracking usage), and only if such storage:
    1. is temporary (and in no event more than 30 calendar days);
    2. is secure;
    3. does not manipulate or aggregate any part of the Content or Service; and
    4. does not modify attribution in any way.
  5. No mass downloading. You will not use the Service in a manner that gives you or a third party access to mass downloads or bulk feeds of any Content. For example, you are not permitted to offer a batch geocoding service that uses Content contained in the Maps API(s).
  6. No incorporating Google software into other software. You will not incorporate any software provided as part of the Service into other software.
  7. No removing, obscuring, or altering terms of service, links, or proprietary rights notices. You will not:
    1. remove, obscure, or alter any Google terms of service or any links to or notices of those terms, or any copyright, trademark, or other proprietary rights notices; or
    2. falsify or delete any author attributions, legal notices, or other labels of the origin or source of material.


Posted by '김용환'
,

google place id 체계

scribbling 2015. 11. 11. 21:31


google place api에 쓰이는 place id의 체계에 대해서 명확하게 얘기하지 않는다.


테스트해보니. 테스트해본 대부분의 문자열은 a-zA-Z0-9, -(bar), _ (underscore)로 구성한다.

어떤 특수 문자가 place id로 나타날 수 있으니. 이에 대한 파싱 룰이 있는 것이 좋지 않는 것 같다. 





참고 :

https://developers.google.com/places/

장소 ID는 장소를 고유하게 식별하는 텍스트 식별자입니다. 모습은 다음과 같습니다.

ChIJrTLr-GyuEmsRBfy61i59si0

장소 ID는 사업체, 랜드마크, 공원 및 교차로를 포함한 대부분의 위치에서 사용할 수 있으며 지속적입니다. 즉, 특정 장소에 대해 장소 ID를 식별한 후에 다음에 해당 장소를 찾을 때 이 값을 재사용할 수 있습니다.

Posted by '김용환'
,


thinbackup를 이용한 젠킨스 백업 이후의 내용이다. 


(아래 내용을 참조한다.)

http://knight76.tistory.com/entry/jenkins-%EC%84%A4%EC%A0%95-%EB%B0%B1%EC%97%85-backup-thinBackup-%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8



Github에 백업을 저장하면, 계속 용량이 커지기 때문에 점차 느려진다.


따라서 최신 10개 정도만 남겨놓고 나머지 파일을 삭제하려고 한다. 이를 위해서는 다음과 같이 작업한다. 



기존 백업 jenkins job(github에 연결하는 jenkins job)을 그대로 복사한 후, 

실행 쉘만 다음과 같이 수정한다.



디렉토리 이름으로 sorting 한 후, 11개 이후의 디렉토리는 모두 삭제한다. 

ls -dl */ | sort -r -k9,9 | awk '{print $9}' | awk 'NR>11' | xargs rm -r

git add -A

git commit -m "$BUILD_ID"


또는 

ls -dl */ | sort -r -k9,9 | awk '{print $9}' |  sed -n 5,10000p | xargs rm -r

git add -A

git commit -m "$BUILD_ID"




* 참고

awk와 sed를 이용하여 특정 개수 이후 데이터를 가져올 수 있다. 

grep과 ls도 비슷하게 +n 라는 매개변수를 제공한다.

Posted by '김용환'
,



ruby에서 배열을 하나로 만들기


>> a = [ 1, 2]

=> [1, 2]

>> b = [3, 4]

=> [3, 4]

>> a+ b

=> [1, 2, 3, 4]

>> c = a + b + [5]

=> [1, 2, 3, 4, 5]



ruby의 flatten()으로 여러 배열을 1차원의 형태로 만들기


>> d = [1, 2, 3]

=> [1, 2, 3]

>> e = [ d, b, 10]

=> [[1, 2, 3], [3, 4], 10]

>> e = [ d, b, 10]

=> [[1, 2, 3], [3, 4], 10]

>> e.flatten

=> [1, 2, 3, 3, 4, 10]



ruby의 flat_map()을 flattern()으로 동일하게 사용하기


>> e.flat_map { |i| i }

=> [1, 2, 3, 3, 4, 10]


python에는 원래 flatten 함수가 없다.


java는 java8부터 flatten 기능을 사용할 수 있다.


flatMap(l -> l.stream())


R은 unlist() 함수로 flatten 기능을 사용한다.

scala는 flatten메소드를 지원한다.



scala> val a = Array(Array(1,2,3), Array(9,10))

a: Array[Array[Int]] = Array(Array(1, 2, 3), Array(9, 10))


scala> a.flatten

res0: Array[Int] = Array(1, 2, 3, 9, 10)



Posted by '김용환'
,