about summary refs log tree commit diff stats
path: root/README.org
diff options
context:
space:
mode:
Diffstat (limited to 'README.org')
-rw-r--r--README.org219
1 files changed, 0 insertions, 219 deletions
diff --git a/README.org b/README.org
deleted file mode 100644
index 0e83ccf..0000000
--- a/README.org
+++ /dev/null
@@ -1,219 +0,0 @@
-#+HTML_HEAD: <link rel="stylesheet" href="../static/style.css">
-#+HTML_HEAD: <link rel="icon" href="../static/favicon.png" type="image/png">
-#+EXPORT_FILE_NAME: index
-#+TITLE: Ara
-
-Ara is a simple cli program that prints Covid-19 stats. Currently it
-only prints India's Covid stats.
-
-| Project Home    | [[https://andinus.nand.sh/ara/][Ara]]           |
-| Source Code     | [[https://git.tilde.institute/andinus/ara/][Andinus / Ara]] |
-| GitHub (Mirror) | [[https://github.com/andinus/ara/][Ara - GitHub]]  |
-
-*Tested on*:
-- OpenBSD 6.7
-  - Perl v5.30
-
-*Note* (OpenBSD users): If you're using a custom Perl install then add the
-path to =OpenBSD::= in @INC.
-
-| Demo Videos    |
-|----------------|
-| [[https://diode.zone/videos/watch/95868534-8aae-497b-806e-5766236bb058][Ara 2020-06-14]] |
-| [[https://diode.zone/videos/watch/03be044d-6ab7-4f01-8769-0084674dec93][Ara 2020-06-06]] |
-
-* Documentation
-=ara= by default will first look for the file in =$XDG_CACHE_HOME=, if that
-is not set then =HOME/.cache= is used, the file name is assumed to be
-=ara.json=, there is currently no option to override this or the full
-path.
-
-If you run =ara= on OpenBSD then it should use =OpenBSD::Unveil=.
-
-Default logic is to check if the file is available locally & if it's not
-older than 8 minutes, in any other case it fetches the latest data. This
-can be controlled with =local= & =latest= option.
-
-The file is downloaded over a secure connection & the server's identity
-is verified.
-** Options
-*** local
-This option forces =ara= to use the data available locally, it will only
-override this option when the file doesn't exist on disk.
-*** latest
-This will force =ara= to fetch the latest data.
-
-*Note*: =local= & =latest= option cannot be used together, =ara= will print a
-warning & latest option will be ignored.
-*** notes
-Only state notes will be printed if this option is passed.
-*** rows
-=rows= option takes an integer as argument which can be passed as =--rows
-n=, where =n= is an integer.
-
-=ara= will only print maximum these many number of rows, if you pass 0 or
-a negative number then =ara= will ignore it & print all the rows.
-*** showdelta
-This will show delta values for every row, default is to show delta only
-on rows that were updated "Today".
-*** nodelta
-This will remove delta values from every column.
-*** nototal
-This will remove the "Total" or "India" row from the table.
-
-=hide= option should be used for this purpose, this option is only kept
-for backwards compatibility.
-*** nowords
-"Confirmed", "Recovered" & "Deaths" column format numbers in words. For
-example, "1.6 lakhs" instead of "1,60,000" which makes it easier to
-read. This option will disable this behaviour.
-
-"Active" column doesn't format numbers in words because it's alignment
-is set as "right" & formatting it this way doesn't look good. There is
-currently no option to change this behaviour.
-*** hide
-=hide= is able to hide states & columns from the table, the values should
-be space seperated like =--hide active "last updated" recovered=. These
-are case sensitive & should be lowercase.
-
-Arguments can be passed as they're printed, for example =--hide "jammu
-and kashmir"= is equivalent to =--hide jk= because "JK" is what's printed
-on the table.
-
-Only "States" & "Notes" column cannot be hidden, =ara= will print a
-warning if you try to do so.
-
-*Note*: "updated" is aliased to "last updated", so you can pass =--hide
-updated= & it would hide the "last updated" column.
-
-*Note*: The feature to get space seperated values is marked as
-experimental in =Getopt::Long= so the behaviour can change in future,
-worse even get removed. To guarantee backwards compatibility pass each
-value by itself like =--hide jk --hide active=, this is equivalent to
-=--hide jk active=.
-
-**** Implementation
-=%hide= hash is created from =@to_hide= which was created from user
-arguments by =Getopt::Long=.
-
-#+BEGIN_SRC perl
-undef @hide{ @to_hide }
-    if scalar @to_hide;
-#+END_SRC
-
-=%hide= contains values of =@to_hide= as keys & the value to those keys is
-not defined, hence =undef=. This one line says Perl to "undef these keys
-from the hash =%hide=" where these refers to the values of =@to_hide=. This
-will fail if =@to_hide= is empty so we have to check for that.
-
-Alternatively we can do =@hide { @to_hide } = ()= which works even if
-=@to_hide= is empty & does the same thing otherwise, this looks more
-cryptic so I use the first way.
-
-To check if a specific column is to be hidden or not we use =exists= like
-=exists $hide{something}=.
-
-There are other ways of doing this & maybe those would be better, I
-didn't test which one was the best.
-***** Columns
-To make =hide= work we put create =@columns= & push columns to it unless the
-user has asked to hide it.
-#+BEGIN_SRC perl
-my @columns;
-
-push @columns, 'Confirmed' unless exists $hide{confirmed};
-push @columns, 'Active'    unless exists $hide{active};
-#+END_SRC
-***** States
-The whole block is skipped if the user has asked to hide the state. As
-said above, statecode is also check if that's what is printed in the
-table which is true only if =length $state > 16=. There is no good reason
-for not checking statecode for everything.
-#+BEGIN_SRC perl
-next
-    if exists $hide{lc $state}
-    # User sees the statecode if length $state > 16 so we also match
-    # against that.
-    or ( length $state > 16
-             and exists $hide{lc $statewise->[$i]{statecode}});
-#+END_SRC
-*** show
-=show= also accepts space seperated values & just like in =hide='s case it's
-experimental & can change in future.
-
-=show= will only show states that are passed. For example, =--show jk= will
-only print data for Jammu & Kashmir. If both =show= & =hide= is used for
-states then =hide= is ignored. =show= for states can be used with =hide= for
-columns.
-**** Implementation
-=show='s implementation is similar to =hide='s. =%show= hash is created from
-=@to_show=.
-
-#+BEGIN_SRC perl
-undef @show{ @to_show }
-    if scalar @to_show;
-#+END_SRC
-
-If user has used =show= then =hide= is ignored, this is achieved by an
-if-else block. This also means that invalid values in state would cause
-=hide= to be ignored, for example passing =--show invalid= wouldn't match
-anything but =hide= will still be ignored. This is intentional.
-
-#+BEGIN_SRC perl
-if ( scalar @to_show ) {
-    next
-        unless exists $show{lc $state}
-        or ( length $state > 16
-             and exists $show{lc $statewise->[$i]{statecode}});
-} else { ... }
-#+END_SRC
-*** help
-=help= will print help for =ara= which will have little information about
-all these options listed above.
-
-- =nototal= was removed from =help= because =hide= option does the same thing
-  & is recommended.
-** Cross-platform compatibility
-Previously =ara= had OpenBSD specific code & would simply fail to run on
-other OSes, now it runs on all platforms. There is still OpenBSD
-specific code but it's used only when =ara= detects to be running on
-OpenBSD.
-
-#+BEGIN_SRC perl
-use constant is_OpenBSD => $^O eq "openbsd";
-require OpenBSD::Unveil
-    if is_OpenBSD;
-sub unveil {
-    if (is_OpenBSD) {
-        return OpenBSD::Unveil::unveil(@_);
-    } else {
-        return 1;
-    }
-}
-#+END_SRC
-
-=is_OpenBSD= is a constant so the if-else block is optimized at compile
-time. Another way would be to define the sub inside the if-else block
-which is what I did initially but that is not the same thing as this.
-
-You cannot define sub like that in Perl because this step happens at
-compile time & so the if-else block is ignored, which means the code
-will be equivalent to else block being true all the time because that's
-what comes later.
-
-#+BEGIN_SRC perl
-if (is_OpenBSD) {
-    require OpenBSD::Unveil;
-    OpenBSD::Unveil->import;
-} else {
-    sub unveil { return 1; }
-}
-#+END_SRC
-
-Above code block will override the unveil sub to be =return 1;= everytime,
-this was fixed in commit =245aebe3da915afc0feafc7257f025e2e66a987f=.
-
-This will still fail on OpenBSD if users don't have =OpenBSD::Unveil= in
-=@INC=, this shouldn't be an issue with Perl in base but if user runs
-custom Perl then it might not be in =@INC=, in that case user is expected
-to fix this by adding the path to =OpenBSD::= in =@INC=.