Commit eac7b5d084

eac7b5d0841f62d4cf1dc81f0fed3f207316bca0

parent: 24106aeff1

Unsigned

cmc <hello@cleberg.net> · 2024-04-22 19:07 UTC

format a portion of blog posts

Layout: unified · split

README.org +7
@@ -50,5 +50,12 @@ files to the target through any number of methods, such as =scp= or SFTP.
5050
5151*** DONE Create RSS feed
5252*** TODO Format all blog posts with =M q=
53**** DONE 2018
54**** DONE 2019
55**** DONE 2020
56**** TODO 2021
57**** TODO 2022
58**** TODO 2023
59**** TODO 2024
5360*** DONE Create script to auto-generate the =/blog/= list and =/= most recent posts
5461*** TODO Figure out how to get filetags to show up
content/blog/2018-11-28-cpp-compiler.org +44 −51
@@ -4,14 +4,13 @@
44#+filetags: :dev:
55
66* A Brief Introduction
7[[https://en.wikipedia.org/wiki/C%2B%2B][C++]] is a general-purpose
8programming language with object-oriented, generic, and functional
9features in addition to facilities for low-level memory manipulation.
7[[https://en.wikipedia.org/wiki/C%2B%2B][C++]] is a general-purpose programming language with object-oriented, generic, and
8functional features in addition to facilities for low-level memory manipulation.
109
11The source code, shown in the snippet below, must be compiled before it
12can be executed. There are many steps and intricacies to the compilation
13process, and this post was a personal exercise to learn and remember as
14much information as I can.
10The source code, shown in the snippet below, must be compiled before it can be
11executed. There are many steps and intricacies to the compilation process, and
12this post was a personal exercise to learn and remember as much information as I
13can.
1514
1615#+begin_src cpp
1716#include <iostream>
@@ -24,51 +23,45 @@ int main()
2423
2524** Compilation Process
2625*** An Overview
27Compiling C++ projects is a frustrating task most days. Seemingly
28nonexistent errors keeping your program from successfully compiling can
29be annoying (especially since you know you wrote it perfectly the first
30time, right?).
26Compiling C++ projects is a frustrating task most days. Seemingly nonexistent
27errors keeping your program from successfully compiling can be annoying
28(especially since you know you wrote it perfectly the first time, right?).
3129
32I'm learning more and more about C++ these days and decided to write
33this concept down so that I can cement it even further in my own head.
34However, C++ is not the only compiled language. Check out
35[[https://en.wikipedia.org/wiki/Compiled_language][the Wikipedia entry
36for compiled languages]] for more examples of compiled languages.
30I'm learning more and more about C++ these days and decided to write this
31concept down so that I can cement it even further in my own head. However, C++
32is not the only compiled language. Check out [[https://en.wikipedia.org/wiki/Compiled_language][the Wikipedia entry for compiled
33languages]] for more examples of compiled languages.
3734
38I'll start with a wonderful, graphical way to conceptualize the C++
39compiler. View
40[[https://web.archive.org/web/20190419035048/http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html][The
41C++ Compilation Process]] by Kurt MacMahon, an NIU professor, to see the
42graphic and an explanation. The goal of the compilation process is to
43take the C++ code and produce a shared library, dynamic library, or an
44executable file.
35I'll start with a wonderful, graphical way to conceptualize the C++ compiler.
36View [[https://web.archive.org/web/20190419035048/http://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html][The C++ Compilation Process]] by Kurt MacMahon, an NIU professor, to see the
37graphic and an explanation. The goal of the compilation process is to take the
38C++ code and produce a shared library, dynamic library, or an executable file.
4539
4640** Compilation Phases
4741Let's break down the compilation process. There are four major steps to
4842compiling C++ code.
4943
5044*** Step 1
51The first step is to expand the source code file to meet all
52dependencies. The C++ preprocessor includes the code from all the header
53files, such as =#include <iostream>=. Now, what does that mean? The
54previous example includes the =iostream= header. This tells the computer
55that you want to use the =iostream= standard library, which contains
56classes and functions written in the core language. This specific header
57allows you to manipulate input/output streams. After all this, you'll
58end up which a temporary file that contains the expanded source code.
45The first step is to expand the source code file to meet all dependencies. The
46C++ preprocessor includes the code from all the header files, such as =#include
47<iostream>=. Now, what does that mean? The previous example includes the
48=iostream= header. This tells the computer that you want to use the =iostream=
49standard library, which contains classes and functions written in the core
50language. This specific header allows you to manipulate input/output streams.
51After all this, you'll end up which a temporary file that contains the expanded
52source code.
5953
60In the example of the C++ code above, the =iostream= class would be
61included in the expanded code.
54In the example of the C++ code above, the =iostream= class would be included in
55the expanded code.
6256
6357*** Step 2
64After the code is expanded, the compiler comes into play. The compiler
65takes the C++ code and converts this code into the assembly language,
66understood by the platform. You can see this in action if you head over
67to the [[https://godbolt.org][GodBolt Compiler Explorer]], which shows
68C++ being converted into assembly dynamically.
58After the code is expanded, the compiler comes into play. The compiler takes the
59C++ code and converts this code into the assembly language, understood by the
60platform. You can see this in action if you head over to the [[https://godbolt.org][GodBolt Compiler
61Explorer]], which shows C++ being converted into assembly dynamically.
6962
70For example, the =Hello, world!= code snippet above compiles into the
71following assembly code:
63For example, the =Hello, world!= code snippet above compiles into the following
64assembly code:
7265
7366#+begin_src asm
7467.LC0:
@@ -113,16 +106,16 @@ _GLOBAL__sub_I_main:
113106#+end_src
114107
115108*** Step 3
116Third, the assembly code generated by the compiler is assembled into the
117object code for the platform. Essentially, this is when the compiler
118takes the assembly code and assembles it into machine code in a binary
119format. After researching this online, I figured out that a lot of
120compilers will allow you to stop compilation at this step. This would be
121useful for compiling each source code file separately. This saves time
122later if a single file changes; only that file needs to be recompiled.
109Third, the assembly code generated by the compiler is assembled into the object
110code for the platform. Essentially, this is when the compiler takes the assembly
111code and assembles it into machine code in a binary format. After researching
112this online, I figured out that a lot of compilers will allow you to stop
113compilation at this step. This would be useful for compiling each source code
114file separately. This saves time later if a single file changes; only that file
115needs to be recompiled.
123116
124117*** Step 4
125Finally, the object code file generated by the assembler is linked
126together with the object code files for any library functions used to
127produce a shared library, dynamic library, or an executable file. It
128replaces all references to undefined symbols with the correct addresses.
118Finally, the object code file generated by the assembler is linked together with
119the object code files for any library functions used to produce a shared
120library, dynamic library, or an executable file. It replaces all references to
121undefined symbols with the correct addresses.
content/blog/2019-01-07-useful-css.org +51 −62
@@ -4,34 +4,30 @@
44#+filetags: :dev:
55
66* Introduction to CSS
7[[https://en.wikipedia.org/wiki/CSS][CSS]], the language used to markup
8HTML code and make it "pretty", is one of the most effective ways to
9increase the attractiveness of a website. It can also lead to increased
10user engagement, retention, and satisfaction. In fact, there are whole
11career fields are dedicated to the improvement of user experiences,
7[[https://en.wikipedia.org/wiki/CSS][CSS]], the language used to markup HTML code and make it "pretty", is one of the
8most effective ways to increase the attractiveness of a website. It can also
9lead to increased user engagement, retention, and satisfaction. In fact, there
10are whole career fields are dedicated to the improvement of user experiences,
1211known as UI design and UX design.
1312
14Some web developers are used to the common CSS properties, such as
15element sizing, fonts, colors, etc., but are not as well versed in
16less-used properties and values such as =flexbox=, =clip-path=, and
17=transform=. This article will provide some insight into the less-used
18and unique CSS properties.
13Some web developers are used to the common CSS properties, such as element
14sizing, fonts, colors, etc., but are not as well versed in less-used properties
15and values such as =flexbox=, =clip-path=, and =transform=. This article will
16provide some insight into the less-used and unique CSS properties.
1917
2018* CSS Variables
21The first topic today is CSS variables. Variables are not often used by
22smaller developers. CSS variables allow you to give your website a
23well-defined structure, where you can easily reuse CSS properties
24throughout the project.
19The first topic today is CSS variables. Variables are not often used by smaller
20developers. CSS variables allow you to give your website a well-defined
21structure, where you can easily reuse CSS properties throughout the project.
2522
26You can use variables to define things, such as color palettes. Then,
27you can use these colors for backgrounds anywhere else in the HTML. This
28could be extended, where extra variables could be defined for
29=primary-text=, =quoted-text=, etc. Variables can also be used to define
30spacing (e.g. =32px= or =2rem=), which can then be applied to margins,
31padding, font sizes, and more.
23You can use variables to define things, such as color palettes. Then, you can
24use these colors for backgrounds anywhere else in the HTML. This could be
25extended, where extra variables could be defined for =primary-text=,
26=quoted-text=, etc. Variables can also be used to define spacing (e.g. =32px= or
27=2rem=), which can then be applied to margins, padding, font sizes, and more.
3228
33For example, here are some variables defined at the root of the website,
34which allows for any subsequent CSS rules to use those variables:
29For example, here are some variables defined at the root of the website, which
30allows for any subsequent CSS rules to use those variables:
3531
3632#+begin_src css
3733:root {
@@ -46,23 +42,21 @@ body {
4642#+end_src
4743
4844* CSS Box Shadows
49Box shadows were once my mortal enemy. No matter how hard I tried, I
50just couldn't get them to work how I wanted. Because of this, my
51favorite discovery has been CSSMatic's
52[[https://www.cssmatic.com/box-shadow][box shadow generator]]. It
53provides an excellent tool to generate box shadows using their simple
54sliders. Surprisingly, this is the reason I learned how box shadows
55work! You can use the sliders and watch how the CSS code changes in the
56image that is displayed. Through this, you should understand that the
57basic structure for box shadows is:
45Box shadows were once my mortal enemy. No matter how hard I tried, I just
46couldn't get them to work how I wanted. Because of this, my favorite discovery
47has been CSSMatic's [[https://www.cssmatic.com/box-shadow][box shadow generator]]. It provides an excellent tool to
48generate box shadows using their simple sliders. Surprisingly, this is the
49reason I learned how box shadows work! You can use the sliders and watch how the
50CSS code changes in the image that is displayed. Through this, you should
51understand that the basic structure for box shadows is:
5852
5953#+begin_src css
6054box-shadow: inset horizontal vertical blur spread color;
6155#+end_src
6256
63Now, let's look at some basic examples! You can copy and paste the
64following code into a site like CodePen or your own HTML files. Feel
65free to play around with the code, experiment, and learn.
57Now, let's look at some basic examples! You can copy and paste the following
58code into a site like CodePen or your own HTML files. Feel free to play around
59with the code, experiment, and learn.
6660
6761*Box Shadow #1*
6862
@@ -118,21 +112,19 @@ free to play around with the code, experiment, and learn.
118112}
119113#+end_src
120114
121Try these box shadows out on your own and see how changing each shadow
122value works.
115Try these box shadows out on your own and see how changing each shadow value
116works.
123117
124118* CSS Flexbox
125Now, let's move on to the best part of this article: flexbox. The
126flexbox is by far my favorite new toy. I originally stumbled across this
127solution after looking for more efficient ways of centering content
128horizontally AND vertically. I had used a few hack-ish methods before,
129but flexbox throws those out the window. The best part of it all is that
130flexbox is /dead simple/.
131
132Flexbox pertains to the parent div of any element. You want the parent
133to be the flexbox in which items are arranged to use the flex methods.
134It's easier to see this in action that explained, so let's see an
135example.
119Now, let's move on to the best part of this article: flexbox. The flexbox is by
120far my favorite new toy. I originally stumbled across this solution after
121looking for more efficient ways of centering content horizontally AND
122vertically. I had used a few hack-ish methods before, but flexbox throws those
123out the window. The best part of it all is that flexbox is /dead simple/.
124
125Flexbox pertains to the parent div of any element. You want the parent to be the
126flexbox in which items are arranged to use the flex methods. It's easier to see
127this in action that explained, so let's see an example.
136128
137129*Flexbox*
138130
@@ -167,23 +159,20 @@ example.
167159}
168160#+end_src
169161
170You may notice that we no longer need to use the =top= property for the
171=h3= elements in our code. This is because we set the display box to be
172a flex container for the small boxes, AND we made the small boxes flex
173containers for their elements (the h3 tags). Flex boxes can be nested
174like this to center content that is inside centered content.
162You may notice that we no longer need to use the =top= property for the =h3=
163elements in our code. This is because we set the display box to be a flex
164container for the small boxes, AND we made the small boxes flex containers for
165their elements (the h3 tags). Flex boxes can be nested like this to center
166content that is inside centered content.
175167
176For the example above, we designated the =justify-content= property to
177be =flex-start= so that the boxes stack from the left side of the
178screen. This property can be changed to =center= to make the boxes
179appear in the center of the screen.
168For the example above, we designated the =justify-content= property to be
169=flex-start= so that the boxes stack from the left side of the screen. This
170property can be changed to =center= to make the boxes appear in the center of
171the screen.
180172
181For an interactive example,
182[[https://codepen.io/LandonSchropp/pen/KpzzGo][check out this CodePen]]
183from [[https://codepen.io/LandonSchropp/][LandonScropp]]. Resize the
173For an interactive example, [[https://codepen.io/LandonSchropp/pen/KpzzGo][check out this CodePen]] from [[https://codepen.io/LandonSchropp/][LandonScropp]]. Resize the
184174window with dice to see how they collapse and re-align.
185175
186176* Even More CSS
187For more inspiration, you can visit [[https://www.codepen.io][CodePen]],
188[[https://dribbble.com][Dribbble]], or [[https://uimovement.com][UI
189Movement]] to browse the collections of many amazing web designers.
177For more inspiration, you can visit [[https://www.codepen.io][CodePen]], [[https://dribbble.com][Dribbble]], or [[https://uimovement.com][UI Movement]] to browse
178the collections of many amazing web designers.
content/blog/2019-09-09-audit-analytics.org +143 −161
@@ -4,111 +4,103 @@
44#+filetags: :audit:
55
66* What Are Data Analytics?
7A quick aside before I dive into this post: =data analytics= is a vague
8term that has become popular in recent years. Think of a =data analytic=
9as the output of any data analysis you perform. For example, a pivot
10table or a pie chart could be a data analytic.
11
12[[https://en.wikipedia.org/wiki/Data_analysis][Data analysis]] is a
13process that utilizes statistics and other mathematical methods to
14discover useful information within datasets. This involves examining,
15cleaning, transforming, and modeling data so that you can use the data
16to support an opinion, create more useful viewpoints, and gain knowledge
17to implement into audit planning or risk assessments.
18
19One of the common mistakes that managers (and anyone new to the process)
20make is assuming that everything involved with this process is "data
21analytics". In fact, data analytics are only a small part of the
22process.
23
24See *Figure 1** for a more accurate representation of where data analysis
25sits within the full process. This means that data analysis does not
26include querying or extracting data, selecting samples, or performing
27audit tests. These steps can be necessary for an audit (and may even be
28performed by the same associates), but they are not data analytics.
7A quick aside before I dive into this post: =data analytics= is a vague term
8that has become popular in recent years. Think of a =data analytic= as the
9output of any data analysis you perform. For example, a pivot table or a pie
10chart could be a data analytic.
11
12[[https://en.wikipedia.org/wiki/Data_analysis][Data analysis]] is a process that utilizes statistics and other mathematical
13methods to discover useful information within datasets. This involves examining,
14cleaning, transforming, and modeling data so that you can use the data to
15support an opinion, create more useful viewpoints, and gain knowledge to
16implement into audit planning or risk assessments.
17
18One of the common mistakes that managers (and anyone new to the process) make is
19assuming that everything involved with this process is "data analytics". In
20fact, data analytics are only a small part of the process.
21
22See *Figure 1** for a more accurate representation of where data analysis sits
23within the full process. This means that data analysis does not include querying
24or extracting data, selecting samples, or performing audit tests. These steps
25can be necessary for an audit (and may even be performed by the same
26associates), but they are not data analytics.
2927
3028#+caption: The Intelligence Cycle
3129[[https://img.cleberg.net/blog/20190909-data-analysis-in-auditing/intelligence_cycle-min.png]]
3230
3331* Current Use of Analytics in Auditing
34While data analysis has been an integral part of most businesses and
35departments for the better part of the last century, only recently have
36internal audit functions been adopting this practice. The internal audit
37function works exclusively to provide assurance and consulting services
38to the business areas within the firm (except for internal auditing
39firms who are hired by different companies to perform their roles).
32While data analysis has been an integral part of most businesses and departments
33for the better part of the last century, only recently have internal audit
34functions been adopting this practice. The internal audit function works
35exclusively to provide assurance and consulting services to the business areas
36within the firm (except for internal auditing firms who are hired by different
37companies to perform their roles).
4038
4139#+begin_quote
42Internal Auditing helps an organization accomplish its objectives by
43bringing a systematic, disciplined approach to evaluate and improve the
44effectiveness of risk management, control and governance processes.
40Internal Auditing helps an organization accomplish its objectives by bringing a
41systematic, disciplined approach to evaluate and improve the effectiveness of
42risk management, control and governance processes.
4543
4644- The IIA's Definition of Internal Audit
4745
4846#+end_quote
4947
50Part of the blame for the slow adoption of data analysis can be
51attributed to the fact that internal auditing is strongly based on
52tradition and following the precedents set by previous auditors.
53However, there can be no progress without auditors who are willing to
54break the mold and test new audit techniques. In fact, as of 2018,
55[[https://www.cpapracticeadvisor.com/accounting-audit/news/12404086/internal-audit-groups-are-lagging-in-data-analytics][only
5663% of internal audit departments currently utilize data analytics]] in
57North America. This number should be as close as possible to 100%. I
58have never been part of an audit that would not have benefited from data
48Part of the blame for the slow adoption of data analysis can be attributed to
49the fact that internal auditing is strongly based on tradition and following the
50precedents set by previous auditors. However, there can be no progress without
51auditors who are willing to break the mold and test new audit techniques. In
52fact, as of 2018, [[https://www.cpapracticeadvisor.com/accounting-audit/news/12404086/internal-audit-groups-are-lagging-in-data-analytics][only 63% of internal audit departments currently utilize data
53analytics]] in North America. This number should be as close as possible to 100%.
54I have never been part of an audit that would not have benefited from data
5955analytics.
6056
61So, how do internal audit functions remedy this situation? It's
62definitely not as easy as walking into work on Monday and telling your
63Chief Audit Executive that you're going to start implementing analytics
64in the next audit. You need a plan and a system to make the analysis
65process as effective as possible.
57So, how do internal audit functions remedy this situation? It's definitely not
58as easy as walking into work on Monday and telling your Chief Audit Executive
59that you're going to start implementing analytics in the next audit. You need a
60plan and a system to make the analysis process as effective as possible.
6661
6762* The DELTA Model
6863One of the easiest ways to experiment with data analytics and gain an
69understanding of the processes is to implement them within your own
70department. But how do we do this if we've never worked with analysis
71before? One of the most common places to start is to research some data
72analysis models currently available. For this post, we'll take a look at
73the DELTA model. You can take a look at ****Figure 2***** for a quick
74overview of the model.
64understanding of the processes is to implement them within your own department.
65But how do we do this if we've never worked with analysis before? One of the
66most common places to start is to research some data analysis models currently
67available. For this post, we'll take a look at the DELTA model. You can take a
68look at ****Figure 2***** for a quick overview of the model.
7569
76The DELTA model sets a few guidelines for areas wanting to implement
77data analytics so that the results can be as comprehensive as possible:
70The DELTA model sets a few guidelines for areas wanting to implement data
71analytics so that the results can be as comprehensive as possible:
7872
7973- *Data*: Must be clean, accessible, and (usually) unique.
80- *Enterprise-Wide Focus*: Key data systems and analytical resources
81 must be available for use (by the Internal Audit Function).
82- *Leaders*: Must promote a data analytics approach and show the value
83 of analytical results.
84- *Targets*: Must be set for key areas and risks that the analytics can
85 be compared against (KPIs).
86- *Analysts*: There must be auditors willing and able to perform data
87 analytics or else the system cannot be sustained.
74- *Enterprise-Wide Focus*: Key data systems and analytical resources must be
75 available for use (by the Internal Audit Function).
76- *Leaders*: Must promote a data analytics approach and show the value of
77 analytical results.
78- *Targets*: Must be set for key areas and risks that the analytics can be
79 compared against (KPIs).
80- *Analysts*: There must be auditors willing and able to perform data analytics
81 or else the system cannot be sustained.
8882
8983#+caption: The Delta Model
9084[[https://img.cleberg.net/blog/20190909-data-analysis-in-auditing/delta-min.png]]
9185
9286* Finding the Proper KPIs
93Once the Internal Audit Function has decided that they want to start
94using data analytics internally and have ensured they're properly set up
95to do so, they need to figure out what they will be testing against. Key
96Performance Indicators (KPIs) are qualitative or quantitative factors
97that can be evaluated and assessed to determine if the department is
98performing well, usually compared to historical or industry benchmarks.
99Once KPIs have been agreed upon and set, auditors can use data analytics
100to assess and report on these KPIs. This allows the person performing
101the analytics the freedom to express opinions on the results, whereas
102the results are ambiguous if no KPIs exist.
103
104It should be noted that tracking KPIs in the department can help ensure
105you have a rigorous Quality Assurance and Improvement Program (QAIP) in
106accordance with some applicable standards, such as IPPF Standard 1300.
87Once the Internal Audit Function has decided that they want to start using data
88analytics internally and have ensured they're properly set up to do so, they
89need to figure out what they will be testing against. Key Performance Indicators
90(KPIs) are qualitative or quantitative factors that can be evaluated and
91assessed to determine if the department is performing well, usually compared to
92historical or industry benchmarks. Once KPIs have been agreed upon and set,
93auditors can use data analytics to assess and report on these KPIs. This allows
94the person performing the analytics the freedom to express opinions on the
95results, whereas the results are ambiguous if no KPIs exist.
96
97It should be noted that tracking KPIs in the department can help ensure you have
98a rigorous Quality Assurance and Improvement Program (QAIP) in accordance with
99some applicable standards, such as IPPF Standard 1300.
107100
108101#+begin_quote
109The chief audit executive must develop and maintain a quality assurance
110and improvement program that covers all aspects of the internal audit
111activity.
102The chief audit executive must develop and maintain a quality assurance and
103improvement program that covers all aspects of the internal audit activity.
112104
113105- IPPF Standard 1300
114106
@@ -117,103 +109,94 @@ activity.
117109Additionally, IPPF Standard 2060 discusses reporting:
118110
119111#+begin_quote
120The chief audit executive must report periodically to senior management
121and the board on the internal audit activity's purpose, authority,
122responsibility, and performance relative to its plan and on its
123conformance with the Code of Ethics and the Standards. Reporting must
124also include significant risk and control issues, including fraud risks,
125governance issues, and other matters that require the attention of
126senior management and/or the board.
112The chief audit executive must report periodically to senior management and the
113board on the internal audit activity's purpose, authority, responsibility, and
114performance relative to its plan and on its conformance with the Code of Ethics
115and the Standards. Reporting must also include significant risk and control
116issues, including fraud risks, governance issues, and other matters that require
117the attention of senior management and/or the board.
127118
128119- IPPF Standard 2060
129120
130121#+end_quote
131122
132The hardest part of finding KPIs is to determine which KPIs are
133appropriate for your department. Since every department is different and
134has different goals, KPIs will vary drastically between companies. To
135give you an idea of where to look, here are some ideas I came up with
136when discussing the topic with a few colleagues.
123The hardest part of finding KPIs is to determine which KPIs are appropriate for
124your department. Since every department is different and has different goals,
125KPIs will vary drastically between companies. To give you an idea of where to
126look, here are some ideas I came up with when discussing the topic with a few
127colleagues.
137128
138129- Efficiency/Budgeting:
139 - Audit hours to staff utilization ratio (annual hours divided by
140 total annual work hours).
130 - Audit hours to staff utilization ratio (annual hours divided by total annual
131 work hours).
141132 - Audit hours compared to the number of audits completed.
142 - Time between audit steps or to complete the whole audit. E.g., time
143 from fieldwork completion to audit report issuance.
133 - Time between audit steps or to complete the whole audit. E.g., time from
134 fieldwork completion to audit report issuance.
144135- Reputation:
145136 - The frequency that management has requested the services of the IAF.
146 - Management, audit committee, or external audit satisfaction survey
147 results.
148 - Education, experience, certifications, tenure, and training of the
149 auditors on staff.
137 - Management, audit committee, or external audit satisfaction survey results.
138 - Education, experience, certifications, tenure, and training of the auditors
139 on staff.
150140- Quality:
151 - Number and frequency of audit findings. Assign monetary or numerical
152 values, if possible.
141 - Number and frequency of audit findings. Assign monetary or numerical values,
142 if possible.
153143 - Percentage of recommendations issued and implemented.
154144- Planning:
155145 - Percentage or number of key risks audited per year or per audit.
156146 - Proportion of audit universe audited per year.
157147
158148* Data Analysis Tools
159Finally, to be able to analyze and report on the data analysis, auditors
160need to evaluate the tools at their disposal. There are many options
161available, but a few of the most common ones can easily get the job
162done. For example, almost every auditor already has access to Microsoft
163Excel. Excel is more powerful than most people give it credit for and
164can accomplish a lot of basic statistics without much work. If you don't
165know a lot about statistics but still want to see some of the more basic
166results, Excel is a great option.
167
168To perform more in-depth statistical analysis or to explore large
169datasets that Excel cannot handle, auditors will need to explore other
170options. The big three that have had a lot of success in recent years
171are Python, R, and ACL. ACL can be used as either a graphical tool
172(point and click) or as a scripting tool, where the auditor must write
173the scripts manually. Python and the R-language are solely scripting
174languages.
175
176The general trend in the data analytics environment is that if the tool
177allows you to do everything by clicking buttons or dragging elements,
178you won't be able to fully utilize the analytics you need. The most
179robust solutions are created by those who understand how to write the
180scripts manually. It should be noted that as the utility of a tool
181increases, it usually means that the learning curve for that tool will
182also be higher. It will take auditors longer to learn how to utilize
183Python, R, or ACL versus learning how to utilize Excel.
149Finally, to be able to analyze and report on the data analysis, auditors need to
150evaluate the tools at their disposal. There are many options available, but a
151few of the most common ones can easily get the job done. For example, almost
152every auditor already has access to Microsoft Excel. Excel is more powerful than
153most people give it credit for and can accomplish a lot of basic statistics
154without much work. If you don't know a lot about statistics but still want to
155see some of the more basic results, Excel is a great option.
156
157To perform more in-depth statistical analysis or to explore large datasets that
158Excel cannot handle, auditors will need to explore other options. The big three
159that have had a lot of success in recent years are Python, R, and ACL. ACL can
160be used as either a graphical tool (point and click) or as a scripting tool,
161where the auditor must write the scripts manually. Python and the R-language are
162solely scripting languages.
163
164The general trend in the data analytics environment is that if the tool allows
165you to do everything by clicking buttons or dragging elements, you won't be able
166to fully utilize the analytics you need. The most robust solutions are created
167by those who understand how to write the scripts manually. It should be noted
168that as the utility of a tool increases, it usually means that the learning
169curve for that tool will also be higher. It will take auditors longer to learn
170how to utilize Python, R, or ACL versus learning how to utilize Excel.
184171
185172* Visualization
186Once an auditor has finally found the right data, KPIs, and tools, they
187must report these results so that actions can be taken. Performing
188in-depth data analysis is only useful if the results are understood by
189the audiences of the data. The best way to create this understanding is
190to visualize the results of the data. Let's take a look at some of the
191best options to visualize and report the results you've found.
192
193Some of the most popular commercial tools for visualization are
194Microsoft PowerBI and Tableau Desktop. However, other tools exist such
195as JMP, Plotly, Qlikview, Alteryx, or D3. Some require commercial
196licenses while others are simply free to use. For corporate data, you
197may want to make sure that the tool does not communicate any of the data
198outside the company (such as cloud storage). I won't be going into depth
199on any of these tools since visualization is largely a subjective and
200creative experience, but remember to constantly explore new options as
201you repeat the process.
202
203Lastly, let's take a look at an example of data visualization. This
204example comes from a
205[[https://talent.works/2018/03/28/the-science-of-the-job-search-part-iii-61-of-entry-level-jobs-require-3-years-of-experience/][blog
206post written by Kushal Chakrabarti]] in 2018 about the percent of
207entry-level US jobs that require experience. *Figure 3** shows us an
208easy-to-digest picture of the data. We can quickly tell that only about
20912.5% of entry-level jobs don't require experience.
210
211This is the kind of result that easily describes the data for you.
212However, make sure to include an explanation of what the results mean.
213Don't let the reader assume what the data means, especially if it
214relates to a complex subject. /Tell a story/ about the data and why the
215results matter. For example, *Figure 4** shows a part of the explanation
216the author gives to illustrate his point.
173Once an auditor has finally found the right data, KPIs, and tools, they must
174report these results so that actions can be taken. Performing in-depth data
175analysis is only useful if the results are understood by the audiences of the
176data. The best way to create this understanding is to visualize the results of
177the data. Let's take a look at some of the best options to visualize and report
178the results you've found.
179
180Some of the most popular commercial tools for visualization are Microsoft
181PowerBI and Tableau Desktop. However, other tools exist such as JMP, Plotly,
182Qlikview, Alteryx, or D3. Some require commercial licenses while others are
183simply free to use. For corporate data, you may want to make sure that the tool
184does not communicate any of the data outside the company (such as cloud
185storage). I won't be going into depth on any of these tools since visualization
186is largely a subjective and creative experience, but remember to constantly
187explore new options as you repeat the process.
188
189Lastly, let's take a look at an example of data visualization. This example
190comes from a [[https://talent.works/2018/03/28/the-science-of-the-job-search-part-iii-61-of-entry-level-jobs-require-3-years-of-experience/][blog post written by Kushal Chakrabarti]] in 2018 about the percent
191of entry-level US jobs that require experience. *Figure 3** shows us an
192easy-to-digest picture of the data. We can quickly tell that only about 12.5% of
193entry-level jobs don't require experience.
194
195This is the kind of result that easily describes the data for you. However, make
196sure to include an explanation of what the results mean. Don't let the reader
197assume what the data means, especially if it relates to a complex subject. /Tell
198a story/ about the data and why the results matter. For example, *Figure 4**
199shows a part of the explanation the author gives to illustrate his point.
217200
218201#+caption: Entry-Level Visualization
219202[[https://img.cleberg.net/blog/20190909-data-analysis-in-auditing/vis_example-min.png]]
@@ -222,8 +205,7 @@ the author gives to illustrate his point.
222205[[https://img.cleberg.net/blog/20190909-data-analysis-in-auditing/vis_example_explanation-min.png]]
223206
224207* Wrap-Up
225While this is not an all-encompassing program that you can just adopt
226into your department, it should be enough to get anyone started on the
227process of understanding and implementing data analytics. Always
228remember to continue learning and exploring new options as your
229processes grow and evolve.
208While this is not an all-encompassing program that you can just adopt into your
209department, it should be enough to get anyone started on the process of
210understanding and implementing data analytics. Always remember to continue
211learning and exploring new options as your processes grow and evolve.
content/blog/2019-12-03-the-ansoff-matrix.org +78 −90
@@ -4,114 +4,102 @@
44#+filetags: :business:
55
66* Overview
7As the world of business evolves, managers must approach business
8planning and strategy with a contemporary mindset. According to Dess,
9McNamara, Eisner, and Lee, managers must be willing to adapt to the
10modern business environment by going beyond "'incremental management',
11whereby they view their job as making a series of small, minor changes
12to improve the efficiency of the firm's operations"(2019).
7As the world of business evolves, managers must approach business planning and
8strategy with a contemporary mindset. According to Dess, McNamara, Eisner, and
9Lee, managers must be willing to adapt to the modern business environment by
10going beyond "'incremental management', whereby they view their job as making a
11series of small, minor changes to improve the efficiency of the firm's
12operations"(2019).
1313
14One reason that strategic management is crucial is because most
15businesses that fail in the United States each year fail due to a lack
16of strategic focus or direction(2019). The rate of failure for
17businesses with poor strategies shows that strategic planning and
18management are crucial to a business's strength and longevity, injecting
19the critical factors of growth and direction into a company's business
20plan.
14One reason that strategic management is crucial is because most businesses that
15fail in the United States each year fail due to a lack of strategic focus or
16direction(2019). The rate of failure for businesses with poor strategies shows
17that strategic planning and management are crucial to a business's strength and
18longevity, injecting the critical factors of growth and direction into a
19company's business plan.
2120
22One of the most significant strategic planning and management frameworks
23that companies can use is the
24[[https://en.wikipedia.org/wiki/Ansoff_matrix][Ansoff Matrix]]. While
25this framework has unique purposes and use-cases, it can effectively
26help an organization grow and compete. Specifically, the Ansoff matrix
27is one of the most effective frameworks for companies who want to focus
28on increasing sales revenue or profitability(2019).
21One of the most significant strategic planning and management frameworks that
22companies can use is the [[https://en.wikipedia.org/wiki/Ansoff_matrix][Ansoff Matrix]]. While this framework has unique purposes
23and use-cases, it can effectively help an organization grow and compete.
24Specifically, the Ansoff matrix is one of the most effective frameworks for
25companies who want to focus on increasing sales revenue or profitability(2019).
2926
30This framework uses a two-by-two figure to show the four strategic
31options for companies to use in this framework: market penetration,
32market development, product development, and diversification (see
33*Figure 1*). The x-axis of the matrix focuses on the firm's markets and
34also determines if the firm is looking to enter new markets or innovate
35in its current markets. The y-axis of the matrix focuses on the firm's
36products and determines if the firm wants to pursue strategies around
37their existing products or explore new products.
27This framework uses a two-by-two figure to show the four strategic options for
28companies to use in this framework: market penetration, market development,
29product development, and diversification (see *Figure 1*). The x-axis of the
30matrix focuses on the firm's markets and also determines if the firm is looking
31to enter new markets or innovate in its current markets. The y-axis of the
32matrix focuses on the firm's products and determines if the firm wants to pursue
33strategies around their existing products or explore new products.
3834
3935#+caption: The Ansoff Matrix by JaisonAbeySabu, Own work, CC BY-SA 3.0
4036[[https://img.cleberg.net/blog/20191203-the-ansoff-matrix/ansoff_matrix-min.png]]
4137
4238* Strategic Options
4339** Market Penetration
44The most straightforward strategy in the Ansoff matrix is to focus on
45existing products in existing markets, also known as market
46penetration(2019). Companies such as Coca-Cola have used market
47penetration successfully by investing a lot of money to get further
48value out of their current markets. Coca-Cola does this by introducing
49new features such as Christmas-themed bottles, personal names on the
50bottles, and other marketing schemes.
40The most straightforward strategy in the Ansoff matrix is to focus on existing
41products in existing markets, also known as market penetration(2019). Companies
42such as Coca-Cola have used market penetration successfully by investing a lot
43of money to get further value out of their current markets. Coca-Cola does this
44by introducing new features such as Christmas-themed bottles, personal names on
45the bottles, and other marketing schemes.
5146
5247** Market Development
53Market development extends existing products into new markets in an
54attempt to increase the number of buyers. One interesting way that
55Coca-Cola used this strategy comes from the stigma that Diet Coke is a
56woman's drink(2019). Coca-Cola introduced Coca-Cola Zero, which
57contained the same nutritional content as Diet Coke, but was packaged in
58a dark black can to appear more "manly"(2019).
48Market development extends existing products into new markets in an attempt to
49increase the number of buyers. One interesting way that Coca-Cola used this
50strategy comes from the stigma that Diet Coke is a woman's drink(2019).
51Coca-Cola introduced Coca-Cola Zero, which contained the same nutritional
52content as Diet Coke, but was packaged in a dark black can to appear more
53"manly"(2019).
5954
6055** Product Development
61Product development uses existing markets to introduce new products so
62that the firm can better meet customer needs(2019). The extreme end of
63diversification is home to companies such as Johnson & Johnson, a
64healthcare company that has developed a business portfolio of more than
6560,000 different products(2019). Johnson & Johnson's dedication to
66continuous diversification has led them to a balance sheet rating of
67"AAA", industry recognition for diversification, and increases in their
68investor dividends for 57 consecutive years(2019).
56Product development uses existing markets to introduce new products so that the
57firm can better meet customer needs(2019). The extreme end of diversification is
58home to companies such as Johnson & Johnson, a healthcare company that has
59developed a business portfolio of more than 60,000 different products(2019).
60Johnson & Johnson's dedication to continuous diversification has led them to a
61balance sheet rating of "AAA", industry recognition for diversification, and
62increases in their investor dividends for 57 consecutive years(2019).
6963
7064** Related Diversification
71Diversification, the final strategy of the Ansoff Matrix, is more
72difficult than the others since it involves exploring both new markets
73and new products. Related diversification is a diversification strategy
74that closely relates to the firm's core business. Coca-Cola's best
75example of related diversification is its acquisition of Glaceau and
76Vitamin Water, which expanded their drinking lines of business(2019).
65Diversification, the final strategy of the Ansoff Matrix, is more difficult than
66the others since it involves exploring both new markets and new products.
67Related diversification is a diversification strategy that closely relates to
68the firm's core business. Coca-Cola's best example of related diversification is
69its acquisition of Glaceau and Vitamin Water, which expanded their drinking
70lines of business(2019).
7771
7872** Unrelated Diversification
79Unrelated diversification is a diversification strategy that does not
80really relate to the firm's core business but still diversifies their
81business portfolio. A good example of this would be a coffee company who
82has decided to enter the market for bicycle sales. The main purpose of
83this strategy is to an extremely diverse company that will not go
84bankrupt if one market goes through difficult times. However, this
85requires a lot of independent skills and heavy investments since the
86company most likely cannot easily transfer knowledge between the markets
87they compete in.
73Unrelated diversification is a diversification strategy that does not really
74relate to the firm's core business but still diversifies their business
75portfolio. A good example of this would be a coffee company who has decided to
76enter the market for bicycle sales. The main purpose of this strategy is to an
77extremely diverse company that will not go bankrupt if one market goes through
78difficult times. However, this requires a lot of independent skills and heavy
79investments since the company most likely cannot easily transfer knowledge
80between the markets they compete in.
8881
8982* Requirements for Success
90To use the Ansoff Matrix framework, managers need to formulate corporate
91goals and objectives. Without goals and direction, management frameworks
92do not present much practical utility. Further, the Ansoff Matrix
93requires the managers involved to make tactical decisions and create a
94path for the company to take toward their goals. Lastly, both the Ansoff
95Matrix needs to consider both internal and external perspectives
96throughout the strategy formulation process.
83To use the Ansoff Matrix framework, managers need to formulate corporate goals
84and objectives. Without goals and direction, management frameworks do not
85present much practical utility. Further, the Ansoff Matrix requires the managers
86involved to make tactical decisions and create a path for the company to take
87toward their goals. Lastly, both the Ansoff Matrix needs to consider both
88internal and external perspectives throughout the strategy formulation process.
9789
98One interesting probability is that companies will be using multiple
99strategic planning and management frameworks at the same time. While
100this may sound like it could crowd the management process, there are
101numerous reasons to do so. For example, the Ansoff Matrix and the
102Balanced Scorecard are relatively popular, and they cover entirely
103different parts of a company's strategy. Using the results from the
104Balanced Scorecard could inform a company of the potential product and
105market demands, such as from customer or supplier survey results, to
106help the company determine which Ansoff Matrix strategy to pursue.
107However, a combined approach at this level would require mature
108frameworks and focused managers who are able to strategize at a high
109level.
90One interesting probability is that companies will be using multiple strategic
91planning and management frameworks at the same time. While this may sound like
92it could crowd the management process, there are numerous reasons to do so. For
93example, the Ansoff Matrix and the Balanced Scorecard are relatively popular,
94and they cover entirely different parts of a company's strategy. Using the
95results from the Balanced Scorecard could inform a company of the potential
96product and market demands, such as from customer or supplier survey results, to
97help the company determine which Ansoff Matrix strategy to pursue. However, a
98combined approach at this level would require mature frameworks and focused
99managers who are able to strategize at a high level.
110100
111Lastly, it should be noted that the author of the Ansoff matrix, Igor
112Ansoff, often used the term
113[[https://en.wikipedia.org/wiki/Analysis_paralysis][paralysis by
114analysis]] to explain the mistake of companies who overuse analysis and
115spend too much time planning. Companies need to understand the utility
116of a strategic management framework while ensuring that the company is
117poised to execute as efficiently as they have planned.
101Lastly, it should be noted that the author of the Ansoff matrix, Igor Ansoff,
102often used the term [[https://en.wikipedia.org/wiki/Analysis_paralysis][paralysis by analysis]] to explain the mistake of companies
103who overuse analysis and spend too much time planning. Companies need to
104understand the utility of a strategic management framework while ensuring that
105the company is poised to execute as efficiently as they have planned.
content/blog/2019-12-16-password-security.org +70 −88
@@ -5,117 +5,99 @@
55
66* Users
77** Why Does It Matter?
8Information security, including passwords and identities, has become one
9of the most important digital highlights of the last decade. With
10[[https://www.usatoday.com/story/money/2018/12/28/data-breaches-2018-billions-hit-growing-number-cyberattacks/2413411002/][billions
11of people affected by data breaches each year]], there's a greater need
12to introduce strong information security systems. If you think you've
13been part of a breach, or you want to check and see, you can use
14[[https://haveibeenpwned.com/][Have I Been Pwned]] to see if your email
15has been involved in any public breaches. Remember that there's a
16possibility that a company experienced a breach and did not report it to
17anyone.
8Information security, including passwords and identities, has become one of the
9most important digital highlights of the last decade. With [[https://www.usatoday.com/story/money/2018/12/28/data-breaches-2018-billions-hit-growing-number-cyberattacks/2413411002/][billions of people
10affected by data breaches each year]], there's a greater need to introduce strong
11information security systems. If you think you've been part of a breach, or you
12want to check and see, you can use [[https://haveibeenpwned.com/][Have I Been Pwned]] to see if your email has
13been involved in any public breaches. Remember that there's a possibility that a
14company experienced a breach and did not report it to anyone.
1815
1916** How Do I Protect Myself?
20The first place to start with any personal security check-up is to
21gather a list of all the different websites, apps, or programs that
22require you to have login credentials. Optionally, once you know where
23your information is being stored, you can sort the list from the
24most-important items such as banks or government logins to less
25important items such as your favorite meme site. You will want to ensure
26that your critical logins are secure before getting to the others.
17The first place to start with any personal security check-up is to gather a list
18of all the different websites, apps, or programs that require you to have login
19credentials. Optionally, once you know where your information is being stored,
20you can sort the list from the most-important items such as banks or government
21logins to less important items such as your favorite meme site. You will want to
22ensure that your critical logins are secure before getting to the others.
2723
2824Once you think you have a good idea of all your different authentication
29methods, I recommend using a password manager such as
30[[https://bitwarden.com/][Bitwarden]]. Using a password manager allows
31you to automatically save your logins, create randomized passwords, and
32transfer passwords across devices. However, you'll need to memorize your
33"vault password" that allows you to open the password manager. It's
34important to make this something hard to guess since it would allow
35anyone who has it to access every password you've stored in there.
25methods, I recommend using a password manager such as [[https://bitwarden.com/][Bitwarden]]. Using a
26password manager allows you to automatically save your logins, create randomized
27passwords, and transfer passwords across devices. However, you'll need to
28memorize your "vault password" that allows you to open the password manager.
29It's important to make this something hard to guess since it would allow anyone
30who has it to access every password you've stored in there.
3631
37Personally, I recommend using a
38[[https://en.wikipedia.org/wiki/Passphrase][passphrase]] instead of a
39[[https://en.wikipedia.org/wiki/Password][password]] for your vault
40password. Instead of using a string of characters (whether random or
41simple), use a phrase and add in symbols and a number. For example, your
42vault password could be =Racing-Alphabet-Gourd-Parrot3=. Swap the
43symbols out for whichever symbol you want, move the number around, and
44fine-tune the passphrase until you are confident that you can remember
45it whenever necessary.
32Personally, I recommend using a [[https://en.wikipedia.org/wiki/Passphrase][passphrase]] instead of a [[https://en.wikipedia.org/wiki/Password][password]] for your vault
33password. Instead of using a string of characters (whether random or simple),
34use a phrase and add in symbols and a number. For example, your vault password
35could be =Racing-Alphabet-Gourd-Parrot3=. Swap the symbols out for whichever
36symbol you want, move the number around, and fine-tune the passphrase until you
37are confident that you can remember it whenever necessary.
4638
47Once you've stored your passwords, make sure you continually check up on
48your account and make sure you aren't following bad password practices.
49Krebs on Security has a great
50[[https://krebsonsecurity.com/password-dos-and-donts/][blog post on
51password recommendations]]. Any time that a data breach happens, make
52sure you check to see if you were included, and if you need to reset any
53account passwords.
39Once you've stored your passwords, make sure you continually check up on your
40account and make sure you aren't following bad password practices. Krebs on
41Security has a great [[https://krebsonsecurity.com/password-dos-and-donts/][blog post on password recommendations]]. Any time that a data
42breach happens, make sure you check to see if you were included, and if you need
43to reset any account passwords.
5444
5545* Developers
5646** What Are the Basic Requirements?
57When developing any password-protected application, there are a few
58basic rules that anyone should follow even if they do not follow any
59official guidelines such as NIST. The foremost practice is to require
60users to use passwords that are at least 8 characters and cannot easily
61be guessed. This sounds extremely simple, but it requires quite a few
62different strategies. First, the application should check the potential
63passwords against a dictionary of insecure passwords such =password=,
64=1234abc=, or =application_name=.
47When developing any password-protected application, there are a few basic rules
48that anyone should follow even if they do not follow any official guidelines
49such as NIST. The foremost practice is to require users to use passwords that
50are at least 8 characters and cannot easily be guessed. This sounds extremely
51simple, but it requires quite a few different strategies. First, the application
52should check the potential passwords against a dictionary of insecure passwords
53such =password=, =1234abc=, or =application_name=.
6554
66Next, the application should offer guidance on the strength of passwords
67being entered during enrollment. Further, NIST officially recommends
68*not** implementing any composition rules that make passwords hard to
69remember (e.g. passwords with letters, numbers, and special characters)
70and instead encouraging the use of long pass phrases which can include
71spaces. It should be noted that to be able to keep spaces within
72passwords, all unicode characters should be supported, and passwords
73should not be truncated.
55Next, the application should offer guidance on the strength of passwords being
56entered during enrollment. Further, NIST officially recommends *not**
57implementing any composition rules that make passwords hard to remember (e.g.
58passwords with letters, numbers, and special characters) and instead encouraging
59the use of long pass phrases which can include spaces. It should be noted that
60to be able to keep spaces within passwords, all unicode characters should be
61supported, and passwords should not be truncated.
7462
7563** What Does NIST Recommend?
76The National Institute of Standards and Technology
77([[https://www.nist.gov][NIST]]) in the US Department of Commerce
78regularly publishes information around information security and digital
79identity guidelines. Recently, NIST published
80[[https://pages.nist.gov/800-63-3/sp800-63b.html][Special Publication
64The National Institute of Standards and Technology ([[https://www.nist.gov][NIST]]) in the US Department
65of Commerce regularly publishes information around information security and
66digital identity guidelines. Recently, NIST published [[https://pages.nist.gov/800-63-3/sp800-63b.html][Special Publication
8167800-63b]]: Digital Identity Guidelines and Authentication and Lifecycle
8268Management.
8369
8470#+begin_quote
85A Memorized Secret authenticator - commonly referred to as a password
86or, if numeric, a PIN - is a secret value intended to be chosen and
87memorized by the user. Memorized secrets need to be of sufficient
88complexity and secrecy that it would be impractical for an attacker to
89guess or otherwise discover the correct secret value. A memorized secret
90is something you know.
71A Memorized Secret authenticator - commonly referred to as a password or, if
72numeric, a PIN - is a secret value intended to be chosen and memorized by the
73user. Memorized secrets need to be of sufficient complexity and secrecy that it
74would be impractical for an attacker to guess or otherwise discover the correct
75secret value. A memorized secret is something you know.
9176
9277- NIST Special Publication 800-63B
9378#+end_quote
9479
95NIST offers a lot of guidance on passwords, but I'm going to highlight
96just a few of the important factors:
80NIST offers a lot of guidance on passwords, but I'm going to highlight just a
81few of the important factors:
9782
98- Require passwords to be a minimum of 8 characters (6 characters if
99 randomly generated and be generated using an approved random bit
100 generator).
101- Compare potential passwords against a list that contains values known
102 to be commonly-used, expected, or compromised.
83- Require passwords to be a minimum of 8 characters (6 characters if randomly
84 generated and be generated using an approved random bit generator).
85- Compare potential passwords against a list that contains values known to be
86 commonly-used, expected, or compromised.
10387- Offer guidance on password strength, such as a strength meter.
10488- Implement a rate-limiting mechanism to limit the number of failed
10589 authentication attempts for each user account.
106- Do not require composition rules for passwords and do not require
107 passwords to be changed periodically (unless compromised).
108- Allow pasting of user identification and passwords to facilitate the
109 use of password managers.
90- Do not require composition rules for passwords and do not require passwords to
91 be changed periodically (unless compromised).
92- Allow pasting of user identification and passwords to facilitate the use of
93 password managers.
11094- Allow users to view the password as it is being entered.
111- Use secure forms of communication and storage, including salting and
112 hashing passwords using a one-way key derivation function.
95- Use secure forms of communication and storage, including salting and hashing
96 passwords using a one-way key derivation function.
11397
114NIST offers further guidance on other devices that require specific
115security policies, querying for passwords, and more. All the information
116discussed so far comes from
117[[https://pages.nist.gov/800-63-3/sp800-63b.html][NIST SP800-63b]] but
118NIST offers a lot of information on digital identities, enrollment,
119identity proofing, authentication, lifecycle management, federation, and
120assertions in the total [[https://pages.nist.gov/800-63-3/][NIST
121SP800-63 Digital Identity Guidelines]].
98NIST offers further guidance on other devices that require specific security
99policies, querying for passwords, and more. All the information discussed so far
100comes from [[https://pages.nist.gov/800-63-3/sp800-63b.html][NIST SP800-63b]] but NIST offers a lot of information on digital
101identities, enrollment, identity proofing, authentication, lifecycle management,
102federation, and assertions in the total [[https://pages.nist.gov/800-63-3/][NIST SP800-63 Digital Identity
103Guidelines]].
content/blog/2020-01-25-linux-software.org +64 −86
@@ -8,24 +8,22 @@
88#+caption: Etcher Screenshot
99[[https://img.cleberg.net/blog/20200125-the-best-linux-software/etcher.png]]
1010
11[[https://www.balena.io/etcher/][Etcher]] is a quick and easy way to
12burn ISO images to CDs and USB devices. There are two different ways you
13can install this program. First, you can navigate to the
14[[https://www.balena.io/etcher/][official website]] and download the
15AppImage file, which can run without installation.
16
17However, AppImage files are not executable by default, so you'll either
18need to right-click to open the properties of the file and click the
19"Allow executing file as program" box in the Permissions tab or use the
20following command:
11[[https://www.balena.io/etcher/][Etcher]] is a quick and easy way to burn ISO images to CDs and USB devices. There
12are two different ways you can install this program. First, you can navigate to
13the [[https://www.balena.io/etcher/][official website]] and download the AppImage file, which can run without
14installation.
15
16However, AppImage files are not executable by default, so you'll either need to
17right-click to open the properties of the file and click the "Allow executing
18file as program" box in the Permissions tab or use the following command:
2119
2220#+begin_src sh
2321chmod u+x FILE_NAME
2422#+end_src
2523
26If you don't like AppImage files or just prefer repositories, you can
27use the following commands to add the author's repository and install it
28through the command-line only.
24If you don't like AppImage files or just prefer repositories, you can use the
25following commands to add the author's repository and install it through the
26command-line only.
2927
3028First, you'll have to echo the repo and write it to a list file:
3129
@@ -45,8 +43,7 @@ Finally, update the repositories and install the app.
4543sudo apt update && sudo apt install balena-etcher-electron
4644#+end_src
4745
48Using Arch, Manjaro, or another distro using the AUR? Use this command
49instead:
46Using Arch, Manjaro, or another distro using the AUR? Use this command instead:
5047
5148#+begin_src sh
5249sudo pacman -S etcher
@@ -56,11 +53,9 @@ sudo pacman -S etcher
5653#+caption: Atom Screenshot
5754[[https://img.cleberg.net/blog/20200125-the-best-linux-software/atom.png]]
5855
59[[https://atom.io][Atom]] is the self-proclaimed "hackable text editor
60for the 21st century". This text editor is made by GitHub,
61[[https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/][now
62owned by Microsoft]], and has some of the best add-ons available to
63customize the layout and abilities of the app.
56[[https://atom.io][Atom]] is the self-proclaimed "hackable text editor for the 21st century". This
57text editor is made by GitHub, [[https://news.microsoft.com/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/][now owned by Microsoft]], and has some of the best
58add-ons available to customize the layout and abilities of the app.
6459
6560First, add the Atom repository to your sources.
6661
@@ -74,26 +69,23 @@ Next, update your package listings and install atom.
7469sudo apt update && sudo apt install atom
7570#+end_src
7671
77If you have issues updating your packages with the Atom repository,
78you'll need to use the snap package described below instead of the
79repository. To remove the repository we just added, use this command:
72If you have issues updating your packages with the Atom repository, you'll need
73to use the snap package described below instead of the repository. To remove the
74repository we just added, use this command:
8075
8176#+begin_src sh
8277sudo add-apt-repository -r ppa:webupd8team/atom
8378#+end_src
8479
85You can also install Atom as a snap package, but it must be installed
86with the =--classic= flag. A
87[[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full
88explanation is available]] if you'd like to read more about why you need
89the classic flag.
80You can also install Atom as a snap package, but it must be installed with the
81=--classic= flag. A [[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full explanation is available]] if you'd like to read more
82about why you need the classic flag.
9083
9184#+begin_src sh
9285snap install atom --classic
9386#+end_src
9487
95Using Arch, Manjaro, or another distro using the AUR? Use this command
96instead:
88Using Arch, Manjaro, or another distro using the AUR? Use this command instead:
9789
9890#+begin_src sh
9991sudo pacman -S atom
@@ -103,28 +95,23 @@ sudo pacman -S atom
10395#+caption: Visual Studio Code Code
10496[[https://img.cleberg.net/blog/20200125-the-best-linux-software/vscode.png]]
10597
106[[https://code.visualstudio.com][Visual Studio Code]] is yet another
107fantastic choice for programming on Linux, especially if you need those
108extra add-ons to spice up your late-night coding sessions. The theme
109used in the screenshot is
110[[https://marketplace.visualstudio.com/items?itemName=EliverLara.mars][Mars]]
111by theme creator [[https://github.com/EliverLara][Eliver Lara]], who
112makes a ton of great themes for VS Code, Atom, and various Linux desktop
98[[https://code.visualstudio.com][Visual Studio Code]] is yet another fantastic choice for programming on Linux,
99especially if you need those extra add-ons to spice up your late-night coding
100sessions. The theme used in the screenshot is [[https://marketplace.visualstudio.com/items?itemName=EliverLara.mars][Mars]] by theme creator [[https://github.com/EliverLara][Eliver Lara]],
101who makes a ton of great themes for VS Code, Atom, and various Linux desktop
113102environments.
114103
115To install VS Code, you'll need to download the =.deb= file from the
116official website. Once you've downloaded the file, either double-click
117it to install through the Software Center or run the following command:
104To install VS Code, you'll need to download the =.deb= file from the official
105website. Once you've downloaded the file, either double-click it to install
106through the Software Center or run the following command:
118107
119108#+begin_src sh
120109sudo dpkg -i FILE_NAME.deb
121110#+end_src
122111
123You can also install VS Code as a snap package, but it must be installed
124with the =--classic= flag. A
125[[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full
126explanation is available]] if you'd like to read more about why you need
127the classic flag.
112You can also install VS Code as a snap package, but it must be installed with
113the =--classic= flag. A [[https://language-bash.com/blog/how-to-snap-introducing-classic-confinement][full explanation is available]] if you'd like to read more
114about why you need the classic flag.
128115
129116#+begin_src sh
130117snap install code --classic
@@ -141,19 +128,18 @@ sudo pacman -S yay binutils make gcc pkg-config fakeroot yay -S visual-studio-co
141128#+caption: Gnome Tweaks Screenshot
142129[[https://img.cleberg.net/blog/20200125-the-best-linux-software/gnome-tweaks.png]]
143130
144[[https://gitlab.gnome.org/GNOME/gnome-tweaks][Gnome Tweaks]] is the
145ultimate tool to use if you want to customize your GNOME desktop
146environment. This is how you can switch application themes (GTK), shell
147themes, icons, fonts, and more. To install GNOME Tweaks on Ubuntu, you
148just need to install the official package.
131[[https://gitlab.gnome.org/GNOME/gnome-tweaks][Gnome Tweaks]] is the ultimate tool to use if you want to customize your GNOME
132desktop environment. This is how you can switch application themes (GTK), shell
133themes, icons, fonts, and more. To install GNOME Tweaks on Ubuntu, you just need
134to install the official package.
149135
150136#+begin_src sh
151137sudo apt install gnome-tweaks
152138#+end_src
153139
154If you've installed Manjaro or Arch with Gnome, you should have the
155tweak tool pre-installed. If you're on Fedora, this tool is available as
156an official package:
140If you've installed Manjaro or Arch with Gnome, you should have the tweak tool
141pre-installed. If you're on Fedora, this tool is available as an official
142package:
157143
158144#+begin_src sh
159145sudo dnf install gnome-tweaks
@@ -163,22 +149,20 @@ sudo dnf install gnome-tweaks
163149#+caption: Steam Screenshot
164150[[https://img.cleberg.net/blog/20200125-the-best-linux-software/steam.png]]
165151
166[[https://steampowered.com][Steam]] is one of the most popular gaming
167libraries for computers and is one of the main reasons that many people
168have been able to switch to Linux in recent years, thanks to Steam
169Proton, which makes it easier to play games not officially created for
170Linux platforms.
152[[https://steampowered.com][Steam]] is one of the most popular gaming libraries for computers and is one of
153the main reasons that many people have been able to switch to Linux in recent
154years, thanks to Steam Proton, which makes it easier to play games not
155officially created for Linux platforms.
171156
172To install Steam on Ubuntu, you just need to install the official
173package.
157To install Steam on Ubuntu, you just need to install the official package.
174158
175159#+begin_src sh
176160sudo apt install steam-installer
177161#+end_src
178162
179For Arch-based systems, you'll simply need to install the =steam=
180package. However, this requires that you enable the =multilib= source.
181To do so, use the following command:
163For Arch-based systems, you'll simply need to install the =steam= package.
164However, this requires that you enable the =multilib= source. To do so, use the
165following command:
182166
183167#+begin_src sh
184168sudo nano /etc/pacman.conf
@@ -210,27 +194,25 @@ Click Here.]]
210194#+caption: Neofetch Screenshot
211195[[https://img.cleberg.net/blog/20200125-the-best-linux-software/neofetch.png]]
212196
213[[https://github.com/dylanaraps/neofetch][Neofetch]] is a customizable
214tool used in the command-line to show system information. This is
215exceptionally useful if you want to see your system's information
216quickly without the clutter of some resource-heavy GUI apps.
197[[https://github.com/dylanaraps/neofetch][Neofetch]] is a customizable tool used in the command-line to show system
198information. This is exceptionally useful if you want to see your system's
199information quickly without the clutter of some resource-heavy GUI apps.
217200
218This is an official package if you're running Ubuntu 17.04 or later, so
219simply use the following command:
201This is an official package if you're running Ubuntu 17.04 or later, so simply
202use the following command:
220203
221204#+begin_src sh
222205sudo apt install neofetch
223206#+end_src
224207
225If you're running Ubuntu 16.10 or earlier, you'll have to use a series
226of commands:
208If you're running Ubuntu 16.10 or earlier, you'll have to use a series of
209commands:
227210
228211#+begin_src sh
229212sudo add-apt-repository ppa:dawidd0811/neofetch; sudo apt update; sudo apt install neofetch
230213#+end_src
231214
232Using Arch, Manjaro, or another distro using the AUR? Use this command
233instead:
215Using Arch, Manjaro, or another distro using the AUR? Use this command instead:
234216
235217#+begin_src sh
236218sudo pacman -S neofetch
@@ -240,31 +222,27 @@ sudo pacman -S neofetch
240222#+caption: yt-dlp Screenshot
241223[[https://img.cleberg.net/blog/20200125-the-best-linux-software/yt-dlp.png]]
242224
243[[https://github.com/yt-dlp/yt-dlp][yt-dlp]] is an extremely handy
244command-line tool that allows you to download video or audio files from
245various websites, such as YouTube. There are a ton of different options
246when running this package, so be sure to run =yt-dlp --help= first to
247look through everything you can do (or give up and search for the best
225[[https://github.com/yt-dlp/yt-dlp][yt-dlp]] is an extremely handy command-line tool that allows you to download video
226or audio files from various websites, such as YouTube. There are a ton of
227different options when running this package, so be sure to run =yt-dlp --help=
228first to look through everything you can do (or give up and search for the best
248229config online).
249230
250While this shouldn't be a problem for most users, yt-dlp requires Python
2512.6, 2.7, or 3.2+ to work correctly, so install Python if you don't have
252it already. You can check to see if you have Python installed by
253running:
231While this shouldn't be a problem for most users, yt-dlp requires Python 2.6,
2322.7, or 3.2+ to work correctly, so install Python if you don't have it already.
233You can check to see if you have Python installed by running:
254234
255235#+begin_src sh
256236python -V
257237#+end_src
258238
259To get the youtube-dl package, simply curl the URL and output the
260results.
239To get the youtube-dl package, simply curl the URL and output the results.
261240
262241#+begin_src sh
263242sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
264243#+end_src
265244
266Finally, make the file executable so that it can be run from the
267command-line.
245Finally, make the file executable so that it can be run from the command-line.
268246
269247#+begin_src sh
270248sudo chmod a+rx /usr/local/bin/yt-dlp
content/blog/2020-01-26-steam-on-ntfs.org +28 −30
@@ -7,28 +7,28 @@
77#+caption: Steam Screenshot
88[[https://img.cleberg.net/blog/20200125-the-best-linux-software/steam.png]]
99
10If you want to see how to install Steam on Linux, see my other post:
11[[../linux-software/][Linux Software]].
10If you want to see how to install Steam on Linux, see my other post: [[../linux-software/][Linux
11Software]].
1212
13Are you having trouble launching games, even though they've installed
14correctly? This may happen if you're storing your games on an
15NTFS-formatted drive. This shouldn't be an issue if you're storing your
16games on the same drive that Steam is on, but some gamers prefer to put
17Steam on their main drive and game files on another SSD or HDD.
13Are you having trouble launching games, even though they've installed correctly?
14This may happen if you're storing your games on an NTFS-formatted drive. This
15shouldn't be an issue if you're storing your games on the same drive that Steam
16is on, but some gamers prefer to put Steam on their main drive and game files on
17another SSD or HDD.
1818
19To fix this problem, you'll need to try a few things. First, you'll need
20to install the =ntfs-3g= package, which is meant for better
21interoperability with Linux.
19To fix this problem, you'll need to try a few things. First, you'll need to
20install the =ntfs-3g= package, which is meant for better interoperability with
21Linux.
2222
2323#+begin_src sh
2424sudo apt install ntfs-3g
2525#+end_src
2626
27Next, you should set up the =/etc/fstab= file to automatically mount
28your drives on boot. To automatically mount your drives when the
29computer boots up, you'll have to create the folders you want to mount
30your drive to first. I store mine in the =/mnt= folder using names that
31I'll recognize, but you can create your folders wherever you want.
27Next, you should set up the =/etc/fstab= file to automatically mount your drives
28on boot. To automatically mount your drives when the computer boots up, you'll
29have to create the folders you want to mount your drive to first. I store mine
30in the =/mnt= folder using names that I'll recognize, but you can create your
31folders wherever you want.
3232
3333#+begin_src sh
3434mkdir /path/to/folder
@@ -40,14 +40,13 @@ For example:
4040mkdir /mnt/steam_library
4141#+end_src
4242
43To automatically mount drives upon system boot, you will need to collect
44a few items. The UUID is the identification number connected to
45whichever drive you're using to store Steam games.
43To automatically mount drives upon system boot, you will need to collect a few
44items. The UUID is the identification number connected to whichever drive you're
45using to store Steam games.
4646
47Drives are usually labeled similar to =/dev/nvme0n1p1= or =/dev/sda1=,
48so you'll need to find the line in the output of the command below that
49correlates to your drive and copy the UUID over to the =/etc/fstab=
50file.
47Drives are usually labeled similar to =/dev/nvme0n1p1= or =/dev/sda1=, so you'll
48need to find the line in the output of the command below that correlates to your
49drive and copy the UUID over to the =/etc/fstab= file.
5150
5251#+begin_src sh
5352sudo blkid | grep UUID=
@@ -60,8 +59,8 @@ command:
6059id -u && id -g
6160#+end_src
6261
63Now that you have collected the necessary information, open the
64=/etc/fstab= file:
62Now that you have collected the necessary information, open the =/etc/fstab=
63file:
6564
6665#+begin_src sh
6766sudo nano /etc/fstab
@@ -74,9 +73,8 @@ Each drive you want to mount on boot should have its own line in the
7473UUID=B64E53824E5339F7 /mnt/steam_library ntfs-3g uid=1000,gid=1000 0 0
7574#+end_src
7675
77Now all you need to do is unmount your drive and re-mount it. You can
78unmount the drive by doing this (be sure to use the correct drive name
79here):
76Now all you need to do is unmount your drive and re-mount it. You can unmount
77the drive by doing this (be sure to use the correct drive name here):
8078
8179#+begin_src sh
8280sudo umount /dev/sdxX
@@ -88,6 +86,6 @@ You can re-mount all your drives by executing the following:
8886sudo mount -a
8987#+end_src
9088
91If you don't know what your drive name is, or you're nervous about
92unmounting and re-mounting, simply reboot your computer, and it will be
93done for you automatically.
89If you don't know what your drive name is, or you're nervous about unmounting
90and re-mounting, simply reboot your computer, and it will be done for you
91automatically.
content/blog/2020-02-09-cryptography-basics.org +125 −138
@@ -4,168 +4,155 @@
44#+filetags: :security:
55
66* Similar Article Available
7If you haven't already, feel free to read my post on
8[[../aes-encryption/][AES Encryption]].
7If you haven't already, feel free to read my post on [[../aes-encryption/][AES Encryption]].
98
109* What is Cryptography?
1110In layman's terms, cryptography is a process that can change data from a
12readable format into an unreadable format (and vice-versa) through a
13series of processes and secrets. More technically, this is the Internet
14Security Glossary's definition:
11readable format into an unreadable format (and vice-versa) through a series of
12processes and secrets. More technically, this is the Internet Security
13Glossary's definition:
1514
1615#+begin_quote
17[Cryptography is] the mathematical science that deals with transforming
18data to render its meaning unintelligible (i.e., to hide its semantic
19content), prevent its undetected alteration, or prevent its unauthorized
20use. If the transformation is reversible, cryptography also deals with
21restoring encrypted data to an intelligible form.
22
23- [[https://tools.ietf.org/html/rfc2828][Internet Security Glossary
24 (2000)]]
16[Cryptography is] the mathematical science that deals with transforming data to
17render its meaning unintelligible (i.e., to hide its semantic content), prevent
18its undetected alteration, or prevent its unauthorized use. If the
19transformation is reversible, cryptography also deals with restoring encrypted
20data to an intelligible form.
2521
22- [[https://tools.ietf.org/html/rfc2828][Internet Security Glossary (2000)]]
2623#+end_quote
2724
28Cryptography cannot offer protection against the loss of data; it simply
29offers encryption methods to protect data at-rest and data in-traffic.
30At a high-level, encrypted is when plaintext data is encrypted to
31ciphertext (a secure form of text that cannot be understood unless
32decrypted back to plaintext). The encryption process is completed
33through the use of a mathematical function that utilizes one or more
34values called keys to encrypt or decrypt the data.
25Cryptography cannot offer protection against the loss of data; it simply offers
26encryption methods to protect data at-rest and data in-traffic. At a high-level,
27encrypted is when plaintext data is encrypted to ciphertext (a secure form of
28text that cannot be understood unless decrypted back to plaintext). The
29encryption process is completed through the use of a mathematical function that
30utilizes one or more values called keys to encrypt or decrypt the data.
3531
3632* Key Elements of Cryptographic Systems
37To create or evaluate a cryptographic system, you need to know the
38essential pieces to the system:
39
40- *Encryption Algorithm (Primitive):** A mathematical process that
41 encrypts and decrypts data.
42- *Encryption Key:** A string of bits used within the encryption
43 algorithm as the secret that allows successful encryption or
44 decryption of data.
45- *Key Length (Size):** The maximum number of bits within the encryption
46 key. It's important to remember that key size is regulated in many
47 countries.
48- *Message Digest:** A smaller, fixed-size bit string version of the
49 original message. This is practically infeasible to reverse, which is
50 why it's commonly used to verify integrity.
33To create or evaluate a cryptographic system, you need to know the essential
34pieces to the system:
35
36- *Encryption Algorithm (Primitive):** A mathematical process that encrypts and
37 decrypts data.
38- *Encryption Key:** A string of bits used within the encryption algorithm as
39 the secret that allows successful encryption or decryption of data.
40- *Key Length (Size):** The maximum number of bits within the encryption key.
41 It's important to remember that key size is regulated in many countries.
42- *Message Digest:** A smaller, fixed-size bit string version of the original
43 message. This is practically infeasible to reverse, which is why it's commonly
44 used to verify integrity.
5145
5246* Symmetric Systems (Secret Key Cryptography)
53Symmetric cryptography utilizes a secret, bidirectional key to perform
54both encryption and decryption of the data. The most common
55implementation of symmetric cryptography is the Advanced Encryption
56Standard, which uses keys that are 128 bits to 256 bits in size. This
57standard came after the National Institute of Standards and Technology
58(NIST) decided to retire the Data Encryption Standard (DES) in 2001.
59
60Since brute force attacks strongly correlate with key length, the 56-bit
61key length of DES was considered insecure after it was publicly broken
62in under 24 hours. However, there is a modern implementation of DES
63called Triple DES where the DES method is applied three times to each
64data block.
65
66The main advantages to symmetric systems are the ease of use, since only
67one key is required for both encryption and decryption, and the
68simplicity of the algorithms. This helps with bulk data encryption that
69may unnecessarily waste time and power using asymmetric systems.
70
71However, symmetric systems have disadvantages to keep in mind. Since the
72key is private, it can be difficult to safely distribute keys to
73communication partners. Additionally, the key cannot be used to sign
74messages since it's necessary to keep the key private.
47Symmetric cryptography utilizes a secret, bidirectional key to perform both
48encryption and decryption of the data. The most common implementation of
49symmetric cryptography is the Advanced Encryption Standard, which uses keys that
50are 128 bits to 256 bits in size. This standard came after the National
51Institute of Standards and Technology (NIST) decided to retire the Data
52Encryption Standard (DES) in 2001.
53
54Since brute force attacks strongly correlate with key length, the 56-bit key
55length of DES was considered insecure after it was publicly broken in under 24
56hours. However, there is a modern implementation of DES called Triple DES where
57the DES method is applied three times to each data block.
58
59The main advantages to symmetric systems are the ease of use, since only one key
60is required for both encryption and decryption, and the simplicity of the
61algorithms. This helps with bulk data encryption that may unnecessarily waste
62time and power using asymmetric systems.
63
64However, symmetric systems have disadvantages to keep in mind. Since the key is
65private, it can be difficult to safely distribute keys to communication
66partners. Additionally, the key cannot be used to sign messages since it's
67necessary to keep the key private.
7568
7669* Asymmetric Systems (Public Key Cryptography)
77Asymmetric cryptography utilizes two keys within the system: a secret
78key that is privately-held and a public key that can be distributed
79freely. The interesting aspect of asymmetric cryptography is that either
80key can be used to encrypt the data, there's no rule that dictates which
81key must be used for encryption. Once one key is used to encrypt the
82data, only the other key can be used to decrypt the data. This means
83that if the private key encrypts the data, only the public key can
84decrypt the data.
85
86An advantage of this system is that if you successfully decrypt data
87using one of the keys, you can be sure of the sender since only the
88other key could have encrypted the data.
89
90One of the major implementations of an asymmetric system is a digital
91signature. A digital signature can be generated using the sender's
92private key, or a one-way hash function and is used to provide assurance
93for the integrity and authenticity of the message. A couple common
94message digest algorithms are SHA-256 and SHA-512, which securely
95compress data and produce a 128-bit message digest.
96
97It should be noted that man-in-the-middle attacks are one of the risks
98with digital signatures and public keys. To combat this, applications
99often use a public key infrastructure (PKI) to independently
100authenticate the validity of signatures and keys.
101
102Due to the large key size and
103[[https://crypto.stackexchange.com/a/591][inefficient mathematical
104functions]] of asymmetric encryption, elliptical curve cryptography
105(ECC) is often used to increase security while using fewer resources.
70Asymmetric cryptography utilizes two keys within the system: a secret key that
71is privately-held and a public key that can be distributed freely. The
72interesting aspect of asymmetric cryptography is that either key can be used to
73encrypt the data, there's no rule that dictates which key must be used for
74encryption. Once one key is used to encrypt the data, only the other key can be
75used to decrypt the data. This means that if the private key encrypts the data,
76only the public key can decrypt the data.
77
78An advantage of this system is that if you successfully decrypt data using one
79of the keys, you can be sure of the sender since only the other key could have
80encrypted the data.
81
82One of the major implementations of an asymmetric system is a digital signature.
83A digital signature can be generated using the sender's private key, or a
84one-way hash function and is used to provide assurance for the integrity and
85authenticity of the message. A couple common message digest algorithms are
86SHA-256 and SHA-512, which securely compress data and produce a 128-bit message
87digest.
88
89It should be noted that man-in-the-middle attacks are one of the risks with
90digital signatures and public keys. To combat this, applications often use a
91public key infrastructure (PKI) to independently authenticate the validity of
92signatures and keys.
93
94Due to the large key size and [[https://crypto.stackexchange.com/a/591][inefficient mathematical functions]] of asymmetric
95encryption, elliptical curve cryptography (ECC) is often used to increase
96security while using fewer resources.
10697
10798* Applications of Cryptographic Systems
108There are quite a few implementations of cryptographic systems around
109the world. Here are a few popular examples:
99There are quite a few implementations of cryptographic systems around the world.
100Here are a few popular examples:
110101
111102*Transport Layer Security (TLS):** One of the most famous cryptographic
112solutions created is TLS, a session-layered or connection-layered
113internet protocol that allows for secure communications between browsers
114and servers. Using handshakes, peer negotiation, and authentication
115allows TLS to prevent eavesdropping and malicious transformation of
116data. The major reason for TLS popularity is that a major vulnerability
117was found in the SSL protocol in 2014. Instead of SSL, TLS can be used
118with HTTP to form HTTPS and is the preferred method for modern web
119development due to its increased security.
120
121*Secure Hypertext Transfer Protocol (HTTPS):** An application layer
122protocol that allows for secure transport of data between servers and
123web clients. One of the unique parts of HTTPS is that it uses a secured
124port number instead of the default web port address.
125
126*Virtual Private Network (VPN):** VPNs are made to securely extend a
127private network across public networks by utilizing an encrypted layered
128tunneling protocol paired with an authentication method, such as
129usernames and passwords. This technology originally allowed remote
130employees to access their company's data but have evolved into one of
131the top choices for anyone who wishes to mask their sensitive personal
132data.
103solutions created is TLS, a session-layered or connection-layered internet
104protocol that allows for secure communications between browsers and servers.
105Using handshakes, peer negotiation, and authentication allows TLS to prevent
106eavesdropping and malicious transformation of data. The major reason for TLS
107popularity is that a major vulnerability was found in the SSL protocol in 2014.
108Instead of SSL, TLS can be used with HTTP to form HTTPS and is the preferred
109method for modern web development due to its increased security.
110
111*Secure Hypertext Transfer Protocol (HTTPS):** An application layer protocol
112that allows for secure transport of data between servers and web clients. One of
113the unique parts of HTTPS is that it uses a secured port number instead of the
114default web port address.
115
116*Virtual Private Network (VPN):** VPNs are made to securely extend a private
117network across public networks by utilizing an encrypted layered tunneling
118protocol paired with an authentication method, such as usernames and passwords.
119This technology originally allowed remote employees to access their company's
120data but have evolved into one of the top choices for anyone who wishes to mask
121their sensitive personal data.
133122
134123*Internet Protocol Security (IPSec):** This protocol suite facilitates
135124communication between two or more hosts or subnets by authenticating and
136encrypting the data packets. IPSec is used in a lot of VPNs to establish
137the VPN connection through the transport and tunnel mode encryption
138methods. IPSec encrypts just the data portion of packets in the
139transport methods, but it encrypts both the data and headers in the
140tunnel method (introducing an additional header for authentication).
141
142*Secure Shell (SSH):** SSH is another network protocol used to protect
143network services by authenticating users through a secure channel. This
144protocol is often used for command-line (shell) functions such as remote
145shell commands, logins, and file transfers.
146
147*Kerberos:** Developed by MIT, Kerberos is a computer-network
148authentication protocol that works on the basis of tickets to allow
149nodes communicating over a non-secure network to prove their identity to
150one another securely. This is most commonly used in business
151environments when used as the authentication and encryption method for
152Windows Active Directory (AD).
125encrypting the data packets. IPSec is used in a lot of VPNs to establish the VPN
126connection through the transport and tunnel mode encryption methods. IPSec
127encrypts just the data portion of packets in the transport methods, but it
128encrypts both the data and headers in the tunnel method (introducing an
129additional header for authentication).
130
131*Secure Shell (SSH):** SSH is another network protocol used to protect network
132services by authenticating users through a secure channel. This protocol is
133often used for command-line (shell) functions such as remote shell commands,
134logins, and file transfers.
135
136*Kerberos:** Developed by MIT, Kerberos is a computer-network authentication
137protocol that works on the basis of tickets to allow nodes communicating over a
138non-secure network to prove their identity to one another securely. This is most
139commonly used in business environments when used as the authentication and
140encryption method for Windows Active Directory (AD).
153141
154142* Cybersecurity Controls
155If you're someone who needs solutions on how to control risks associated
156with utilizing a crytograhpic system, start with a few basic controls:
143If you're someone who needs solutions on how to control risks associated with
144utilizing a crytograhpic system, start with a few basic controls:
157145
158- *Policies:** A policy on the use of cryptographic controls for
159 protection of information is implemented and is in accordance with
160 organizational objectives.
146- *Policies:** A policy on the use of cryptographic controls for protection of
147 information is implemented and is in accordance with organizational
148 objectives.
161149- *Key management:** A policy on the use, protection and lifetime of
162 cryptographic keys is implemented through the entire application
163 lifecycle.
164- *Key size:** The organization has researched the optimal key size for
165 their purposes, considering national laws, required processing power,
166 and longevity of the solution.
167- *Algorithm selection:** Implemented algorithms are sufficiently
168 appropriate for the business of the organization, robust, and align
169 with recommended guidelines.
150 cryptographic keys is implemented through the entire application lifecycle.
151- *Key size:** The organization has researched the optimal key size for their
152 purposes, considering national laws, required processing power, and longevity
153 of the solution.
154- *Algorithm selection:** Implemented algorithms are sufficiently appropriate
155 for the business of the organization, robust, and align with recommended
156 guidelines.
170157- *Protocol configuration:** Protocols have been reviewed and configured
171158 suitable to the purpose of the business.
content/blog/2020-03-25-session-manager.org +52 −60
@@ -4,44 +4,39 @@
44#+filetags: :privacy:
55
66* Privacy Warning
7The company behind Session (Loki Foundation) is from Australia. If you
8didn't know, Australia has introduced
9[[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]]
10mandating companies comply with government requests to build backdoor
11access into applications. For more information, read my article on
12[[./2020-01-25-aes-encryption.html][AES Encryption]].
7The company behind Session (Loki Foundation) is from Australia. If you didn't
8know, Australia has introduced [[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]] mandating companies comply with
9government requests to build backdoor access into applications. For more
10information, read my article on [[./2020-01-25-aes-encryption.html][AES Encryption]].
1311
1412* About Session
15[[https://getsession.org][Session]] is a private, cross-platform
16messaging app from the [[https://loki.foundation][Loki Foundation]]. As
17someone who has spent years looking for quality alternatives to major
18messaging apps, I was excited when I first heard about Session. Reading
19through [[https://arxiv.org/pdf/2002.04609.pdf][Session's white paper]],
20you can learn the technologies behind the Session app. Part of the
21security of Session comes from the Signal protocol, which was forked as
22the origin of Session.
13[[https://getsession.org][Session]] is a private, cross-platform messaging app from the [[https://loki.foundation][Loki Foundation]]. As
14someone who has spent years looking for quality alternatives to major messaging
15apps, I was excited when I first heard about Session. Reading through [[https://arxiv.org/pdf/2002.04609.pdf][Session's
16white paper]], you can learn the technologies behind the Session app. Part of the
17security of Session comes from the Signal protocol, which was forked as the
18origin of Session.
2319
2420#+begin_quote
25Session is an end-to-end encrypted messenger that removes sensitive
26metadata collection, and is designed for people who want privacy and
27freedom from any forms of surveillance.
21Session is an end-to-end encrypted messenger that removes sensitive metadata
22collection, and is designed for people who want privacy and freedom from any
23forms of surveillance.
2824#+end_quote
2925
3026In general, this app promises security through end-to-end encryption,
31decentralized onion routing, and private identities. The biggest change
32that the Loki Foundation has made to the Signal protocol is removing the
33need for a phone number. Instead, a random identification string is
34generated for any session you create. This means you can create a new
35session for each device if you want to, or link new devices with your
36ID.
27decentralized onion routing, and private identities. The biggest change that the
28Loki Foundation has made to the Signal protocol is removing the need for a phone
29number. Instead, a random identification string is generated for any session you
30create. This means you can create a new session for each device if you want to,
31or link new devices with your ID.
3732
38Since Session's website and white paper describe the details of
39Session's security, I'm going to focus on using the app in this post.
33Since Session's website and white paper describe the details of Session's
34security, I'm going to focus on using the app in this post.
4035
4136* Features
42Since most people are looking for an alternative to a popular chat app,
43I am going to list out the features that Session has so that you are
44able to determine if the app would suit your needs:
37Since most people are looking for an alternative to a popular chat app, I am
38going to list out the features that Session has so that you are able to
39determine if the app would suit your needs:
4540
4641- Multiple device linking (via QR code or ID)
4742- App locking via device screen lock, password, or fingerprint
@@ -55,15 +50,15 @@ able to determine if the app would suit your needs:
5550- Account deletion, including ID, messages, sessions, and contacts
5651
5752* Downloads
58I have tested this app on Ubuntu 19.10, Android 10, macOS Monterey, and
59iOS 15. All apps have worked well without many issues.
53I have tested this app on Ubuntu 19.10, Android 10, macOS Monterey, and iOS 15.
54All apps have worked well without many issues.
6055
61Below is a brief overview of the Session app on Linux. To get this app,
62you'll need to go to the [[https://getsession.org/download/][Downloads]]
63page and click to link to the operating system you're using.
56Below is a brief overview of the Session app on Linux. To get this app, you'll
57need to go to the [[https://getsession.org/download/][Downloads]] page and click to link to the operating system
58you're using.
6459
65For Linux, it will download an AppImage that you'll need to enable with
66the following command:
60For Linux, it will download an AppImage that you'll need to enable with the
61following command:
6762
6863#+begin_src sh
6964sudo chmod u+x session-messenger-desktop-linux-x86_64-1.0.5.AppImage
@@ -73,12 +68,12 @@ sudo chmod u+x session-messenger-desktop-linux-x86_64-1.0.5.AppImage
7368[[https://img.cleberg.net/blog/20200325-session-private-messenger/session_downloads.png]]
7469
7570* Creating an Account
76Once you've installed the app, simply run the app and create your unique
77Session ID. It will look something like this:
71Once you've installed the app, simply run the app and create your unique Session
72ID. It will look something like this:
7873=05af1835afdd63c947b47705867501d6373f486aa1ae05b1f2f3fcd24570eba608=.
7974
80You'll need to set a display name and, optionally, a password. If you
81set a password, you will need to enter it every time you open the app.
75You'll need to set a display name and, optionally, a password. If you set a
76password, you will need to enter it every time you open the app.
8277
8378#+caption: Session Login (Linux)
8479[[https://img.cleberg.net/blog/20200325-session-private-messenger/session_linux_login.png]]
@@ -90,39 +85,36 @@ set a password, you will need to enter it every time you open the app.
9085[[https://img.cleberg.net/blog/20200325-session-private-messenger/session_password_authentication.png]]
9186
9287* Start Messaging
93Once you've created your account and set up your profile details, the
94next step is to start messaging other people. To do so, you'll need to
95share your Session ID with other people. From this point, it's fairly
96straightforward and acts like any other messaging app, so I won't dive
97into much detail here.
88Once you've created your account and set up your profile details, the next step
89is to start messaging other people. To do so, you'll need to share your Session
90ID with other people. From this point, it's fairly straightforward and acts like
91any other messaging app, so I won't dive into much detail here.
9892
9993** macOS
10094#+caption: macOS Conversations
10195[[https://img.cleberg.net/blog/20200325-session-private-messenger/session_macos_conversations.png]]
10296
103One key feature to note is that the desktop application now provides a
104helpful pop-up box explaining the process that Session uses to hide your
105IP address:
97One key feature to note is that the desktop application now provides a helpful
98pop-up box explaining the process that Session uses to hide your IP address:
10699
107100#+caption: IP Address Help Box
108101[[https://img.cleberg.net/blog/20200325-session-private-messenger/session_ip.png]]
109102
110103** iOS
111The mobile app is quite simple and effective, giving you all the
112standard mobile messaging options you'd expect.
104The mobile app is quite simple and effective, giving you all the standard mobile
105messaging options you'd expect.
113106
114107#+caption: iOS App
115108[[https://img.cleberg.net/blog/20200325-session-private-messenger/session_ios.png]]
116109
117110* Potential Issues
118I've discovered one annoying issue that would prevent from using this
119app regularly. On a mobile device, there have been issues with receiving
120messages on time. Even with battery optimization disabled and no network
121restrictions, Session notifications sometimes do not display until I
122open the app or the conversation itself and wait a few moments. This is
123actually one of the reasons I stopped using Signal (this seems fixed as
124of my updates in 2021/2022, so I wouldn't worry about this issue
125anymore).
126
127Looking for another messenger instead of Session? I recommend Signal,
128Matrix, and IRC.
111I've discovered one annoying issue that would prevent from using this app
112regularly. On a mobile device, there have been issues with receiving messages on
113time. Even with battery optimization disabled and no network restrictions,
114Session notifications sometimes do not display until I open the app or the
115conversation itself and wait a few moments. This is actually one of the reasons
116I stopped using Signal (this seems fixed as of my updates in 2021/2022, so I
117wouldn't worry about this issue anymore).
118
119Looking for another messenger instead of Session? I recommend Signal, Matrix,
120and IRC.
content/blog/2020-05-03-homelab.org +76 −89
@@ -4,28 +4,24 @@
44#+filetags: :sysadmin:
55
66* What is a Homelab?
7Starting as a developer, I have largely stayed away from hardware-based
8hobbies (other than building a gaming desktop). However, as the
9quarantine for COVID-19 stretches out further and further, I found
10myself bored and in search of new hobbies. After spending the last few
11months browsing the [[https://www.reddit.com/r/homelab/][r/homelab]]
12subreddit, I decided it was time to jump in and try things out for
13myself.
7Starting as a developer, I have largely stayed away from hardware-based hobbies
8(other than building a gaming desktop). However, as the quarantine for COVID-19
9stretches out further and further, I found myself bored and in search of new
10hobbies. After spending the last few months browsing the [[https://www.reddit.com/r/homelab/][r/homelab]] subreddit, I
11decided it was time to jump in and try things out for myself.
1412
15Since I am a beginner and just recently graduated from college,
16everything I've done so far in my homelab is fairly low-budget.
13Since I am a beginner and just recently graduated from college, everything I've
14done so far in my homelab is fairly low-budget.
1715
1816* Hardware
1917#+caption: HomeLab Diagram
2018[[https://img.cleberg.net/blog/20200503-homelab/homelab-min.png]]
2119
2220*** Raspberry Pi 4
23Luckily, I had actually purchased a
24[[https://www.raspberrypi.org/products/raspberry-pi-4-model-b/][Raspberry
25Pi 4]] before the quarantine started so that I could try to keep Plex
26Media Center running, even while my desktop computer was turned off. I
27started here, using the Pi to hold Plex and Pi-hole until I grew tired
28with the slow performance.
21Luckily, I had actually purchased a [[https://www.raspberrypi.org/products/raspberry-pi-4-model-b/][Raspberry Pi 4]] before the quarantine started
22so that I could try to keep Plex Media Center running, even while my desktop
23computer was turned off. I started here, using the Pi to hold Plex and Pi-hole
24until I grew tired with the slow performance.
2925
3026Here are the specifications for the Pi 4:
3127
@@ -36,12 +32,12 @@ Here are the specifications for the Pi 4:
3632- 64 GB MicroSD Card
3733
3834** Dell Optiplex 5040
39Since I wasn't happy with the Pi as my main server, I turned to
40Craigslist. I know a lot of other homelabbers use Ebay, but I can't seem
41to ever trust it enough to purchase items on there. So I used Craigslist
42and found a Dell Optiplex 5040 desktop computer on sale for $90. While
43this computer might be underpowered, it was one of the few computers
44under $100 that was available during quarantine.
35Since I wasn't happy with the Pi as my main server, I turned to Craigslist. I
36know a lot of other homelabbers use Ebay, but I can't seem to ever trust it
37enough to purchase items on there. So I used Craigslist and found a Dell
38Optiplex 5040 desktop computer on sale for $90. While this computer might be
39underpowered, it was one of the few computers under $100 that was available
40during quarantine.
4541
4642Here are the specifications for the Dell Optiplex 5040:
4743
@@ -51,99 +47,90 @@ Here are the specifications for the Dell Optiplex 5040:
5147- Gigabit Ethernet
5248- 500GB Hard Drive
5349
54While this hardware would be awful for a work computer or a gaming rig,
55it turned out to be wonderful for my server purposes. The only
56limitation I have found so far is the CPU. The i3-6100 only has enough
57power for a single 4k video transcode at a time. I haven't tested more
58than three 1080p streams at a time, but the maximum amount of streams
59I've ever actually used is two.
50While this hardware would be awful for a work computer or a gaming rig, it
51turned out to be wonderful for my server purposes. The only limitation I have
52found so far is the CPU. The i3-6100 only has enough power for a single 4k video
53transcode at a time. I haven't tested more than three 1080p streams at a time,
54but the maximum amount of streams I've ever actually used is two.
6055
6156** WD easystore 10TB & 8TB
62Application storage and temporary files are stored on the internal hard
63drive of the server, but all media files (movies, tv, games, books, etc)
64are stored externally on my WD easystore hard drive. Creating auto-boot
65configurations in the =/etc/fstab= file on my server allows the hard
66drives to automatically mount whenever I need to restart my server.
57Application storage and temporary files are stored on the internal hard drive of
58the server, but all media files (movies, tv, games, books, etc) are stored
59externally on my WD easystore hard drive. Creating auto-boot configurations in
60the =/etc/fstab= file on my server allows the hard drives to automatically mount
61whenever I need to restart my server.
6762
6863#+begin_quote
69Update: In March 2022, I shucked the hard drives out of their external
70cases, put some Kapton tape on the third power pin to prevent power
71shutdowns, and stuck them inside my server tower using internal SATA
72cables.
73
64Update: In March 2022, I shucked the hard drives out of their external cases,
65put some Kapton tape on the third power pin to prevent power shutdowns, and
66stuck them inside my server tower using internal SATA cables.
7467#+end_quote
7568
7669** Netgear Unmanaged Switch
77To manage all the ethernet cords used by my homelab, my desktop, and my
78living room media center, I purchased an 8-port gigabit ethernet switch
79for $50 at my local computer store. This is probably much more than I
80should have spent on an unmanaged switch, but I am comfortable with the
81choice.
70To manage all the ethernet cords used by my homelab, my desktop, and my living
71room media center, I purchased an 8-port gigabit ethernet switch for $50 at my
72local computer store. This is probably much more than I should have spent on an
73unmanaged switch, but I am comfortable with the choice.
8274
8375** TP-Link Managed Switch
84Since I use the unmanaged switch to group all living room devices
85together, I use the managed switch to configure VLANs and secure my
86network.
76Since I use the unmanaged switch to group all living room devices together, I
77use the managed switch to configure VLANs and secure my network.
8778
8879** Arris TM1602A Modem & Sagecom Fast 5280 Router
89My default modem and router, provided by my ISP, are fairly standard.
90The Arris modem supports DOCSIS 3.0, which is something that I
91definitely wanted as a minimum. The Sagecom router is also standard, no
92fancy bells or whistles. However, it does support DHCP and DHCPv6, which
93is something you can use to route all household traffic through a
94pi-hole or firewall.
80My default modem and router, provided by my ISP, are fairly standard. The Arris
81modem supports DOCSIS 3.0, which is something that I definitely wanted as a
82minimum. The Sagecom router is also standard, no fancy bells or whistles.
83However, it does support DHCP and DHCPv6, which is something you can use to
84route all household traffic through a pi-hole or firewall.
9585
9686** TP-Link EAP
97In order to gain better control over the network, I use my own wireless
98access point instead of the one included in the Sagecom router above.
99Now I can control and organize all of my ethernet connections through
100the VLANs on the managed switch and wireless connections through the
101VLANS on the EAP.
87In order to gain better control over the network, I use my own wireless access
88point instead of the one included in the Sagecom router above. Now I can control
89and organize all of my ethernet connections through the VLANs on the managed
90switch and wireless connections through the VLANS on the EAP.
10291
10392** Generic Printer
104The last piece to my homelab is a standard wireless printer. Nothing
105special here.
93The last piece to my homelab is a standard wireless printer. Nothing special
94here.
10695
10796* Software
10897** Ubuntu Server 20.04
109While the 20.04 version of Ubuntu was just released, I always like to
110experiment with new features (and I don't mind breaking my system - it
111just gives me more experience learning how to fix things). So, I have
112Ubuntu Server 20.04 installed on the Dell Optiplex server and Ubuntu
113Server 19.10 installed on the Raspberry Pi. Once I find an acceptable
114use for the Pi, I will most likely switch the operating system.
98While the 20.04 version of Ubuntu was just released, I always like to experiment
99with new features (and I don't mind breaking my system - it just gives me more
100experience learning how to fix things). So, I have Ubuntu Server 20.04 installed
101on the Dell Optiplex server and Ubuntu Server 19.10 installed on the Raspberry
102Pi. Once I find an acceptable use for the Pi, I will most likely switch the
103operating system.
115104
116105** Docker
117I am /very/ new to Docker, but I have had a lot of fun playing with it
118so far. Docker is used to create containers that can hold all the
119contents of a system without interfering with other software on the same
120system. So far, I have successfully installed pi-hole, GitLab, Gogs, and
121Nextcloud in containers. However, I opted to delete all of those so that
122I can reconfigure them more professionally at a later time.
106I am /very/ new to Docker, but I have had a lot of fun playing with it so far.
107Docker is used to create containers that can hold all the contents of a system
108without interfering with other software on the same system. So far, I have
109successfully installed pi-hole, GitLab, Gogs, and Nextcloud in containers.
110However, I opted to delete all of those so that I can reconfigure them more
111professionally at a later time.
123112
124113** Plex Media Server
125Plex is a media center software that allows you to organize your movies,
126TV shows, music, photos, and videos automatically. It will even download
127metadata for you so that you can easily browse these collections.
114Plex is a media center software that allows you to organize your movies, TV
115shows, music, photos, and videos automatically. It will even download metadata
116for you so that you can easily browse these collections.
128117
129118** Pi-hole
130Pi-hole is an alternative ad-blocker that runs at the DNS level,
131allowing you to block traffic when it hits your network, so that you can
132reject any traffic you deem to be bad. Pi-hole uses blacklists and
133whitelists to decide which traffic block and, luckily, there are a lot
134of pre-made lists out there on Reddit, GitHub, etc.
119Pi-hole is an alternative ad-blocker that runs at the DNS level, allowing you to
120block traffic when it hits your network, so that you can reject any traffic you
121deem to be bad. Pi-hole uses blacklists and whitelists to decide which traffic
122block and, luckily, there are a lot of pre-made lists out there on Reddit,
123GitHub, etc.
135124
136125** Nextcloud
137While I had trouble with the Docker version of Nextcloud, I was very
138successful when setting up the snap version. Using this, I was able to
139map Nextcloud to a subdomain of a domain I own in Namecheap.
140Additionally, Nextcloud has an integration with Let's Encrypt that
141allows me to issue certificates automatically to any new domain I
142authorize.
126While I had trouble with the Docker version of Nextcloud, I was very successful
127when setting up the snap version. Using this, I was able to map Nextcloud to a
128subdomain of a domain I own in Namecheap. Additionally, Nextcloud has an
129integration with Let's Encrypt that allows me to issue certificates
130automatically to any new domain I authorize.
143131
144132** Webmin
145To monitor my servers, and the processes running on them, I use the
146Webmin dashboard. This was fairly painless to set up, and I currently
147access it straight through the server's IP address. In the future, I
148will be looking to configure Webmin to use a custom domain just like
149Nextcloud.
133To monitor my servers, and the processes running on them, I use the Webmin
134dashboard. This was fairly painless to set up, and I currently access it
135straight through the server's IP address. In the future, I will be looking to
136configure Webmin to use a custom domain just like Nextcloud.
content/blog/2020-05-19-customizing-ubuntu.org +76 −93
@@ -8,145 +8,128 @@ For inspiration on designing your *nix computer, check out the
88[[https://libredd.it/r/unixporn][r/unixporn]] subreddit!
99
1010* Customizing Ubuntu
11New to Linux and want to add a personal touch to your machine? One of
12the best perks of Linux is that it is *extremely** customizable. You can
13change the styles of the windows, shell (status bars/docks), icons,
14fonts, terminals, and more.
11New to Linux and want to add a personal touch to your machine? One of the best
12perks of Linux is that it is *extremely** customizable. You can change the
13styles of the windows, shell (status bars/docks), icons, fonts, terminals, and
14more.
1515
16In this post, I'm going to go through customization on Ubuntu 20.04
17(GNOME) since most new users tend to choose Ubuntu-based distros. If
18you've found a way to install Arch with i3-gaps, I'm assuming you know
19how to find more advanced tutorials out there on customizations.
16In this post, I'm going to go through customization on Ubuntu 20.04 (GNOME)
17since most new users tend to choose Ubuntu-based distros. If you've found a way
18to install Arch with i3-gaps, I'm assuming you know how to find more advanced
19tutorials out there on customizations.
2020
2121** Required Tools
2222#+caption: Gnome Tweaks
2323[[https://img.cleberg.net/blog/20200519-customizing-ubuntu/gnome-tweaks-min.png]]
2424
25Ubuntu 20.04 ships with the default desktop environment
26[[https://www.gnome.org/][Gnome]], which includes the handy
27=gnome-tweaks= tool to quickly change designs. To install this, just
25Ubuntu 20.04 ships with the default desktop environment [[https://www.gnome.org/][Gnome]], which includes
26the handy =gnome-tweaks= tool to quickly change designs. To install this, just
2827open your terminal and enter the following command:
2928
3029#+begin_src sh
3130sudo apt install gnome-tweaks
3231#+end_src
3332
34After you've finished installing the tool, simply launch the Tweaks
35application, and you'll be able to access the various customization
36options available by default on Ubuntu. You might even like some of the
37pre-installed options.
33After you've finished installing the tool, simply launch the Tweaks application,
34and you'll be able to access the various customization options available by
35default on Ubuntu. You might even like some of the pre-installed options.
3836
3937** GNOME Application Themes
40To change the themes applied to applications in GNOME, you will need to
41change the Applications dropdown in the Appearance section of Tweaks. To
42add more themes, you will have to find your preferred theme online and
43follow the steps below to have it show up in the Tweaks tool. While you
44may find themes anywhere, one of the most popular sites for GNOME themes
45is [[https://www.gnome-look.org/][gnome-look.org]]. This website
38To change the themes applied to applications in GNOME, you will need to change
39the Applications dropdown in the Appearance section of Tweaks. To add more
40themes, you will have to find your preferred theme online and follow the steps
41below to have it show up in the Tweaks tool. While you may find themes anywhere,
42one of the most popular sites for GNOME themes is [[https://www.gnome-look.org/][gnome-look.org]]. This website
4643contains themes for applications, shells, icons, and cursors.
4744
4845Steps to import themes into Tweaks:
4946
50471. Download the theme.
512. These files are usually compressed (.zip, .tar.gz, .tar.xz), so you
52 will need to extract the contents. This is easiest when opening the
53 file explorer, right-clicking the compressed file, and choosing
54 "Extract here."
482. These files are usually compressed (.zip, .tar.gz, .tar.xz), so you will need
49 to extract the contents. This is easiest when opening the file explorer,
50 right-clicking the compressed file, and choosing "Extract here."
55513. Move the theme folder to =/usr/share/themes/=. You can do so with the
5652 following command: =sudo mv theme-folder/ /usr/share/themes/=.
5753 - Icons and cursors will be moved to the =/usr/share/icons/= folder.
58 - Fonts will be moved to the =/usr/share/fonts/= folder
59 Alternatively, you can move them to the
60 =/usr/share/fonts/opentype/= or =/usr/share/fonts/opentype/=
61 folders, if you have a specific font type.
54 - Fonts will be moved to the =/usr/share/fonts/= folder Alternatively, you
55 can move them to the =/usr/share/fonts/opentype/= or
56 =/usr/share/fonts/opentype/= folders, if you have a specific font type.
62574. Close tweaks if it is open. Re-open Tweaks and your new theme will be
63 available in the Applications dropdown in the Appearance section of
64 Tweaks.
58 available in the Applications dropdown in the Appearance section of Tweaks.
6559
66If the theme is not showing up after you've moved it into the themes
67folder, you may have uncompressed the folder into a sub-folder. You can
68check this by entering the theme folder and listing the contents:
60If the theme is not showing up after you've moved it into the themes folder, you
61may have uncompressed the folder into a sub-folder. You can check this by
62entering the theme folder and listing the contents:
6963
7064#+begin_src sh
7165cd /usr/share/themes/Mojave-Dark && ls -la
7266#+end_src
7367
74This is an example of what the contents of your theme folder should look
75like. If you just see another folder there, you should move that folder
76up into the =/usr/share/themes/= folder.
68This is an example of what the contents of your theme folder should look like.
69If you just see another folder there, you should move that folder up into the
70=/usr/share/themes/= folder.
7771
7872#+begin_src sh
7973cinnamon COPYING gnome-shell gtk-2.0 gtk-3.0 index.theme metacity-1 plank xfwm4
8074#+end_src
8175
8276** GNOME Shell Themes
83To change the appearance of the title bar, default dock, app menu, and
84other parts of the GNOME shell, you'll need to install the
85[[https://extensions.gnome.org/extension/19/user-themes/][user themes]]
86extension on [[https://extensions.gnome.org/][Gnome Extensions]]. To be
87able to install extensions, you will first need to install the browser
88extension that the website instructs you to. See this screenshot for the
89blue box with a link to the extension.
77To change the appearance of the title bar, default dock, app menu, and other
78parts of the GNOME shell, you'll need to install the [[https://extensions.gnome.org/extension/19/user-themes/][user themes]] extension on
79[[https://extensions.gnome.org/][Gnome Extensions]]. To be able to install extensions, you will first need to
80install the browser extension that the website instructs you to. See this
81screenshot for the blue box with a link to the extension.
9082
9183#+caption: Gnome Extensions
9284[[https://img.cleberg.net/blog/20200519-customizing-ubuntu/gnome-extensions-min.png]]
9385
94After the browser extension is installed, you will need to install the
95native host connector:
86After the browser extension is installed, you will need to install the native
87host connector:
9688
9789#+begin_src sh
9890sudo apt install chrome-gnome-shell
9991#+end_src
10092
101Finally, you can go the
102[[https://extensions.gnome.org/extension/19/user-themes/][user themes]]
103extension page and click the installation button. This will enable the
104Shell option in Tweaks. Now you can move shell themes to the
105=/usr/share/themes= directory, using the same steps mentioned in the
106previous section, and enable the new theme in Tweaks.
93Finally, you can go the [[https://extensions.gnome.org/extension/19/user-themes/][user themes]] extension page and click the installation
94button. This will enable the Shell option in Tweaks. Now you can move shell
95themes to the =/usr/share/themes= directory, using the same steps mentioned in
96the previous section, and enable the new theme in Tweaks.
10797
10898** Icons & Cursors
109Icons and cursors are installed exactly the same way, so I'm grouping
110these together in this post. Both of these items will need to follow the
111same process as installing themes, except you will want to move your
112font folders to the =/usr/share/icons/= directory instead.
99Icons and cursors are installed exactly the same way, so I'm grouping these
100together in this post. Both of these items will need to follow the same process
101as installing themes, except you will want to move your font folders to the
102=/usr/share/icons/= directory instead.
113103
114104** Fonts
115Fonts are one of the overlooked parts of customization, but a good font
116can make the whole screen look different. For example, I have installed
117the [[https://github.com/IBM/plex/releases][IBM Plex]] fonts on my
118system. This follows the same process as installing themes, except you
119will want to move your font folders to the =/usr/share/fonts/= directory
105Fonts are one of the overlooked parts of customization, but a good font can make
106the whole screen look different. For example, I have installed the [[https://github.com/IBM/plex/releases][IBM Plex]]
107fonts on my system. This follows the same process as installing themes, except
108you will want to move your font folders to the =/usr/share/fonts/= directory
120109instead.
121110
122111** Terminal
123If you spend a lot of time typing commands, you know how important the
124style and functionality of the terminal is. After spending a lot of time
125using the default GNOME terminal with
126[[https://en.wikipedia.org/wiki/Bash_(Unix_shell)][unix shell]], I
127decided to try some different options. I ended up choosing
128[[https://terminator-gtk3.readthedocs.io/en/latest/][Terminator]] with
129[[https://en.wikipedia.org/wiki/Z_shell][zsh]].
130
131Terminator is great if you need to open multiple terminals at one time
132by simply right-clicking and splitting the screen into as many terminals
133as you want. While this project hasn't been updated in a while,
134[[https://github.com/gnome-terminator/terminator/issues/1][it is coming
135under new development]]. However, this terminal is great and I haven't
136experienced any errors yet.
137
138For the shell choice, I decided to choose zsh after trying it out on a
139fresh Manjaro installation. Zsh is great if you like to change the
140themes of your terminal, include icons, or add plugins.
141
142The desktop uses the
143[[https://github.com/zsh-users/zsh-autosuggestions][zsh-autosuggestions]]
144to suggest past commands as you type. In addition, it suggests
145corrections if you misspell a command. Lastly, it uses the =af-magic=
146theme, which adds dashed lines between commands, moving the user@host
147tag to the right side of the terminal, and changes the colors. There are
148plenty of plugins and themes to choose from. Just figure out what you
149like and add it to your =~/.zshrc= file!
112If you spend a lot of time typing commands, you know how important the style and
113functionality of the terminal is. After spending a lot of time using the default
114GNOME terminal with [[https://en.wikipedia.org/wiki/Bash_(Unix_shell)][unix shell]], I decided to try some different options. I ended
115up choosing [[https://terminator-gtk3.readthedocs.io/en/latest/][Terminator]] with [[https://en.wikipedia.org/wiki/Z_shell][zsh]].
116
117Terminator is great if you need to open multiple terminals at one time by simply
118right-clicking and splitting the screen into as many terminals as you want.
119While this project hasn't been updated in a while, [[https://github.com/gnome-terminator/terminator/issues/1][it is coming under new
120development]]. However, this terminal is great and I haven't experienced any
121errors yet.
122
123For the shell choice, I decided to choose zsh after trying it out on a fresh
124Manjaro installation. Zsh is great if you like to change the themes of your
125terminal, include icons, or add plugins.
126
127The desktop uses the [[https://github.com/zsh-users/zsh-autosuggestions][zsh-autosuggestions]] to suggest past commands as you type.
128In addition, it suggests corrections if you misspell a command. Lastly, it uses
129the =af-magic= theme, which adds dashed lines between commands, moving the
130user@host tag to the right side of the terminal, and changes the colors. There
131are plenty of plugins and themes to choose from. Just figure out what you like
132and add it to your =~/.zshrc= file!
150133
151134*** Steps to Replicate My Terminal
152135To install zsh on Ubuntu, enter the following command into a terminal:
@@ -179,9 +162,9 @@ To install zsh-autosuggestions via Oh My Zsh:
179162git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
180163#+end_src
181164
182Then, add the following plugin wording to your =~/.zshrc= file (the
183default config usually has the =git= plugin activated, so just add any
184other plugins to the parentheses separated by a space):
165Then, add the following plugin wording to your =~/.zshrc= file (the default
166config usually has the =git= plugin activated, so just add any other plugins to
167the parentheses separated by a space):
185168
186169#+begin_src sh
187170nano ~/.zshrc
@@ -191,5 +174,5 @@ nano ~/.zshrc
191174plugins=(git zsh-autosuggestions)
192175#+end_src
193176
194Finally, you need to log out of your computer and log back in so your
195user shell can refresh.
177Finally, you need to log out of your computer and log back in so your user shell
178can refresh.
content/blog/2020-07-20-video-game-sales.org +20 −22
@@ -4,10 +4,8 @@
44#+filetags: :data:
55
66* Background Information
7This dataset (obtained from
8[[https://www.kaggle.com/gregorut/videogamesales/data][Kaggle]])
9contains a list of video games with sales greater than 100,000 copies.
10It was generated by a scrape of vgchartz.com.
7This dataset (obtained from [[https://www.kaggle.com/gregorut/videogamesales/data][Kaggle]]) contains a list of video games with sales
8greater than 100,000 copies. It was generated by a scrape of vgchartz.com.
119
1210Fields include:
1311
@@ -23,8 +21,7 @@ Fields include:
2321- Other_{Sales}: Sales in the rest of the world (in millions)
2422- Global_{Sales}: Total worldwide sales.
2523
26There are 16,598 records. 2 records were dropped due to incomplete
27information.
24There are 16,598 records. 2 records were dropped due to incomplete information.
2825
2926* Import the Data
3027#+begin_src python
@@ -45,7 +42,8 @@ df
4542
4643* Explore the Data
4744#+begin_src python
48# With the description function, we can see the basic stats. For example, we can also see that the 'Year' column has some incomplete values.
45# With the description function, we can see the basic stats. For example, we can
46# also see that the 'Year' column has some incomplete values.
4947df.describe()
5048#+end_src
5149
@@ -158,18 +156,18 @@ df3.sort_values(by=['Global_Sales'], ascending=False).head(5)
158156[[https://img.cleberg.net/blog/20200720-data-exploration-video-game-sales/09_outliers-min.png]]
159157
160158* Discussion
161The purpose of exploring datasets is to ask questions, answer questions,
162and discover intelligence that can be used to inform decision-making.
163So, what have we found in this dataset?
164
165Today we simply explored a publicly-available dataset to see what kind
166of information it contained. During that exploration, we found that
167video game sales peaked in 2006. That peak was largely due to Nintendo,
168who sold the top 5 games in 2006 and has a number of games in the top-10
169list for the years 1980-2020. Additionally, the top four platforms by
170global sales (Wii, NES, GB, DS) are owned by Nintendo.
171
172We didn't explore everything this dataset has to offer, but we can tell
173from a brief analysis that Nintendo seems to rule sales in the video
174gaming world. Further analysis could provide insight into which genres,
175regions, publishers, or world events are correlated with sales.
159The purpose of exploring datasets is to ask questions, answer questions, and
160discover intelligence that can be used to inform decision-making. So, what have
161we found in this dataset?
162
163Today we simply explored a publicly-available dataset to see what kind of
164information it contained. During that exploration, we found that video game
165sales peaked in 2006. That peak was largely due to Nintendo, who sold the top 5
166games in 2006 and has a number of games in the top-10 list for the years
1671980-2020. Additionally, the top four platforms by global sales (Wii, NES, GB,
168DS) are owned by Nintendo.
169
170We didn't explore everything this dataset has to offer, but we can tell from a
171brief analysis that Nintendo seems to rule sales in the video gaming world.
172Further analysis could provide insight into which genres, regions, publishers,
173or world events are correlated with sales.
content/blog/2020-07-26-business-analysis.org +59 −65
@@ -4,9 +4,9 @@
44#+filetags: :data:
55
66* Background Information
7This project aims to help investors learn more about a random city in
8order to determine optimal locations for business investments. The data
9used in this project was obtained using Foursquare's developer API.
7This project aims to help investors learn more about a random city in order to
8determine optimal locations for business investments. The data used in this
9project was obtained using Foursquare's developer API.
1010
1111Fields include:
1212
@@ -15,12 +15,12 @@ Fields include:
1515- Venue Latitude
1616- Venue Longitude
1717
18There are 232 records found using the center of Lincoln as the area of
19interest with a radius of 10,000.
18There are 232 records found using the center of Lincoln as the area of interest
19with a radius of 10,000.
2020
2121* Import the Data
22The first step is the simplest: import the applicable libraries. We will
23be using the libraries below for this project.
22The first step is the simplest: import the applicable libraries. We will be
23using the libraries below for this project.
2424
2525#+begin_src python
2626# Import the Python libraries we will be using
@@ -33,10 +33,10 @@ from pandas.io.json import json_normalize
3333from sklearn.cluster import KMeans
3434#+end_src
3535
36To begin our analysis, we need to import the data for this project. The
37data we are using in this project comes directly from the Foursquare
38API. The first step is to get the latitude and longitude of the city
39being studied (Lincoln, NE) and setting up the folium map.
36To begin our analysis, we need to import the data for this project. The data we
37are using in this project comes directly from the Foursquare API. The first step
38is to get the latitude and longitude of the city being studied (Lincoln, NE) and
39setting up the folium map.
4040
4141#+begin_src python
4242# Define the latitude and longitude, then map the results
@@ -50,11 +50,11 @@ map_LNK
5050#+caption: Blank Map
5151[[https://img.cleberg.net/blog/20200726-ibm-data-science/01_blank_map-min.png]]
5252
53Now that we have defined our city and created the map, we need to go get
54the business data. The Foursquare API will limit the results to 100 per
55API call, so we use our first API call below to determine the total
56results that Foursquare has found. Since the total results are 232, we
57perform the API fetching process three times (100 + 100 + 32 = 232).
53Now that we have defined our city and created the map, we need to go get the
54business data. The Foursquare API will limit the results to 100 per API call, so
55we use our first API call below to determine the total results that Foursquare
56has found. Since the total results are 232, we perform the API fetching process
57three times (100 + 100 + 32 = 232).
5858
5959#+begin_src python
6060# Foursquare API credentials
@@ -117,13 +117,12 @@ results3 = requests.get(url3).json()
117117#+end_src
118118
119119* Clean the Data
120Now that we have our data in three separate dataframes, we need to
121combine them into a single dataframe and make sure to reset the index so
122that we have a unique ID for each business. The =get~categorytype~=
123function below will pull the categories and name from each business's
124entry in the Foursquare data automatically. Once all the data has been
125labeled and combined, the results are stored in the =nearby_venues=
126dataframe.
120Now that we have our data in three separate dataframes, we need to combine them
121into a single dataframe and make sure to reset the index so that we have a
122unique ID for each business. The =get~categorytype~= function below will pull
123the categories and name from each business's entry in the Foursquare data
124automatically. Once all the data has been labeled and combined, the results are
125stored in the =nearby_venues= dataframe.
127126
128127#+begin_src python
129128# This function will extract the category of the venue from the API dictionary
@@ -194,9 +193,9 @@ nearby_venues
194193[[https://img.cleberg.net/blog/20200726-ibm-data-science/02_clean_data-min.png]]
195194
196195* Visualize the Data
197We now have a complete, clean data set. The next step is to visualize
198this data onto the map we created earlier. We will be using folium's
199=CircleMarker()= function to do this.
196We now have a complete, clean data set. The next step is to visualize this data
197onto the map we created earlier. We will be using folium's =CircleMarker()=
198function to do this.
200199
201200#+begin_src python
202201# add markers to map
@@ -220,15 +219,14 @@ map_LNK
220219data map]]
221220
222221* Clustering: /k-means/
223To cluster the data, we will be using the /k-means/ algorithm. This
224algorithm is iterative and will automatically make sure that data points
225in each cluster are as close as possible to each other, while being as
226far as possible away from other clusters.
222To cluster the data, we will be using the /k-means/ algorithm. This algorithm is
223iterative and will automatically make sure that data points in each cluster are
224as close as possible to each other, while being as far as possible away from
225other clusters.
227226
228However, we first have to figure out how many clusters to use (defined
229as the variable /'k'/). To do so, we will use the next two functions to
230calculate the sum of squares within clusters and then return the optimal
231number of clusters.
227However, we first have to figure out how many clusters to use (defined as the
228variable /'k'/). To do so, we will use the next two functions to calculate the
229sum of squares within clusters and then return the optimal number of clusters.
232230
233231#+begin_src python
234232# This function will return the sum of squares found in the data
@@ -266,9 +264,9 @@ def optimal_number_of_clusters(wcss):
266264n = optimal_number_of_clusters(sum_of_squares)
267265#+end_src
268266
269Now that we have found that our optimal number of clusters is six, we
270need to perform k-means clustering. When this clustering occurs, each
271business is assigned a cluster number from 0 to 5 in the dataframe.
267Now that we have found that our optimal number of clusters is six, we need to
268perform k-means clustering. When this clustering occurs, each business is
269assigned a cluster number from 0 to 5 in the dataframe.
272270
273271#+begin_src python
274272# set number of clusters equal to the optimal number
@@ -281,9 +279,8 @@ kmeans = KMeans(n_clusters=kclusters, random_state=0).fit(cluster_df)
281279nearby_venues.insert(0, 'Cluster Labels', kmeans.labels_)
282280#+end_src
283281
284Success! We now have a dataframe with clean business data, along with a
285cluster number for each business. Now let's map the data using six
286different colors.
282Success! We now have a dataframe with clean business data, along with a cluster
283number for each business. Now let's map the data using six different colors.
287284
288285#+begin_src python
289286# create map with clusters
@@ -310,12 +307,11 @@ map_clusters
310307[[https://img.cleberg.net/blog/20200726-ibm-data-science/04_clusters-min.png]]
311308
312309* Investigate Clusters
313Now that we have figured out our clusters, let's do a little more
314analysis to provide more insight into the clusters. With the information
315below, we can see which clusters are more popular for businesses and
316which are less popular. The results below show us that clusters 0
317through 3 are popular, while clusters 4 and 5 are not very popular at
318all.
310Now that we have figured out our clusters, let's do a little more analysis to
311provide more insight into the clusters. With the information below, we can see
312which clusters are more popular for businesses and which are less popular. The
313results below show us that clusters 0 through 3 are popular, while clusters 4
314and 5 are not very popular at all.
319315
320316#+begin_src python
321317# Show how many venues are in each cluster
@@ -329,9 +325,9 @@ for x in range(0,6):
329325#+caption: Venues per Cluster
330326[[https://img.cleberg.net/blog/20200726-ibm-data-science/05_venues_per_cluster-min.png]]
331327
332Our last piece of analysis is to summarize the categories of businesses
333within each cluster. With these results, we can clearly see that
334restaurants, coffee shops, and grocery stores are the most popular.
328Our last piece of analysis is to summarize the categories of businesses within
329each cluster. With these results, we can clearly see that restaurants, coffee
330shops, and grocery stores are the most popular.
335331
336332#+begin_src python
337333# Calculate how many venues there are in each category
@@ -362,19 +358,17 @@ with pd.option_context('display.max_rows', None, 'display.max_columns', None):
362358[[https://img.cleberg.net/blog/20200726-ibm-data-science/07_categories_per_cluster_pt2-min.png]]
363359
364360* Discussion
365In this project, we gathered location data for Lincoln, Nebraska, USA
366and clustered the data using the k-means algorithm in order to identify
367the unique clusters of businesses in Lincoln. Through these actions, we
368found that there are six unique business clusters in Lincoln and that
369two of the clusters are likely unsuitable for investors. The remaining
370four clusters have a variety of businesses, but are largely dominated by
371restaurants and grocery stores.
372
373Using this project, investors can now make more informed decisions when
374deciding the location and category of business in which to invest.
375
376Further studies may involve other attributes for business locations,
377such as population density, average wealth across the city, or crime
378rates. In addition, further studies may include additional location data
379and businesses by utilizing multiple sources, such as Google Maps and
380OpenStreetMap.
361In this project, we gathered location data for Lincoln, Nebraska, USA and
362clustered the data using the k-means algorithm in order to identify the unique
363clusters of businesses in Lincoln. Through these actions, we found that there
364are six unique business clusters in Lincoln and that two of the clusters are
365likely unsuitable for investors. The remaining four clusters have a variety of
366businesses, but are largely dominated by restaurants and grocery stores.
367
368Using this project, investors can now make more informed decisions when deciding
369the location and category of business in which to invest.
370
371Further studies may involve other attributes for business locations, such as
372population density, average wealth across the city, or crime rates. In addition,
373further studies may include additional location data and businesses by utilizing
374multiple sources, such as Google Maps and OpenStreetMap.
content/blog/2020-08-22-redirect-github-pages.org +48 −58
@@ -5,17 +5,16 @@
55
66* Short answer
77** Step 1
8Add a new file CNAME to your GitHub Pages repository containing only one
9line: your top-level domain name. E.g.: =example.com=
8Add a new file CNAME to your GitHub Pages repository containing only one line:
9your top-level domain name. E.g.: =example.com=
1010
1111** Step 2
1212[Optional] but highly recommended
1313
142.1: Remove all other top-level records (prefixed with @) of type A from
15your DNS configuration.
142.1: Remove all other top-level records (prefixed with @) of type A from your
15DNS configuration.
1616
172.2: Remove a CNAME record for the second-level domain www if it is
18present.
172.2: Remove a CNAME record for the second-level domain www if it is present.
1918
2019** Step 3
2120Add these 5 entries to the very top of your DNS configuration:
@@ -35,52 +34,48 @@ Wait for your DNS changes to propagate. DNS changes aren't effective
3534immediately. They can take up to a full day to propagate.
3635
3736* Long answer
38This issue has two sides. One is the DNS configuration itself. Another
39one is the way GitHub Pages will forward HTTP requests.
37This issue has two sides. One is the DNS configuration itself. Another one is
38the way GitHub Pages will forward HTTP requests.
4039
41We need to know a few things to understand what GitHub is trying to say
42in their documentation.
40We need to know a few things to understand what GitHub is trying to say in their
41documentation.
4342
4443** DNS Entry Types
4544There are two types of DNS records which interest us: CNAME and A.
4645
47=A= is also known as =Apex= or sometimes as =root entry=. It forwards
48requests to a specified fixed IP address. =CNAME= entry forwards
49requests to a specified URL (actual valid plain text URL, not an IP
50address).
46=A= is also known as =Apex= or sometimes as =root entry=. It forwards requests
47to a specified fixed IP address. =CNAME= entry forwards requests to a specified
48URL (actual valid plain text URL, not an IP address).
5149
5250** DNS Load balancing
53GitHub has one central URL address which accepts all DNS requests for
54GitHub Pages: =http://username.github.io=. That URL is resolved to
55different IP addresses based on your geographical location. Website
56hosted on GitHub Pages is a simple collection of =HTML=, =CSS= and =JS=
57files. GitHub distributes these files to different servers across the
58globe. So that when your browser sends a request from Europe, it
59receives data from a server in Europe. The same is valid for the
60requests from Asia and the USA.
51GitHub has one central URL address which accepts all DNS requests for GitHub
52Pages: =http://username.github.io=. That URL is resolved to different IP
53addresses based on your geographical location. Website hosted on GitHub Pages is
54a simple collection of =HTML=, =CSS= and =JS= files. GitHub distributes these
55files to different servers across the globe. So that when your browser sends a
56request from Europe, it receives data from a server in Europe. The same is valid
57for the requests from Asia and the USA.
6158
6259** What GitHub is trying to say
63Since =A= records in DNS must contain IP addresses, and they must be
64either =185.199.108.153= or =185.199.109.153= or =185.199.110.153= or
65=185.199.111.153=, there is no way to forward requests to a server
66located somewhere in Europe or Asia. Your website hosted at GitHub Pages
67will be downloaded from a central GitHub Pages server. There is a minor
68risk that if GitHub Pages DNS servers (=x.x.x.153=) are down for some
69reason, all custom domains which use fixed GitHub Pages IP addresses
70will not be accessible (their DNS requests will not be resolvable).
71
72That is why GitHub strongly suggests to either use a second-level domain
73for your GitHub Pages (e.g. =blog.example.com=) or use a DNS service
74provider that supports a record type =ALIAS= that acts as =A= record but
75forwards request to a URL address (e.g. =username.github.io=) instead of
76a fixed IP address.
60Since =A= records in DNS must contain IP addresses, and they must be either
61=185.199.108.153= or =185.199.109.153= or =185.199.110.153= or
62=185.199.111.153=, there is no way to forward requests to a server located
63somewhere in Europe or Asia. Your website hosted at GitHub Pages will be
64downloaded from a central GitHub Pages server. There is a minor risk that if
65GitHub Pages DNS servers (=x.x.x.153=) are down for some reason, all custom
66domains which use fixed GitHub Pages IP addresses will not be accessible (their
67DNS requests will not be resolvable).
68
69That is why GitHub strongly suggests to either use a second-level domain for
70your GitHub Pages (e.g. =blog.example.com=) or use a DNS service provider that
71supports a record type =ALIAS= that acts as =A= record but forwards request to a
72URL address (e.g. =username.github.io=) instead of a fixed IP address.
7773
7874** How GitHub Pages treats HTTP requests
79After a DNS request for =your_github_username.github.io= is resolved
80into an IP address, e.g. =185.199.108.153= your browser sends an HTTP
81request to that server with an HTTP header =Host=. Below are =curl=
82examples that load the same website (these examples might not work if
83you are behind a proxy server):
75After a DNS request for =your_github_username.github.io= is resolved into an IP
76address, e.g. =185.199.108.153= your browser sends an HTTP request to that
77server with an HTTP header =Host=. Below are =curl= examples that load the same
78website (these examples might not work if you are behind a proxy server):
8479
8580#+begin_src sh
8681curl --header "Host: your_github_username.github.io" http://185.199.108.153/
@@ -91,30 +86,25 @@ curl --header "Host: example.com" http://185.199.108.153/
9186This way GitHub Pages servers know which user website to serve.
9287
9388#+begin_quote
94GitHub Pages server will automatically redirect HTTP requests to the
95top-level domain if your =CNAME= file contains =example.com= but
96=www.example.com= is requested.
89GitHub Pages server will automatically redirect HTTP requests to the top-level
90domain if your =CNAME= file contains =example.com= but =www.example.com= is
91requested.
9792
98The same is valid if your =CNAME= file contains =www.example.com= but
99the header =Host= in the =HTTP= request contains =example.com=.
93The same is valid if your =CNAME= file contains =www.example.com= but the header
94=Host= in the =HTTP= request contains =example.com=.
10095#+end_quote
10196
10297** Why can't I add a =CNAME= record entry that accepts a top-level request (=@=) to my DNS configuration?
10398Quote from the GitHub Pages documentation:
10499
105100#+begin_quote
106Warning: Do not create a CNAME record for your custom apex domain! Doing
107so may cause issues with other services, such as email, on that domain.
101Warning: Do not create a CNAME record for your custom apex domain! Doing so may
102cause issues with other services, such as email, on that domain.
108103#+end_quote
109104
110105** References:
1111. [[https://docs.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site][Setting
112 up a custom domain with GitHub Pages]]
1132. [[https://docs.github.com/en/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages][My
114 custom domain isn't working]]
1153. [[https://serverfault.com/questions/589370/cannot-access-my-github-pages-website-by-ip-address][Cannot
116 access my GitHub Pages website by IP Address]]
1174. [[https://stackoverflow.com/questions/23375422/how-do-i-set-up-github-pages-to-redirect-dns-requests-from-a-subdomain-e-g-www][How
118 do I set up GitHub Pages to redirect DNS requests from a subdomain
119 (e.g. www) to the top-level domain (TLD, Apex record)?]]
120
1061. [[https://docs.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site][Setting up a custom domain with GitHub Pages]]
1072. [[https://docs.github.com/en/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages][My custom domain isn't working]]
1083. [[https://serverfault.com/questions/589370/cannot-access-my-github-pages-website-by-ip-address][Cannot access my GitHub Pages website by IP Address]]
1094. [[https://stackoverflow.com/questions/23375422/how-do-i-set-up-github-pages-to-redirect-dns-requests-from-a-subdomain-e-g-www][How do I set up GitHub Pages to redirect DNS requests from a subdomain (e.g.
110 www) to the top-level domain (TLD, Apex record)?]]
content/blog/2020-08-29-php-auth-flow.org +40 −47
@@ -4,16 +4,15 @@
44#+filetags: :dev:
55
66* Introduction
7When creating websites that will allow users to create accounts, the
8developer always needs to consider the proper authentication flow for
9their app. For example, some developers will utilize an API for
10authentication, some will use OAuth, and some may just use their own
11simple database.
7When creating websites that will allow users to create accounts, the developer
8always needs to consider the proper authentication flow for their app. For
9example, some developers will utilize an API for authentication, some will use
10OAuth, and some may just use their own simple database.
1211
13For those using pre-built libraries, authentication may simply be a
14problem of copying and pasting the code from their library's
15documentation. For example, here's the code I use to authenticate users
16with the Tumblr OAuth API for my Tumblr client, Vox Populi:
12For those using pre-built libraries, authentication may simply be a problem of
13copying and pasting the code from their library's documentation. For example,
14here's the code I use to authenticate users with the Tumblr OAuth API for my
15Tumblr client, Vox Populi:
1716
1817#+begin_src php
1918// Start the session
@@ -38,23 +37,22 @@ $client = new Tumblr\API\Client(
3837);
3938#+end_src
4039
41However, developers creating authentication flows from scratch will need
42to think carefully about when to make sure a web page will check the
43user's authenticity.
40However, developers creating authentication flows from scratch will need to
41think carefully about when to make sure a web page will check the user's
42authenticity.
4443
45In this article, we're going to look at a simple authentication flow
46using a MySQL database and PHP.
44In this article, we're going to look at a simple authentication flow using a
45MySQL database and PHP.
4746
4847* Creating User Accounts
49The beginning to any type of user authentication is to create a user
50account. This process can take many formats, but the simplest is to
51accept user input from a form (e.g., username and password) and send it
52over to your database. For example, here's a snippet that shows how to
53get username and password parameters that would come when a user submits
54a form to your PHP script.
48The beginning to any type of user authentication is to create a user account.
49This process can take many formats, but the simplest is to accept user input
50from a form (e.g., username and password) and send it over to your database. For
51example, here's a snippet that shows how to get username and password parameters
52that would come when a user submits a form to your PHP script.
5553
56*Note*: Ensure that your password column is large enough to hold the
57hashed value (at least 60 characters or longer).
54*Note*: Ensure that your password column is large enough to hold the hashed
55value (at least 60 characters or longer).
5856
5957#+begin_src php
6058// Get the values from the URL
@@ -92,9 +90,9 @@ $conn->close();
9290#+end_src
9391
9492** Validate Returning Users
95To be able to verify that a returning user has a valid username and
96password in your database is as simple as having users fill out a form
97and comparing their inputs to your database.
93To be able to verify that a returning user has a valid username and password in
94your database is as simple as having users fill out a form and comparing their
95inputs to your database.
9896
9997#+begin_src php
10098// Query the database for username and password
@@ -110,24 +108,23 @@ if(password_verify($password_input, $hashed_password)) {
110108#+end_src
111109
112110* Storing Authentication State
113Once you've created the user's account, now you're ready to initialize
114the user's session. *You will need to do this on every page you load
115while the user is logged in.** To do so, simply enter the following code
116snippet:
111Once you've created the user's account, now you're ready to initialize the
112user's session. *You will need to do this on every page you load while the user
113is logged in.** To do so, simply enter the following code snippet:
117114
118115#+begin_src php
119116session_start();
120117#+end_src
121118
122Once you've initialized the session, the next step is to store the
123session in a cookie so that you can access it later.
119Once you've initialized the session, the next step is to store the session in a
120cookie so that you can access it later.
124121
125122#+begin_src php
126123setcookie(session_name());
127124#+end_src
128125
129Now that the session name has been stored, you'll be able to check if
130there's an active session whenever you load a page.
126Now that the session name has been stored, you'll be able to check if there's an
127active session whenever you load a page.
131128
132129#+begin_src php
133130if(isset(session_name())) {
@@ -136,9 +133,9 @@ if(isset(session_name())) {
136133#+end_src
137134
138135** Removing User Authentication
139The next logical step is to give your users the option to log out once
140they are done using your application. This can be tricky in PHP since a
141few of the standard ways do not always work.
136The next logical step is to give your users the option to log out once they are
137done using your application. This can be tricky in PHP since a few of the
138standard ways do not always work.
142139
143140#+begin_src php
144141// Initialize the session.
@@ -175,14 +172,10 @@ die();
175172#+end_src
176173
177174* Wrapping Up
178Now you should be ready to begin your authentication programming with
179PHP. You can create user accounts, create sessions for users across
180different pages of your site, and then destroy the user data when
181they're ready to leave.
182
183For more information on this subject, I recommend reading the
184[[https://www.php.net/][PHP Documentation]]. Specifically, you may want
185to look at [[https://www.php.net/manual/en/features.http-auth.php][HTTP
186Authentication with PHP]],
187[[https://www.php.net/manual/en/book.session.php][session handling]],
188and [[https://www.php.net/manual/en/function.hash.php][hash]].
175Now you should be ready to begin your authentication programming with PHP. You
176can create user accounts, create sessions for users across different pages of
177your site, and then destroy the user data when they're ready to leave.
178
179For more information on this subject, I recommend reading the [[https://www.php.net/][PHP Documentation]].
180Specifically, you may want to look at [[https://www.php.net/manual/en/features.http-auth.php][HTTP Authentication with PHP]], [[https://www.php.net/manual/en/book.session.php][session
181handling]], and [[https://www.php.net/manual/en/function.hash.php][hash]].
content/blog/2020-09-01-visual-recognition.org +62 −73
@@ -4,37 +4,30 @@
44#+filetags: :dev:
55
66* What is IBM Watson?
7If you've never heard of [[https://www.ibm.com/watson][Watson]], this
8service is a suite of enterprise-ready AI services, applications, and
9tooling provided by IBM. Watson contains quite a few useful tools for
10data scientists and students, including the subject of this post today:
11visual recognition.
7If you've never heard of [[https://www.ibm.com/watson][Watson]], this service is a suite of enterprise-ready AI
8services, applications, and tooling provided by IBM. Watson contains quite a few
9useful tools for data scientists and students, including the subject of this
10post today: visual recognition.
1211
13If you'd like to view the official documentation for the Visual
14Recognition API, visit the
15[[https://cloud.ibm.com/apidocs/visual-recognition/visual-recognition-v3?code=python][API
16Docs]].
12If you'd like to view the official documentation for the Visual Recognition API,
13visit the [[https://cloud.ibm.com/apidocs/visual-recognition/visual-recognition-v3?code=python][API Docs]].
1714
1815* Prerequisites
1916To be able to use Watson Visual Recognition, you'll need the following:
2017
211. Create a free account on
22 [[https://www.ibm.com/cloud/watson-studio][IBM Watson Studio]].
232. Add the [[https://www.ibm.com/cloud/watson-visual-recognition][Watson
24 Visual Recognition]] service to your IBM Watson account.
253. Get your API key and URL. To do this, first go to the
26 [[https://dataplatform.cloud.ibm.com/home2?context=cpdaas][profile
27 dashboard]] for your IBM account and click on the Watson Visual
28 Recognition service you created. This will be listed in the section
29 titled *Your services*. Then click the *Credentials** tab and open the
30 *Auto-generated credentials** dropdown. Copy your API key and URL so
31 that you can use them in the Python script later.
324. *[Optional]** While not required, you can also create the Jupyter
33 Notebook for this project right inside
34 [[https://www.ibm.com/cloud/watson-studio][Watson Studio]]. Watson
35 Studio will save your notebooks inside an organized project and allow
36 you to use their other integrated products, such as storage
37 containers, AI models, documentation, external sharing, etc.
181. Create a free account on [[https://www.ibm.com/cloud/watson-studio][IBM Watson Studio]].
192. Add the [[https://www.ibm.com/cloud/watson-visual-recognition][Watson Visual Recognition]] service to your IBM Watson account.
203. Get your API key and URL. To do this, first go to the [[https://dataplatform.cloud.ibm.com/home2?context=cpdaas][profile dashboard]] for
21 your IBM account and click on the Watson Visual Recognition service you
22 created. This will be listed in the section titled *Your services*. Then
23 click the *Credentials** tab and open the *Auto-generated credentials**
24 dropdown. Copy your API key and URL so that you can use them in the Python
25 script later.
264. *[Optional]** While not required, you can also create the Jupyter Notebook
27 for this project right inside [[https://www.ibm.com/cloud/watson-studio][Watson Studio]]. Watson Studio will save your
28 notebooks inside an organized project and allow you to use their other
29 integrated products, such as storage containers, AI models, documentation,
30 external sharing, etc.
3831
3932* Calling the IBM Watson Visual Recognition API
4033Okay, now let's get started.
@@ -45,8 +38,8 @@ To begin, we need to install the proper Python package for IBM Watson.
4538pip install --upgrade --user "ibm-watson>=4.5.0"
4639#+end_src
4740
48Next, we need to specify the API key, version, and URL given to us when
49we created the Watson Visual Recognition service.
41Next, we need to specify the API key, version, and URL given to us when we
42created the Watson Visual Recognition service.
5043
5144#+begin_src python
5245apikey = "<your-apikey>"
@@ -70,15 +63,15 @@ visual_recognition = VisualRecognitionV3(
7063visual_recognition.set_service_url(url)
7164#+end_src
7265
73*[Optional]* If you'd like to tell the API not to use any data to
74improve their products, set the following header.
66*[Optional]* If you'd like to tell the API not to use any data to improve their
67products, set the following header.
7568
7669#+begin_src python
7770visual_recognition.set_default_headers({'x-watson-learning-opt-out': "true"})
7871#+end_src
7972
80Now we have our API all set and ready to go. For this example, I'm going
81to include a =dict= of photos to load as we test out the API.
73Now we have our API all set and ready to go. For this example, I'm going to
74include a =dict= of photos to load as we test out the API.
8275
8376#+begin_src python
8477data = [
@@ -109,14 +102,14 @@ data = [
109102]
110103#+end_src
111104
112Now that we've set up our libraries and have the photos ready, let's
113create a loop to call the API for each image. The code below shows a
114loop that calls the URL of each image and sends it to the API,
115requesting results with at least 60% confidence. The results are output
116to the console with dotted lines separating each section.
105Now that we've set up our libraries and have the photos ready, let's create a
106loop to call the API for each image. The code below shows a loop that calls the
107URL of each image and sends it to the API, requesting results with at least 60%
108confidence. The results are output to the console with dotted lines separating
109each section.
117110
118In the case of an API error, the codes and explanations are output to
119the console.
111In the case of an API error, the codes and explanations are output to the
112console.
120113
121114#+begin_src python
122115from ibm_watson import ApiException
@@ -142,23 +135,22 @@ except ApiException as ex:
142135#+end_src
143136
144137* The Results
145Here we can see the full result set of our function above. If you view
146each of the URLs that we sent to the API, you'll be able to see that it
147was remarkably accurate. To be fair, these are clear high-resolution,
148clear photos shot with a professional camera. In reality, you will most
149likely be processing images that are lower quality and may have a lot of
150noise in the photo.
151
152However, we can clearly see the benefit of being able to call this API
153instead of attempting to write our own image recognition function. Each
154of the classifications returned was a fair description of the image.
155
156If you wanted to restrict the results to those that are at least 90%
157confident or greater, you would simply adjust the =threshold= in the
138Here we can see the full result set of our function above. If you view each of
139the URLs that we sent to the API, you'll be able to see that it was remarkably
140accurate. To be fair, these are clear high-resolution, clear photos shot with a
141professional camera. In reality, you will most likely be processing images that
142are lower quality and may have a lot of noise in the photo.
143
144However, we can clearly see the benefit of being able to call this API instead
145of attempting to write our own image recognition function. Each of the
146classifications returned was a fair description of the image.
147
148If you wanted to restrict the results to those that are at least 90% confident
149or greater, you would simply adjust the =threshold= in the
158150=visual_recognition.classify()= function.
159151
160When your program runs, it should show the output below for each photo
161you provide.
152When your program runs, it should show the output below for each photo you
153provide.
162154
163155#+begin_src txt
164156----------------------------------------------------------------
@@ -176,22 +168,19 @@ greenishness color ( 0.975 )
176168#+end_src
177169
178170* Discussion
179Now, this was a very minimal implementation of the API. We simply
180supplied some images and looked to see how accurate the results were.
181However, you could implement this type of API into many machine learning
182(ML) models.
183
184For example, you could be working for a company that scans their
185warehouses or inventory using drones. Would you want to pay employees to
186sit there and watch drone footage all day in order to identify or count
187things in the video? Probably not. Instead, you could use a
188classification system similar to this one in order to train your machine
189learning model to correctly identify items that the drones show through
190video. More specifically, you could have your machine learning model
191watch a drone fly over a field of sheep in order to count how many sheep
192are living in that field.
193
194There are many ways to implement machine learning functionality, but
195hopefully this post helped inspire some deeper thought about the tools
196that can help propel us further into the future of machine learning and
197AI.
171Now, this was a very minimal implementation of the API. We simply supplied some
172images and looked to see how accurate the results were. However, you could
173implement this type of API into many machine learning (ML) models.
174
175For example, you could be working for a company that scans their warehouses or
176inventory using drones. Would you want to pay employees to sit there and watch
177drone footage all day in order to identify or count things in the video?
178Probably not. Instead, you could use a classification system similar to this one
179in order to train your machine learning model to correctly identify items that
180the drones show through video. More specifically, you could have your machine
181learning model watch a drone fly over a field of sheep in order to count how
182many sheep are living in that field.
183
184There are many ways to implement machine learning functionality, but hopefully
185this post helped inspire some deeper thought about the tools that can help
186propel us further into the future of machine learning and AI.
content/blog/2020-09-22-internal-audit.org +162 −177
@@ -7,64 +7,63 @@
77[[https://img.cleberg.net/blog/20200922-what-is-internal-audit/internal-audit-overview.jpg]]
88
99* Definitions
10One of the many reasons that Internal Audit needs such thorough
11explaining to non-auditors is that Internal Audit can serve many
12purposes, depending on the organization's size and needs. However, the
13Institute of Internal Auditors (IIA) defines Internal Auditing as:
10One of the many reasons that Internal Audit needs such thorough explaining to
11non-auditors is that Internal Audit can serve many purposes, depending on the
12organization's size and needs. However, the Institute of Internal Auditors (IIA)
13defines Internal Auditing as:
1414
1515#+begin_quote
16Internal auditing is an independent, objective assurance and consulting
17activity designed to add value and improve an organization's operations.
18It helps an organization accomplish its objectives by bringing a
19systematic, disciplined approach to evaluate and improve the
20effectiveness of risk management, control, and governance processes.
16Internal auditing is an independent, objective assurance and consulting activity
17designed to add value and improve an organization's operations. It helps an
18organization accomplish its objectives by bringing a systematic, disciplined
19approach to evaluate and improve the effectiveness of risk management, control,
20and governance processes.
2121
2222#+end_quote
2323
24However, this definition uses quite a few terms that aren't clear unless
25the reader already has a solid understanding of the auditing profession.
26To further explain, the following is a list of definitions that can help
27supplement understanding of internal auditing.
24However, this definition uses quite a few terms that aren't clear unless the
25reader already has a solid understanding of the auditing profession. To further
26explain, the following is a list of definitions that can help supplement
27understanding of internal auditing.
2828
2929** Independent
30Independence is the freedom from conditions that threaten the ability of
31the internal audit activity to carry out internal audit responsibilities
32in an unbiased manner. To achieve the degree of independence necessary
33to effectively carry out the responsibilities of the internal audit
34activity, the chief audit executive has direct and unrestricted access
35to senior management and the board. This can be achieved through a
36dual-reporting relationship. Threats to independence must be managed at
37the individual auditor, engagement, functional, and organizational
38levels.
30Independence is the freedom from conditions that threaten the ability of the
31internal audit activity to carry out internal audit responsibilities in an
32unbiased manner. To achieve the degree of independence necessary to effectively
33carry out the responsibilities of the internal audit activity, the chief audit
34executive has direct and unrestricted access to senior management and the board.
35This can be achieved through a dual-reporting relationship. Threats to
36independence must be managed at the individual auditor, engagement, functional,
37and organizational levels.
3938
4039** Objective
41Objectivity is an unbiased mental attitude that allows internal auditors
42to perform engagements in such a manner that they believe in their work
43product and that no quality compromises are made. Objectivity requires
44that internal auditors do not subordinate their judgment on audit
45matters to others. Threats to objectivity must be managed at the
46individual auditor, engagement, functional, and organizational levels.
40Objectivity is an unbiased mental attitude that allows internal auditors to
41perform engagements in such a manner that they believe in their work product and
42that no quality compromises are made. Objectivity requires that internal
43auditors do not subordinate their judgment on audit matters to others. Threats
44to objectivity must be managed at the individual auditor, engagement,
45functional, and organizational levels.
4746
4847** Assurance
49Assurance services involve the internal auditor's objective assessment
50of evidence to provide opinions or conclusions regarding an entity,
51operation, function, process, system, or other subject matters. The
52internal auditor determines the nature and scope of an assurance
53engagement. Generally, three parties are participants in assurance
54services: (1) the person or group directly involved with the entity,
55operation, function, process, system, or other subject - (the process
56owner), (2) the person or group making the assessment - (the internal
57auditor), and (3) the person or group using the assessment - (the user).
48Assurance services involve the internal auditor's objective assessment of
49evidence to provide opinions or conclusions regarding an entity, operation,
50function, process, system, or other subject matters. The internal auditor
51determines the nature and scope of an assurance engagement. Generally, three
52parties are participants in assurance services: (1) the person or group directly
53involved with the entity, operation, function, process, system, or other
54subject - (the process owner), (2) the person or group making the assessment -
55(the internal auditor), and (3) the person or group using the assessment - (the
56user).
5857
5958** Consulting
60Consulting services are advisory in nature and are generally performed
61at the specific request of an engagement client. The nature and scope of
62the consulting engagement are subject to agreement with the engagement
63client. Consulting services generally involve two parties: (1) the
64person or group offering the advice (the internal auditor), and (2) the
65person or group seeking and receiving the advice (the engagement
66client). When performing consulting services, the internal auditor
67should maintain objectivity and not assume management responsibility.
59Consulting services are advisory in nature and are generally performed at the
60specific request of an engagement client. The nature and scope of the consulting
61engagement are subject to agreement with the engagement client. Consulting
62services generally involve two parties: (1) the person or group offering the
63advice (the internal auditor), and (2) the person or group seeking and receiving
64the advice (the engagement client). When performing consulting services, the
65internal auditor should maintain objectivity and not assume management
66responsibility.
6867
6968** Governance, Risk Management, & Compliance (GRC)
7069The integrated collection of capabilities that enable an organization to
@@ -72,176 +71,162 @@ reliably achieve objectives, address uncertainty and act with integrity.
7271
7372* Audit Charter & Standards
7473First, it's important to note that not every organization needs internal
75auditors. In fact, it's unwise for an organization to hire internal
76auditors unless they have regulatory requirements for auditing and have
77the capital to support the department. Internal audit is a cost center
78that can only affect revenue indirectly.
79
80Once an organization determines the need for internal assurance
81services, they will hire a Chief Audit Executive and create the audit
82charter. This charter is a document, approved by the company's governing
83body, that will define internal audit's purpose, authority,
84responsibility, and position within the organization. Fortunately, the
85IIA has model charters available to IIA members for those developing or
86improving their charter.
87
88Beyond the charter and organizational documents, internal auditors
89follow a few different standards in order to perform their job. First is
90the International Professional Practices Framework (IPPF) by the IIA,
91which is the model of standards for internal auditing. In addition,
92ISACA's Information Technology Assurance Framework (ITAF) helps guide
93auditors in reference to information technology (IT) compliance and
94assurance. Finally, additional standards such as FASB, GAAP, and
95industry-specific standards are used when performing internal audit
96work.
74auditors. In fact, it's unwise for an organization to hire internal auditors
75unless they have regulatory requirements for auditing and have the capital to
76support the department. Internal audit is a cost center that can only affect
77revenue indirectly.
78
79Once an organization determines the need for internal assurance services, they
80will hire a Chief Audit Executive and create the audit charter. This charter is
81a document, approved by the company's governing body, that will define internal
82audit's purpose, authority, responsibility, and position within the
83organization. Fortunately, the IIA has model charters available to IIA members
84for those developing or improving their charter.
85
86Beyond the charter and organizational documents, internal auditors follow a few
87different standards in order to perform their job. First is the International
88Professional Practices Framework (IPPF) by the IIA, which is the model of
89standards for internal auditing. In addition, ISACA's Information Technology
90Assurance Framework (ITAF) helps guide auditors in reference to information
91technology (IT) compliance and assurance. Finally, additional standards such as
92FASB, GAAP, and industry-specific standards are used when performing internal
93audit work.
9794
9895* Three Lines of Defense
99[[https://theiia.org][The IIA]] released the original Three Lines of
100Defense model in 2013, but have released an updated version in 2020.
101Here is what the Three Lines of Defense model has historically looked
102like:
96[[https://theiia.org][The IIA]] released the original Three Lines of Defense model in 2013, but have
97released an updated version in 2020. Here is what the Three Lines of Defense
98model has historically looked like:
10399
104100#+caption: 2013 Three Lines of Defense Model
105101[[https://img.cleberg.net/blog/20200922-what-is-internal-audit/three_lines_model.png]]
106102
107I won't go into depth about the changes made to the model in this
108article. Instead, let's take a look at the most current model.
103I won't go into depth about the changes made to the model in this article.
104Instead, let's take a look at the most current model.
109105
110106#+caption: 2020 Three Lines of Defense Model
111107[[https://img.cleberg.net/blog/20200922-what-is-internal-audit/updated_three_lines_model.png]]
112108
113109The updated model forgets the strict idea of areas performing their own
114functions or line of defense. Instead of talking about management, risk,
115and internal audit as 1-2-3, the new model creates a more fluid and
116cooperative model.
117
118Looking at this model from an auditing perspective shows us that
119auditors will need to align, communicate, and collaborate with
120management, including business area managers and chief officers, as well
121as reporting to the governing body. The governing body will instruct
122internal audit /functionally/ on their goals and track their progress
123periodically.
124
125However, the internal audit department will report /administratively/ to
126a chief officer in the company for the purposes of collaboration,
127direction, and assistance with the business. Note that in most
128situations, the governing body is the audit committee on the company's
129board of directors.
130
131The result of this structure is that internal audit is an independent
132and objective function that can provide assurance over the topics they
133audit.
110functions or line of defense. Instead of talking about management, risk, and
111internal audit as 1-2-3, the new model creates a more fluid and cooperative
112model.
113
114Looking at this model from an auditing perspective shows us that auditors will
115need to align, communicate, and collaborate with management, including business
116area managers and chief officers, as well as reporting to the governing body.
117The governing body will instruct internal audit /functionally/ on their goals
118and track their progress periodically.
119
120However, the internal audit department will report /administratively/ to a chief
121officer in the company for the purposes of collaboration, direction, and
122assistance with the business. Note that in most situations, the governing body
123is the audit committee on the company's board of directors.
124
125The result of this structure is that internal audit is an independent and
126objective function that can provide assurance over the topics they audit.
134127
135128* Audit Process
136A normal audit will generally follow the same process, regardless of the
137topic. However, certain special projects or abnormal business areas may
138call for changes to the audit process. The audit process is not set in
139stone, it's simply a set of best practices so that audits can be
140performed consistently.
129A normal audit will generally follow the same process, regardless of the topic.
130However, certain special projects or abnormal business areas may call for
131changes to the audit process. The audit process is not set in stone, it's simply
132a set of best practices so that audits can be performed consistently.
141133
142134#+caption: The Internal Audit Process
143135[[https://img.cleberg.net/blog/20200922-what-is-internal-audit/internal-audit-process.jpg]]
144136
145While different organizations may tweak the process, it will generally
146follow this flow:
137While different organizations may tweak the process, it will generally follow
138this flow:
147139
148140** 1. Risk Assessment
149141The risk assessment part of the process has historically been performed
150annually, but many organizations have moved to performing this process
151much more frequently. In fact, some organizations are moving to an agile
152approach that can take new risks into the risk assessment and
153re-prioritize risk areas on-the-go. To perform a risk assessment,
154leaders in internal audit will research industry risks, consult with
155business leaders around the company, and perform analyses on company
156data.
142annually, but many organizations have moved to performing this process much more
143frequently. In fact, some organizations are moving to an agile approach that can
144take new risks into the risk assessment and re-prioritize risk areas on-the-go.
145To perform a risk assessment, leaders in internal audit will research industry
146risks, consult with business leaders around the company, and perform analyses on
147company data.
157148
158149Once a risk assessment has been documented, the audit department has a
159prioritized list of risks that can be audited. This is usually in the
160form of auditable entities, such as business areas or departments.
150prioritized list of risks that can be audited. This is usually in the form of
151auditable entities, such as business areas or departments.
161152
162153** 2. Planning
163During the planning phase of an audit, auditors will meet with the
164business area to discuss the various processes, controls, and risks
165applicable to the business. This helps the auditors determine the scope
166limits for the audit, as well as timing and subject-matter experts.
167Certain documents will be created in this phase that will be used to
168keep the audit on-track an in-scope as it goes forward.
154During the planning phase of an audit, auditors will meet with the business area
155to discuss the various processes, controls, and risks applicable to the
156business. This helps the auditors determine the scope limits for the audit, as
157well as timing and subject-matter experts. Certain documents will be created in
158this phase that will be used to keep the audit on-track an in-scope as it goes
159forward.
169160
170161** 3. Testing
171The testing phase, also known as fieldwork or execution, is where
172internal auditors will take the information they've discovered and test
173it against regulations, industry standards, company rules, best
174practices, as well as validating that any processes are complete and
175accurate. For example, an audit of HR would most likely examine
176processes such as employee on-boarding, employee termination, security
177of personally identifiable information (PII), or the IT systems involved
178in these processes. Company standards would be examined and compared
179against how the processes are actually being performed day-to-day, as
180well as compared against regulations such as the Equal Employment
181Opportunity (EEO), American with Disabilities Act, and National Labor
182Relations Act.
162The testing phase, also known as fieldwork or execution, is where internal
163auditors will take the information they've discovered and test it against
164regulations, industry standards, company rules, best practices, as well as
165validating that any processes are complete and accurate. For example, an audit
166of HR would most likely examine processes such as employee on-boarding, employee
167termination, security of personally identifiable information (PII), or the IT
168systems involved in these processes. Company standards would be examined and
169compared against how the processes are actually being performed day-to-day, as
170well as compared against regulations such as the Equal Employment Opportunity
171(EEO), American with Disabilities Act, and National Labor Relations Act.
183172
184173** 4. Reporting
185Once all the tests have been completed, the audit will enter the
186reporting phase. This is when the audit team will conclude on the
187evidence they've collected, interviews they've held, and any opinions
188they've formed on the controls in place. A summary of the audit
189findings, conclusions, and specific recommendations are officially
190communicated to the client through a draft report. Clients have the
191opportunity to respond to the report and submit an action plan and time
192frame. These responses become part of the final report which is
193distributed to the appropriate level of administration.
174Once all the tests have been completed, the audit will enter the reporting
175phase. This is when the audit team will conclude on the evidence they've
176collected, interviews they've held, and any opinions they've formed on the
177controls in place. A summary of the audit findings, conclusions, and specific
178recommendations are officially communicated to the client through a draft
179report. Clients have the opportunity to respond to the report and submit an
180action plan and time frame. These responses become part of the final report
181which is distributed to the appropriate level of administration.
194182
195183** 5. Follow-Up
196After audits have been completed and management has formed action plans
197and time frames for audit issues, internal audit will follow up once
198that due date has arrived. In most cases, the follow-up will simply
199consist of a meeting to discuss how the action plan has been completed
200and to request documentation to prove it.
184After audits have been completed and management has formed action plans and time
185frames for audit issues, internal audit will follow up once that due date has
186arrived. In most cases, the follow-up will simply consist of a meeting to
187discuss how the action plan has been completed and to request documentation to
188prove it.
201189
202190* Audit Department Structure
203191While an internal audit department is most often thought of as a team of
204192full-time employees, there are actually many different ways in which a
205department can be structured. As the world becomes more digital and
206fast-paced, outsourcing has become a more attractive option for some
207organizations. Internal audit can be fully outsourced or partially
208outsourced, allowing for flexibility in cases where turnover is high.
209
210In addition, departments can implement a rotational model. This allows
211for interested employees around the organization to rotate into the
212internal audit department for a period of time, allowing them to obtain
213knowledge of risks and controls and allowing the internal audit team to
214obtain more business area knowledge. This program is popular in very
215large organizations, but organizations tend to rotate lower-level audit
216staff instead of managers. This helps prevent any significant knowledge
217loss as auditors rotate out to business areas.
193department can be structured. As the world becomes more digital and fast-paced,
194outsourcing has become a more attractive option for some organizations. Internal
195audit can be fully outsourced or partially outsourced, allowing for flexibility
196in cases where turnover is high.
197
198In addition, departments can implement a rotational model. This allows for
199interested employees around the organization to rotate into the internal audit
200department for a period of time, allowing them to obtain knowledge of risks and
201controls and allowing the internal audit team to obtain more business area
202knowledge. This program is popular in very large organizations, but
203organizations tend to rotate lower-level audit staff instead of managers. This
204helps prevent any significant knowledge loss as auditors rotate out to business
205areas.
218206
219207* Consulting
220Consulting is not an easy task at any organization, especially for a
221department that can have negative perceptions within the organization as
222the "compliance police." However, once an internal audit department has
223delivered value to organization, adding consulting to their suite of
224services is a smart move. In most cases, Internal Audit can insert
225themselves into a consulting role without affecting the process of
226project management at the company. This means that internal audit can
227add objective assurance and opinions to business areas as they develop
228new processes, instead of coming in periodically to audit an area and
229file issues that could have been fixed at the beginning.
208Consulting is not an easy task at any organization, especially for a department
209that can have negative perceptions within the organization as the "compliance
210police." However, once an internal audit department has delivered value to
211organization, adding consulting to their suite of services is a smart move. In
212most cases, Internal Audit can insert themselves into a consulting role without
213affecting the process of project management at the company. This means that
214internal audit can add objective assurance and opinions to business areas as
215they develop new processes, instead of coming in periodically to audit an area
216and file issues that could have been fixed at the beginning.
230217
231218* Data Science & Data Analytics
232219#+caption: Data Science Skill Set
233220[[https://img.cleberg.net/blog/20200922-what-is-internal-audit/data-science-skillset.png]]
234221
235One major piece of the internal audit function in the modern world is
236data science. While the process is data science, most auditors will
237refer to anything in this realm as data analytics. Hot topics such as
238robotic process automation (RPA), machine learning (ML), and data mining
239have taken over the auditing world in recent years. These technologies
240have been immensely helpful with increasing the effectiveness and
241efficiency of auditors.
242
243For example, mundane and repetitive tasks can be automated in order for
244auditors to make more room in their schedules for labor-intensive work.
245Further, auditors will need to adapt technologies like machine learning
246in order to extract more value from the data they're using to form
247conclusions.
222One major piece of the internal audit function in the modern world is data
223science. While the process is data science, most auditors will refer to anything
224in this realm as data analytics. Hot topics such as robotic process automation
225(RPA), machine learning (ML), and data mining have taken over the auditing world
226in recent years. These technologies have been immensely helpful with increasing
227the effectiveness and efficiency of auditors.
228
229For example, mundane and repetitive tasks can be automated in order for auditors
230to make more room in their schedules for labor-intensive work. Further, auditors
231will need to adapt technologies like machine learning in order to extract more
232value from the data they're using to form conclusions.
content/blog/2020-09-25-happiness-map.org +34 −39
@@ -4,10 +4,9 @@
44#+filetags: :data:
55
66* Background Information
7The dataset (obtained from
8[[https://www.kaggle.com/unsdsn/world-happiness][Kaggle]]) used in this
9article contains a list of countries around the world, their happiness
10rankings and scores, as well as other national scoring measures.
7The dataset (obtained from [[https://www.kaggle.com/unsdsn/world-happiness][Kaggle]]) used in this article contains a list of
8countries around the world, their happiness rankings and scores, as well as
9other national scoring measures.
1110
1211Fields include:
1312
@@ -20,8 +19,8 @@ Fields include:
2019- Generosity
2120- Perceptions of corruption
2221
23There are 156 records. Since there are ~195 countries in the world, we
24can see that around 40 countries will be missing from this dataset.
22There are 156 records. Since there are ~195 countries in the world, we can see
23that around 40 countries will be missing from this dataset.
2524
2625* Install Packages
2726As always, run the =install= command for all packages needed to perform
@@ -32,9 +31,8 @@ analysis.
3231#+end_src
3332
3433* Import the Data
35We only need a couple packages to create a choropleth map. We will use
36[[https://python-visualization.github.io/folium/][Folium]], which
37provides map visualizations in Python. We will also use geopandas and
34We only need a couple packages to create a choropleth map. We will use [[https://python-visualization.github.io/folium/][Folium]],
35which provides map visualizations in Python. We will also use geopandas and
3836pandas to wrangle our data before we put it on a map.
3937
4038#+begin_src python
@@ -44,14 +42,14 @@ import geopandas as gpd
4442import pandas as pd
4543#+end_src
4644
47To get anything to show up on a map, we need a file that will specify
48the boundaries of each country. Luckily, GeoJSON files exist (for free!)
49on the internet. To get the boundaries of every country in the world, we
50will use the GeoJSON link shown below.
45To get anything to show up on a map, we need a file that will specify the
46boundaries of each country. Luckily, GeoJSON files exist (for free!) on the
47internet. To get the boundaries of every country in the world, we will use the
48GeoJSON link shown below.
5149
52GeoPandas will take this data and load it into a dataframe so that we
53can easily match it to the data we're trying to analyze. Let's look at
54the GeoJSON dataframe:
50GeoPandas will take this data and load it into a dataframe so that we can easily
51match it to the data we're trying to analyze. Let's look at the GeoJSON
52dataframe:
5553
5654#+begin_src python
5755# Load the GeoJSON data with geopandas
@@ -62,9 +60,9 @@ geo_data.head()
6260#+caption: GeoJSON Dataframe
6361[[https://img.cleberg.net/blog/20200925-world-choropleth-map/geojson_df.png]]
6462
65Next, let's load the data from the Kaggle dataset. I've downloaded this
66file, so update the file path if you have it somewhere else. After
67loading, let's take a look at this dataframe:
63Next, let's load the data from the Kaggle dataset. I've downloaded this file, so
64update the file path if you have it somewhere else. After loading, let's take a
65look at this dataframe:
6866
6967#+begin_src python
7068# Load the world happiness data with pandas
@@ -76,12 +74,11 @@ happy_data.head()
7674[[https://img.cleberg.net/blog/20200925-world-choropleth-map/happiness_df.png]]
7775
7876* Clean the Data
79Some countries need to be renamed, or they will be lost when you merge
80the happiness and GeoJSON dataframes. This is something I discovered
81when the map below showed empty countries. I searched both data frames
82for the missing countries to see the naming differences. Any countries
83that do not have records in the =happy_data= df will not show up on the
84map.
77Some countries need to be renamed, or they will be lost when you merge the
78happiness and GeoJSON dataframes. This is something I discovered when the map
79below showed empty countries. I searched both data frames for the missing
80countries to see the naming differences. Any countries that do not have records
81in the =happy_data= df will not show up on the map.
8582
8683#+begin_src python
8784# Rename some countries to match our GeoJSON data
@@ -105,11 +102,11 @@ happy_data.at[democratic_congo_index, 'Country or region'] = 'Democratic Republi
105102
106103* Merge the Data
107104Now that we have clean data, we need to merge the GeoJSON data with the
108happiness data. Since we've stored them both in dataframes, we just need
109to call the =.merge()= function.
105happiness data. Since we've stored them both in dataframes, we just need to call
106the =.merge()= function.
110107
111We will also rename a couple columns, just so that they're a little
112easier to use when we create the map.
108We will also rename a couple columns, just so that they're a little easier to
109use when we create the map.
113110
114111#+begin_src python
115112# Merge the two previous dataframes into a single geopandas dataframe
@@ -125,10 +122,9 @@ merged_df = merged_df.rename(columns = {'Country or region':'Country'})
125122
126123* Create the Map
127124The data is finally ready to be added to a map. The code below shows the
128simplest way to find the center of the map and create a Folium map
129object. The important part is to remember to reference the merged
130dataframe for our GeoJSON data and value data. The columns specify which
131geo data and value data to use.
125simplest way to find the center of the map and create a Folium map object. The
126important part is to remember to reference the merged dataframe for our GeoJSON
127data and value data. The columns specify which geo data and value data to use.
132128
133129#+begin_src python
134130# Assign centroids to map
@@ -162,10 +158,9 @@ Let's look at the resulting map.
162158[[https://img.cleberg.net/blog/20200925-world-choropleth-map/map.png]]
163159
164160* Create a Tooltip on Hover
165Now that we have a map set up, we could stop. However, I want to add a
166tooltip so that I can see more information about each country. The
167=tooltip_data= code below will show a popup on hover with all the data
168fields shown.
161Now that we have a map set up, we could stop. However, I want to add a tooltip
162so that I can see more information about each country. The =tooltip_data= code
163below will show a popup on hover with all the data fields shown.
169164
170165#+begin_src python
171166 # Adding labels to map
@@ -210,8 +205,8 @@ folium.LayerControl().add_to(world_map)
210205world_map
211206#+end_src
212207
213The final image below will show you what the tooltip looks like whenever
214you hover over a country.
208The final image below will show you what the tooltip looks like whenever you
209hover over a country.
215210
216211#+caption: Choropleth Map Tooltip
217212[[https://img.cleberg.net/blog/20200925-world-choropleth-map/tooltip_map.png]]
content/blog/2020-12-28-neon-drive.org +38 −48
@@ -4,51 +4,44 @@
44#+filetags: :gaming:
55
66* Game Description
7[[https://store.steampowered.com/app/433910/Neon_Drive/][Neon Drive]]
8presents itself as a simple arcade-style game inspired by the arcade
9race games of the 1980s, yet it has managed to take up hours of my life
10without much effort. The game description, directly from the Steam page,
11is intriguing enough to entice anyone who's been looking for a good
12arcade racing game:
7[[https://store.steampowered.com/app/433910/Neon_Drive/][Neon Drive]] presents itself as a simple arcade-style game inspired by the arcade
8race games of the 1980s, yet it has managed to take up hours of my life without
9much effort. The game description, directly from the Steam page, is intriguing
10enough to entice anyone who's been looking for a good arcade racing game:
1311
1412#+begin_quote
15Neon Drive is a slick retro-futuristic arcade game that will make your
16brain melt. You've been warned. From beautiful cityscapes and ocean
17roads to exploding enemy spaceships, Neon Drive has it all.
18
13Neon Drive is a slick retro-futuristic arcade game that will make your brain
14melt. You've been warned. From beautiful cityscapes and ocean roads to exploding
15enemy spaceships, Neon Drive has it all.
1916#+end_quote
2017
2118* Gameplay
22The game holds true to the
23[[https://en.wikipedia.org/wiki/Retrofuturism][retro-futurism]] style,
24including chrome female robots, pixelated arcade machines, and
25[[https://teddit.net/r/outrun/][outrun]] aesthetics.
26
27Each level of the game is shown as a separate arcade machine. Each
28arcade machine lets you play on Normal, Hard, Insane, Practice, and Free
29Run. To beat each arcade, you must reach the end of the level without
30crashing your car into the various obstacles on the course. Basic levels
31let you move left or right to avoid blocks in the road. Later levels put
32you through other tests, such as dodging traffic or blasting asteroids.
33
34The game uses synthwave music to keep you on track to make the correct
35moves by timing the beats of the songs to the correct moves on the
36screen. It reminds me of the early Guitar Hero games, as well as mobile
37apps like VOEZ - repetition and staying on-beat is the only way to win.
19The game holds true to the [[https://en.wikipedia.org/wiki/Retrofuturism][retro-futurism]] style, including chrome female robots,
20pixelated arcade machines, and [[https://teddit.net/r/outrun/][outrun]] aesthetics.
21
22Each level of the game is shown as a separate arcade machine. Each arcade
23machine lets you play on Normal, Hard, Insane, Practice, and Free Run. To beat
24each arcade, you must reach the end of the level without crashing your car into
25the various obstacles on the course. Basic levels let you move left or right to
26avoid blocks in the road. Later levels put you through other tests, such as
27dodging traffic or blasting asteroids.
28
29The game uses synthwave music to keep you on track to make the correct moves by
30timing the beats of the songs to the correct moves on the screen. It reminds me
31of the early Guitar Hero games, as well as mobile apps like VOEZ - repetition
32and staying on-beat is the only way to win.
3833
3934* In-Game Screenshots
40Taking a look at the main menu, you can see that Neon Drive plays into
41every stereotype you can think of around retro-futuristic, synthwave
42arcades (in a good way).
35Taking a look at the main menu, you can see that Neon Drive plays into every
36stereotype you can think of around retro-futuristic, synthwave arcades (in a
37good way).
4338
4439#+caption: Neon Drive Menu
4540[[https://img.cleberg.net/blog/20201228-neon-drive/neon_drive_menu.png]]
4641
47Once you get into the first level, we see that the choice of car fits
48right in with the stereotypical cars of the 80s, like the
49[[https://en.wikipedia.org/wiki/DMC_DeLorean][DeLorean]] or the
50[[https://en.wikipedia.org/wiki/Ferrari_F40][Ferrari F40]]. Each new
51level comes with new color schemes and cars, so you should never get
42Once you get into the first level, we see that the choice of car fits right in
43with the stereotypical cars of the 80s, like the [[https://en.wikipedia.org/wiki/DMC_DeLorean][DeLorean]] or the [[https://en.wikipedia.org/wiki/Ferrari_F40][Ferrari F40]].
44Each new level comes with new color schemes and cars, so you should never get
5245tired of the aesthetic.
5346
5447#+caption: Neon Drive Race
@@ -59,25 +52,24 @@ Personally, I love the orange and blue colors used in level 2:
5952#+caption: Level 2
6053[[https://img.cleberg.net/blog/20201228-neon-drive/neon_drive_level_2.png]]
6154
62If you're the competitive type and getting 100% on all arcade machines
63isn't enough, there are leaderboards for the regular part of the game,
64and the endurance game mode.
55If you're the competitive type and getting 100% on all arcade machines isn't
56enough, there are leaderboards for the regular part of the game, and the
57endurance game mode.
6558
6659#+caption: Leaderboard
6760[[https://img.cleberg.net/blog/20201228-neon-drive/neon_drive_leaderboard.png]]
6861
6962* Other Suggestions
70Neon Drive sits nicely within the well-founded cult genre of Outrun.
71Other games that I've enjoyed in this same spectrum are:
63Neon Drive sits nicely within the well-founded cult genre of Outrun. Other games
64that I've enjoyed in this same spectrum are:
7265
7366- [[https://store.steampowered.com/app/233270/Far_Cry_3__Blood_Dragon/][Far
7467 Cry 3: Blood Dragon]]
7568- [[https://store.steampowered.com/app/1239690/Retrowave/][Retrowave]]
7669- [[https://store.steampowered.com/app/732810/Slipstream/][Slipstream]]
7770
78Although these games aren't necessarily in the same genre, they do have
79aspects that place them close enough to interest gamers that enjoyed
80Neon Drive:
71Although these games aren't necessarily in the same genre, they do have aspects
72that place them close enough to interest gamers that enjoyed Neon Drive:
8173
8274- [[https://store.steampowered.com/app/311800/Black_Ice/][Black Ice]]
8375- [[https://store.steampowered.com/app/746850/Cloudpunk/][Cloudpunk]]
@@ -85,9 +77,7 @@ Neon Drive:
8577 for Speed: Heat]]
8678- [[https://store.steampowered.com/app/1019310/VirtuaVerse/][VirtuaVerse]]
8779
88Of course, if all you really care about is the arcade aspect of these
89games, you can check out the
90[[https://store.steampowered.com/app/400020/Atari_Vault/][Atari Vault]]
91or any of the other classic games sold on Steam by companies like Namco,
92Atari. For something like Nintendo, you'd have to settle for buying used
93classic consoles or delve into the world of emulation.
80Of course, if all you really care about is the arcade aspect of these games, you
81can check out the [[https://store.steampowered.com/app/400020/Atari_Vault/][Atari Vault]] or any of the other classic games sold on Steam by
82companies like Namco, Atari. For something like Nintendo, you'd have to settle
83for buying used classic consoles or delve into the world of emulation.
content/blog/2020-12-29-zork.org +43 −56
@@ -4,33 +4,28 @@
44#+filetags: :gaming:
55
66* Download (Free)
7Before we get into the game itself, you should know that you can
8download Zork for free from Infocom's
9[[http://infocom-if.org/downloads/downloads.html][download page]]. So
10feel free to boot it up and take a ride back to the 1980s with this
11masterpiece.
7Before we get into the game itself, you should know that you can download Zork
8for free from Infocom's [[http://infocom-if.org/downloads/downloads.html][download page]]. So feel free to boot it up and take a
9ride back to the 1980s with this masterpiece.
1210
1311* Game Description
14Zork is an interactive, text-based computer game originally released
15in 1980. This series, split into three separate games, introduced a
16robust and sophisticated text parser to gamers. People were largely used
17to the simple commands used in the popular game
18[[https://en.wikipedia.org/wiki/Colossal_Cave_Adventure][Colossal Cave
19Adventure]], but Zork allowed users to send more complex commands that
20included prepositions and conjunctions.
12Zork is an interactive, text-based computer game originally released in 1980.
13This series, split into three separate games, introduced a robust and
14sophisticated text parser to gamers. People were largely used to the simple
15commands used in the popular game [[https://en.wikipedia.org/wiki/Colossal_Cave_Adventure][Colossal Cave Adventure]], but Zork allowed
16users to send more complex commands that included prepositions and conjunctions.
2117
22Zork tracks your score as you explore the map, find tools, and collect
23trophy items (e.g., a jewel-encrusted egg). When you place your trophy
24items in the trophy case found in the Living Room area, you gain score
25points. Collecting the Twenty Treasures of Zork and placing them within
26the trophy case wins the game. However, you must explore the map, solve
27puzzles, and avoid being eaten by a grue to collect these treasures.
18Zork tracks your score as you explore the map, find tools, and collect trophy
19items (e.g., a jewel-encrusted egg). When you place your trophy items in the
20trophy case found in the Living Room area, you gain score points. Collecting the
21Twenty Treasures of Zork and placing them within the trophy case wins the game.
22However, you must explore the map, solve puzzles, and avoid being eaten by a
23grue to collect these treasures.
2824
2925* The Map
30Since Zork is a vast and complex game, it helps to have a map as you
31explore and collect your trophies. However, if you want to play the game
32as it was truly intended, you should try to play it without using the
33map.
26Since Zork is a vast and complex game, it helps to have a map as you explore and
27collect your trophies. However, if you want to play the game as it was truly
28intended, you should try to play it without using the map.
3429
3530#+caption: Zork Map
3631[[https://img.cleberg.net/blog/20201229-zork/zork_map.png]]
@@ -38,53 +33,45 @@ map.
3833/[[https://www.filfre.net/2012/01/exploring-zork-part-1/][Map Source]]/
3934
4035* In-Game Screenshots
41After playing the game (for the first time ever) for several weeks
42around 2014, I was finally able to beat the game with some online help
43to find the last couple items. As I was writing this post, I installed
44the game again to grab some screenshots to show off the true glory of
45this game. As noted in
46[[https://www.filfre.net/2012/01/exploring-zork-part-1/][Jimmy Maher's
47playthrough]], the original Zork games looked quite a bit different due
48to the older hardware of computers like the Apple II and multiple bug
49fixes that Infocom pushed out after the game's initial release. My
50play-through uses the
51[[https://store.steampowered.com/app/570580/Zork_Anthology/][Zork
52Anthology]] version, which utilizes DOSBox on Windows.
36After playing the game (for the first time ever) for several weeks around 2014,
37I was finally able to beat the game with some online help to find the last
38couple items. As I was writing this post, I installed the game again to grab
39some screenshots to show off the true glory of this game. As noted in [[https://www.filfre.net/2012/01/exploring-zork-part-1/][Jimmy
40Maher's playthrough]], the original Zork games looked quite a bit different due to
41the older hardware of computers like the Apple II and multiple bug fixes that
42Infocom pushed out after the game's initial release. My play-through uses the
43[[https://store.steampowered.com/app/570580/Zork_Anthology/][Zork Anthology]] version, which utilizes DOSBox on Windows.
5344
54The first screenshot here shows the introductory information, which
55doesn't include instructions of any kind for the player. If you haven't
56played text adventures before, try to use simple commands like "go
57west," "look around," or "hit troll with elvish sword."
45The first screenshot here shows the introductory information, which doesn't
46include instructions of any kind for the player. If you haven't played text
47adventures before, try to use simple commands like "go west," "look around," or
48"hit troll with elvish sword."
5849
5950#+caption: Zork Screen, pt. 1
6051[[https://img.cleberg.net/blog/20201229-zork/zork_01.png]]
6152
62In this second screenshot, we see the player has entered the house and
63found the trophy case in the living room. The lantern and sword in this
64room allow the player to explore dark areas and attack enemies. If you
65don't use the lantern, you won't be able to see anything in dark areas,
66and you may be eaten by a grue.
53In this second screenshot, we see the player has entered the house and found the
54trophy case in the living room. The lantern and sword in this room allow the
55player to explore dark areas and attack enemies. If you don't use the lantern,
56you won't be able to see anything in dark areas, and you may be eaten by a grue.
6757
6858#+caption: Zork Screen, pt. 2
6959[[https://img.cleberg.net/blog/20201229-zork/zork_02.png]]
7060
71Finally, we see that the player has found the first treasure: a
72jewel-encrusted egg. These treasures can be taken back to the house and
73placed in the trophy case or carried until you feel like you want to put
74things away.
61Finally, we see that the player has found the first treasure: a jewel-encrusted
62egg. These treasures can be taken back to the house and placed in the trophy
63case or carried until you feel like you want to put things away.
7564
7665#+caption: Zork Screen, pt 3.
7766[[https://img.cleberg.net/blog/20201229-zork/zork_03.png]]
7867
7968* Conclusion
80It's been quite a few years since I first played Zork, but I clearly
81remember the late nights and bloodshot eyes that helped me find all the
82treasures. This game is well worth the time and effort, even though the
83text-based aspect may be off-putting to gamers who didn't have to grow
84up playing games without graphics. However, I believe that the strategy
85and skills learned in early video games like Zork can actually help you,
86even when playing newer games.
69It's been quite a few years since I first played Zork, but I clearly remember
70the late nights and bloodshot eyes that helped me find all the treasures. This
71game is well worth the time and effort, even though the text-based aspect may be
72off-putting to gamers who didn't have to grow up playing games without graphics.
73However, I believe that the strategy and skills learned in early video games
74like Zork can actually help you, even when playing newer games.
8775
8876If you do decide to play Zork, you can download Zork I, II, and III from
89Infocom's [[http://infocom-if.org/downloads/downloads.html][download
90page]] for free or search the internet for an online version.
77Infocom's [[http://infocom-if.org/downloads/downloads.html][download page]] for free or search the internet for an online version.