Thursday, June 13, 2019

LaTeX, Vim and Perl

I'm finishing up grad school.  I write all of my papers in vi (usually Elvis, sometimes Vim) and mark them up with LaTeX.  Yeah, I know.  I'm a geek.  I just love the beautiful look of a typeset document when I'm done.  I like the way it forces me to think about the outline; creating \sections{}, then \subsection{} and even \subsubsection{}.  This looks really nice as an auto-generated table of contents. 

Even better than the beautiful typesetting, I really enjoy keeping my bibliography in BibTeX and having LaTeX/BibTeX automagically write my bibliography citations and print my bibliography at the end by simply writing \cite[p.78]{author}.

And when I'm done, if I don't want a PDF, I can use latex2rtf for an RTF or latex2html to create a web site (or latex2man if I'm feeling extra geeky).  And, I pretty much live in vi all day so, even if I try to use a regular word processor, it gets krufted up with :wq and randomly interjected i's and a's and x', etc.

I used to use emacs.  I did more with emacs I think because I had a Wyse60 monitor and really used the multiple buffers and split screens.  And, loved the macros.  I know, you can do this with vi too.  I really need to learn more of that in vi.  Lately, while writing these papers, I find myself wanting to copy lines from other .tex docs into the current document.  Cutting and pasting outside of vi leaves unexpected broken lines that require a lot of Ctrl-J, x, etc.  Then I saw an article by Jun Wu "Perl as a command line tool"  Lots of fun.  Love Perl one-liners.  She had a version of this example:

    $ perl -ne 'print if $. >=64 && $. <=94' June10.tex >>../FinalPaper/ENG609final.tex 

It's so great to NOT have to clean up line breaks after cut & paste.  And, even better, it gives me an excuse to play around with Perl one-liners.  Some people things that's odd but I see it as recreational - like Soduko or something.

Anyways, that's all I'm up to with Perl lately.  See you all at the 20th anniversary of YAPC

Thursday, December 13, 2018

Bitten by an old "bug"?

So thankful to find brian d foy's post about LWP::Protocol::https yesterday after some really old scripts just wouldn't work on a new system.  I could tell it was having an issue with the https - but, like Brian (in 2011?!) I thought all of my usual SSL libraries would cover it (which they did).  Installing all of my modules takes about an hour.  So, I continued to flail during this time.  By the time I saw Brian's post, the problem fixed itself (after I installed my own CPAN favorites).

Not knowing my cluster of favorite CPAN modules had fixed this, I quickly did a "install  LWP::Protocol::https" to which cpan replied "installed and already up to date".  "So why isn't it working?!", I thought.  I tried again and it was.

So, to recap, if you plan on using "LWP::Simple qw(getstore)" to grab something from a HTTPS web site and you get a error 501 - this is what you need to fix your problem: LWP::Protocol::https (which was split out in 2011 and I evidently missed the memo).

Monday, November 19, 2018

Perl, Awk or other?

I had some quickie output from an ad hoc Ansible command. I love Ansible! The data was quick to acquire and accurate. But the readability was not optimal. "Hmmm...", I thought, "It'd be good enough if it just separated the data elements with a space." Actually, this comes up a lot with my quickie ad hoc Ansible reports so I do what I always do: Perl!

That worked perfectly but it was so simple I thought it should be a one-liner. BTW, I really enjoyed Peteris Krumins' Sed, Awk and Perl one-liner books. I bought them all in PDF and then bought the pretty No Starch Press version of Perl One-Liners (makes a great coffee table book - I just pick it up and open it to any page and I'm intrigued - Fun!) So, I took a stab at it. It worked perfectly the first time but it was really just my same program in one-liner format. So here it is. If you have a more elegant solution let me know.

  perl -pe 'if (m/SUCCESS/) {print "\n$_"} else {print $_} ' JavaReport.txt
P.S. The I tried Awk:
 awk '/SUCCESS/ { print "\n" } {print}' JavaReport.txt  
(although this isn't quite right)

Thursday, November 1, 2018

Being Lazy

Just discovered Array::Utils!  Wonderful!  To think I was going to write a "find unique elements in an array" myself.  Nope!

use Array::Utils qw(:all);
my @unique = unique(@a, @b);

Friday, February 10, 2017

These are a few of my favorite modules

I was messing around with Xen on Slackware 14.2 and got my system goofed up.  The console worked but the mouse and keyboard would not function in X.  So, after a bit of flailing, I did a distro upgrade (from Slackware 14.2 to current), re-ran liloconfig and,  ta-dah! -Success!

I noticed Perl didn't work however.  It upgraded Perl but the modules were "mis-matched" it said.  After some googling, I ran across several suggested fixes.  The simplest seemed to me the brute force - delete all Perl references and reinstall Perl - which I did. (perl -E 'map {say $_} @INC')

Now I had a NEW problem.  NO MODULES AT ALL.  Began slowly adding modules as I needed them but today that was getting old.  So I did a quick grep of a few hundred of my Perl programs to see which modules I was using and then did a cpan install of all of them.  It's still running...

Which Perl modules you ask?  Well, to satisfy your curiosity and have this list handy the next time I install a fresh Perl - here's my list:

Gimp Gimp::Fu File::stat Time::localtime DBI Net::LDAP Net::LDAP::Bind Net::LDAP::Search MIME::Lite Net::Nslookup Nmap::Scanner Net::SSL::ExpireDate XML::RSS XML::Simple Test::Simple Net::LDAP::LDIF File::Basename CGI::Carp Net::SNMP SQL::Abstract Text::xSV Pod::HTML2Pod LWP::Simple LWP::UserAgent Net::IMAP::Simple Mojo::UserAgent Data::Dumper Date::Manip Net::Twitter DBD::SQLite Net::DNS Net::Telnet::Cisco DBD::Sybase Crypt::GPG File::Slurp utf8 Socket Net::DNS AnyEvent Net::RabbitFoot WWW::Mechanize HTTP::Cookies File::Copy Bot::BasicBot POE::Component::SSLify Config::General Log::Log4perl::Appender::RRDs LWP::Protocol::https

Wow.  That's actually shorter than I thought.  It looked more impressive as one line.  ;-)

Thursday, January 5, 2017

Ansible Playbook and Perl (or 'Salted MD5 - Yummo!')

Not much of an article here - just some notes about encrypting passwords for Ansible playbooks.  All of the examples for adding the encrypted passwords to the ansible playbook are Python (what's up with that?!) :-)

So, I have an example of a playbook to change a user password on all ansible systems and I have translated the password encryption field for Perl (you're welcome!)

Here's my chgUserPW.yml:

- hosts: all
  sudo: yes
  - name: Change user1 password
    # Created passwd with:
    # perl -e 'print crypt("your pw here","\$6\$salt\$")'
    # Notes: password, 6 = md5, salt = random string to salt entropy
    user: name=user1 update_password=always password=$6$salt$sjuT2.eSTcX/vKwW7RlB1tdLxyB34lJSsndXA5yzC7BZrdAkiAOqtf4NPtHa0tjdFa/5wcS1.vt0LAwzEassr0

All you do is run the Perl one-liner adding your own password and salt string (the word "salt" is probably not a good choice) and you get the format for the password Linux is expecting (salted MD5).  Paste that into the password field and you can now change all of your system's user1 passwords to "your pw here".

*Disclaimer - I'd try it on a single system first, preferably one you have a backdoor root account on.  It worked for me.  Good luck!

Tuesday, September 20, 2016

Alternatives to Powerpoint - My Favorite just sent me a mailing this morning entitled: 3 open source alternatives to PowerPoint.  I immediately thought to myself "Ok, LibreOffice, CalligraOffice ... I wonder what the 3rd is?".  I was really surprised it was MY personal favorite: Reveal.js.  I've been using that since had an article on it.  I've seen several presentations done using it at YAPCs and Ohio Linuxfest (coming up soon, btw).

Despite the headline, goes beyond 3 alternatives and also discusses using your console for slide shows with Vimdeck.  Very interesting!

The article didn't explain how to use (my favorite) Reveal.js though so if you're curious, check out the Perltricks link above.  I think you'll be glad you did.