본문 바로가기

Apple

[iOS/swift] 랜덤 숫자 맞추기 간단 게임 만들기 | Making to guess random number on iOS with swift 짬짬이 ios/swift application을 가지고 놀 수 있는 코딩을 해 보려고 한다. 왜냐.. 심심해서 -_-; 인터넷 + 관련 서적에서 쉽게 찾을 수 있는 예제들을 조금씩 바꾸어 작성해 보려고 한다. 중간 중간 틀리거나 오류가 있으면 알려주시면 땡큐~!X-CODE를 실행하면 위와 같은 창이 나타난다. 여기서는 새로운 프로젝트를 만들 예정이므로 'Create a new Xcode project' 를 선택하면 된다. 간단한 iOS app (앱이라고 하기 보다 테스트라고 하는게....ㅎㅎ)을 만들 예정이기에 'Single View Application' 을 선택한다. Product Name 을 넣으라는 창이 나온다. 여기에 이 프로젝트를 어떤 이름으로 할지 물어보는 것이기에 적당한 이름을 넣어주면 된.. 더보기
애플 스크립트를 이용한 이메일 보내기 with 첨부파일. Sending an Email with attachments using AppleScript tell application "Mail" set theSubject to "제목을 넣어준다." -- the subject set theContent to "본문에 들어갈 내용을 적는다" -- the content set theAddress to "수신인의 메일 주소를 적는다" -- the receiver -- set theSignatureName to "시그너쳐 이름을 넣어준다." -- the signature name set theAttachmentFile to "SH:Users:SH:Desktop:ScreenShots:1.png" -- 첨부파일의 경로를 설정한다. set msg to make new outg.. 더보기
Web Crawler 013 - Initializing first spider - 첫 스파이더 구동하기. 자, 이번 시간부터는 본격적으로 웹 사이트 크롤링을 해 보도록 하겠습니다. 그러기 위해서 이제까지 만들어 둔 함수 및 파일들을 한 곳에서 일괄적으로 다루어야 함으로 main.py 라는 파일을 만들도록 하겠습니다. 그리고는 아래와 같이 파일들도 불러오고 쓰레딩(threading) 관련 모듈도 불러 옵니다. 하나의 스파이더로 처리하는 것은 비효율적이겠죠? 몇 개는 링크들을 찾는 크롤러로 활동하게 하고, 또 다른 몇개의 스파이더들은 다른 스파이더들이 찾은 링크를 타고 들어가서 또 링크를 찾고 이렇게 서로 협업을 하게 하기 위함입니다. 개략적인 내용은 쓰레딩을 lookup 해보시면 아시리라 봅니다. ▼ 프로젝트 네임을 아래와 같이 정해주었습니다. 그냥 단순하게 홈페이지 이름을 기입하였습니다. 지금은 이렇게 써 .. 더보기
Web Crawler 012 - Domain Name Parsing - 도메인 네임 파싱하기. 안녕하세요. 이번 시간에는 크롤러가 어느 웹사이트를 크롤링 할지를 정해주는 도메인 네임에 대해 알아보고자 합니다. 인터넷은 참으로 광범위한 공간이죠. 만약 이러한 공간을 특별한 조건없이 크롤링하게 한다고 하면 어떻게 될까요? 아마도 내 컴퓨터의 모든 자원은 전세계 인터넷을 뒤지고 다니느라 바빠질 것입니다. 이러한 무한 루프를 방지하기 위해서는 특정한 조건을 주어 이 범위를 만족하는 사이트들만 크롤링 하라고 명령을 내려야 할 것입니다. 그래서 필요한 것이 도메인 네임입니다. 제 블로그를 기준으로 얘기를 하자면, 여기의 주소는 https://creativeworks.tistory.com 입니다. 여기에서 도메인 네임은 tistory.com 이 됩니다. 만약 tistory.com 을 제가 혼자 다 사용하고 있.. 더보기
Web Crawler 011 - Adding Links to Queue - 링크를 웨이팅 리스트에 추가하기. 이번 시간에는 이전 시간에 이어서 웹페이지에서 찾아낸 링크들을 waiting list 에 추가하는 함수를 만들어 보도록 하겠습니다. 어떤 특정 사이트에 있는 전체 웹페이지들을 크롤링하기 위해서 해당 사이트의 홈페이지를 들어가고 거기서 링크를 타고 타고 가서, 해당 사이트의 모든 링크들을 찾을 것입니다. 이렇게 찾아낸 링크 값들을 waiting list 에 넣게 하는 스파이더와 waiting list 에 저장이 된 링크들을 각각 따로 크롤링 할 스파이더들을 만들어야 합니다. 이와 같은 일련의 과정중 전자인 찾은 링크들을 waiting list ( queue) 에 넣어주기 위한 함수를 만들것 입니다. 우선 아래와 같이 찾은 링크를 인자로 받는 함수를 선언해 줍니다. ▼만약 전달 받은 링크의 url 값이 qu.. 더보기
Web Crawler 010 - Gather_Links 함수 만들기 이번 시간에는 앞 시간에서 코딩한 부분중 정의하지 못한 gather_links() 부분을 만들어 주도록 하겠습니다. 웹페이지의 url 값을 넣어주면 해당 페이지에서 링크를 포함하고 있는 html 값을 찾게 되는데, 여기에서 링크 값만을 추출하게 하여 리스트에 넣어 주어야 그 값으로 링크들의 웹페이지를 다시 크롤링 할 수 있게 됩니다. 우선, 아래와 같이 정의를 해 주었습니다. ▼ 여기에서 하나의 문제가 있는데, 파이썬에서 urlopen 모듈을 사용해서 웹페이지를 연결하면, 인간이 읽을 수 있는 형태의 문자를 받아 오는게 아니라, 컴퓨터(기계)가 이해할 수 있는 바이트(bytes: 0 or 1) 단위로 데이터를 가지고 옵니다. 질문을 주시는 많은 분들이 파이썬으로 크롤링할 때, 내가 지금 무엇을 크롤링하는.. 더보기
Web Crawler 009 - Crawling Pages You want to crawl - 크롤링 하고자 하는 페이지 링크들 크롤링하기. 오랜만에 글을 쓰는 것 같네요. 이번에는 지난 시간까지 만들어 둔 코드부분에 크롤링을 할 수 있게 하는 함수 crawl_page() 부분을 추가해 주도록 하겠습니다. 아래와 같이 함수를 정의해 주겠습니다. thread_name, page_url 을 인자로 받도록 하겠습니다.▼만약에 전달 받은 page_url 값이 기존에 crawled 되어 있는 리스트에 존재하고 있다면, 중복해서 또 크롤링 해 줄 필요가 없겠죠? 그래서 없는 경우에만 크롤링할 수 있도록 조건을 달았습니다.▼크롤링된 값에 없는 url 이면, 이제부터는 해당 url 을 크롤링 할 것이라고 사용자에게 알려주는 문구를 보여주게 하고 있습니다. 물론 크롤링 할 page_url 이 어떤 것인지도 함께 표기하도록 하였습니다. ▼그리고 waiting .. 더보기
How to check the length of a media file on bash - bash 를 이용한 동영상 파일 길이 알아내기. There are several methods to do that. I'd like to post one of the easiest way how I can find out the length of a video(media) file by using. First of all, you need to install 'FFMPEG' with homebrew on mac (if you are using it). if you don't know how to install homebrew on MAC, you can check it on my blog link below [MAC TIP] Mac에 Homebrew 설치하기 Here we go~, Something similar to:ffmpeg -i input 2>.. 더보기
Web Crawler 006 - Creating the spider - 스파이더 만들기. ## 시작하기에 앞서, Paek 님이 지적해 주신 사항입니다. 이전 시간까지는 main.py 로 작성을 하였는데, 파일명을 general.py 로 바꾸었습니다. 왜냐하면 추후에 만들어둔 모든 함수, 파일을 한곳에서 처리하기 위해 별도로 main.py 를 만들기 위함입니다. 지적해주신 Peak님 감사합니다. ## 이제 기본으로 필요한 도구들(함수)을 만둘어 보았으니, 다음으로 크롤링을 위한 스파이더를 만들어 보도록 하겠습니다. 파이썬에서 말하는 스파이더는 마치 거미가 거미줄(web)을 여기저기 돌아 다닌다는 의미로 네이밍이 되었습니다. 그와 마찬가지로 코딩을 통하여 웹상에서 링크를 타고 타고 돌아다니게 하기 위해 스파이더를 만들어 주도록 하겠습니다. 우선 필요한 모듈을 불러오도록 하겠습니다. 아래와 같이 .. 더보기
Web Crawler 004 - Accelerate Crawling by avoiding repetition - 중복을 회피하여 크롤링 속도 개선하기. 이전 시간까지는 기본적으로 어떤 웹 사이트를 크롤링하기 위해서 기초작업을 하였습니다. 프로젝트 생성, 링크를 저장할 파일 만들기, 파일 내용 삭제하기 등등. 이번에는 웹 크롤링을 할 때, 어떤 페이지를 타고 들어간다고 생각해보세요. 거기서 링크를 파일로 저장을 하였는데, 다른 곳에서도 같은 링크를 찾을 경우가 많을 것입니다. 이렇게 서로 중복되는 링크들을 크롤링을 하게 된다면, 시간이 꽤 걸릴 것입니다. 물론 몇 페이지가 안된다면, 체감할 정도는 아닐 것입니다. 그러나 크롤링 할 페이지가 1만 혹은 그 이상이 된다고 한다면, 상당한 시간을 중복된 링크를 크롤링하는데 소요하게 될 것입니다. 그래서 이번에는 이러한 중복 자체를 크롤링 하기 이전에 제거하는 코딩을 해 보려고 합니다. 파이썬에서는 여러개가 중복.. 더보기
Web Crawler 003 - 링크 찾기 및 삭제하기 (Adding and deleting links) 이번에는 기본 URL 에서 크롤링 하려고 찾은 링크들을 파일에 저장을 하려고 합니다. 멀티 프로세싱 혹은 멀티 쓰레딩 작업을 통해서, 하나의 과정은 링크를 찾아 파일에 넣어 저장하고, 다른 하나의 과정은 이렇게 찾은 링크들을 크롤링하게 하려고 합니다. 여기에서 찾은 링크를 파일에 저장을 할 시에 중복되는 링크도 존재하기 마련입니다. 그래서 그런것들의 중복 크롤링을 막기 위해, 애초에 크롤링할 파일에 해당 링크 URL 이 존재하면 추가적으로 append 하지 않게 하면 됩니다. 시작해 볼까요? 우선 이미 만들어 둔 파일에 링크를 더해가는 함수를 정의하겠습니다. ▼ append 모드로 해당 경로를 열어줍니다. 그리고 이것을 file 로 명명하겠습니다.▼ 파일을 열어 전달해 줄 데이터 값을 넣고 뒤에는 개행문.. 더보기
Web Crawler 002 - Creating Crawled files and Queue 이번 시간에는 지난 시간에 프로젝트(폴더)를 만드는 코딩에 이어, 웹사이트를 크롤링할 때 크롤링해야 할 웹페이지들의 URL 값을 가지고 있어야 하는데, 그렇게 하기 위해서 queue를 만들어 긁어 올 웹페이지 주소를 넣어 두려고 합니다. 이렇게 queue에 저장된 웹페이지 URL 을 가지고 다 긁어왔으면 해당 URL을 crawled 로 넘겨주어 더 이상 중복 크롤링하지 않게 하려고 합니다. 말보다는 코딩을 보는게 더 빠를거라 봅니다. 시작해 볼까요~? 히위~꼬우~! 지난 시간에 만든 부분에 아래와 같이 주석을 달아 주었습니다. 그리고 이번에 만들 부분에 주석도 함께 넣었습니다. 프로젝트 이름과, 기본 주소를 인자로 받는 파일을 만들어 줄 함수를 아래와 같이 정의하겠습니다. ▼ 기본 URL 을 가지고 어떤.. 더보기
Web Crawler 001 - Creating a New Project 요즈음 들어 귀찮이즘으로 만사를 내 팽개쳐두고 있는데, 블로그를 방문하는 많은 분들이 Python Web Crawling 에 질문을 많이 주시고, 또 방문 로그를 보아도 대부분 Web Crawling 으로 접속을 많이 하시는 듯 하여, 그 후속편을 살짝쿵~ 써보려고 자판을 두드려 보려고 합니다. 혹시 크롤링이 어떤 것인지 잘 모르시는 분은 아래 링크를 한번 보시면 도움이 되시리라 봅니다. [PYTHON 3] Tutorials 24. 웹 크롤러(like Google) 만들기 1 - How to build a web crawler [PYTHON 3] Tutorials 25. 웹 크롤러(like Google) 만들기 2 - How to build a web crawler 예전에 간략히 다룬 웹 크롤러는 블로그.. 더보기
[PYTHON 3] Tutorials 45. Struct (bytes data <-> normal data(human readable)) 안녕하세요. 이번 시간에는 Struct 에 대해서 알아보도록 하겠습니다. 파이썬에서 Struct이 무엇인지부터 얘기를 시작해볼까 합니다. 파이썬에서는 어떠한 형태의 데이터, 가령 numbers, letters, string 와 같은 데이터를 bytes (0,1 으로 이루어진 바이너리 형태의 데이터) 데이터로 converting 할 수 있습니다. 그럼 왜 이렇게 bytes 형태의 데이터로 전환을 할까요? 이는 우리가 사용하는 컴퓨터가 데이터를 저장하거나 네트워크를 통해 이러한 데이터를 주고 받을 때, 이진형태의 bytes data( 0, 1 )로 데이터를 다루기 때문입니다. 그러나 이런 형태의 데이터는 인간이 확인하여 인지하기는 힘든 점이 있습니다. 그러므로 평소에는 인간들이 읽을 수 있는 형태로 스크린에.. 더보기
Advanced scheduling of Mac OS Wake and Sleep Time Mac OS has a settings panel that allows you to schedule the Wake, Sleep and Shutdown time for your Mac, but there is only one sche dule allowed, everyday, or every friday, or every weekend, and so on. I wanted a different wake and shutdown time for the weekend and weekdays. This is possible using cron, and the command line tool pmset. The crontab below wakes the Mac up at 5pm every weekday and s.. 더보기
How to sync your Mac's Documents, Desktop, and any other folder to Dropbox How to sync your Mac's Documents, Desktop, and any other folder to DropboxWe're in the early days of the cloud, but it's easier than you might think to put all your important files onto Dropbox. There are plenty of reasons to put things into the cloud, be it as a backup or to access them remotely from other devices. But putting things into the cloud can be a hassle — Apple's trying to make it a .. 더보기
남의 컴퓨터를 내 마음대로 다룬다? - Python Reverse Shell_004 - Client Connection to Server (파이썬 리버스 쉘 - 클라이언트에서 서버에 연결하기) 지난 시간에 이어서 이번 시간에는 클라이언트(타겟팅 컴퓨터 혹은 내가 조정하고자 하는 컴퓨터)에서 실행시킬 코드를 다루어 보도록 하겠습니다. 우선 아래와 같이 필요한 모듈을 import 해줍니다. ▼ 소켓을 실행시켜 변수 s 에 넣겠습니다.▼ 서버(내 컴퓨터)의 아이피 주소를 호스트에 할당해 줍니다. 여기 있는 아이피로 클라이언트(숙주 컴퓨터)가 찾아오게 하는 겁니다. 물론 아래와 같이 자신의 아이피를 고스란히 누설하는 크래커는 없을 것입니다. 보통은 다른 루트를 여러번 경유하게 하거나, 중간에 다른 매개체(!!)를 거치게 합니다. 이 부분은 다루지 않겠습니다. 그러다 정말 철컹철컹 당할 사람을 만들면 안되겠기에.....;; 아래 아이피도 임의의 가상 아이피 입니다. 집에서 공유기를 사용하신다면, 192.. 더보기
남의 컴퓨터를 내 마음대로 다룬다? - Python Reverse Shell_003 - Sending Commands to the Client (파이썬 리버스 쉘 - 클라이언트에게 명령어 보내기) 지난 시간까지는 통신을 하기 위한 소켓 생성, 소켓 바인딩, 소켓 수용하는 것 까지 간략히 만들어 보았습니다. 이번 시간에는 멀리 있는 클라이언트 컴퓨터에게 어떤 명령을 전달할지에 관한 부분을 다루어 보도록 하겠습니다. 우선 명령어를 보내기 위한 함수를 정의하겠습니다.▼명령어를 일회성으로 보내고 말 것이 아니기에 특정 조건이 들어오기 전까지는 계속 사용하게 할 반복문을 사용하였습니다.▼내가(서버) 내릴 명령어를 입력받을 input() 을 넣고 이 값을 cmd(Command)라는 변수에 저장을 하게 하겠습니다.▼만약에, 이 cmd 값이 'quit' 라는 입력이 들어오면 상기의 모든 과정을 종료시키게 하려고 합니다. ▼if 조건인 cmd == 'quit' 가 만족되면 conn 인 커넥션도 종료하고, 소켓인 .. 더보기
남의 컴퓨터를 내 마음대로 다룬다? - Python Reverse Shell_002 - Binding the Socket and Listening for Connections (파이썬 리버스 쉘 - 소켓 묶기, 연결 대기) 앞 시간에는 멀리 떨어져 있는 다른 컴퓨터와 데이터를 주고 받는 통신을 하기 위해 소켓을 만들어 주었습니다. 이번에는 그렇게 만든 소켓의 데이터를 바인딩(묶어주기)하고 바인딩된 데이터를 가지고 상대 컴퓨터와 접속하게 하고, 그 접속을 서버(내 컴퓨터)에서 받아들이게 하는 과정까지 다루어 보도록 하겠습니다. Socket Binding(소켓 바인딩)통신을 하기 위해서는 통신 기기간(여기서는 컴퓨터) 데이터가 어디에서 오고 어디로 가는지를 알아야 합니다. 이럴 때 사용하는 개념이 아이피(host)주소와 포트(port) 입니다. 그리고 이러한 host와 port를 바인드(묶어주기) 해주어야 어떤 데이터가 오가는지 쉽게 파악할 수 있습니다. 이는 송수신 데이터는 국제 규약인 프로토콜(Protocol)을 따라야 하.. 더보기
남의 컴퓨터를 내 마음대로 다룬다? - Python Reverse Shell_001 - Creating a Socket (파이썬 리버스 쉘 - 소켓 만들기) 안녕하세요. 이번에는 새로운 PYTHON SERIES 를 올려볼까 합니다. REVERSE SHELL 이라고 합니다. 처음 들어보는 분들도 계시겠지만, 개략적인 내용은 대부분 알고 있는 친숙한 개념입니다. 우선 아래 그림을 먼저 살펴볼까요? ▼ 왼쪽 그림에서 A -> C 로 접속을 하려고 하는데 중간에 방화벽(Firewall)이 존재할 경우가 있습니다. 이는 사용자들이 특정 웹서버나 사이트에 접속하는데 어려움을 겪게 하는 요인이 되기도 합니다. 물론 보안상 혹은 다른 여타의 이유로 방화벽을 설정하기도 하지만, 기업체에서 단순히 접속을 막아두는 경우도 있습니다. 이럴 경우 VPN(Virtual Private Network: 가상 사설망)을 이용해서 우회하기도 하지만 이 역시 한계가 있습니다. 이럴때 사용하는.. 더보기
Terminal shell 실행가능 VS Automator shell 에러? PATH에 주목. I have a simple Gruntfile that I want to be able to run from an icon in my OSX dock. I have created a very simple shell script (launcher.sh) that I will save as an application so I can add it to my dock. It works great when I run it directly in my Terminal:#!/usr/bin/env bash $(grunt serve --open)It also works fine with this shebang: #!/bin/bash However when I call the shell script from an Autom.. 더보기
Shut down, sleep, restart, display sleep, log out commands on OS X with bash, applescripts. Shut down without showing a confirmation dialog:osascript -e 'tell app "System Events" to shut down'Shut down after showing a confirmation dialog:osascript -e 'tell app "loginwindow" to «event aevtrsdn»'Restart without showing a confirmation dialog:osascript -e 'tell app "System Events" to restart'Restart after showing a confirmation dialog:osascript -e 'tell app "loginwindow" to «event aevtrrst.. 더보기
PyQt installation with python3 on Mac OS X by using HOMEBREW You can install it with homebrew using the --with-python3 flag:unset PYTHONPATH brew install sip --with-python3 brew install pyqt --with-python3And relink the site packages if necessary. 더보기
[Folder Action] - 이미지에 나의 서명(signature) 만들어 넣기 with python program - 3 이전 시간에 만든 여러장의 이미지에 사인(서명)을 넣는 코딩을 활용해서 이번시간에는 특정 폴더에 대상 파일들을 떨구면, 자동으로 서명된 이미지 파일들을 돌려주게하는 폴더액션(맥의 오토메이터 활용)을 만들어 보도록 하겠습니다. 우선 터미널을 띄워주고 shell script 를 하나 만들어 주려고 합니다. 아래와 같이 make_multiple_signature.sh 라는 이름을 가지는 bash 스크립트를 만들도록 하겠습니다.▼ 파이썬이 있는 경로를 앞에 적습니다. 저는 현재 파이썬 배포판 중의 하나인 아나콘다를 사용하고 있습니다. 그래서 앞 부분에 아나콘다의 파이썬 경로인 '~/anaconda/bin/python' 을 넣어줍니다. 뒤에는 이전 시간에 만들어 둔 파이썬 파일의 경로를 넣어 줍니다. 파인더에서 .. 더보기
이미지에 나의 서명(signature) 만들어 넣기 with python program - 2 from PIL import Image, ImageDraw, ImageFont import os, glob target_image = Image.open('/Users/SH/Desktop/Signature/python_logo.png') fontsFolder = '/Library/Fonts/' selectedFont = ImageFont.truetype(os.path.join(fontsFolder,'Zapfino.ttf'),15) draw = ImageDraw.Draw(target_image) draw.text((200,150), 'Creative Works for jason', fill='white', font=selectedFont) target_image.save('/Users/SH/Desktop/.. 더보기
[PYTHON] 간단히 이미지(사진)들 합치기 by using python - Merge images by using python program. 안녕하세요. 이번에는 여러장의 이미지(사진)들을 하나의 파일로 병합(합치기)하는 과정을 파이썬을 이용해서 코딩해 보겠습니다.주로 이미지를 다룰때는 이미지 관련 툴(가령 포토샵)들을 많이 사용을 합니다. 그러나 이런 툴들을 다루더라도 여러장의 파일들을 열고 사이즈에 맞게 붙이고 크기 조절하고 저장하고 일련의 과정들을 거쳐야합니다. 다소 번거로울 수도 있는 이런 일들을 프로그램으로 간단히 처리하게 하려고 합니다. 물론 디테일한 프로세싱은 상기의 툴을 이용하는게 나을수도 있습니다. 그래서 여기서는 단순하게 몇장의 이미지들을 같은 규격의 사이즈로 크기 조절 후 가로형태로 나란히 붙여주게끔만 하겠습니다. 이를 잘 숙지하고 응용을 한다면, 여느 프로그램 못지않은 나만의 툴을 구현할 수 있을 것입니다. 각설하고 시작.. 더보기
Xcode with Swift - 텍스트 넘겨주기(Handing Over) iOS 에서 버튼을 클릭했을 때, 텍스트에 있는 내용을 다음 창으로 전달하는 간단한 모듈을 만들어 보고자 한다. 새로운 프로젝트를 만들기 위해 아래와 같이 뉴 프로젝트를 생성한다.▼ iOS Application 에서 싱글 뷰를 선택하고 다음으로 넘어간다.▼ 프로젝트명을 적당한 이름을 기입해 준다. 여기서는 텍스트를 넘겨준다는 의미로 'HandingOver'라고 명명하였다.▼ 프로젝트를 생성해줄 폴더를 찾아 'Create'를 눌러준다.▼ 이렇게 생성된 프로젝트는 아래와 같은 창을 보여준다.▼ 애플리케이션에서 보여지는 부분을 다루는 메인스토리리 보드를 선택하면 아래와 같은 화면이 나타난다. ▼ 우측 아래에 있는 Objects에서 버튼을 찾고, 메인스토리 보드에 드랙해서 적당한 위치에 자리 잡아준다.▼ 입력할.. 더보기
애플, OS X 엘 케피탄 10.11.3 퍼블릭 베타 버전 업데이트 개시. 애플의 데스크탑 최신 운영체제인 OS X 엘 케피탄의 퍼블릭 베타 버전이 공개 되었다. 이번 퍼블릭 베타 버전에서는 릴리즈 노트가 명기되지 않아 어느 부분에 주안점을 두고 있는지 알 수가 없다. 이는 몇일전 공개한 개발자 버전과 마찬가지다. 다만 이전 버전에서 발견된 몇몇 버그 수정을 염두에 두고 있지 않나 추측할 뿐이다. 차후 변경 사항이 확인되면 업데이트를 따로 할 예정이다. 더보기
[PYTHON 3] Tutorials 41. Combine Images Together (이미지 병합하기 like watermark(워터마크)) 이번시간에는 파이썬을 이용해서 워터마크를 만들어 보려고 합니다. 이를 위해서는 서로 다른 두 이미지를 병합하는 과정을 다루어야 합니다. 워터마크 만들기 ( Make a water mark using python) 원본 이미지 1 - 잡스 횽아 ㅠ_ㅠ.▼ 워터 마크로 사용할 원본 이미지 2 - 스티브 잡스가 작고할 당시에 회자된 애플 이미지▼ 이미지 처리를 위한 모듈인 필로우를 불러옵니다.▼ 각각의 이미지를 열어주어 변수 steve, apple 에 저장을 합니다.▼ 워터마크로 사용할 이미지의 크기를 확인해 봅니다.▼ 위의 워터마크로 사용할 이미지의 크기를 확인 한 이유는, 만약 이미지의 크기가 맞지 않으면 오류가 발생하기 때문입니다. 향후에는 이미지의 크기와 상관없이 동적으로 적용할 수 있는 방법을 알아볼.. 더보기
[Swift] 028 Functions and Closures - 2 (함수의 다중 파라미터 ) for beginners Functions다중 파라미터 함수Swift의 함수 개념은 앞서 살펴보았듯이 수학적인 개념 이상의 것입니다. 넓은 의미에서 Swift의 함수는 한 개 이상의 파라미터를 받아들이고 숫자뿐만 아니라 다른 타입도 받아들인다는 점에서 더 유연하고 강력합니다. 한 개 이상의 파라미터를 받아들이고 Doouble형 이외의 타입도 반환하는 함수를 만들어보겠습니다. 다중 파라미터 함수▼ func buildASentence(subject : String, verb : String, noun : String) -> String { return subject + " " + verb + " " + noun + "!" } buildASentence("Swift", verb: "is", noun: "cool") buildASent.. 더보기