본문 바로가기
반응형

Programming301

Gotk3를 이용한 go언어 GUI 개발 예제 사내에서 사용할 간단한 GUI프로그램 개발 환경을 구상 중입니다. 배포도 해야해서 VM위에서 돌아가는 Java는 좀 꺼림직하고... 다른 언어로 쓸 수 있는 GUI Toolkit을 찾아보다가 결국 QT/GTK/WxWidgets 로 가야할 것 같은데요. 배포가 어렵다는 C/C++로 가는 것 보다는 요즘 언어인 Go언어로, 그리고 바인딩이 잘 되어있는 GTK로 가보려고 합니다. Go언어 바인딩은 Gotk3가 있습니다. 이번 포스트에서는 Gotk3설치 및 예제 프로그래밍까지 수행해 보겠습니다. 우선 사전 준비해야 하는 작업이 좀 있습니다. 생각보다....(이거 하면서 그냥 Swing써야겠다고 생각하는 중....ㅠㅠ) 1. git 설치 2. MinGW-w64설치(MSYS2설치) 3. GTK 및 dependenc.. 2020. 3. 16.
andlabs/ui 를 이용한 go언어 GUI개발 예제 Go 언어로 간단한 GUI 구현을 위한 라이브러리로 andlabs/ui라는게 있습니다. 나중에 포스팅할 Glade 같은 GUI designer를 사용하여 구현할 정도가 아니라 간단한 GUI수준을 위해서는 괜찮은 방법인 것 같습니다. 우선 Linux에서 설치는go get github.com/andlabs/ui로 터미널에 입력하여 설치해줍니다.Windows환경에서는 MinGW를 실행해서 설치해야 합니다. 그리고 아래의 예제코드를 입력하고 실행하면...package main import ( "github.com/andlabs/ui" _ "github.com/andlabs/ui/winmanifest" ) func main() { err := ui.Main(func() { input := ui.NewEntry().. 2020. 3. 16.
Go언어 초간단 async 예제 Go언어의 장점 중 하나로 비동기 함수실행을 매우 쉽게 구현한다는 점입니다.비동기 프로그래밍을 직접 해본적이 없어서 잘은 모르지만, 아래 예제를 보니 정말 쉬운 것 같습니다.package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 10; i++ { fmt.Println(s, "***", i) } } func main() { // 함수를 동기적으로 실행 say("Sync") // 함수를 비동기적으로 실행 go say("Async1") go say("Async2") go say("Async3") // 3초 대기 time.Sleep(time.Second * 3) } 결과C:/Go/bin/go.exe build [D:/5.System_d.. 2020. 3. 16.
Go언어-파일찾기 프로그램 예제 Go 언어로 작성한 파일찾기 프로그램 예제입니다. 검색하고자 하는 Directory와 파일명을 입력하면 찾는 프로그램입니다. 사용 방법은filecheck.exe 과 같이 사용하면 되며, 아래 예시와 같이 사용하면 됩니다. 소스코드는 아래와 같습니다.package main import ( "fmt" "os" "path/filepath" ) var ( targetFolder string targetFile string searchResult []string ) func findFile(path string, fileInfo os.FileInfo, err error) error { if err != nil { fmt.Println(err) return nil } absolute, err := filepath... 2020. 3. 16.
Go언어 - liteIDE설치 및 실행 취미 IT 하면서 참 여러가지 관심분야가 많다는 생각이 드네요. 깊이는 없고... 이것저것 해보고 싶은 건 많고...이번엔 요즘? 한창? 떠오르던 Go언어에 대해 포스팅을 해볼까 합니다. 구글에서 웹이던 앱이던 빠른 속도의 성능을 위해 개발했다던 언어...결과적으로 컴파일 속도만큼은 빨라진 언어...개인적으로 웹 뿐만아니라 데스크탑 앱에도 좀 관심이 있다보니, 실행 성능에 좀 더 비중을 두게 되었는데요...,직접 체험한 건 아니지만 꽤 빠르다고 합니다. C/C++보다는 아니지만 가상머신 위에서 돌아가는 Java나 C# 보다는 빠른 성능을 보인다고 합니다. 물론 인터프리터 언어보다는 당연히 빠르겠죠?게다가 문법도 단순해서 러닝커브, 작성력 또한 빠르다고 하네요. 파이썬만큼은 아니지만.. 오늘 할 일은 1... 2020. 3. 16.
JAVA - SWING JTable 기초 사용법 오늘은 Java GUI에서 테이블 출력을 구현하는 Swing의 JTable클래스를 활용하여, 간단한 예제를 구현하였습니다.아래 코드를 실행하면 아래와 같은 화면이 나옵니다. 기능은 없고, 단순히 화면만 구성된 소스이니 참고하세요~~ package com; import javax.swing.*; import java.awt.*; public class wij_com { public static void main(String args[]){ Dimension dim = new Dimension(430, 400); //단순 2차원값 입력을 위한 클래스 JFrame frame = new JFrame("wij complex"); frame.setLocation(0, 0); //출력 위치를 화면 좌상단에 위치 fr.. 2020. 3. 14.
JAVA - Intellij 환경에서 실행파일 jar 만들기 JAVA프로그램을 실행하기 위해서는 jar파일이 있어야 하는데요,저는 주로 인텔리제이를 사용하는 관계로, 인텔리제이에서 jar 실행파일 만들기를 수행해보겠습니다. 우선 File - Project Structure 메뉴로 들어가서 Artifacts - JAR - From modules with dependencies... 를 클릭합니다. 그리고 메뉴가 팝업되면, Main Class에 현재 프로젝트의 메인 클래스를 선택해줍니다. (탐색 버튼으로 고르기) 잘 추가되면 아래와 같이,,, 이제 준비가 되었습니다. 빌드하러 갑니다. Build 메뉴로 가보시면 Build Artifacts...라는 서브 메뉴가 보입니다. 이걸 클릭해야 실행파일이 만들어집니다. 뭐가 한번 더 뜨네요. Action 에서 Build 를 클.. 2020. 3. 12.
Python - GUI에서 DB연결 cx_Oracle의 설치에 이어 DB 연동, 그리고 tkinter를 이용한 GUI 프로그래밍을 해보겠습니다. 화면 구성은 정말 간단히...레이블에 DB 주소를 입력하고 엔터를 누르면 연결해서 결과를 출력하는 구성입니다.import cx_Oracle import os import tkinter #GUI 부분 window=tkinter.Tk() #기본 설정 window.title("GUI Sample") window.geometry("640x640+100+100") #너비X높이+X좌표+Y좌표 window.resizable(True, True) #사이즈 변경 가능 #레이블 label_ip=tkinter.Label(window, text="예: myid.myweb.com:1526/orcl", width=50, .. 2020. 2. 26.
Python-Oracle연동 Python로 Oracle Database에 연결하기 위해서는 cx_oracle 모듈을 설치해야 합니다. 설치 방법은 어렵지 않은데 Pycharm과 일반 커맨드창 파이썬에서 실행하는 방법을 나눠 설명하겠습니다. 1. 우선 주로 쓰는 Pycharm에서는 File - Settings - Project - Project Interpreter 로 진입합니다. 그리고 cx_Oracle 모듈을 찾아서 설치해 줍니다. 2. Command창에 설치해서 사용하는 경우라면, sudo pip install cx_oracle 로 설치할 수 있습니니다. 3. Oracle Client 설치 cx_Oracle을 사용하려면 Oracle Client를 설치해주어야 합니다. Oracle이 설치되어있어도 Library 때문에 필요한 것으.. 2020. 2. 25.
Python GUI - tkinter 예제 회사에서는 예전에 만들어둔 Visual Basic 6.0을 어쩌지 못해 계속 사용하고 있습니다. 저는 그 유지보수 담당입니다. 다른 언어로 갈아 엎고는 싶지만,,, 온지 얼마 안돼서..아니, 실력이 아직 한참 모자라서 그냥 유지보수 중입니다. 그러나 마음만은 항상 다른 언어로 포팅하려고 준비하고 있습니다. 배포가 편리한 Java를 유력 후보로 생각하고 있는데요..(C# 안사줌..ㅠㅠ) 그 전에 간단한 프로그램 프로토타입 설계를 위해 tkinter를 손대보기로 했습니다. 결론은, 필요한 기능 그때그때 불러다 쓸 기본 위젯 종합 선물세트를 만들었습니다. 필요할 때 골라 쓰려구요. 실행하면 이런 gui프로그램이 나오게 될 것입니다. 그리고, 소스는 https://076923.github.io/ 사이트를 참조했.. 2020. 2. 25.
Manjaro linux ibus 한글설정 만자로 리눅스에서 한글 ibus 설정하는 방법을 기록해놓습니다. 1. 설치하는 방법 ibus-hangul만 설치하면 다른 필요한 패키지는 자동으로 설치됩니다. sudo pacman -S ibus-hangul 2. ibus 설정 방법 먼저 applications 에서 ibus-preferences 에 들어가야 하는데....application list를 살펴봐도 보이지가 않네요. 패키지 관리자에서 ibus를 검색해서 실행하던지...터미널에서 ibus-setup 명령으로 들어갑니다. 입력방식(input-method) 탭에서 '추가' 클릭 후 '... -> 한국어'을 선택하고 삼색의 태극무늬가 있는 hangul을 선택합니다.(ibus-hangle 설치하면 추가됨. 잘 안보이면 리부팅.) 추가한 후 기본설정을 .. 2020. 2. 21.
JAVA - Intellij JavaFX 설치(Java 11 이후 버전용) 인텔리제이에 JavaFX 프로젝트 만들기 힘드네요.그래서 오늘 구글 검색해가며 수행한 내용을 좀 기록해 놓으려고 합니다. 한글 검색으로는 대부분 JavaFX설치 매뉴얼이 이클립스 기준이라.... 인텔리제이 정보 찾느라고 조금 힘들었습니다. 사실 금방 나오지만...영어라... 1. 우선 Intellij, JavaSDK는 기본적으로 깔려 있어야 합니다. (예제에서는 JavaSDK 13, JavaFX SDK11을 사용하였습니다.) 2. JavaFX SDK를 다운받아서 설치해야합니다. 다운받는 경로는 요기를 참조하세요. 설치..가 아니라 적당한 곳에 압축을 풀어놓으면 됩니다. 참고로 Program Files와 같이 빈칸이 들어간 곳에 하면 나중에 Module 추가부분에서 에러가 발생하니, 주의하시기 바랍니다. .. 2020. 2. 20.
SQL Developer 설치 오라클 데이터베이스를 다루는 툴로 SQL Developer를 많이 사용합니다. 그런데 매번 메뉴가 바뀔 때마다 다운로드 경로 찾기가 쉽지가 않네요. 2020년 2월 기준으로 SQL Developer 다운 사이트는 요기입니다. 자신의 pc에 JDK가 깔려 있으면 아래쪽 파일을.. 안깔려 있으면 위쪽 파일(with JDK 8 included)을 받아서 설치해 줍니다. 참, 얼마 전부터는 다운로드 하는 데에도 로그인을 해야합니다. 즉, 가입이 되어있어야 다운로드가 가능합니다. SQL Developer는 별도 설치가 필요 없는 프로그램입니다. 다운로드 받아서 zip파일을 풀고 sqldeveloper.exe를 실행하면 곧바로 실행됩니다. 중간에 이런 창이 뜨는데, 할수 있는게 아니오 밖에 없습니다. 그냥 그러겠다.. 2020. 2. 17.
GIMP 사용법2- 커브조정 사진 보정의 필수 기능인 커브 조정하는 법에 대해 알아보겠습니다. 우선 수정할 사진을 하나 불러옵니다. 색 메뉴의 Curves 서브메뉴를 선택합니다. 아래와 같이 샛색상 커브 조절기능이 열립니다. 색상 커브 조절 기능은 다른 프로그램과 동일하게 사용하시면 됩니다. 아래쪽은 어두은 영역을 말하며, 위쪽 영역은 밝은 영역을 말합니다. 따라서 좀 더 밝게 만들려면 커브를 드래그하여 위쪽으로 볼록한 커브를 만들고, 좀 더 어둡게 만들려면 아래로 볼록하게 만들면 됩니다. 보통 사진을 편집할 때에는 어두운 부분은 좀 더 밝게, 밝은 영역은 조금 어둡게 해서 명암 대비를 낮춰줍니다. 아래 그림처럼요. (물론, 반대일 경우도 있습니다.) 예시를 위해 커브를 살짝 조절해 보았습니다. 오늘도 간단하게 김프로 커브 조정하는.. 2020. 2. 15.
GIMP 사용법1 - 자르기 GIMP 사용법 중 가장 자주 사용하게 되는 기능은 바로 자르기가 아닐까 합니다. 기능은 완전 쉬워요. 우선 적당한 이미지를 하나 불러오겠습니다. 그리고 왼쪽 메뉴에서 자르기 툴을 선택한 다음에.... 자르고 싶은 영역을 드래그하여 설정해줍니다. 그리고 엔터 누르면... 짜잔~ 참 쉽죠?? 제일 첫 강좌....라고 하기도 좀 민망하지만, 자르기 강좌를 마치겠습니다.^^;; 씨 유 어겐~ 2020. 2. 15.
GIMP, 무료로 쓰는 리눅스용 미니 포토샵 오늘은 김프(GIMP)에 대해 조금 얘기해볼까 합니다. 우선 김프란? GIMP- GNU Image Manipulation Program의 약자인데요, 리눅스 계열의 OS를다루신다면, 또는 자유/프리 소프트웨어에 관심 있는 분들이라면 한번쯤 들어보셨을겁니다. 원래 UC버클리에 재학중이던 두 학생 - 스펜서 킴벨(Spencer Kimball)과 피터 매티스(Petter Mattis) - 의 학기 프로젝트였다고 해요. 그 뒤 졸업과 동시에 GNU 프로젝트에 포함시키면서 공동체에 의한 무료 소프트웨어로 개발되게 된 것이죠. 학교 프로젝트로 만들었다니...정말 대단하네요. 리눅스에서 포토샵은 안되고 다른 대안이 뭐가 있는지 잘 모르지만, (포토샵보다)가볍고도 비교적 풍부한 기능을 제공해서 굳이 다른 대안을 찾지 .. 2020. 2. 14.
AWT Study - FileDialog 사용하기 파일 다이얼로그 사용 예제입니다. import java.awt.*; class MyFrame extends Frame{ private FileDialog fDialog = null; public MyFrame(String title){ super(title); this.setSize(400,300); this.setVisible(true); } public void paint(Graphics g){ super.paint(g); if(fDialog !=null) putMsg(g); } public void update(Graphics g){ putMsg(g); } public void setDialog(FileDialog f){ fDialog = f; } private void putMsg(Graphics.. 2020. 2. 11.
AWT Study - 팝업메뉴 import java.awt.*; public class awtex3 { public static void main(String args[]){ Frame f = new Frame("Popup Menu"); PopupMenu pm = new PopupMenu("Popup"); pm.add(new MenuItem("MenuItem1")); Menu m = new Menu("SubMenu1"); m.add(new MenuItem("SubMenuItem1")); pm.add(m); f.add(pm); f.setSize(300,200); f.setBackground(Color.white); f.setVisible(true); pm.show(f, 10, 100); } } 2020. 2. 11.
AWT Study - 메뉴 생성 import java.awt.*; public class awtex2 { public static void main(String args[]){ Frame f = new Frame("Pulldown Menu"); MenuBar mb = new MenuBar(); Menu m = new Menu("Menu1"); m.add(new MenuItem("MenuItem1")); Menu sm = new Menu("SubMenu1"); sm.add(new MenuItem("SubmenuItem1")); sm.add(new MenuItem("SubmenuItem2")); m.add(sm); m.add(new MenuItem("MenuItem2")); mb.add(m); f.setMenuBar(mb); f.setSi.. 2020. 2. 11.
AWT Study - Window & Frame AWT가 오래된 것인줄만 알았는데 우리 회사에서 아직도 쓰고 있습니다. 그런데 생각해보니까, 오래된 소스도 최신 컴퓨터에서도 잘 돌아가고, 별도 설치도 필요 없고, 호환 잘 되는게 좋은 것 같습니다. Visual Basic으로 짜여진 프로그램도 있는데, 유지보수가 너무 힘드네요...항상 가상XP를 깔고 배포도 엄청 복잡해요. 그래서 결론은 다시 AWT! 기초부터 차근차근 공부해 보도록 하겠습니다. 우선 Window와 Frame 만들기 예제 import java.awt.*; public class awtex { public static void main(String args[]){ Frame f = new Frame("Frame"); f.setSize(500, 400); f.setBackground(Col.. 2020. 2. 11.
만자로 리눅스에서 Intellij 실행 오류 역시 리눅스의 세계는 저같은 초보 데스크탑 유저에게는 힘든가 봅니다. Intellij를 설치하고서는 며칠 신경 안쓰다가 쓸일이 생겨서 실행을 눌러보니까 실행이 안되네요. 그냥 new project를 눌러도 아무런 반응이 없어서, 갑자기 이건 뭔가 싶네요. 지우고 다시 설치해보기도 하고, 설정에서 JDK 버전을 바꿔도 보고 했는데 역시 반응이 없네요. 사실 IDE를 잘 못다뤄서 설정부분을 어떻게 손대는지도 정확히 모르고 있는데, 어디서부터 손을 대야할지 깜깜하네요. 스트레스만 받다가 우선 이클립스를 깔았습니다. 아무런 설정 안해줘도 이클립스는 잘 작동을 하더라구요. 이걸 구글링을 해서 설치를 해야할지... 그냥 이클립스를 써야할지 고민되네요. 괜히 시간뺏는 것 같고.. 학창시절도 아니고, 회사에 육아에 개.. 2020. 2. 8.
Java 막대 그래프 그리기2 막대 그래프 그리는 코드로 이것 저것 고쳐가며 실습을 해본 기록을 남깁니다. 아직 이해가 덜된 부분도 있습니다. 아래 Listener부분... 계속 공부해야죠~ import java.awt.*; import javax.swing.*; import java.awt.event.*; public class bargraph { public static void main(String args[]) { JFrame frame = new JFrame("Program Language School"); frame.setLocation(500,200); frame.setPreferredSize(new Dimension(400,350)); Container contentPane = frame.getContentPane();.. 2020. 2. 8.
Manjaro Linux - pacman명령어 만자로 리눅스는 아치 리눅스 계열이기 때문에 패키지 관리자로 pacman을 사용합니다. 개인적으로는 만자로 리눅스를 사용하면서도 실제 패키지를 설치할 때면 종종 잊어버리는 경우가 있어서 오랜만에 정리좀 해놔야겠습니다. 주로 사용하는 pacman 명령어로는 아래와 같습니다. sudo pacman -Syu : 패키지 데이터베이스를 업데이트하고 업데이트가 필요한 패키지를 찾아서 업그레이드 sudo pacman -Ss [단어] : [단어]가 들어간 패키지 검색 sudo pacman -Qs [단어] : 설치된 패키지 중에서 [단어]가 들어간 패키지 검색 sudo pacman -S [패키지] : 패키지 설치 sudo pacman -Rs [패키지] : 패키지 제거 2020. 2. 8.
Join 의 종류와 방법 JOIN은 각 테이블간에 공통 조건으로 데이터를 연결하여 표현하는 것입니다. 기본 4가지 Join방법에 대해 도식과 함께 기억하면 쉽게 이해하고 현업에서 사용할 수 있을 것입니다. 1) 기본 조인: 공통 속성이 있는 리스트만 추출 SELECT A.field1, A.field2, B.field3FROM Table_A, Table_BWHERE A.ID = B.ID; 2) LEFT OUTER JOIN: A 테이블은 모두 나오고, B테이블에 공통값이 없는 경우 NULL값 출력 SELECT A.field1, A.field2, B.field3FROM Table_A, Table_BWHERE A.ID = B.ID(+); //값이 없을수도 있는쪽에 (+)연산자를 붙인다. SELECT A.field1, A.field2, .. 2020. 1. 31.
Manjaro Linux 저는 윈도우와 리눅스를 멀티부팅으로 사용합니다. 아무리 가상환경이 좋아졌다지만 각각의 OS를 사용하는 것만 못한것 같아서 둘 다 깔아놓고 씁니다. 물론 메인은 리눅스로, 회사일이나 은행일 볼때는 윈도우로(사실 모바일로 다 하지만) 로그인합니다. 서버용 리눅스는 잘 모르겠으나 데스크탑으로는 만자로도 개인적으로 만족하고 있습니다. 물론 심각한 개발을 한다거나 하진 않습니다. Godot엔진으로 간단한 게임 만들고, Visual Studio Code로 웹사이트 끄적거리고, IntelliJ로 아주 초보적인 JAVA 프로그래밍, LiteIDE로 아주 초보적인 Golang 스터디 정도 하고 있네요. 물론 인터넷, 토렌트, 음악은 예전부터 유명한 몇몇 프로그램이 있어서 잘 사용하고 있습니다. 개인적으로는 바탕화면에 프.. 2020. 1. 31.
Database Connection - DBConnection.java 자바로 데이터베이스 연결 프로그램 구현 시, DB연결부 구현파일입니다. package DB; import java.sql.*; public class DBConnection { public static Connection dbConn; public static Connection getConnection() { Connection conn = null; try{ String user="abcd"; String pw="********"; String url="jdbc:oracle:thin:@zxcv.dothome.co.kr:1521:odbc"; //이렇게 해야 연결이 된다. C#과 차이 Class.forName("oracle.jdbc.driver.OracleDriver"); System.out.printl.. 2020. 1. 29.
Database Connection - OracleTest.java 1. DBConnection.java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnection { public static Connection dbConn; public static Connection getConnection() { Connection conn = null; try { String user = "scott"; String pw = "tiger"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Class.forName("oracle.jdbc.driver.OracleDriver"); conn =.. 2020. 1. 29.
고도 엔진 횡스크롤 게임 예제 (Godot Platformer) - 3 1. Title screen제작 - User Interface(Control) 추가하고 이름을 MainScreen으로 변경합니다. - Background 추가 후 TextureRectangle로 변경, - Layout: Full Rect - 인스펙터에서 Expand: on, Stretch Mode: Tile 로 설정 - MainScreen Node에 Label 노드 추가(Title) ○ My First Godot Game : Text 변환 ○ Center Top: Layer 변경, Shift 누른채로 약간 아래로 변경 - VBoxContainer추가하여 이름을 Menu로 변경하고, 아래와 같이 버튼2개를 추가합니다. ○ Layout: Center ○ Button 2개 추가 및 텍스트 변경 ○ Button.. 2020. 1. 29.
고도 엔진 횡스크롤 게임 예제 (Godot Platformer) - 2 1. Coin 만들기 - new scene > Area2D(Coin) 노드추가, Coin Image추가 - CollisionShape2D추가, circle shape 선택 후 사이즈 조정합니다. - AnimationPlayer추가 (Objects폴더 생성 후 scene저장) - animation - new animation: bouncing - timeline 오른쪽에 시간을 1.8로 전체 애니메이션 시간을 설정 - timeline 오른쪽의 반복기능 on - 뷰포트의 rotation mask for inserting keys를 언체크함 - 뷰포트의 Translation mask for inserting keys만 체크함 - Coin 노드 선택 후 ins키나 뷰포트의 key를 누르면 애니메이션에 key가 .. 2020. 1. 29.
고도 엔진 횡스크롤 게임 예제 (Godot Platformer) -1 따라해야할 양이 많다보니 포스팅이 친절하지 못한점 양해바랍니다.^^;; 그럼 시작하겠습니다. 1. 프로젝트 세팅 - assets 다운로드(예제 소스 링크) - platformer폴더 생성 후 assets폴더를 복사해 넣습니다. - assets 폴더에 이미지 등 소스 추가 - src 폴더 추가 2. Player 생성 - kinematicbody2D 추가 - Player로 변경 - CollisionShape2D추가 ->Rectangle shape 설정 - Player 이미지를 끌어오면 자동으로 sprite node가 추가되며 이름은 player로 설정됨 - magnetic을 클릭하여 snap 활성화 - pixel snap을 활성화하여 맨 바닥이 0에 오도록 설정 - Collisionshape2D의 크기 조정.. 2020. 1. 29.
반응형