2016년 9월 3일 토요일
pythton 에서 list 와 tuple 의 차이점
선언
list : list_name = []
tuple: tuple_name = ()
다른 점
tuple 은 내용물을 수정할 수 없다.
tuple 은 list 보다 속도가 빠르다.
2016년 8월 27일 토요일
python variable, attribute(instance attribute, class attribute)
-- 정리 계기 --
python을 사용할 때 변수(variable) 이라는 말과 속성(attribute)이라는 말이 혼란스럽기도 했고, attribute를 알아보니 class, instance attribute 가 따로 있어 정리했습니다.
지금은 간단히 class 안에 있는 것은 attribute 이고 class 로 만든 새로운 instance는 variable 이라고 이해하고 있습니다.
-- 내용 --
variable: 우리가 일반적으로 이야기하는 변수, class 로 새로운 instance 를 생성하면 그것이 변수
attribute: class 내에서 만들어진 변수
attribute 세부
1. instance attribute
2. class attribute
Beyond performance considerations, there is a significant semantic difference. In the class attribute case, there is just one object referred to. In the instance-attribute-set-at-instantiation, there can be multiple objects referred to.
성능에 대한 이야기를 떠나서, 확실하게 다른점이 있다. class attribute는 1개의 object 밖에 없다. 초기화를 통해 만들어진 instance attribute눈 여러개의 object 가 만들어진다.
For instance
예를 들면 아래와 같다.
1. class attribute
The difference is that the attribute on the class is shared by all instances. The attribute on an instance is unique to that instance.
class 의 attribute는 모든 instance 들이 공유하고, instance 의 attribute 는 각 attribute 마다 고유하다.
참조: Link
python을 사용할 때 변수(variable) 이라는 말과 속성(attribute)이라는 말이 혼란스럽기도 했고, attribute를 알아보니 class, instance attribute 가 따로 있어 정리했습니다.
지금은 간단히 class 안에 있는 것은 attribute 이고 class 로 만든 새로운 instance는 variable 이라고 이해하고 있습니다.
-- 내용 --
variable: 우리가 일반적으로 이야기하는 변수, class 로 새로운 instance 를 생성하면 그것이 변수
attribute: class 내에서 만들어진 변수
attribute 세부
1. instance attribute
2. class attribute
Beyond performance considerations, there is a significant semantic difference. In the class attribute case, there is just one object referred to. In the instance-attribute-set-at-instantiation, there can be multiple objects referred to.
성능에 대한 이야기를 떠나서, 확실하게 다른점이 있다. class attribute는 1개의 object 밖에 없다. 초기화를 통해 만들어진 instance attribute눈 여러개의 object 가 만들어진다.
For instance
예를 들면 아래와 같다.
1. class attribute
class A: foo = [] a, b = A(), A() a.foo.append(5) b.foo
[5]
-> class level 에서 작성, self.xxx 로 사용하지 않음
2. instance attribute
class C: def __init__(self): self.foo = [] c, d = C(), C() c.foo.append(5) d.foo
[]
-> instance level 에서 접근, self.xxx 로 사용
The difference is that the attribute on the class is shared by all instances. The attribute on an instance is unique to that instance.
class 의 attribute는 모든 instance 들이 공유하고, instance 의 attribute 는 각 attribute 마다 고유하다.
참조: Link
2016년 8월 26일 금요일
python 에서 밑줄 ('_', underline) 사용된 파일, 함수, 변수 List 및 그 의미
1. 파일
폴더 아래의 __init__.py
해당 폴더가 파이썬 package 라고 인식할 수 있게 한다.
그 폴더가 package 이기 때문에 그 안에 있는 python 파일들을 import 할 수 있다.
2. 메서드(method, 클래스 내부 함수, 가장 아래 예시 코드)
1) '_' 이 앞에 붙으면 외부 사용자는 사용하지 말라는 권유의 문법이고,
a leading underscore are simply to indicate to other programmers that the attribute or method is intended to be private. However, nothing special is done with the name itself.
2) '__' 이 앞에 붙으면 private 가 되어 외부에서 사용할 수 없고, 다른 클래스 에서 사용하거나 override 할 수 없다.
it can be used to define class-private instance and class variables, methods, variables stored in globals, and even variables stored in instances. private to this class on instances of other classes.
3) __이름__ : __init__ 함수의 경우는 class 생성 시 자동으로 실행되는 생성자이다.
init 외의 __이름__ 는 그냥 함수이며 클래스 외부에서 call 할 수 있다.
3. 속성(Attribute, 클래스 내의 변수)
위 2.메서드와 동일한 특성을 가진다.
특별히 class 에서 default로 만들어진 attribute 이 있으며 각 사용법에 맞게 사용된다.
__name__ : 해당 파일이 실행된 것이면 "__main__" 이 셋팅된다.
__file__: 해당 파일의 이름
그 외에도 종류가 있을 것이므로 확인 시 추가 예정
참조 : Link
2-예시 코드
폴더 아래의 __init__.py
해당 폴더가 파이썬 package 라고 인식할 수 있게 한다.
그 폴더가 package 이기 때문에 그 안에 있는 python 파일들을 import 할 수 있다.
2. 메서드(method, 클래스 내부 함수, 가장 아래 예시 코드)
1) '_' 이 앞에 붙으면 외부 사용자는 사용하지 말라는 권유의 문법이고,
a leading underscore are simply to indicate to other programmers that the attribute or method is intended to be private. However, nothing special is done with the name itself.
2) '__' 이 앞에 붙으면 private 가 되어 외부에서 사용할 수 없고, 다른 클래스 에서 사용하거나 override 할 수 없다.
it can be used to define class-private instance and class variables, methods, variables stored in globals, and even variables stored in instances. private to this class on instances of other classes.
3) __이름__ : __init__ 함수의 경우는 class 생성 시 자동으로 실행되는 생성자이다.
init 외의 __이름__ 는 그냥 함수이며 클래스 외부에서 call 할 수 있다.
3. 속성(Attribute, 클래스 내의 변수)
위 2.메서드와 동일한 특성을 가진다.
특별히 class 에서 default로 만들어진 attribute 이 있으며 각 사용법에 맞게 사용된다.
__name__ : 해당 파일이 실행된 것이면 "__main__" 이 셋팅된다.
__file__: 해당 파일의 이름
그 외에도 종류가 있을 것이므로 확인 시 추가 예정
참조 : Link
2-예시 코드
1) 클래스 선언
class TestClass:
def __init__(self):
self.a = "a"
def __dUnderscoreBothSide__(self):
self.udb = "udb"
def __dUnderscoreOneSide(self):
self.udo = "udo"
2) 클래스 인스턴스 생성
t = TestClass()
3) attribute a 출력
t.a
'a'
4) attribute udb 출력 시 에러 확인
t.udb
AttributeError Traceback (most recent call last)
<ipython-input-4-12af1792c567> in <module>()
----> 1 t.udb
AttributeError: 'TestClass' object has no attribute 'udb'
5) attribute udo 출력 시 에러 확인
t.udo
AttributeError Traceback (most recent call last)
<ipython-input-5-89e092a247e5> in <module>()
----> 1 t.udo
AttributeError: 'TestClass' object has no attribute 'udo'
6) __dUnderscoreBothSide__ method함수 실행 확인
t.__dUnderscoreBothSide__()
7) udb attribute 출력 확인
t.udb
'udb'
8) 클래스 외부에서__dUnderscoreOneSide 실행 시 에러 확인
t.__dUnderscoreOneSide()
AttributeError Traceback (most recent call last)
<ipython-input-8-58ea9d19081f> in <module>()
----> 1 t.__dUnderscoreOneSide()
AttributeError: 'TestClass' object has no attribute '__dUnderscoreOneSide'
FILE Format List
잘 몰랐던 file format 들은 적어놓고 기억
INF 파일
의미: In computing, an INF file or Setup Information file is a plain-text file used by Microsoft Windows for the installation of software and drivers. INF files are most commonly used for installing device drivers for hardware components. Windows includes the IExpress tool for the creation of INF-based installations.
컴퓨터 분야에서, INF 파일(설치 정보 파일)은 text로 구성되어 있으며 (Microsoft) Window에서 소포트웨어나 드라이버를 설치할 때 쓰는 파일이다. device deriver를 설치할 때 주로 사용한다. Window에 있는 IExpress tool 이 INF 만들 때 쓰인다.
실행: 마우스 오른쪽 클릭하면 설치 를 선택할 수 있다.
Windows 8.1 의 경우 "디지털 서명 정보가 없습니다." 라는 경고창이 뜰 때는 설정을 바꿔 줘야 한다.
1. Windows key + i
2. 전원 버튼 클릭
3. 다시시작 클릭 + Shift key
4. 문제 해결 클릭
5. 7번 드라이버 서명안함 클릭
6. 재시작
INF 파일
의미: In computing, an INF file or Setup Information file is a plain-text file used by Microsoft Windows for the installation of software and drivers. INF files are most commonly used for installing device drivers for hardware components. Windows includes the IExpress tool for the creation of INF-based installations.
컴퓨터 분야에서, INF 파일(설치 정보 파일)은 text로 구성되어 있으며 (Microsoft) Window에서 소포트웨어나 드라이버를 설치할 때 쓰는 파일이다. device deriver를 설치할 때 주로 사용한다. Window에 있는 IExpress tool 이 INF 만들 때 쓰인다.
실행: 마우스 오른쪽 클릭하면 설치 를 선택할 수 있다.
Windows 8.1 의 경우 "디지털 서명 정보가 없습니다." 라는 경고창이 뜰 때는 설정을 바꿔 줘야 한다.
1. Windows key + i
2. 전원 버튼 클릭
3. 다시시작 클릭 + Shift key
4. 문제 해결 클릭
5. 7번 드라이버 서명안함 클릭
6. 재시작
2016년 8월 20일 토요일
Dynamic Test Scheduling in Hardware-In-theLoop Simulation of Commercial Vehicles
Hardware-In-the Loop Simulation of Commercial Vehicles
차량에 대한 HIL 시뮬레이션 자료
나의 결론은 테스트 효율화를 위해 스테이트 머신 형태로 테스트가 진행되고 있다는 것
---
ABSTRACT
Modern day commercial vehicles are controlled by various Electronic
Control Units (ECU). They are not only tested as single units, but also by
networking them in Controlled Area Network bus (CAN) to form a complete
electrical control system. This is achieved using Hardware In the Loop (HIL)
Integration Lab. In HIL, the electrical system is connected to a real time
mathematical model of the vehicle plus it’s environment so as to form a loop.
Testing functionality of the electrical system begins by defining functional
tests. An example would be testing cruise control activation. Executing each test
is made possible by parameterizing variables in the vehicle dynamic model and
externally controlling them.
HIL based Verification and Validation (V&V) is moving towards
automation.
This is because of the complexity of electrical control systems is increasing and manual V&V is time consuming. In an automated test environment, a Test Engineer develops test scripts to implement functional tests. These test scripts execute the vehicle model in real time, control parameterized variables, and observe the electrical system response. This is compared to the expected response to decide if a functional test passed or failed.
Tests are designed to remain independent of each other. Scheduling of tests is done by the Test Engineer, which is a difficult task owing to their large number and possible combinations. Hence, the normal practice is to execute tests in a predefined sequence.
To solve the test scheduling problem in Hardware In the Loop simulation,
two solutions are proposed.
Both the solutions exploit relationship between test case and state of the vehicle in a dynamic simulation environment. An example of such relationship is engaging cruise control only when vehicle speed is above 20 km/h. It can be proved that a test process that is sensitive to the simulation environment will be more realistic and hence efficient.
One solution is to model the test execution as a state machine. Tests are
treated as states. Entry conditions for each state are defined using state variables
of the dynamic model. When a simulation is run, state variables of the dynamic
model are sampled in real time. One sample of state variables trigger a transition
from one state to another in the state machine. When the state machine is in one
state, a test case corresponding to that state is selected and executed. A sequence
of these transitions results in a test process evolving in time.
The second proposed solution is functionally similar to a state machine but
it’s implementation is derived from logic design. Here, one sample of state
variables is compared with entry conditions of each test case. Test cases whose
entry conditions match with the current sample are selected for execution.
Both the solutions use Failure Mode Effective Analysis (FMEA) to resolve test selection conflicts, that is, situations where more than one test is selected.
Results show that test execution using this approach is sensitive to the simulation environment and comparable to that of a real test drive scenario. An
improvement in test efficiency both in Qualitative and Quantitative terms is also
achieved. Test runs show how the new method of test execution allows faults to
propagate from one test to another like in a real test drive.
차량에 대한 HIL 시뮬레이션 자료
나의 결론은 테스트 효율화를 위해 스테이트 머신 형태로 테스트가 진행되고 있다는 것
---
ABSTRACT
Modern day commercial vehicles are controlled by various Electronic
Control Units (ECU). They are not only tested as single units, but also by
networking them in Controlled Area Network bus (CAN) to form a complete
electrical control system. This is achieved using Hardware In the Loop (HIL)
Integration Lab. In HIL, the electrical system is connected to a real time
mathematical model of the vehicle plus it’s environment so as to form a loop.
Testing functionality of the electrical system begins by defining functional
tests. An example would be testing cruise control activation. Executing each test
is made possible by parameterizing variables in the vehicle dynamic model and
externally controlling them.
HIL based Verification and Validation (V&V) is moving towards
automation.
This is because of the complexity of electrical control systems is increasing and manual V&V is time consuming. In an automated test environment, a Test Engineer develops test scripts to implement functional tests. These test scripts execute the vehicle model in real time, control parameterized variables, and observe the electrical system response. This is compared to the expected response to decide if a functional test passed or failed.
Tests are designed to remain independent of each other. Scheduling of tests is done by the Test Engineer, which is a difficult task owing to their large number and possible combinations. Hence, the normal practice is to execute tests in a predefined sequence.
To solve the test scheduling problem in Hardware In the Loop simulation,
two solutions are proposed.
Both the solutions exploit relationship between test case and state of the vehicle in a dynamic simulation environment. An example of such relationship is engaging cruise control only when vehicle speed is above 20 km/h. It can be proved that a test process that is sensitive to the simulation environment will be more realistic and hence efficient.
One solution is to model the test execution as a state machine. Tests are
treated as states. Entry conditions for each state are defined using state variables
of the dynamic model. When a simulation is run, state variables of the dynamic
model are sampled in real time. One sample of state variables trigger a transition
from one state to another in the state machine. When the state machine is in one
state, a test case corresponding to that state is selected and executed. A sequence
of these transitions results in a test process evolving in time.
The second proposed solution is functionally similar to a state machine but
it’s implementation is derived from logic design. Here, one sample of state
variables is compared with entry conditions of each test case. Test cases whose
entry conditions match with the current sample are selected for execution.
Both the solutions use Failure Mode Effective Analysis (FMEA) to resolve test selection conflicts, that is, situations where more than one test is selected.
Results show that test execution using this approach is sensitive to the simulation environment and comparable to that of a real test drive scenario. An
improvement in test efficiency both in Qualitative and Quantitative terms is also
achieved. Test runs show how the new method of test execution allows faults to
propagate from one test to another like in a real test drive.
django 기초 강좌 수강 기록
django 기초 강좌 수강기록
1. python 설치 - anaconda 3 64 bit 설치
2. easy_install django, 최신버전 특정 버전 django==1.9
3. django-admin --version
참조 Link
4. core file 생성
5. django-admin startproject MyProjectName
6. pycham 설치 및 MyProjectName open
7. manage.py 파일은 사용하는 것이지 수정하는 것이 아니다.
8. __init__ 파일은 내용이 없으며 MyProjectName 이라는 폴더가 그냥 폴더가 아니라 python package 라는 것을 알려준다.
9. setting.py 는 웹싸이트에 필요한 것들을 설정해 놓은 것이다.
10. urls.py 웹싸이트의 내용들(contents)을 보여주는 테이블이다. 특정 url 을 연결해 준다.
11. wsgi.py 는 특별한 서버의 기능을 나타내며 긴 시간이 지난 후 배우니 신경쓰지 않아도 된다.
12. 처음에는 setting.py, urls.py 만보면 된다.
13. python manage.py runserver 를 쓰면 지금 첫 생성한 프로젝트를 서버레 올려준다.
14. 127.0.0.1:8000 에 웹브라우저로 접속하면 초기 화면을 볼 수 있다.
참조: Link
15. 서버가 돌아가고 있을 때 소스코드를 변경하여도 서버를 재시작 하는 것이 아니라 브라우저로 접속을 다시하면 업데이트 된 것을 볼 수 있다.
16. python manage.py startapp music 하면 새로운 app 이 나타난다.
- app 을 만든다. app 은 하나의 일을 하는 단위이다.
참조: Link
17. music 폴더 속의 파일 이름들을 보면 전체를 그려볼 수 있다.
18. wesite 나 소스코드 들을 database 에 hook up 하는 것이며, django 에서는 한 줄이면 된다.
19. admin.py 은 admin 권한을 이야기 한다.
20. apps.py: 이 app의 configuration을 위한 파일이다.
21. model.py: database 에 대한 blueprint 이다.
22. tests.py 는 테스트를 작성할 수 있는 공간이란 뜻이다.
23. views.py 파이썬 함수들이 있는 곳이며, 유저의 요청을 받아 들여서 그 요청한 것에 대한 결과를 다시 보여주는 것이다. 95%의 확률로 어떤 웹페이지를 요청하고 그 웹페이지를 전달해 주는 것이다.
참조: Link
24. 어떤 웹페이지를 요청하게 되면 urls.py 를 확인하게 된다.
25. 아래와 같이 쓰면 music 으로 접근했을 때 music app의 아래에 있는 urls.py 에서 어떤 동작을 할 지를 찾게 된다.
28. 데이터 베이스를 만들려고 한다. 그러기 위해 django 에서 중요한 내용을 습득해야 한다.
29. django project를 만들면 default로 sqlite db 가 만들어진다.
30. 이것은 setting file의 77라인에 DATABASES 라는 구조로 만들어져 있다.
31. django 는 mysql 이나 XX 등 어떤 database 나 쓸 수 있지만 기본으로 되느 sqlite3 는 어려움 없이 사용할 수 있어서 테스트에 최적이다.
32. 기본으로 아래 APP 들이 설치되어 있다. 이 앱들은 데이터 베이스에 접근해야 동작하는 것들이 있다. 하지만 migration 이 되어있지 않아 앱이 제대로 실행되지 않은 상태이다.
34. 콘솔에서 python manage.py migrate 누르면 싱크가 된다.
35. 각 앱이 실행하기 위한 테이블이 데이터베이스에 있고 앱과 데이터베이스가 싱크가 된 것이다.
36. 싱크한 후 python manage.py runserver 하면 이번에는 no issue 라고 뜬다.
참조: Link
37. 이제는 Model 을 만들려고 한다. Model 은 저장할 데이터에 대한 blueprint 이다.
38. 코드와 데이터베이스의 셋팅은 따로 떨어져 있지 않다. Model.py 에서 한번에 할 수 있다.
39. Model.py 파일에서 class 를 만들면 자동으로 데이터베이스 테이블로 만들어 준다.
40. 각 데이터끼리는 연결해 주고, 포함관계에 따라 지워질 수 있다.
41. 새로 만든 앱은 setting.py 에서 추가해 준다.
43. migration 이라는 말은 데이터 베이스에 적용시킨다는 것이다.
44. python manage.py migrate 하면 적용 완료 시켜준다.
참조: Link
45. python manage.py shell 을 구동시켜서 데이터베이스에 데이터를 저장할 수 있다.
참조: Link
46. object를 읽을 때 __str__ 함수를 사용해서 object 가 아닌 문자열을 리턴할 수 있다.
47. filter 를 써서 필요한 정보만 읽을 수 있다.
참조: Link
48. python manage.py createsuperuser 를 하면 admin 계정을 만들 수 있다.
49. Music 폴더의 admin.py 에 Album 정보를 넣으면 admin.site.register(Album) 을 적으면 된다.
참조: Link
50. view 는 간단한 함수로서 html 을 리턴해 주는 것이다.
51. urls.py 에서 어떤 정규식과 같은 url이 불리면 views.py 의 특정 함수가 불리게 되고 그 함수의 return 값이 html 이다.
참조: Link
52. 가지고 있는 Album 정보를 모두 페이지에 디스플레이 하려고 한다.
53. views.py 에서 music page 를 보여주는 index 함수를 수정한다.
54. 아래와 같이 database 의 정보를 all_albums 라는 변수로 연결시켜 준다.
56. 데이터 베이스의 내용을 가지고 웹페이지에 쓰는 것 까진 했지만 웹페이지가 투박해서 꾸며야 한다.
57. template 를 만드는 방법을 생각해야 한다.
58. music 폴더에서 template 이라는 자식 폴더를 만들고, 그 자식으로 music 폴더를 만든다.
59. 그 안에 index 라는 이름의 html 파일을 만든다.
60. 아래와 같이 연결하면 자동으로 template 폴더의 내용물을 찾는다.
62. python 에서 있던 내용을 context 라고 하는 dictionary 로 만들어서 render 할 때 인자로 넣어주면 된다.
63. html template 안에 python 코드를 넣으면 된다. 넣는 방법은 {% 여기에 넣는 것 %} 이다. 그 때 html 속에서 사용되는 변수는 {{ 이것으로 둘러 쌓인다 }}
64. html 속에서 python if 문을 아래와 같이 쓸 수 있다.
참조: Link
65. django.shortcut 을 쓰면 경로를 단축시킬 수 있다(예를 들어 template.render -> render)
참조: Link
66. 앨범이 있는 것 없는 것 확인하여 없으면 404 에러를 띄울 수 있게 한다.
참조: 16 - Raising a 404 HTTP Error
참조: 17 - Adding Songs to our Database
참조: 18 - Related Objects Set
참조: 19 - Designing the Details Template
XX. url 구조를 dynamic 하게 만드는 법
참조: 20 - Removing Hardcoded URLs
참조: 21 - Namespace and HTTP 404 Shortcut
참조: 22 - Simple Form
참조: 23 - Adding Forms to the Template
참조: 24 - Favorite View Function
참조: 25 - Bootstrap and Static Files
참조:
참조:
참조:
참조:
참조:
참조:
1. python 설치 - anaconda 3 64 bit 설치
2. easy_install django, 최신버전 특정 버전 django==1.9
3. django-admin --version
참조 Link
4. core file 생성
5. django-admin startproject MyProjectName
6. pycham 설치 및 MyProjectName open
7. manage.py 파일은 사용하는 것이지 수정하는 것이 아니다.
8. __init__ 파일은 내용이 없으며 MyProjectName 이라는 폴더가 그냥 폴더가 아니라 python package 라는 것을 알려준다.
9. setting.py 는 웹싸이트에 필요한 것들을 설정해 놓은 것이다.
10. urls.py 웹싸이트의 내용들(contents)을 보여주는 테이블이다. 특정 url 을 연결해 준다.
11. wsgi.py 는 특별한 서버의 기능을 나타내며 긴 시간이 지난 후 배우니 신경쓰지 않아도 된다.
12. 처음에는 setting.py, urls.py 만보면 된다.
13. python manage.py runserver 를 쓰면 지금 첫 생성한 프로젝트를 서버레 올려준다.
14. 127.0.0.1:8000 에 웹브라우저로 접속하면 초기 화면을 볼 수 있다.
참조: Link
15. 서버가 돌아가고 있을 때 소스코드를 변경하여도 서버를 재시작 하는 것이 아니라 브라우저로 접속을 다시하면 업데이트 된 것을 볼 수 있다.
16. python manage.py startapp music 하면 새로운 app 이 나타난다.
- app 을 만든다. app 은 하나의 일을 하는 단위이다.
참조: Link
17. music 폴더 속의 파일 이름들을 보면 전체를 그려볼 수 있다.
18. wesite 나 소스코드 들을 database 에 hook up 하는 것이며, django 에서는 한 줄이면 된다.
19. admin.py 은 admin 권한을 이야기 한다.
20. apps.py: 이 app의 configuration을 위한 파일이다.
21. model.py: database 에 대한 blueprint 이다.
22. tests.py 는 테스트를 작성할 수 있는 공간이란 뜻이다.
23. views.py 파이썬 함수들이 있는 곳이며, 유저의 요청을 받아 들여서 그 요청한 것에 대한 결과를 다시 보여주는 것이다. 95%의 확률로 어떤 웹페이지를 요청하고 그 웹페이지를 전달해 주는 것이다.
참조: Link
24. 어떤 웹페이지를 요청하게 되면 urls.py 를 확인하게 된다.
25. 아래와 같이 쓰면 music 으로 접근했을 때 music app의 아래에 있는 urls.py 에서 어떤 동작을 할 지를 찾게 된다.
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^music/', include('music.urls')), ]
26. music app urls.py 파일에서는 아래와 같이 해당 regular expression 일 대 view.py 에 선언되어 있는 index 함수를 부르게 된다.
참조: Linkurlpatterns = [ url(r'^$', views.index), ]27. index 함수는 "This is the music app homepage" 문장을 리턴해 주는 Http 문장이므로 이를 웹브라우저에 보여준다.def index(request): return HttpResponse("<h1>This is the music app homepage")
28. 데이터 베이스를 만들려고 한다. 그러기 위해 django 에서 중요한 내용을 습득해야 한다.
29. django project를 만들면 default로 sqlite db 가 만들어진다.
30. 이것은 setting file의 77라인에 DATABASES 라는 구조로 만들어져 있다.
31. django 는 mysql 이나 XX 등 어떤 database 나 쓸 수 있지만 기본으로 되느 sqlite3 는 어려움 없이 사용할 수 있어서 테스트에 최적이다.
32. 기본으로 아래 APP 들이 설치되어 있다. 이 앱들은 데이터 베이스에 접근해야 동작하는 것들이 있다. 하지만 migration 이 되어있지 않아 앱이 제대로 실행되지 않은 상태이다.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',]33. 데이터베이스와 싱크가 맞지 않아서 벌어지는 것이다.
34. 콘솔에서 python manage.py migrate 누르면 싱크가 된다.
35. 각 앱이 실행하기 위한 테이블이 데이터베이스에 있고 앱과 데이터베이스가 싱크가 된 것이다.
36. 싱크한 후 python manage.py runserver 하면 이번에는 no issue 라고 뜬다.
참조: Link
37. 이제는 Model 을 만들려고 한다. Model 은 저장할 데이터에 대한 blueprint 이다.
38. 코드와 데이터베이스의 셋팅은 따로 떨어져 있지 않다. Model.py 에서 한번에 할 수 있다.
39. Model.py 파일에서 class 를 만들면 자동으로 데이터베이스 테이블로 만들어 준다.
40. 각 데이터끼리는 연결해 주고, 포함관계에 따라 지워질 수 있다.
class Album(models.Model): # 이것들은 컬럼 artist = models.CharField(max_length=250) album_title = models.CharField(max_length=500) genre = models.CharField(max_length=100) album_logo = models.CharField(max_length=1000) class Song(models.Model): # 앨범을 지우면 그 앨범에 연결된 곡은 같이 지워진다. album = models.foreinKey(Album, on_delete=models.CASCADE) file_type = models.CharField(max_length=10) song_title = models.CharField(max_length=250)참조: Link
41. 새로 만든 앱은 setting.py 에서 추가해 준다.
INSTALLED_APPS = [ 'music.apps.MusicConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',]42. models.py 에서 class 생성한 것을 데이터베이스에 연결 시키려면 python manage.py makemigrations music 이라고 명령을 주어야 한다.
43. migration 이라는 말은 데이터 베이스에 적용시킨다는 것이다.
44. python manage.py migrate 하면 적용 완료 시켜준다.
참조: Link
45. python manage.py shell 을 구동시켜서 데이터베이스에 데이터를 저장할 수 있다.
참조: Link
46. object를 읽을 때 __str__ 함수를 사용해서 object 가 아닌 문자열을 리턴할 수 있다.
47. filter 를 써서 필요한 정보만 읽을 수 있다.
참조: Link
48. python manage.py createsuperuser 를 하면 admin 계정을 만들 수 있다.
49. Music 폴더의 admin.py 에 Album 정보를 넣으면 admin.site.register(Album) 을 적으면 된다.
참조: Link
50. view 는 간단한 함수로서 html 을 리턴해 주는 것이다.
51. urls.py 에서 어떤 정규식과 같은 url이 불리면 views.py 의 특정 함수가 불리게 되고 그 함수의 return 값이 html 이다.
참조: Link
52. 가지고 있는 Album 정보를 모두 페이지에 디스플레이 하려고 한다.
53. views.py 에서 music page 를 보여주는 index 함수를 수정한다.
54. 아래와 같이 database 의 정보를 all_albums 라는 변수로 연결시켜 준다.
all_albums = Album.objects.all()
55. album 의 각 정보를 loop 돌면서 출력해 주면 music 페이지에서 해당 리스트를 볼 수 있다.def index(request): all_albums = Album.objects.all() html = '' for album in all_albums: url = '/music/' + str(album.id) + '/' html += '<a href="' + url + '">' + album.album_title + '</a><br>' return HttpResponse(html)참조: Link
56. 데이터 베이스의 내용을 가지고 웹페이지에 쓰는 것 까진 했지만 웹페이지가 투박해서 꾸며야 한다.
57. template 를 만드는 방법을 생각해야 한다.
58. music 폴더에서 template 이라는 자식 폴더를 만들고, 그 자식으로 music 폴더를 만든다.
59. 그 안에 index 라는 이름의 html 파일을 만든다.
60. 아래와 같이 연결하면 자동으로 template 폴더의 내용물을 찾는다.
template = loader.get.get_template('music/index.html')61. template 를 load 한 다음 내용을 render 하면 된다.
62. python 에서 있던 내용을 context 라고 하는 dictionary 로 만들어서 render 할 때 인자로 넣어주면 된다.
63. html template 안에 python 코드를 넣으면 된다. 넣는 방법은 {% 여기에 넣는 것 %} 이다. 그 때 html 속에서 사용되는 변수는 {{ 이것으로 둘러 쌓인다 }}
64. html 속에서 python if 문을 아래와 같이 쓸 수 있다.
참조: Link
65. django.shortcut 을 쓰면 경로를 단축시킬 수 있다(예를 들어 template.render -> render)
참조: Link
66. 앨범이 있는 것 없는 것 확인하여 없으면 404 에러를 띄울 수 있게 한다.
참조: 16 - Raising a 404 HTTP Error
참조: 17 - Adding Songs to our Database
참조: 18 - Related Objects Set
참조: 19 - Designing the Details Template
XX. url 구조를 dynamic 하게 만드는 법
참조: 20 - Removing Hardcoded URLs
참조: 21 - Namespace and HTTP 404 Shortcut
참조: 22 - Simple Form
참조: 23 - Adding Forms to the Template
참조: 24 - Favorite View Function
참조: 25 - Bootstrap and Static Files
참조:
참조:
참조:
참조:
참조:
참조:
2016년 8월 15일 월요일
PyCon APAC 2016 후기 - 이정우
개요
1. 어떤 프로그램을 들었는지
2. 후원사 부스 특이사항
3. 파이콘에서 느낀 것
1. 어떤 프로그램을 들었는지
- (1일)Wes McKinney 키노트 : 우리나라에 Pandas를 만든 사람이 왔다는 것 자체가 신기했습니다. Pandas 만든 사람이니 기본 내용보다 변경된 내용 알려줄 텐데 그것을 이해하려고 하면 머리가 아프겠다고 생각하고 집중하지 못했습니다.
- (1일)나의 사진은 내가 지난 과거에 한 일을 알고 있다-최규민님: 사진에 있는 정보를 뽑아내고, 그 정보들을 조합해서 결과를 보여주는 것인데 실제로 해보고 싶다는 생각이 들었습니다. 많은 정보들을 보여주셨는데 그 중 집중 한 것은 이동한 경로를 사진의 위치 데이터 바탕으로 지도상에 찍어 준 것과, 사진 속 얼굴을 인식하여 얼마나 즐거웠는지 판단한 것 입니다. 직접 구현해보고 싶어 간단하게 진행(블로그링크) 하고 있습니다.
- (1일)Introduction to deep learning for machine vision tasks using Keras-Michael Amy: Machine learning을 해야 하는데 몇번 시도해본 결과 머리가 아팠던 기억이 있어 이해는 미뤄두고 듣기만 했습니다..
- (1일)뉴스를 재미있게 만드는 방법; 뉴스잼-김경훈님: 뉴스를 재미있게 보여주기 위해서 필요한 작업을 수집, 분석, 전달 로 나누고 각 세부적인 작업들에서 사용한 정말 다양한 라이브러리를 소개해 주셨습니다. 방대한 내용을 차근차근 설명해주시는 모습을 보고 회사 선배님이었으면 좋겠다라고 생각 했습니다;
- (1일)The PSF and our community-김영근님: Python 의 김영근님이 커뮤니티를 어떻게 시작했고 어떤 마음으로 하고 있다는 것을 설명, 운영하는 분들의 노고를 많이 느낄 수 있었습니다.
- (1일)기계학습을 활용한 게임 어뷰징 검출-김정주님: 게임중 채팅창에 광고하는 어뷰징 프로그램을 감지하는 방법에 대한 고민하고, 기계학습을 사용해서 100% 검출을 할 수 있었다는 내용이었습니다. 역시 분석 할 데이터가 있고, 그 효과를 바로 느낄 수 있는 것이 가장 중요하다고 느꼈습니다. 게임에서는 채팅창이 도배되면 유저들이 대화를 못하고, 게임도 하기 싫어질 테니까요..
- (2일)Django vs Flask, 까봅시다!-김도현님: Django 와 Flask 를 둘다 써본 사람으로써 어떤 장 단점이 있다고 느낀것을 공유해 주셨습니다. 1) Django는 암시적이지만 기능이 많고, Flask는 명시적이지만 기능이 적다. 2) Flask 가 간결하지만 구현 방법이 다양해서 초보자가 따라가기에 힘들다. 3) Django 구현방법이 사람마다 편차가 적어 초보자가 하는 것이 적당하다.
- (2일)Python으로 19대 국회 뽀개기-이홍주님: 머신러닝을 할 때는 attribute들을 vector로 만드는 작업(featurization)이 가장 중요하다.
- (2일)Debugging Tips and Tricks-Roy Hyunjin Han: 8가지 debug 하는 방법을 보여주었습니다. 제가 평소 사용하지 않는 디버깅 기술들을 빠르고 명확하게 끊김없이 하셔서 멋있어 보였습니다. 8가지 중 Jupyer notebook 에서 에러 발생 시 창에 'debug' 를 쓰면 바로 debug 모드로 들어가는 것이 이해도 잘 되고 바로 사용할 것 같았습니다. 세션이 끝나고 insight 를 얻고 싶어 뛰어나지 않은 개발자로서 할만 하고, 요즘 가장 hot 한 것이 무엇이 있냐고 물었는데 www.openai.com 싸이트를 소개시켜 주었습니다. 머신러닝 중 reinforcement 에 관련된 것이었습니다.
2. 후원사 부스 특이사항
JetBrain: PyCharm을 만드는 회사로 대기열이 가장 길었는데, JetBrain에 등록을 하면 추첨을 해서 PyCharm Pro 버전을 무료로 주기 때문이었습니다. 하지만 그 내용에 대한 공지가 따로 없었기 때문에 (저를 포함)많은 사람들이 제일 좋은 것을 준다고 생각해서 줄을 서 있었고, JetBrain Member에게 문의하니 몇명이 등록하는지 마지막날까지 확인해서 내부적으로 결정할 것이라고 결정된 것은 없다고 확인하였습니다.
SmartStudy: 사진을 셀카포함 거의 안찍었는데 facebook에 셀카 찍어서 #PyConAPAC, #SmartStudy 공유하면 bottle 준다고 해서 찍음, 그 사진이 남아서 다행입니다.
Elastic: Twitter 에 태그 남기면 Stress ball 을 주셨습니다. 개인적으로 건강에 관련된 아이템을 좋아해서 기분 좋았습니다.
3. 파이콘에서 느낀 것
이렇게 수준높은 컨퍼런스를 5만원 내고 3일 동안 즐길 수 있어서 행운이었습니다.
봉사하는 분들은 정말 세션 내용들을 못드는 것을 보고 죄송한 마음이 들었습니다..
세션들을 듣는다고 해도 그 내용을 정말 기억하고 이해해서 내 업무에 쓰기는 정말 어렵다는 것을 느꼈고, 그래서 생각한 것은, 들었던 내용을 토론 형식으로 꾸준히 리뷰하면 각자 자기 수준을 뛰어넘는 인싸이트를 얻을 수 있을 것 같다는 것입니다.
피드 구독하기:
글 (Atom)