Historie 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- historie-0.1.0/Historie.egg-info/PKG-INFO +292 -0
- historie-0.1.0/Historie.egg-info/SOURCES.txt +18 -0
- historie-0.1.0/Historie.egg-info/dependency_links.txt +1 -0
- historie-0.1.0/Historie.egg-info/entry_points.txt +2 -0
- historie-0.1.0/Historie.egg-info/requires.txt +2 -0
- historie-0.1.0/Historie.egg-info/top_level.txt +1 -0
- historie-0.1.0/PKG-INFO +292 -0
- historie-0.1.0/historie/__init__.py +1 -0
- historie-0.1.0/historie/__main__.py +5 -0
- historie-0.1.0/historie/cli.py +66 -0
- historie-0.1.0/historie/directives.py +447 -0
- historie-0.1.0/historie/exporters.py +32 -0
- historie-0.1.0/historie/html_writer.py +61 -0
- historie-0.1.0/historie/static/default_favicon.svg +5 -0
- historie-0.1.0/historie/static/style.css +416 -0
- historie-0.1.0/historie/tests.py +733 -0
- historie-0.1.0/historie/utility.py +148 -0
- historie-0.1.0/pyproject.toml +119 -0
- historie-0.1.0/readme.rst +269 -0
- historie-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Historie
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Structured reStructuredText-based résumé format for developers
|
|
5
|
+
Author-email: saaj <mail@saaj.me>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://heptapod.host/saajns/historie
|
|
8
|
+
Keywords: résumé,developer-story,curriculum-vitae,cv,restructuredtext
|
|
9
|
+
Classifier: Topic :: Text Processing :: Markup :: reStructuredText
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
17
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
|
+
Classifier: Intended Audience :: Developers
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Description-Content-Type: text/x-rst
|
|
21
|
+
Requires-Dist: docutils<0.24,>=0.23
|
|
22
|
+
Requires-Dist: weasyprint<65,>=62
|
|
23
|
+
|
|
24
|
+
.. image:: https://img.shields.io/pypi/l/Historie.svg
|
|
25
|
+
:target: https://spdx.org/licenses/GPL-3.0-only.html
|
|
26
|
+
:alt: PyPI - License
|
|
27
|
+
.. image::
|
|
28
|
+
https://img.shields.io/gitlab/pipeline-status/saajns%2Fhistorie
|
|
29
|
+
?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
|
|
30
|
+
:target: https://heptapod.host/saajns/historie/-/commits/branch/default
|
|
31
|
+
:alt: Pipeline status
|
|
32
|
+
.. image::
|
|
33
|
+
https://img.shields.io/gitlab/pipeline-coverage/saajns%2Fhistorie
|
|
34
|
+
?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
|
|
35
|
+
:target: https://saajns.heptapod.io/historie/htmlcov/?badge=coverage
|
|
36
|
+
:alt: Test code coverage
|
|
37
|
+
.. image:: https://badge.fury.io/py/Historie.svg
|
|
38
|
+
:target: https://pypi.python.org/pypi/Historie
|
|
39
|
+
:alt: PyPI
|
|
40
|
+
|
|
41
|
+
********
|
|
42
|
+
Historie
|
|
43
|
+
********
|
|
44
|
+
Historie is a résumé management tool, comprised by a reStructuredText-based DSL
|
|
45
|
+
and an exporter to a number of publishing formats (HTML and PDF). Structured,
|
|
46
|
+
timeline-centric representation is inspired by the StackOverflow Developer
|
|
47
|
+
Story that was shut down [1]_ (and was attempted to be revived recently).
|
|
48
|
+
|
|
49
|
+
Install
|
|
50
|
+
=======
|
|
51
|
+
Install with::
|
|
52
|
+
|
|
53
|
+
pipx install Historie
|
|
54
|
+
|
|
55
|
+
DSL
|
|
56
|
+
===
|
|
57
|
+
Adds the following reStructuredText directives [2]_ each usually having a
|
|
58
|
+
number of arguments:
|
|
59
|
+
|
|
60
|
+
1. ``his-contacts``
|
|
61
|
+
|
|
62
|
+
- ``name``
|
|
63
|
+
- ``title``
|
|
64
|
+
- ``location``
|
|
65
|
+
- ``email``
|
|
66
|
+
|
|
67
|
+
Example:
|
|
68
|
+
|
|
69
|
+
.. code:: restructuredtext
|
|
70
|
+
|
|
71
|
+
.. his-contacts::
|
|
72
|
+
:name: Robert C. Martin
|
|
73
|
+
:title: Software Craftsman & Clean Code Evangelist
|
|
74
|
+
:location: Chicago, Illinois, USA
|
|
75
|
+
:email: uncle.bob@cleancoders.com
|
|
76
|
+
|
|
77
|
+
2. ``his-links``
|
|
78
|
+
|
|
79
|
+
This directive has no argument, but uses a definition list to allow
|
|
80
|
+
annotated links, for example:
|
|
81
|
+
|
|
82
|
+
.. code:: restructuredtext
|
|
83
|
+
|
|
84
|
+
.. his-links::
|
|
85
|
+
|
|
86
|
+
Clean Coders
|
|
87
|
+
https://cleancoders.com/
|
|
88
|
+
|
|
89
|
+
The Clean Code Blog
|
|
90
|
+
https://blog.cleancoder.com/
|
|
91
|
+
|
|
92
|
+
GitHub
|
|
93
|
+
https://github.com/unclebob
|
|
94
|
+
|
|
95
|
+
3. ``his-stack-exchange-profiles``
|
|
96
|
+
|
|
97
|
+
- ``stackoverflow``
|
|
98
|
+
- ``serverfault``
|
|
99
|
+
- ``superuser``
|
|
100
|
+
- ``askubuntu``
|
|
101
|
+
- ``unix``
|
|
102
|
+
- ``dba``
|
|
103
|
+
- ``softwareengineering``
|
|
104
|
+
|
|
105
|
+
Example:
|
|
106
|
+
|
|
107
|
+
.. code:: restructuredtext
|
|
108
|
+
|
|
109
|
+
.. his-stack-exchange-profiles::
|
|
110
|
+
:stackoverflow: 73476
|
|
111
|
+
|
|
112
|
+
4. ``his-technology-preference``
|
|
113
|
+
|
|
114
|
+
- ``desired``
|
|
115
|
+
- ``undesired``
|
|
116
|
+
|
|
117
|
+
Example:
|
|
118
|
+
|
|
119
|
+
.. code:: restructuredtext
|
|
120
|
+
|
|
121
|
+
.. his-technology-preference::
|
|
122
|
+
:desired:
|
|
123
|
+
clean-code, solid-principles, tdd, craftsmanship, agile,
|
|
124
|
+
refactoring, design-patterns, clojure, java, architecture
|
|
125
|
+
:undesired:
|
|
126
|
+
big-design-up-front, waterfall, code-comments,
|
|
127
|
+
null-references, singletons, service-locators
|
|
128
|
+
|
|
129
|
+
5. ``his-summary``
|
|
130
|
+
|
|
131
|
+
This directive only has content, for example:
|
|
132
|
+
|
|
133
|
+
.. code:: restructuredtext
|
|
134
|
+
|
|
135
|
+
.. his-summary::
|
|
136
|
+
|
|
137
|
+
Software professional since 1970. Author of foundational texts on
|
|
138
|
+
clean code, agile development, and software craftsmanship. Original
|
|
139
|
+
signatory of the Agile Manifesto. Firm believer that the only way
|
|
140
|
+
to go fast is to go well.
|
|
141
|
+
|
|
142
|
+
6. ``his-job``
|
|
143
|
+
|
|
144
|
+
- ``company-name``
|
|
145
|
+
- ``company-website``
|
|
146
|
+
- ``role``
|
|
147
|
+
- ``start``
|
|
148
|
+
- ``finish``
|
|
149
|
+
- ``technology``
|
|
150
|
+
|
|
151
|
+
Examples:
|
|
152
|
+
|
|
153
|
+
.. code:: restructuredtext
|
|
154
|
+
|
|
155
|
+
.. his-job::
|
|
156
|
+
:company-name: Clean Coders
|
|
157
|
+
:company-website: https://cleancoders.com/
|
|
158
|
+
:role: Founder & Head Craftsman
|
|
159
|
+
:start: 2010-01-01
|
|
160
|
+
:technology:
|
|
161
|
+
video-production, education, clean-code, tdd,
|
|
162
|
+
solid-principles, refactoring, clojure
|
|
163
|
+
|
|
164
|
+
Founded educational platform delivering video training on software
|
|
165
|
+
craftsmanship. Produced 60+ hours of content covering clean code,
|
|
166
|
+
TDD, SOLID principles, and functional programming. Reached hundreds
|
|
167
|
+
of thousands of developers worldwide.
|
|
168
|
+
|
|
169
|
+
.. his-job::
|
|
170
|
+
:company-name: Object Mentor
|
|
171
|
+
:company-website: https://web.archive.org/web/20070913061205/https://www.objectmentor.com/
|
|
172
|
+
:role: Founder & President
|
|
173
|
+
:start: 1990-01-01
|
|
174
|
+
:finish: 2009-12-31
|
|
175
|
+
:technology:
|
|
176
|
+
consulting, training, agile, xp, tdd, oop,
|
|
177
|
+
design-patterns, c++, java
|
|
178
|
+
|
|
179
|
+
Built premier consulting firm for agile transformation and technical
|
|
180
|
+
training. Trained Fortune 500 companies in XP, TDD, and OOP. Authored
|
|
181
|
+
company's flagship course curricula. Helped establish agile practices
|
|
182
|
+
in enterprise software development.
|
|
183
|
+
|
|
184
|
+
.. his-job::
|
|
185
|
+
:company-name: Teradyne
|
|
186
|
+
:company-website: https://teradyne.com/
|
|
187
|
+
:role: Software Engineer
|
|
188
|
+
:start: 1970-01-01
|
|
189
|
+
:finish: 1989-12-31
|
|
190
|
+
:technology:
|
|
191
|
+
assembly, c, c++, embedded-systems, real-time,
|
|
192
|
+
telecommunications, testing-equipment
|
|
193
|
+
|
|
194
|
+
Cut teeth on PDP-8 and PDP-11 assembly. Developed embedded systems
|
|
195
|
+
for automated testing equipment. Learned that the hard way is the
|
|
196
|
+
slow way, and discipline is the path to speed. Discovered that
|
|
197
|
+
debugging time dwarfs coding time unless you write tests first.
|
|
198
|
+
|
|
199
|
+
7. ``his-project``
|
|
200
|
+
|
|
201
|
+
- ``name``
|
|
202
|
+
- ``url``
|
|
203
|
+
- ``start``
|
|
204
|
+
- ``finish``
|
|
205
|
+
- ``technology``
|
|
206
|
+
|
|
207
|
+
Examples:
|
|
208
|
+
|
|
209
|
+
.. code:: restructuredtext
|
|
210
|
+
|
|
211
|
+
.. his-project::
|
|
212
|
+
:name: FitNesse
|
|
213
|
+
:url: https://github.com/unclebob/fitnesse
|
|
214
|
+
:start: 2002-01-01
|
|
215
|
+
:technology: java, acceptance-testing, wiki, collaboration
|
|
216
|
+
|
|
217
|
+
Fully integrated standalone wiki and acceptance testing framework.
|
|
218
|
+
Enables customers, testers, and programmers to collaborate on
|
|
219
|
+
software requirements through executable specifications. Because
|
|
220
|
+
the best documentation is documentation that runs.
|
|
221
|
+
|
|
222
|
+
.. his-project::
|
|
223
|
+
:name: Clean Code (The Book)
|
|
224
|
+
:url: https://www.oreilly.com/library/view/clean-code-a/9780136083238/
|
|
225
|
+
:start: 2007-01-01
|
|
226
|
+
:finish: 2008-08-01
|
|
227
|
+
:technology: java, craftsmanship, refactoring, naming, functions
|
|
228
|
+
|
|
229
|
+
A Handbook of Agile Software Craftsmanship. Distilled decades of
|
|
230
|
+
experience into principles, patterns, and practices for writing
|
|
231
|
+
code that works and reads well. Over 1 million copies sold.
|
|
232
|
+
Translated into dozens of languages. Still sparking debates about
|
|
233
|
+
function length.
|
|
234
|
+
|
|
235
|
+
.. his-project::
|
|
236
|
+
:name: The Agile Manifesto
|
|
237
|
+
:url: https://agilemanifesto.org/
|
|
238
|
+
:start: 2001-02-11
|
|
239
|
+
:technology: agile, collaboration, methodology, values
|
|
240
|
+
|
|
241
|
+
Co-authored with 16 other signatories at Snowbird ski resort.
|
|
242
|
+
Four values, twelve principles, infinite interpretations.
|
|
243
|
+
Revolutionized software development industry. Occasionally
|
|
244
|
+
misunderstood by management consultants selling certifications.
|
|
245
|
+
|
|
246
|
+
8. ``his-education``
|
|
247
|
+
|
|
248
|
+
- ``institution``
|
|
249
|
+
- ``institution-website``
|
|
250
|
+
- ``degree``
|
|
251
|
+
- ``start``
|
|
252
|
+
- ``finish``
|
|
253
|
+
- ``technology``
|
|
254
|
+
|
|
255
|
+
Example:
|
|
256
|
+
|
|
257
|
+
.. code:: restructuredtext
|
|
258
|
+
|
|
259
|
+
.. his-education::
|
|
260
|
+
:institution: Self-taught
|
|
261
|
+
:start: 1970-01-01
|
|
262
|
+
:technology: assembly, fortran, cobol, algorithms, data-structures
|
|
263
|
+
|
|
264
|
+
Began programming professionally in 1970 on PDP-8 and PDP-11
|
|
265
|
+
systems. Learned through hands-on experience, reading, and
|
|
266
|
+
mentorship. Proof that mastery comes from dedication and
|
|
267
|
+
deliberate practice, not just formal credentials.
|
|
268
|
+
|
|
269
|
+
CLI
|
|
270
|
+
===
|
|
271
|
+
::
|
|
272
|
+
|
|
273
|
+
$ historie --help
|
|
274
|
+
usage: historie [-h] [--logging-level LOGGING_LEVEL] [-f {html,pdf}] [-o OUTPUT] input
|
|
275
|
+
|
|
276
|
+
Generate a résumé in a publish format from reStructuredText.
|
|
277
|
+
|
|
278
|
+
positional arguments:
|
|
279
|
+
input Input reStructuredText file
|
|
280
|
+
|
|
281
|
+
options:
|
|
282
|
+
-h, --help show this help message and exit
|
|
283
|
+
--logging-level LOGGING_LEVEL
|
|
284
|
+
Logging level. By default: INFO.
|
|
285
|
+
-f, --format {html,pdf}
|
|
286
|
+
Output format. By default: html.
|
|
287
|
+
-o, --output OUTPUT Output file: By default ".rst" is appended to input.
|
|
288
|
+
|
|
289
|
+
____
|
|
290
|
+
|
|
291
|
+
.. [1] https://meta.stackoverflow.com/questions/415293/sunsetting-jobs-developer-story
|
|
292
|
+
.. [2] https://docutils.sourceforge.io/docs/ref/rst/directives.html
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
pyproject.toml
|
|
2
|
+
readme.rst
|
|
3
|
+
Historie.egg-info/PKG-INFO
|
|
4
|
+
Historie.egg-info/SOURCES.txt
|
|
5
|
+
Historie.egg-info/dependency_links.txt
|
|
6
|
+
Historie.egg-info/entry_points.txt
|
|
7
|
+
Historie.egg-info/requires.txt
|
|
8
|
+
Historie.egg-info/top_level.txt
|
|
9
|
+
historie/__init__.py
|
|
10
|
+
historie/__main__.py
|
|
11
|
+
historie/cli.py
|
|
12
|
+
historie/directives.py
|
|
13
|
+
historie/exporters.py
|
|
14
|
+
historie/html_writer.py
|
|
15
|
+
historie/tests.py
|
|
16
|
+
historie/utility.py
|
|
17
|
+
historie/static/default_favicon.svg
|
|
18
|
+
historie/static/style.css
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
historie
|
historie-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Historie
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Structured reStructuredText-based résumé format for developers
|
|
5
|
+
Author-email: saaj <mail@saaj.me>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://heptapod.host/saajns/historie
|
|
8
|
+
Keywords: résumé,developer-story,curriculum-vitae,cv,restructuredtext
|
|
9
|
+
Classifier: Topic :: Text Processing :: Markup :: reStructuredText
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
17
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
18
|
+
Classifier: Intended Audience :: Developers
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Description-Content-Type: text/x-rst
|
|
21
|
+
Requires-Dist: docutils<0.24,>=0.23
|
|
22
|
+
Requires-Dist: weasyprint<65,>=62
|
|
23
|
+
|
|
24
|
+
.. image:: https://img.shields.io/pypi/l/Historie.svg
|
|
25
|
+
:target: https://spdx.org/licenses/GPL-3.0-only.html
|
|
26
|
+
:alt: PyPI - License
|
|
27
|
+
.. image::
|
|
28
|
+
https://img.shields.io/gitlab/pipeline-status/saajns%2Fhistorie
|
|
29
|
+
?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
|
|
30
|
+
:target: https://heptapod.host/saajns/historie/-/commits/branch/default
|
|
31
|
+
:alt: Pipeline status
|
|
32
|
+
.. image::
|
|
33
|
+
https://img.shields.io/gitlab/pipeline-coverage/saajns%2Fhistorie
|
|
34
|
+
?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
|
|
35
|
+
:target: https://saajns.heptapod.io/historie/htmlcov/?badge=coverage
|
|
36
|
+
:alt: Test code coverage
|
|
37
|
+
.. image:: https://badge.fury.io/py/Historie.svg
|
|
38
|
+
:target: https://pypi.python.org/pypi/Historie
|
|
39
|
+
:alt: PyPI
|
|
40
|
+
|
|
41
|
+
********
|
|
42
|
+
Historie
|
|
43
|
+
********
|
|
44
|
+
Historie is a résumé management tool, comprised by a reStructuredText-based DSL
|
|
45
|
+
and an exporter to a number of publishing formats (HTML and PDF). Structured,
|
|
46
|
+
timeline-centric representation is inspired by the StackOverflow Developer
|
|
47
|
+
Story that was shut down [1]_ (and was attempted to be revived recently).
|
|
48
|
+
|
|
49
|
+
Install
|
|
50
|
+
=======
|
|
51
|
+
Install with::
|
|
52
|
+
|
|
53
|
+
pipx install Historie
|
|
54
|
+
|
|
55
|
+
DSL
|
|
56
|
+
===
|
|
57
|
+
Adds the following reStructuredText directives [2]_ each usually having a
|
|
58
|
+
number of arguments:
|
|
59
|
+
|
|
60
|
+
1. ``his-contacts``
|
|
61
|
+
|
|
62
|
+
- ``name``
|
|
63
|
+
- ``title``
|
|
64
|
+
- ``location``
|
|
65
|
+
- ``email``
|
|
66
|
+
|
|
67
|
+
Example:
|
|
68
|
+
|
|
69
|
+
.. code:: restructuredtext
|
|
70
|
+
|
|
71
|
+
.. his-contacts::
|
|
72
|
+
:name: Robert C. Martin
|
|
73
|
+
:title: Software Craftsman & Clean Code Evangelist
|
|
74
|
+
:location: Chicago, Illinois, USA
|
|
75
|
+
:email: uncle.bob@cleancoders.com
|
|
76
|
+
|
|
77
|
+
2. ``his-links``
|
|
78
|
+
|
|
79
|
+
This directive has no argument, but uses a definition list to allow
|
|
80
|
+
annotated links, for example:
|
|
81
|
+
|
|
82
|
+
.. code:: restructuredtext
|
|
83
|
+
|
|
84
|
+
.. his-links::
|
|
85
|
+
|
|
86
|
+
Clean Coders
|
|
87
|
+
https://cleancoders.com/
|
|
88
|
+
|
|
89
|
+
The Clean Code Blog
|
|
90
|
+
https://blog.cleancoder.com/
|
|
91
|
+
|
|
92
|
+
GitHub
|
|
93
|
+
https://github.com/unclebob
|
|
94
|
+
|
|
95
|
+
3. ``his-stack-exchange-profiles``
|
|
96
|
+
|
|
97
|
+
- ``stackoverflow``
|
|
98
|
+
- ``serverfault``
|
|
99
|
+
- ``superuser``
|
|
100
|
+
- ``askubuntu``
|
|
101
|
+
- ``unix``
|
|
102
|
+
- ``dba``
|
|
103
|
+
- ``softwareengineering``
|
|
104
|
+
|
|
105
|
+
Example:
|
|
106
|
+
|
|
107
|
+
.. code:: restructuredtext
|
|
108
|
+
|
|
109
|
+
.. his-stack-exchange-profiles::
|
|
110
|
+
:stackoverflow: 73476
|
|
111
|
+
|
|
112
|
+
4. ``his-technology-preference``
|
|
113
|
+
|
|
114
|
+
- ``desired``
|
|
115
|
+
- ``undesired``
|
|
116
|
+
|
|
117
|
+
Example:
|
|
118
|
+
|
|
119
|
+
.. code:: restructuredtext
|
|
120
|
+
|
|
121
|
+
.. his-technology-preference::
|
|
122
|
+
:desired:
|
|
123
|
+
clean-code, solid-principles, tdd, craftsmanship, agile,
|
|
124
|
+
refactoring, design-patterns, clojure, java, architecture
|
|
125
|
+
:undesired:
|
|
126
|
+
big-design-up-front, waterfall, code-comments,
|
|
127
|
+
null-references, singletons, service-locators
|
|
128
|
+
|
|
129
|
+
5. ``his-summary``
|
|
130
|
+
|
|
131
|
+
This directive only has content, for example:
|
|
132
|
+
|
|
133
|
+
.. code:: restructuredtext
|
|
134
|
+
|
|
135
|
+
.. his-summary::
|
|
136
|
+
|
|
137
|
+
Software professional since 1970. Author of foundational texts on
|
|
138
|
+
clean code, agile development, and software craftsmanship. Original
|
|
139
|
+
signatory of the Agile Manifesto. Firm believer that the only way
|
|
140
|
+
to go fast is to go well.
|
|
141
|
+
|
|
142
|
+
6. ``his-job``
|
|
143
|
+
|
|
144
|
+
- ``company-name``
|
|
145
|
+
- ``company-website``
|
|
146
|
+
- ``role``
|
|
147
|
+
- ``start``
|
|
148
|
+
- ``finish``
|
|
149
|
+
- ``technology``
|
|
150
|
+
|
|
151
|
+
Examples:
|
|
152
|
+
|
|
153
|
+
.. code:: restructuredtext
|
|
154
|
+
|
|
155
|
+
.. his-job::
|
|
156
|
+
:company-name: Clean Coders
|
|
157
|
+
:company-website: https://cleancoders.com/
|
|
158
|
+
:role: Founder & Head Craftsman
|
|
159
|
+
:start: 2010-01-01
|
|
160
|
+
:technology:
|
|
161
|
+
video-production, education, clean-code, tdd,
|
|
162
|
+
solid-principles, refactoring, clojure
|
|
163
|
+
|
|
164
|
+
Founded educational platform delivering video training on software
|
|
165
|
+
craftsmanship. Produced 60+ hours of content covering clean code,
|
|
166
|
+
TDD, SOLID principles, and functional programming. Reached hundreds
|
|
167
|
+
of thousands of developers worldwide.
|
|
168
|
+
|
|
169
|
+
.. his-job::
|
|
170
|
+
:company-name: Object Mentor
|
|
171
|
+
:company-website: https://web.archive.org/web/20070913061205/https://www.objectmentor.com/
|
|
172
|
+
:role: Founder & President
|
|
173
|
+
:start: 1990-01-01
|
|
174
|
+
:finish: 2009-12-31
|
|
175
|
+
:technology:
|
|
176
|
+
consulting, training, agile, xp, tdd, oop,
|
|
177
|
+
design-patterns, c++, java
|
|
178
|
+
|
|
179
|
+
Built premier consulting firm for agile transformation and technical
|
|
180
|
+
training. Trained Fortune 500 companies in XP, TDD, and OOP. Authored
|
|
181
|
+
company's flagship course curricula. Helped establish agile practices
|
|
182
|
+
in enterprise software development.
|
|
183
|
+
|
|
184
|
+
.. his-job::
|
|
185
|
+
:company-name: Teradyne
|
|
186
|
+
:company-website: https://teradyne.com/
|
|
187
|
+
:role: Software Engineer
|
|
188
|
+
:start: 1970-01-01
|
|
189
|
+
:finish: 1989-12-31
|
|
190
|
+
:technology:
|
|
191
|
+
assembly, c, c++, embedded-systems, real-time,
|
|
192
|
+
telecommunications, testing-equipment
|
|
193
|
+
|
|
194
|
+
Cut teeth on PDP-8 and PDP-11 assembly. Developed embedded systems
|
|
195
|
+
for automated testing equipment. Learned that the hard way is the
|
|
196
|
+
slow way, and discipline is the path to speed. Discovered that
|
|
197
|
+
debugging time dwarfs coding time unless you write tests first.
|
|
198
|
+
|
|
199
|
+
7. ``his-project``
|
|
200
|
+
|
|
201
|
+
- ``name``
|
|
202
|
+
- ``url``
|
|
203
|
+
- ``start``
|
|
204
|
+
- ``finish``
|
|
205
|
+
- ``technology``
|
|
206
|
+
|
|
207
|
+
Examples:
|
|
208
|
+
|
|
209
|
+
.. code:: restructuredtext
|
|
210
|
+
|
|
211
|
+
.. his-project::
|
|
212
|
+
:name: FitNesse
|
|
213
|
+
:url: https://github.com/unclebob/fitnesse
|
|
214
|
+
:start: 2002-01-01
|
|
215
|
+
:technology: java, acceptance-testing, wiki, collaboration
|
|
216
|
+
|
|
217
|
+
Fully integrated standalone wiki and acceptance testing framework.
|
|
218
|
+
Enables customers, testers, and programmers to collaborate on
|
|
219
|
+
software requirements through executable specifications. Because
|
|
220
|
+
the best documentation is documentation that runs.
|
|
221
|
+
|
|
222
|
+
.. his-project::
|
|
223
|
+
:name: Clean Code (The Book)
|
|
224
|
+
:url: https://www.oreilly.com/library/view/clean-code-a/9780136083238/
|
|
225
|
+
:start: 2007-01-01
|
|
226
|
+
:finish: 2008-08-01
|
|
227
|
+
:technology: java, craftsmanship, refactoring, naming, functions
|
|
228
|
+
|
|
229
|
+
A Handbook of Agile Software Craftsmanship. Distilled decades of
|
|
230
|
+
experience into principles, patterns, and practices for writing
|
|
231
|
+
code that works and reads well. Over 1 million copies sold.
|
|
232
|
+
Translated into dozens of languages. Still sparking debates about
|
|
233
|
+
function length.
|
|
234
|
+
|
|
235
|
+
.. his-project::
|
|
236
|
+
:name: The Agile Manifesto
|
|
237
|
+
:url: https://agilemanifesto.org/
|
|
238
|
+
:start: 2001-02-11
|
|
239
|
+
:technology: agile, collaboration, methodology, values
|
|
240
|
+
|
|
241
|
+
Co-authored with 16 other signatories at Snowbird ski resort.
|
|
242
|
+
Four values, twelve principles, infinite interpretations.
|
|
243
|
+
Revolutionized software development industry. Occasionally
|
|
244
|
+
misunderstood by management consultants selling certifications.
|
|
245
|
+
|
|
246
|
+
8. ``his-education``
|
|
247
|
+
|
|
248
|
+
- ``institution``
|
|
249
|
+
- ``institution-website``
|
|
250
|
+
- ``degree``
|
|
251
|
+
- ``start``
|
|
252
|
+
- ``finish``
|
|
253
|
+
- ``technology``
|
|
254
|
+
|
|
255
|
+
Example:
|
|
256
|
+
|
|
257
|
+
.. code:: restructuredtext
|
|
258
|
+
|
|
259
|
+
.. his-education::
|
|
260
|
+
:institution: Self-taught
|
|
261
|
+
:start: 1970-01-01
|
|
262
|
+
:technology: assembly, fortran, cobol, algorithms, data-structures
|
|
263
|
+
|
|
264
|
+
Began programming professionally in 1970 on PDP-8 and PDP-11
|
|
265
|
+
systems. Learned through hands-on experience, reading, and
|
|
266
|
+
mentorship. Proof that mastery comes from dedication and
|
|
267
|
+
deliberate practice, not just formal credentials.
|
|
268
|
+
|
|
269
|
+
CLI
|
|
270
|
+
===
|
|
271
|
+
::
|
|
272
|
+
|
|
273
|
+
$ historie --help
|
|
274
|
+
usage: historie [-h] [--logging-level LOGGING_LEVEL] [-f {html,pdf}] [-o OUTPUT] input
|
|
275
|
+
|
|
276
|
+
Generate a résumé in a publish format from reStructuredText.
|
|
277
|
+
|
|
278
|
+
positional arguments:
|
|
279
|
+
input Input reStructuredText file
|
|
280
|
+
|
|
281
|
+
options:
|
|
282
|
+
-h, --help show this help message and exit
|
|
283
|
+
--logging-level LOGGING_LEVEL
|
|
284
|
+
Logging level. By default: INFO.
|
|
285
|
+
-f, --format {html,pdf}
|
|
286
|
+
Output format. By default: html.
|
|
287
|
+
-o, --output OUTPUT Output file: By default ".rst" is appended to input.
|
|
288
|
+
|
|
289
|
+
____
|
|
290
|
+
|
|
291
|
+
.. [1] https://meta.stackoverflow.com/questions/415293/sunsetting-jobs-developer-story
|
|
292
|
+
.. [2] https://docutils.sourceforge.io/docs/ref/rst/directives.html
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.1.0'
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import fileinput
|
|
3
|
+
import logging
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from . import exporters
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__package__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def build_parser():
|
|
14
|
+
parser = argparse.ArgumentParser(
|
|
15
|
+
prog='historie',
|
|
16
|
+
description=(
|
|
17
|
+
'Generate a résumé in a publish format from reStructuredText.'
|
|
18
|
+
),
|
|
19
|
+
)
|
|
20
|
+
parser.add_argument(
|
|
21
|
+
'--logging-level',
|
|
22
|
+
help='Logging level. By default: %(default)s.',
|
|
23
|
+
default='INFO',
|
|
24
|
+
)
|
|
25
|
+
parser.add_argument(
|
|
26
|
+
'-f', '--format',
|
|
27
|
+
choices=['html', 'pdf'],
|
|
28
|
+
default='html',
|
|
29
|
+
help='Output format. By default: %(default)s.',
|
|
30
|
+
)
|
|
31
|
+
parser.add_argument(
|
|
32
|
+
'-o', '--output',
|
|
33
|
+
type=Path,
|
|
34
|
+
help='Output file: By default ".rst" is appended to input.',
|
|
35
|
+
)
|
|
36
|
+
parser.add_argument('input', help='Input reStructuredText file')
|
|
37
|
+
|
|
38
|
+
return parser
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def main():
|
|
42
|
+
logging.basicConfig(
|
|
43
|
+
level=logging.INFO,
|
|
44
|
+
format='%(asctime)s %(levelname)-7s %(name)s %(message)s',
|
|
45
|
+
datefmt='%Y-%m-%d %H:%M:%S',
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
args = build_parser().parse_args()
|
|
49
|
+
logging.root.setLevel(args.logging_level)
|
|
50
|
+
|
|
51
|
+
input_path = Path(args.input)
|
|
52
|
+
if args.input and args.input != '-' and not input_path.exists():
|
|
53
|
+
logger.error('Input file not found: %s', args.input)
|
|
54
|
+
sys.exit(1)
|
|
55
|
+
|
|
56
|
+
if args.output:
|
|
57
|
+
output = args.output
|
|
58
|
+
elif args.input and args.input != '-':
|
|
59
|
+
output = f'{input_path.stem}.{args.format}'
|
|
60
|
+
else:
|
|
61
|
+
output = f'output.{args.format}'
|
|
62
|
+
|
|
63
|
+
exporter = exporters.registry[args.format]
|
|
64
|
+
with fileinput.input(files=args.input) as f_in:
|
|
65
|
+
with open(output, 'wb') as f_out:
|
|
66
|
+
exporter(''.join(line for line in f_in), f_out)
|