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