2023. 5. 21.

brew command list in mac OS


homepage: 

  • site : https://brew.sh/ 
  • full command list : https://docs.brew.sh/Manpage

Minimum command list

  • Install
    • brew install {programname}
  • Start service 
    • brew services start {program name}
  • Stop service
    • brew services stop {program name }
  • List services
    • brew services list
  • Update brew itself
    • brew update
  • Upgrade program
    • brew upgrade {program name }

2023. 5. 20.

License listing used in java project ( maven, gradle )

maven ( POM.xml)

  • run task site,
  • files are generated in
    • target/site/dependencies.html
    • target/site/project-info.html
<Project> <reporting> <plugins> <plugin> <!-- This plugin needs site plugin" --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.4.3</version> <reportSets> <reportSet> <reports> <report>dependencies</report> <report>licenses</report> </reports> </reportSet> </reportSets> </plugin> </plugins> </reporting> ...

gradle (build.gradle)

  • run task : generateLicenseReport
  • file generated in
    • build/licenses/index.html
    • build/licenses.csv
    • build/index.xml
import com.github.jk1.license.render.* //import com.github.jk1.license.importer.* plugins { id 'java' id 'org.springframework.boot' version '3.0.6' id 'io.spring.dependency-management' version '1.1.0' id 'project-report' id 'com.github.jk1.dependency-license-report' version '2.1' } // ref : https://github.com/jk1/Gradle-License-Report // run generateLicenseReport licenseReport { outputDir = "$projectDir/build/licenses" renderers = [new InventoryHtmlReportRenderer(),new XmlReportRenderer(), new CsvReportRenderer()] }

2023. 4. 15.

Example code : Split PDF using PyPDF2 (python)

 

  • Very simple example code
  • ref : https://pypdf2.readthedocs.io/en/3.0.0/
* install 
  >> pip install PyPDF2 

*sample src: sample pdf has 38 pages.

12 files are generated and each file has three pages.

this code uses fixed file count number because I already know page count, 

but you can use "len(src_pdf.pages)" to get page count of source file.

from PyPDF2 import PdfFileReader, PdfFileWriter

src_pdf = PdfFileReader(open("./src.pdf'))

for file_index in range(12): # <= len(src_pdf.pages)/3
writer = PdfFileWriter()
for page_index in range(3):
writer.addPage(src_pdf.getPage(file_index*3+page_index+2))
writer.write(open("./out-{:02}.pdf".format(file_index), 'wb'))



2023. 4. 2.

Looking for lottie files ( animated file format ) Echo system

 

로티를 찾아서

  • 이야기의 시작은 유튜브 영상을 만들려고 하는데서 부터 시작 된다. 남들도 다 한다는 유뷰브를 하기 위해서 핸드폰으로 영상을 찍었고, imovie를 이용해서 동영상을 제작하면서, 뭔가 부족함을 느껴 툴을 찾던중 createstudio 라는 것을 알게 되었고 유료로 구매를 하게 되었다. 이 프로덕트의 특징중 하나는 움직이는 애니메이션들을 넣을수 있는데 기본적인 것 이외의 추가적인 것들은 당연하게도 추가로 유료를 지불해야 하는데, 그중 하나가 애니메이션이 되는 클립이였다. 그런데 , 어느날 인가 lottie 형식의 애니메이션을 지원하다고 했는데 , 생소한 포맷이여서 알아보니, AfterEffects 애니메이션을 json형식으로 만들고, 모바일과 웹에서 랜더링할수 있게 만들어준 라이브러리 였다. ( https://airbnb.io/lottie/#/ , https://lottiefiles.com/)
  • 모바일 앱에서 인트로 화면에서 애니메이션이 되는 것들을 볼수 있는데, 동영상을 쓸수도 있지만, lottie파일을 이용해서 하는 경우들이 많이 있다고들 했다. - 벡터이므로, 디바이스별로 해상도에 신경쓰지 않아도 된다. 또한 파일 사이즈도 작으며, 상호작용에 대한 동작도 지원한다.
  • 그래서, 로티형식의 애니메이션클립을 만들수 있는 툴을 찾아보니, abode의 ‘AfterEffect’이외의 haiku 라는 툴이 있었고 나름 직관적인 UI 로 기능도 나쁘지 않고, 사용법도 어렵지 않아서, 사용법을 익히던 중, 궁금한 것이 있어 홈페이지에 들어가지, 유지 보수가 안되고 있는지 페이지 링크도 깨져 있고, 검색한 결과는 모두 시간이 좀 지난 것들 뿐이였다. 기능상 버그라기 보다는 사용법을 좀더 심도 있게 익히기 위해서는 많은 노력이 들어가야 한다는 것을 알았다. 더 이상 사용법 익히기를 중단 했다.
  • 유료지만, afterEffect를 필요할때 구독해서 써야 할것 같다.

관련 프로그램 및 자료들 , 용어
  • Clip animation tools
    • haiku, flow, synfig, after effect
  • Presentation/Motion EditTools
    • after effect
    • CreateStudio 
  • format
    • lottie files
    • svg : scalable vector graphic


2022. 12. 4.

Using paginator in boto3


How to convert codes for using paginator

### no paginations code
  1. for region in regions:
  2.     resource = boto3.client('resourcegroupstaggingapi', region_name=region)
  3.     res = resource.get_resources(ResourceTypeFilters=resource_type_filters)
  4.     list_items(res)

    

### using paginator code
  1. for region in regions:
  2.     resource = boto3.client('resourcegroupstaggingapi', region_name=region)
  3.     paginator = resource.get_paginator('get_resources')  # parameter is 'method name' which is LINE3 of above code 
  4.     response_iterator = paginator.paginate(ResourceTypeFilters=resource_type_filters) #Passing parameter is same with   LINE3 in above code
  5.     for page in response_iterator:
  6.         list_items(page)