Author Archives: Aron

Python and Pandas on Jupyter

Maybe it should be in Jupyter??? In any case, I’ve been studying using python in jupyter notebooks and it’s some pretty radical stuff. Using numpy and %matplotlib inline can yield some incredible results. This is a list of the commonly used features and samples thereof.

read more »

Server Changeover Complete

Apologies for the site being offline from 2/13 – 2/18. The storage array needed to be changed over.
Short story: Hard drive crashed.
Long story: Back in 5/20, I found WD SAS 3TB drives on newegg for like $50 apiece and got a dell H310 raid card for $25 and set my Linux server up with 4 of those bad boys in a RAID 5 array. Turns out the drives were used which brings me to the moral of the story never buy from TDT Technologies on NewEgg.com. So I had one drive fail about 6 months ago and I knew it was a matter of time before another was going to die so I ordered 4 new Seagate 4TB SATA drives and the cables to hook into the H310 and went about my merry way until Sunday 2/13 when I lost the 2nd SAS drive and all was lost. Well not really as the system was rsynced with the NAS so no biggie, I had the data.
Now I’ve been with Fedora since Fedora was spun off from RedHat a billion or so years ago in computer time. I love Fedora and my last build I was tempted to move to CentOS but couldn’t get it to run with the hardware so Fedora to the rescue and Fedora it was. But now thanks to the CentOS debacle RedHat is now giving RHEL subscriptions to folks like me that only use one server and don’t make any money off of. So now I’ve got just under 11TB worth of space on my array with new drives in a RAID 5 configuration running Red Hat Enterprise Linux 8.5!!! This is a huge win because I wanted to get certified in RHEL and now I’ve got a box to work with and it’s long term support. And I’ve learned a bunch to be able to convert my Fedora rsync backups to the RHEL OS.

Certbot Adding Domain to a Cert

I self-host my websites because, well I’m a computer geek and that’s what we do. Back in the dark ages, we used to pay out the nose for SSL certificates to protect the site content in transit. To this day I won’t deal with GoDaddy because of an issue with that. But then LetsEncrypt was formed by the industry heavyweights and offered free SSL certs for your self-hosting needs.

As I like registering domains on whims, I need to secure them when I bring them up and here’s what you need to do.

First, look up the certificates that you have with:
certbot certificates

Then add the domain you want to at the end of the list, in this case, domain4.com:
certbot certonly –cert-name [CERTNAME] -d domain1.com,domain2.com,domain3.com,domain4.com

Python – Merge CSV’s

I’m really enjoying python, one of the things that I’m really digging is pandas, this piece lets you work with CSV files to do a multitude of things. Because you have to pull out data in a loop, this little piece of code will allow you to stitch them together. This sample uses pipe delimiters with UNIX line feeds and quoted all.

import os
import glob
import pandas as pd
import csv
#os.chdir("C:\\onedrive_tt\\Testing\python\\CombineCSVs\\testApplicationFiles")
os.chdir("C:\\app\\python\\CombineCSVs\\testApplicationFiles")

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f, sep = '|', dtype=str) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "combined_csv.csv", sep='|', index=False, encoding='utf-8', line_terminator="\n", quoting=csv.QUOTE_ALL)

TCC – Dead Man Walking (So long and thanks for all the fish…)

So word came down through the grapevine that Taleo is no longer being sold by Oracle and the end of life has been set at 4 years, I guess that would be 2025. It’s funny to think back and I’ve been dealing with Taleo in one form or another since 2007, the last 14 years, and just over a quarter of that time it will cease to exist.

Super annoying considering I was planning on doing the TCC thing into retirement but no biggie, there’s bigger and better fish to fry hopefully outside the Oracle sphere of products. Candidly I’m thinking of Workday but I’ve peaked behind the curtain of the ATS portion of the product and it’s a little scary that it’s that convoluted and disoriented. I’m wondering if the decision in 2013 to stick with Taleo vs SalesForce was right, although I can’t be sure, my path is set by a higher order and I’m here to learn and enjoy the ride. Looking forward to what’s around the next bend!

SSIS – ForEach looping import files

One of the harder things to learn in SSIS is the looping through files and importing them into the DB to be able to work with them. Almost all integrations produce files as [what I am]-[datetime].csv. For example recruiting-Application_Attachments-20211012 00558 is the manifest file extracting the recruiting application attachments and the time-date at the back let’s us know when.

Hopefully the export can take place using one file but don’t count on it, you have to apply looping throughout the whole process, from whatever is doing the extract, through the transfer and onto the load. So if you have a dozen files like above (or 100, 1000, 10000) you need to loop through and transfer.

This walk through from stack overflow is dead on and should get you started in the right direction.

TCC – Looping with LRD

So looping is great if you have a static set that you are pulling, think a big set of resumes. But what if you are using this as part of an ongoing and looping is needed with a LRD. Fear not, this is how you do it.

Pre-processing:
1st step – com.taleo.integration.client.customstep.paging.PagingPreStep
Arguments:
pagingSize
100000
pagingFilename
[CFGFOLDER]\pagefile.pgn

2nd step – com.taleo.integration.client.customstep.lrd.LRDPreStep
Arguments :
lrdFilename
LRD filename, this will be the name as created by the config in the standard LRD location

Post-processing (no arguments needed):
1st step – com.taleo.integration.client.customstep.count.ExportCountPostStep
2nd to last step – com.taleo.integration.client.customstep.paging.PagingPostStep
Last step – com.taleo.integration.client.customstep.lrd.LRDPostStep

TCC – Table Key

So sometimes you’re digging through a table and there isn’t an obvious primary key (normally Number). While most of the tables this happens on aren’t usually exported but in case you need to, you can query the table for the primary key by using this projection, then you can hopefully figure out what the key is named.

<quer:projection alias="Validkey" xmlns:quer="http://www.taleo.com/ws/integration/query">
  <quer:key path=""/>
</quer:projection>

TCC – Synchronous vs Asynchronous

So for whatever reason I have a mental block distinguishing between these two when it comes to the Taleo API. So to finally write it down:

  • TCC uses ‘asynchronous’ transactions (it processes transactions in a queue) while the Taleo Web Services is ‘synchronous’.  
  • The Taleo WebServiceAPI is type Simple Object Access Protocol (SOAP) for XML-based message exchange, not Representational State Transfer (REST).
  • Taleo Web Services is designed for smaller integrations.  
  • The integration limits of each are covered in the appendix of their respective user guides.
  • For more information about the Taleo integration tools and their limits please see:

NetChange Result Files

So net-change has given you a bunch of errors, oh well, that’s why we’re here. But it would be nice if net-change would give you the actual identifier instead of instead of a concatenated entity, operation and identifier with a pipe. Oh well, here’s how you pull it in SQL (access) so I don’t have to look up the three functions again.

SELECT SourceCandError.Identifier
,StrReverse(SourceCandError.Identifier) as Rev
,InStr(SourceCandError.Identifier, "|") as FirstPipeLoc
,InStr(StrReverse(SourceCandError.Identifier), "|") as LastPipeLoc
,Right(SourceCandError.Identifier, InStr(StrReverse(SourceCandError.Identifier), "|") -1) as Ident
,Right(SourceCandError.Identifier, InStr(SourceCandError.Identifier, "|")) as AfterPipe
,Mid(SourceCandError.Identifier, InStr(SourceCandError.Identifier, "|")+1, Len(SourceCandError.Identifier) - InStr(SourceCandError.Identifier, "|") - InStr(StrReverse(SourceCandError.Identifier), "|")) as Oper
,SourceCandError.Status
FROM SourceCandError;