martedì 21 novembre 2023

Calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì.

Questo è un esempio di un calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì. La Pasquetta e il S.Patrono sono variabili ma le altre sono fisse: 1 e 6 gennaio, 10 aprile pasquetta per il 2023, 25 aprile, 1 maggio, 2 giugno, 29 giugno (S.Patrono a Roma), 15 agosto, 1 novembre, 8 dicembre, 25 e 26 dicembre. Il secondo script è parziale per la scrittura del mese e dei giorni. Sostitutendo l'anno si potranno avere altri risultati, ma ricordarsi di inserire il giorno di Pasquetta corretto. Basta copiare gli script in un qualsiasi editor online per eseguire una verifica.

#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}

venerdì 23 settembre 2022

Caricare una DropDownList con MVC C#

Esempio di un caricamento di una DropDownList in MVC C# partendo dal relativo Controller (file.cs).
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#

In questo esempio è possibile aprire e poi scaricare un file pdf da un sito 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

L'esempio seguente mostra come è possibile inviare un valore inerito in un campo testo nella barra degli indirizzi del browser 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

Eseguire Windows PowerShell come amministratore. 
Con il comando "Get-ExecutionPolicy" è possibile verificare lo stato attuale dei permessi per l’esecuzione degli script. 

Eventualmente per modificare i criteri di esecuzione, se non sono "unrestricted", digitare: 
"Set-ExecutionPolicy unrestricted" 

Identificare sul pc i path di: 
SonarScanner.MSBuild.exe 
SolutionName.sln del progetto che si vuole analizzare 
localhost:9000 ip e porta del server dove è presente SonarQube 
abcdfefg è il parametro creato in SonarQube (lo si trova all'interno di SonarQube dopo essersi loggato con unsername e password di amministratore) 

Digitare poi i seguenti comandi, opportunamente modificati:

C:\...\SonarScanner.MSBuild.exe begin /k:"SolutionName" /d:sonar.host.url=http://localhost:9000 /d:sonar.login=abcdfefg & 'C:\...\MSBuild.exe' SolutionName.sln /t:Rebuild C:\...\SonarScanner.MSBuild.exe end /d:sonar.login=abcdfefg

mercoledì 13 gennaio 2021

Un app per esercitarsi con i PT su iOS

Ci si può esercitare con i Penetration Test in ambiente legale su iOS utilizzando l'app free e open source DVIA presente sul sito: http://damnvulnerableiosapp.com Si possono sfruttare le vulnerabilità comuni delle applciazioni iOS seguendo la TOP 10 dei mobile risks di OWASP. E' molto interessante perchè ci sono esercizi semplici e davvero fatti bene: basta installarla sul device o virtual device e seguire le indicazioni che appaiono sullo schermo. L'ho provata su iOS 14 ed è andato tutto bene.

lunedì 25 maggio 2020

Codice sorgente della mia app Countries per iOS

E' ora disponibile il codice sorgente della mia app in singola o multipla licenza su sellmyapp.com; molto semplice da personalizzare con documentazione relativa all'interno:
- 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

Nuovi codici sorgenti delle mie app in vendita pronti per essere modificati (singole e multi licenze):

- FreeWord qui
- CryptstoryEN qui

martedì 10 marzo 2020

Cryptstory IT di nuovo online

Sistemata la mia app Android che era scomparsa dallo store di Google.
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

In questo esempio viene mostrato come scaricare sul proprio pc (Window oppure Linux) un app presente sul terminale 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

Questo è un esempio di sequenza di installazione che ho provato per SonarQube su di una macchina virtuale, anche se è tutto descritto nella guida sul sito https://docs.sonarqube.org/latest/

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 «/bin/Windows[ver]/lib/wrapper.dll» non sia bloccato a causa del download
(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 vari tentativi leggendo la guida qui questa è la sequenza corretta per l'installazione di MobSF su di un Ubuntu o Kali-Linux (attenzione che ad oggi va bene solamente Python 3.6 - 3.7 come da guida qui).
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

Scrivere software sicuro non è cosa solamente cosa buona e giusta, ma anche saggia.
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

Le mie app in vendita sul nuovo portale sellmyapp.com
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

Ecco il sito chupamobile.com dove si può acquistare il codice delle mie app o giochi.
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#

In questo esempio si può inviare un'email tramite librerie che mette a disposizione il framework .Net utilizzando il linguaggio 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#

Un modo per comprimere dei file in formato zip con linguaggio c#, è quello di di utilizzare la libreria DotNetZip
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#

Un altro modo per leggere un file di testo in c# è creare un oggetto StreamReader e analizzare ogni riga in un ciclo while come fatto in questo esempio:

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#

Piccolo esempio che illustra un accesso al database Oracle tramite statement e una restituzione del numero di record presenti sulla tabella Authors in 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();
   }
}