Python 3.6 and 2.7 side by side

In order to use two versions of Python on one Windows 10 machine while keeping the 3.6 as the default environment we can use a simple trick. The final solution gives us following effect:

>  python --version
Python 3.6.1
>  py2
>  python --version
Python 2.7.13
>  py3
>  python --version
Python 3.6.1

The procedure is fairly easy and involves two simple one-line scripts. During Python 3.6 installation you should add the executable folder to environmental variables. Note the selected installation path as we’ll use it later.

Continue reading

Skrypt Powershell eksportujący dokumenty Word do PDF

Skrypt pozwala na masowe wyeksportowanie plików .doc i docx z katalogu podanego jako parametr -i do podkatalogu /PDF. Nie zapisuje pliku Word po eksporcie oraz generuje zakładki na podstawie nagłówków (zob. linie 28 i 32).

Sposób użycia:

printpdf.ps1 -i C:\directory\to\export

Nie jestem autorem całego skryptu, bowiem większość została zebrana z różnych odpowiedzi na Stackoverflow na zapytanie “batch pdf printing”.

Param(
    [string]$i
 )
$input_dir = $i
$output_dir = "$($input_dir)\PDF"
# Create output directory if not exist
If(!(test-path $output_dir))
{
New-Item -ItemType Directory -Path $output_dir -Force 
}
Add-type -AssemblyName Microsoft.Office.Interop.Word
# This filter will find .doc as well as .docx documents
Get-ChildItem -Path $input_dir -Filter *.doc? | ForEach-Object {
    
  $wdSourceFile = $_.FullName
  $wdExportFile = "$($input_dir)\PDF\$($_.BaseName).pdf"
  "Opening " + $_

  $wdExportFormat = [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF
  $wdOpenAfterExport = $false
  $wdExportOptimizeFor = [Microsoft.Office.Interop.Word.WdExportOptimizeFor]::wdExportOptimizeForPrint
  $wdExportRange = [Microsoft.Office.Interop.Word.WdExportRange]::wdExportAllDocument
  $wdStartPage = 0
  $wdEndPage = 0
  $wdExportItem = [Microsoft.Office.Interop.Word.WdExportItem]::wdExportDocumentContent
  $wdIncludeDocProps = $true
  $wdKeepIRM = $true
  $wdCreateBookmarks = [Microsoft.Office.Interop.Word.WdExportCreateBookmarks]::wdExportCreateHeadingBookmarks
  $wdDocStructureTags = $true
  $wdBitmapMissingFonts = $true
  $wdUseISO19005_1 = $false
  $wdSaveOpt = [Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges

  $wdApplication = $null;
  $wdDocument = $null;

  try
  {
       $wdApplication = New-Object -ComObject "Word.Application"
       $wdDocument = $wdApplication.Documents.Open($wdSourceFile)
       $wdDocument.ExportAsFixedFormat(
       $wdExportFile,
       $wdExportFormat,
       $wdOpenAfterExport,
       $wdExportOptimizeFor,
       $wdExportRange,
       $wdStartPage,
       $wdEndPage,
       $wdExportItem,
       $wdIncludeDocProps,
       $wdKeepIRM,
       $wdCreateBookmarks,
       $wdDocStructureTags,
       $wdBitmapMissingFonts,
       $wdUseISO19005_1
       )
  }
  catch
  {
       $wshShell = New-Object -ComObject WScript.Shell
       $wshShell.Popup($_.Exception.ToString(), 0, "Error", 0)
       $wshShell = $null
  }
  finally
  {
       if ($wdDocument)
       {
          $wdDocument.Close($wdSaveOpt)
          $wdDocument = $null
       }
       if ($wdApplication)
       {
          $wdApplication.Quit()
          $wdApplication = $null
       }
       [GC]::Collect()
       [GC]::WaitForPendingFinalizers()
  }
    "Document printed to \PDF\$($_.BaseName).pdf"
}

 

Przydatne snippety w Visual Studio

Właśnie odkryłem coś, co na zawsze zmieni moją pracę w Visual Studio – snippety, czyli automatyczne wstawki pewnych typowych struktur kodu, które można modyfikować w trakcie pisania. Od razu zacznę od czegoś prostego, ale bardzo przydatnego.

Console.WriteLine();

W edytorze wystarczy wpisać cw, a następnie nacisnąć Tab

Continue reading

Manualne dodanie certyfikatu SSL od Let’s Encrypt bez roota na serwerze

Zgodnie z najnowszymi trendami chciałem dodać do swojego bloga certyfikat SSL. Na początku rozważałem zakup oficjalnego certyfikatu od swojego dostawcy, ale postawiłem sobie wyzwanie, żeby uzyskać go bezpłatnie. Trafiłem na kilka możliwości, z których najbardziej znane są Let’s Encrypt oraz StartSSL. Najpierw sprawdziłem StartSSL, ponieważ praktycznie wszystkie kroki procedury przechodzi się tam przez przeglądarkę, jednak mimo poprawnej weryfikacji nie udało mi się uzyskać oceny A wg SSL Labs (najwyższą jest A+). Dlatego spróbowałem swoich sił z Let’s Encrypt – gwarantują certyfikat ważny przez 90 dni (w przeciwieństwie do 3 lat od StartSSL), który trzeba odnawiać za pomocą odpowiedniego narzędzia (np. certbot) postawionego na serwerze. W założeniu tak częste odnawianie certyfikatu ma zwiększać bezpieczeństwo połączenia.

Continue reading

Jak pobrać film z serwisu VOD TVP

Potrzebowałem pobrać w celach archiwizacyjnych jedno nagranie z serwisu vod.tvp.pl. Niestety nie było to takie oczywiste, jak zainstalowanie wtyczki czy użycie dedykowanego serwisu. Nie chciałem też rejestrować obrazu z własnego monitora ze względu na wątpliwą jakość nagrania. Do swojego celu użyłem ostatecznie wget i ffmpeg.

Odtwarzacz TVP wysyła do nas stream w małych paczkach po kilka sekund, dzięki czemu serwer może łatwo przestać nadawać dane, kiedy zatrzymamy odtwarzanie albo zmienić jakość w locie. Adres pliku, który do przeglądarki jest wysyłany można podejrzeć za pomocą konsoli deweloperskiej w Chrome. Pliki numerowane są w suffiksie za pomocą kolejnych liczb naturalnych, więc bardzo łatwo jest przeiterować po nich wgetem. Za przykład weźmy odcinek Magazynu kulturalnego.

Continue reading