Monday, January 27, 2025

Sending email via command line

Requirements:

sudo apt install mailutils
sudo apt-get install ssmtp

cat /etc/ssmtp/ssmtp.conf
mailhub=email.firm.com:25 <smpt server>


Then there are multiple ways to it 

cat temp
To: harshal.patil@adyne.com 
Subject: Some Notifying Email 
MIME-Version: 1.0 
Content-Type: text/plain 
Body of your email goes here. Hello world

cat temp | sendmail -i -t

OR

 echo -e "To: harshal.patil@firm.com\nSubject: Subject\nContent-type: text/html" | cat - /stage/qspc/projects/sas/tools/sas_slippage_outliers.html | sendmail -i -t

OR

52 07 * * 1-5 echo "To: harshal.patil@firm.com, harshal.patil@firm.com \nSubject: Slippage Outliers $(date +\%F) \nContent-type: text/html\n\n" > /tmp/email_body.txt;cat /stage/qspc/projects/sas/tools/sas_slippage_outliers.html >> /tmp/email_body.txt;cat /tmp/email_body.txt | /usr/sbin/sendmail -i -t > /stage/qspc/logs/sendmail/$(date +\%d).log 2>&1


If wanted to attach as a file (when html contains graphs):

 (cat /stage/qspcadmin/logs/sendmail/intraday_liquidation.header ; uuencode /stage/qspcadmin/projects/sas/tools/intraday_liquidation.html intraday_liquidation.html) | /sbin/sendmail -i -t

where 

$ cat /stage/qspcadmin/logs/sendmail/intraday_liquidation.header
#To: harshal.patil@firm.com, a.b@firm.com
To: harshal.patil@firm.com
Subject: Intraday Strategy Liquidation

if you wanted an image embeded in the bodt:
(
echo "From: sender@example.com"
echo "To: recipient@example.com"
echo "Subject: Embedded Image"
echo "MIME-Version: 1.0"
echo 'Content-Type: multipart/related; boundary="boundary123"'
echo ""
echo "--boundary123"
echo "Content-Type: text/html; charset=UTF-8"
echo ""
echo '<html><body>'
echo '<p>Here is an embedded image:</p>'
echo '<img src="cid:myimage" width="600" height="400">'
echo '</body></html>'
echo ""
echo "--boundary123"
echo "Content-Type: image/jpeg"
echo 'Content-Transfer-Encoding: base64'
echo 'Content-Disposition: inline; filename="image.jpg"'
echo 'Content-ID: <myimage>'
base64 image.jpg
echo "--boundary123--"
) | sendmail -t

Python / pandas last_bday

import pandas as pd

from pandas.tseries.offsets import BDay

today = pd.to_datetime('today')

last_bday = today - BDay(1) 

Thursday, January 23, 2025

Python groupby

 There are 2 ways to normal results:

  • use agg function

grp_df = df.groupby(['BookLevel4','Symbol','Direction','OrderId'], as_index=False).agg({'TxTime':['min','max','count'], 'FillQuantity':['sum']})

grp_df.columns = [''.join(col).strip() for col in grp_df.columns.values]


  • use apply function 
    • In case you use more than 1 column
    • Wont have to normalize multi-level columns


grp_df = df.groupby(['BookLevel4','Symbol','Direction','OrderId'], as_index=False).apply(

        lambda s: pd.Series({

            "TxTimemin": s["TxTime"].min(),

            "TxTimemax": s["TxTime"].max(),

            "TxTimecount": s["TxTime"].count(),

            "FillQuantitysum": s["FillQuantity"].sum(),

            "FillVWAP": (s['FillPrice'] * s['FillQuantity']).sum() / s['FillQuantity'].sum()

        })

    )

Tuesday, January 21, 2025

my .bcrc

 scale=6

my .screenrc

All possible variables are listed here:

https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes


 Here are the contents of my screenrc:

# Change default scrollback value for new windows

defscrollback 10000 # default: 100


# no welcome message

startup_message off


# advertise hardstatus support to $TERMCAP

termcapinfo  * '' 'hs:ts=\E_:fs=\E\\:ds=\E_\E\\'

termcapinfo xterm* ti@:te@

vbell "off"

bindkey "^[OR" prev

bindkey "^[OS" next


hardstatus alwayslastline

hardstatus string '%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]'


screen -t notebook 

screen -t local

Git setup

 Few initial commands to setup git properly

* git config --global user.email "Harshal.Patil@company.com"

* git config --global user.name "Harshal Patil"

* git config --global credential.helper store