#calcolo del numero di giorni lavorativi all'anno, per esempio il 2023
from datetime import date, timedelta
def count_weekdays_excluding_holidays(year, holidays):
start_date = date(year, 1, 1)
end_date = date(year, 12, 31)
total_weekdays = 0
holidays_set = set(date(year, int(d.split('/')[1]), int(d.split('/')[0])) for d in holidays)
current_date = start_date
while current_date <= end_date:
if current_date.weekday() < 5 and current_date not in holidays_set:
total_weekdays += 1
current_date += timedelta(days=1)
return total_weekdays
# Festività 2023
holidays_2023 = ["1/1", "6/1", "10/4", "25/4", "1/5", "2/6", "29/6",
"15/8", "1/11", "8/12", "25/12", "26/12"]
print(count_weekdays_excluding_holidays(2023, holidays_2023))
#-------------------------------------------------------------------------------------
#calcolo del numero di giorni lavorativi all'anno per mese, in questo caso il 2023, con scrittura del mese e numero giorni
from datetime import date, timedelta
import calendar
def monthly_working_days(year, holidays):
monthly_days = {}
holidays_set = set(date(year, int(d.split('/')[1]), int(d.split('/')[0])) for d in holidays)
for month in range(1, 13):
total_days = 0
for day in range(1, calendar.monthrange(year, month)[1] + 1):
current_date = date(year, month, day)
if current_date.weekday() < 5 and current_date not in holidays_set:
total_days += 1
month_name = calendar.month_name[month]
monthly_days[month_name] = total_days
return monthly_days
# Festivi
holidays_2023 = ["1/1", "6/1", "10/4", "25/4", "1/5", "2/6", "29/6", "15/8", "1/11", "8/12", "25/12", "26/12"]
monthly_working_days_2023 = monthly_working_days(2023, holidays_2023)
print(monthly_working_days_2023)
#Risultato: {'January': 21, 'February': 20, 'March': 23, 'April': 18, 'May': 22,
'June': 20, 'July': 21, 'August': 22, 'September': 21, 'October': 22, 'November': 21, 'December': 18}
Sorgenti, linguaggi, best practice, suggerimenti, sul mondo della programmazione e non solo
martedì 21 novembre 2023
Calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì.
venerdì 23 settembre 2022
Caricare una DropDownList con MVC C#
In questo caso carico la dropdownlist del pagesize, ossia quanti dati mosterò a video ad esempio su di una grid.
Parte relativa al back-end
public ActionResult Index()
{
LoadItem();
}
private void LoadItem()
{
ViewData["offsetlist"] = new List {
new SelectListItem { Text = "5", Value = "5" },
new SelectListItem { Text = "10", Value = "10" },
new SelectListItem { Text = "15", Value = "15" },
new SelectListItem { Text = "50", Value = "50" }
};
}
Nella View del file csthml inserire la seguente sintassi:
@Html.DropDownList("pagesize",
(ViewData["offsetlist"] as IEnumerable), "Page Size"
, new { @class = "form-control", onchange = "this.form.submit()" })
}
lunedì 19 settembre 2022
Apertura o Download di un file pdf già creato con MVC C#
Nella View inserire la seguente sintassi che permetterà il download del file.
<a class="text-default" href="@Url.Action("PdfGuide", "Home")"
target="_blank" title="Download guide"> <i class="dropdown-icon fe fe-help-circle"></i> </a>
Parte relativa al back-end, inserire il file pdf sotto la root del progetto ~/assets/help (se non esiste la dir crearne una nuova)
public FileResult PdfGuide()
{
//include the .pdf extention at the end
string path = Server.MapPath(String.Format("~/assets/help/guide.pdf"));
string mime = MimeMapping.GetMimeMapping(path);
return File(path, mime);
}
mercoledì 27 gennaio 2021
Portare un valore da un campo testo sulla barra degli indirizzi con html e javascript
Questo metodo è utile se vogliamo ad esempio inviare il valore in un'altra pagina html o php.
<html>
<body>
<form name='frmPagin' action='javascript:searchItem();' method='post'>
<table border="0" >
<tr>
<td valign="top">
<input name="inputsearch" id="inputsearch"
type="text" maxlength="80" placeholder="Search">
</td>
</tr>
<tr>
<td valign="top">
<input name="btnsearch" id="btnsearch" type="submit" value"SEND">
</td>
</tr>
</table>
<script>
function searchItem(){
addOrUpdateUrlParam('Search',document.getElementById("inputsearch").value);
}
function addOrUpdateUrlParam(name, value)
{
var href = window.location.href;
var regex = new RegExp("[&\\?]" + name + "=");
if(value=="")
value="0";
if(regex.test(href))
{
regex = new RegExp("([&\\?])" + name + "=\\w+");
window.location.href = href.replace(regex, "$1" + name + "=" + value);
}
else
{
if(href.indexOf("?") > -1)
window.location.href = href + "&" + name + "=" + value;
else
window.location.href = href + "?" + name + "=" + value;
}
}
</script>
</form>
</body>
</html>
lunedì 25 gennaio 2021
Alcuni comandi ADB per analisi statica su Android mobile
Dopo aver scaricato e installato Android Debug Bridge (ADB) , uno dei programmi capace di dialogare con un dispositivo android tramite riga di comando, si può procedere con l'invio di alcune istruzioni con il terminale da pc a device. Una volta connesso il device via usb al pc Windows oppure Linux questa è una lista di comandi utili per navigare all'interno del device.
#connetto il pc con il device, dovrei ottenere il nome del device sul terminale
adb devices
#connessione al device 192.168.xxx.yyy
adb connect 192.168.xxx.yyy:5555
#per i devices che permettono di avere diritti root
adb root
#si entra nella shell del device (limitazioni per device non root)
adb shell
#visualizzazione dei packages presenti nel device
adb shell pm list packages
#ricerca del package test1.test2 all'interno di tutti i packages del device
adb shell 'pm list packages -f' | grep "test1.test2"
#invio il log del device ad un file di testo su pc
adb logcat -d > logcat.txt
#installazione dell' applicazione packagetest sul device
adb install packagetest.apk
#termina tutti i collegamenti con i devices Android
adb kill-server
#se si è root si può ottenere la directory delle shared_prefs
adb pull /data/data/packagename/shared_prefs
venerdì 15 gennaio 2021
Avviare SonarScanner per un progetto .Net e ottenere l'analisi su SonarQube
SonarScanner.MSBuild.exeSolutionName.sln del progetto che si vuole analizzarelocalhost:9000 ip e porta del server dove è presente SonarQubeabcdfefg è il parametro creato in SonarQube (lo si trova all'interno di SonarQube dopo essersi loggato con unsername e password di amministratore)
mercoledì 13 gennaio 2021
Un app per esercitarsi con i PT su iOS
lunedì 25 maggio 2020
Codice sorgente della mia app Countries per iOS
- Countries disponibile qui
- Countries video qui
Countries is an easy “Master Detail” App for iPhone developed with Xcode for iOS.
The project objective is to show how master-detail works for many purposes.
In this App there are 20 Countries with 7 informations for each one
giovedì 21 maggio 2020
Sorgenti di FreeWord e CryptstoryEN ora in vendita
martedì 10 marzo 2020
Cryptstory IT di nuovo online
Eccola qua: CryptstoryIT dove bisogna decodificare l'aforisma, la storia o frase famosa di autori celebri. Dal numero alla lettera: 100 storie con la versione italiana più 1 che si può inserire.
Buon divertimento con gli aneddoti!
giovedì 5 marzo 2020
Come scaricare sul proprio pc il package di una app installata su di un device Android
Certamente il codice non sarà chiaro e a volte sarà offuscato, ma in alcuni casi è utile per controllare cosa abbiano inserito all'interno di una app.
L'esempio è comprensibile ad un utente tecnico e bisognerà dare dei privilegi in più al device (non di root, ma rendere disponibili alcuni tool da sviluppatore).
Installare sul device Android l'applicazione tramite store.
Andare sul device, trovare "opzioni-sviluppatore" e cliccare 7 volte su "build number" poi settare/cliccare il flag "deug mode".
Collegare il device Android al pc tramite cavetto usb.
Scaricare e installare Android Platform Tools (ADB), oppure se già si ha Android Studio trovare il path tramite android studio e con il terminale posizionarsi su questo path.
Digitare i seguenti comandi:
adb devices # si connette al device in automatico, deve riportare il device nella lista
#se non è connesso allora:
adb connect 192.168.x.x
adb root
adb connect 192.168.x.x #per verifica
adb shell pm list packages #mostra tutti i pacchetti installati
adb shell pm path com.xxxx.xxxx #mostra il percorso dell'app richiesta
adb pull /data/app/com.xxxx.xxxx c:\temp #lo copia sul proprio pc
Ed ecco che su "c:\temp" si avrà l'intero codice.
venerdì 28 febbraio 2020
Esempio di installazione SonarQube 8.x
Requisiti:
pc linux 64bit
JDK v.11
Node.js 9.2.0
MS Sqlserver 2016 (express free facilmente scaricabile dal sito Microsoft)
Per le finestre dos ho utilizzato sempre la modalità di amministratore.
Controllare se già si ha la jdk v11 che sia presente la variabile d'ambiente ad esempio: JAVA_HOME=C:\Program Files\Java\jdk-11.0.5
Controllare anche la variabile PATH aggiornata con "%JAVA_HOME%\bin"
Scaricare e installare Node.js 9.2.0
Scaricare e installare MS Sqlserver 2016 con il Management Studio
Creare un database "sonar"
Creare un utente owner del db come ad esempio "sonarqube" e psw "sonarqube"
Eseguire MMC SqlServer Manager Console e selezionare "gestione configurazione sqlserver 2016"
Attivare TCP/IP inserendo anche una porta statica libera come 1434 su IPALL e porta dinamica vuota
Riavviare il servizio e attivare se disattivato il servizio web browser di SqlServer
Scaricare SonarQube 8.x e copiarlo su di una directory
Modificare il file "sonar.properties" sotto "c:\sonarqube8\conf"
sonar.jdbc.url=jdbc:sqlserver://localhost:1434;databaseName=sonar
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube
sonar.web.javaOpts=-server -Xmx768m
sonar.web.port=9000
sonar.search.port=9004
Prima di avviare SonarQube controllare che il file «
(tasto destro su file-> proprietà -> Annulla blocco se presente)
Far partire solamente la prima volta il StartSonar.bat (sotto \bin scegliere il s.o.)
Verificare il funzionamento collegandosi con http://localhost:9000
In caso di problemi sul numero della porta 9000, utilizzare per la web port la 9040 e per la search port la 9004
Eseguire il login con l’utenza «admin» «admin»
giovedì 20 febbraio 2020
MobSF sequenza di installazione
Dopo aver scaricato da qui su di un folder a piacere.
Tutto da terminale:
sudo apt-get install git
sudo apt update
sudo apt-get install python3.6
sudo apt-get install python3-pip
#eventuale jdk se non installata che normalmente si ha la 11:
sudo apt-get install openjdk-8-jdk
sudo apt install python3-venv python3-pip python3-dev build-essential libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev zlib1g-dev wkhtmltopdf
#io ho installato solamente: sudo apt install python3-venv build-essential libssl-dev libxml2-dev libxslt1-dev zlib1g-dev wkhtmltopdf
sudo apt-get install lib32stdc++6
sudo apt-get install android-tools-adb
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
#si va sulla directory con:
cd Mobile-Security-Framework-MobSF
#si installa con:
./setup.sh
#se si è sulla macchina virtuale allora aggiungere l'utente con:
sudo adduser $USER vboxsf
#se si hanno problemi con la versione python 3.6 che non si riesce ad installare allora utilizzare conda:
Qui la guida: https://docs.conda.io/en/latest/miniconda.html
bash Miniconda3-latest-Linux-x86_64.sh
chiudere e riaprire il terminale
#per testare se funziona
conda list
#digitare:
conda install python=3.6.9
#adesso tutti e due python devono avere 3.6.9
riavviare la macchina
python --version
python3 --version
#da terminale sulla directory di MobSF e farlo partire:
./run.sh
navigare su http://localhost:8000/
#per lo stop
ctrl+c
mercoledì 19 febbraio 2020
CyberSecurity alternative free per l'analisi del software
Le best practices di OWASP e la lista CWE sono le benvenute.
Valide alternative free sperimentate sul campo sono state SonarQube più che altro per le web application che permette di agganciare molti progetti o solutions sviluppati nei diversi linguaggi di programmazione.
Per il Mobile l'alternativa free MobSF non è stata male sia per app Android che app iOS (Swift e Objective C). MobSF permette l'analisi statica (prorio sul codice classi metodi) e dinamica (navigazione con le funzionalità).
Altro tool per controllare ciò che passa tra le app e il web è OWASP Zed Attack Proxy
venerdì 18 ottobre 2019
Si puo' trovare il sorgente delle applicazioni e la relativa documentazione per aggiornarle.
Android Quiz
iOS Quiz
Android MyBookstore
mercoledì 12 settembre 2018
Il codice delle mie app in vendita su chupamobile.com
Quiz per Android e Countries per Iphone sono due esempi:
Quiz per Android

Ora su sellmyapp.com
lunedì 9 luglio 2018
Invio email tramite l'oggetto MailMessage in c#
Si può utilizzare questo metodo passando come argomenti il mittente, l'oggetto dell'email, il corpo del messaggio, una stringa di una serie di destinatari separati da una virgola e infine il parametro smtp del server:
public static void SendMailMessage(string mailSender, string obj, string msg,
string recipients, string smtpserver)
{
try {
MailMessage mailMessage = new MailMessage();
MailAddress sender = new MailAddress(mailSender);
foreach (string email in recipients.Split(",".ToCharArray()))
{
mailMessage.To.Add(email);
}
mailMessage.From = sender;
mailMessage.Subject = obj;
mailMessage.Body = msg;
SmtpClient server = new SmtpClient(smtpserver);
server.Send(mailMessage);
mailMessage.Dispose();
server = null;
}
catch (Exception e)
{
//some code here
}
}
lunedì 2 luglio 2018
Comprimere file in formato zip con c#
disponibile su DotNetZip
Componente abbastanza valido perchè sono riuscito a comprimere un file uguale o inferiore a 2.5 Gb utilizzando DotNetZip, una libreria gratuita.
Per utilizzare questo esempio bisognerà scaricare la libreria e importarla nella solution di Visual Studio come una classica dll (tasto dx e add reference).
try
{
using (ZipFile zip = new ZipFile())
{
zip.ParallelDeflateThreshold = -1;
zip.AddFile("c:\test1.doc", ""); //example file
zip.AddFile("c:\test2.txt", ""); //example file
//....other files
zip.Save("c:\dirzip\test_zip.zip"); //example dir and file
}
}
catch (ZipException e)
{
//some code here
}
lunedì 25 giugno 2018
Lettura riga per riga di un file di testo in c#
StreamReader reader = new StreamReader(File.OpenRead("c:\test.txt"));
try
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
}
}
catch (Exception ex)
{
//code here
}
finally
{
reader.Close();
}
sabato 19 maggio 2018
Accesso al database Oracle tramite c#
E' stato utilizzata la libreria OracleClient da referenziare nel progetto .Net in Visual Studio
//using System.Data.OracleClient;
private static void testConnectionDB()
{
OracleConnection conn = new OracleConnection(oraConn);
int intRecord = 0;
string str1="Florence";
string str2="Italy";
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select count(*) as numAuthors from Authors where field1 =:strField1 and field2 =:strField2";
cmd.Parameters.AddWithValue("strField1", str1);
cmd.Parameters.AddWithValue("strField2", str2);
intRecord = Convert.ToInt32(cmd.ExecuteScalar());
}
catch (Exception ex)
{
log.Error(ex.Message);
}
finally
{
cmd.Dispose();
if (conn.State != ConnectionState.Closed)
{
conn.Close();
}
}