dibel Skrivet 17 juli Rapportera Share Skrivet 17 juli (redigerad) Tjena, tjena. Det här kan vara tråden för generell programmering oavsett språk. Jag får ibland känsla för att koda lite och sätter igång med något projekt. Just nu är det lite scripting i GDScript (Godot 4) som gäller, men jag går i banorna att programmera lite i C (med biblioteken SDL2, Vulkan, SQLite, ImGUI, cgltf?) för att det är roligt. Man kan ju börja med att få standardkuben i Blender att rendereras och ta det därifrån. Som alla vet är det Open Source-mjukvara och bibliotek som gäller för mig, särskillt när det gäller programmeringsprojekt. Bara man ser till att licensen är vad man anser vara okej (aktar sig för GPL om man inte avser att GPL:a sin egen kod m.m.) så är det bra. Här är lite stats för C, C# och Javascript på min dator för en for loop som räknar till hundra miljoner: C Dölj innehåll #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <inttypes.h> #include <limits.h> int main(int argc, char *argv[]) { for (int_fast32_t i = 0; i < 100000000; ++i) { printf("%"PRIu32"\n", i); } return 0; } [erik@erik-pc-01 iteration]$ time ./a.out &>/dev/null real 0m3.302s user 0m3.278s sys 0m0.020s C# Dölj innehåll for (int i = 0; i < 100000000; ++i) { Console.WriteLine(i); } [erik@erik-pc-01 Iteration]$ time bin/Release/net8.0/Iteration &>/dev/null real 0m54.805s user 0m28.733s sys 0m26.001s Javascript Dölj innehåll for (let i = 0; i < 100000000; i++) { console.log(i) } [erik@erik-pc-01 iteration]$ time node index.js &>/dev/null real 2m23.249s user 2m3.020s sys 0m20.286s Ignorera parametern &>/dev/null som bara betyder att omdirigera stdout till "ingenting" för att undvika att benchmarka terminalen/konsolen istället för koden. Som ni ser är C King of Kings. C# fastnar i runtime (dotnet) alldeles för länge i Systemet innan själva koden körs och Javascript som simplast och dynamiskt typat tar väldigt mycket längre tid. C-programmet är kompilerat i gcc 14.1.1 med -O3 C#-programmet är gjort med dotnet därför ser det så simpelt ut utan någon class och "main"-funktion. Enligt Microsofts Hello World-exempel som man får när man gör ett nytt projekt i dotnet. Javascriptet körs i NodeJS 22.4.1. Efter denna simpla benchmark är jag ganska besviken på dotnet/C# faktiskt. Visst, lite overhead med runtime får man räkna med, men att den är så stor var en negativ överraskning. --- Nå, hur ser era programmeringsvanor ut? Studier, projekt m.m. kan tas i tråden. HH (Happy Hacking)! Redigerad 17 juli av dibel 1 Citera Länk till kommentar Dela på andra sidor More sharing options...
Henkibojj Skrivet 17 juli Rapportera Share Skrivet 17 juli Det här är fortfarande min största bedrift och jag installerar det på alla jobbdatorer jag har eftersom de för det mesta saknar en hibernation-knapp. Men Ctrl-Alt-V för viloläge och sen denna prompt så är den släckt på direkten. Vill säga, om man bara trycker enter utan att trycka in någon tid så blir det automatiskt noll = nu. 2015-04-14 at 13:15, Henkibojj skrev: Igår lärde jag mig lite nya kommandon i CMD, eller .bat-filer. Jag har sedan tidigare förstått mig på datoravstängningskommandot shutdown och timertillägget /t 300 vilket ger en fördröjning på 300 sekunder = 5 minuter. Med detta gjorde jag år 2011 en massa smarta entimmes-, tvåtimmars- och liknande timers, inklusive en avbrytar-bat. Men jag har alltid saknat en /t för Viloläge: shutdown /h, för kommandot shutdown /h /t 300 existerar inte i CMD. Det har alltså varit omöjligt att göra en timer för vanligt viloläge. Poängen med viloläge är mest att jag ofta vill ha kvar de program jag har igång utan att göra en cold shutdown. Igår lärde jag mig kommandot TIMEOUT /NOBREAK 300 för 300 sekunders väntan inför nästa kodrad, samt hur man sätter egna värden (dvs inte CHOICE) genom set /p siffervaerde. Man kan dessutom manipulera siffervaerde med den aritmetiska operatorn /a, vilket ger möjlighet att sätta siffervaerde+-*/ ett annat värde, till exempel 60 för att göra om minuter till sekunder. Vill man referera till värdet skriver man %siffervaerde%. Som bonus lärde jag mig det väldigt enkla kommandot time /t för att visa klockan. Resultatet var en betydligt smidigare och många gånger bättre batfil än de ~7 standardtider jag knåpade ihop 2011. Kolla in och spara gärna ned på egen hårddisk för sena Netflix-kvällar i sängen med datorn på storbild! @echo off :start cls echo Välj V för viloläge. echo Välj A för avstängning. echo Välj X för att avbryta. choice /c:VAX if errorlevel 3 goto Avbryt if errorlevel 2 goto Shutdn if errorlevel 1 goto Sleeping :Avbryt echo. echo Jaså, då säger vi hejdå. pause goto end :Shutdn echo. echo VARNING! Du har valt avstängning. Alla program kommer att stängas ned utan sparning vid timerns slut. Är du säker på att du vill fortsätta? choice /c:jn if errorlevel 2 goto start cls echo Om hur lång tid ska datorn stängas av? set /p minuter="Tid i minuter: " set /a sekunder=%minuter%*60 echo. echo Timern har satts till %minuter% minuter = %sekunder% sekunder. Klockan är nu echo. TIME /t echo ...och datorn kommer att stängas av efter följande tid. Se till att spara allt arbete! TIMEOUT /NOBREAK %sekunder% shutdown /f goto end :Sleeping echo. echo Om hur lång tid ska datorn försättas i viloläge? set /p minuter="Tid i minuter: " set /a sekunder=%minuter%*60 echo. echo Timern har satts till %minuter% minuter = %sekunder% sekunder. Klockan är nu echo. TIME /t echo ...och datorn kommer att försätts i viloläge efter följande tid: TIMEOUT /NOBREAK %sekunder% shutdown /h :end Och skratta inte åt mig, jag har aldrig programmerat något annat än BAT Python under fem veckor på en obegriplig Unix-dator i gymnasiet tycker jag inte räknas. Lite länkar: http://www.robvanderwoude.com/wait.php http://commandwindows.com/variables.htm Tjing pling! /1337 1 Citera Länk till kommentar Dela på andra sidor More sharing options...
dibel Skrivet 17 juli Skapat av Rapportera Share Skrivet 17 juli 7 timmar sedan, Henkibojj skrev: Det här är fortfarande min största bedrift och jag installerar det på alla jobbdatorer jag har eftersom de för det mesta saknar en hibernation-knapp. Men Ctrl-Alt-V för viloläge och sen denna prompt så är den släckt på direkten. Vill säga, om man bara trycker enter utan att trycka in någon tid så blir det automatiskt noll = nu. /1337 Funkar det så funkar det. Hur blir det vid input vid choices? Om man skriver "gtasajten" när den vill ha V, A eller X t.ex.? Knåpade ihop ett powershell-script baserat på ditt batch-script: Dölj innehåll Function get_user_input { return Read-Host "Choice" } Function w { Param ( [Parameter(Mandatory=$true, Position=0)] [string] $msg ) Write-Host $msg return } Function get_choice { $ret = "x" $choices = @{ v="Hibernate"; a="Shutdown"; x="Cancel" } $continue = $true while ($continue) { foreach ($hash in $choices.GetEnumerator()) { w -msg "Choose $($hash.name) to $($hash.value)" } $p = get_user_input Switch -Regex ($p) { "^[Vv].*" { $ret = "v" $continue = $false } "^[Aa].*" { $ret = "a" $continue = $false } "^[Xx].*" { $ret = "x" $continue = $false } Default { w -msg "Fail" } } } return $ret } Function get_y_or_n { $ret = "default" $continue = $true while ($continue) { $p = get_user_input Switch -Regex ($p) { "^[Yy]|[Jj].*" { $ret = "y" $continue = $false } "^[Nn].*" { $ret = "n" $continue = $false } Default { w -msg "Fail" } } } return $ret } Function shutdown_or_hibernate { Param ( [Parameter(Mandatory=$true, Position=0)] [string] $m ) $timeout = get_timeout w -msg $timeout Get-Date Switch -Regex ($m) { "^v" { Timeout /NoBreak $timeout #Shutdown /h w -msg "Shutdown /h" } "^a" { Timeout /NoBreak $timeout #Shutdown /f w -msg "Shutdown /f" } } } Function get_timeout { $ret = 0 $continue = $true while ($continue) { w -msg "Enter minutes (integer)" $p = get_user_input $i = $p -as [int] if ($i -is [int]) { $ret = $i $continue = $false } else { w -msg "$($p) is not an integer" } } return $ret * 60 } $mode = get_choice if ($mode -eq "x") { exit } shutdown_or_hibernate -m $mode Vet inte om det är till någon nytta, men lite kul att koda sitt första PS-script åtminstone. Körde Windows 10 i en VM och den verkar funka (om man tar bort # som är en kommentar för själva shutdown-kommandona på de 2 ställena). Funktionen w är helt onödig, men jag gjorde den som en helper för att slippa skriva Write-Host hela tiden, hehe. Trodde man skulle kunna köra w("string"), men i PS så är parametrar en flagga man lägger till. Kopiera och ändra strängarna till svenska och lägg till och ändra hur mycket du vill. Public Domain License, haha. Funktionaliteten att avsluta med X är dock helt onödig då man alltid kan avsluta med Ctrl-C i terminalen (vet inte hur det är i cmd.exe dock). Nåväl, kul miniprojekt. Citera Länk till kommentar Dela på andra sidor More sharing options...
Henkibojj Skrivet 17 juli Rapportera Share Skrivet 17 juli 49 minuter sedan, dibel skrev: Funkar det så funkar det. Hur blir det vid input vid choices? Om man skriver "gtasajten" när den vill ha V, A eller X t.ex.? Den piper två gånger eftersom G inte är ett valbart input, inte T heller, men sedan kommer man till Avstängning och resten av modulen. 1 Citera Länk till kommentar Dela på andra sidor More sharing options...
dibel Skrivet 30 juli Skapat av Rapportera Share Skrivet 30 juli Som sagt; C is king. Önskar verkligen jag var bättre i C-programmering. Här finns mer att läsa om C och andra programmeringsspråk: https://faultlore.com/blah/c-isnt-a-language/ Citera Länk till kommentar Dela på andra sidor More sharing options...
Gof Skrivet 16 augusti Rapportera Share Skrivet 16 augusti (redigerad) Är inte speciellt komfortabel med några riktiga språk förutom Powershell, men det behärskar jag bra! Det blir lätt så när det är enda sättet att automatisera bort jobbiga jävla arbetsuppgifter. Min arbetsgivare är för snål för att köpa ett HRIS-system som kan integreras mot Active Directory, så fram tills jag började förra året satt en stackare på IT och skapade användarkonton manuellt. Tror det är 10-15 nya som börjar varje månad, så det är ett väldigt tradig arbete till slut. Alla anställda jobbar hemifrån också, så det var en jobbig manuell process. Det blir som upplagt för en bokstav fel här och där när man sitter och kopierar och klistrar mellan olika fönster, samt att att kommunicera lösenord. Nu går det till såhär istället: Chefen för den nyanställda matar in en beställning i Jira. Jira kickar igång en Logic App på Azure Logic Appen kör ett Powershell-skript för att generera ett lösenord från en ordlista. Cirka 5000 ord. Lösenorden som kommer ut är typ "Glassmaskin bildäck?" Ett nytt Powershell-skript med inputten från Jira samt lösenordet från steg 3. Den kontrollerar om allting gick bra - om nej så kommenterar det i Jira-ärendet. Oftast är det skit bakom spakarna, men ibland kommer det in sådant som det är enkelt att lösa i skriptet i sig, och då gör jag det såklart. Som kodsnutten nedan t.ex. Vi fick in en nyanställd med ett väldigt långt efternamn, så den översteg maxgränsen på SamAccountName-attributet, så då fick jag lägga till det här för att det inte ska hända igen, t.ex if ($email.Length -gt 20) { $samaccountname = $email.Substring(0, 20) } else { $samaccountname = $email } Om det gick bra så går den vidare med att skicka ett välkomstbrev med användarnamn och lösenord till användarens privata e-postadress. Krypterat och tjusigt! Fick kämpa mot vår CISO länge innan han godkände det istället för att vi skulle skriva ut det på papper och skicka hem fysiskt. Kan inte dela något av skriptet som skapar användaren, det är för mycket som är specifikt till vår miljö, men i grund och botten är det bara New-ADUser, parametrarna som kom med Jira, samt en herrans massa grupptilldelningar som har lite olik logik beroende på anställningsort, närmsta chef, yrkesroll, etc. Det jag arbetat med senast är att sätta inaktiveringsdatum på användare direkt från Jira också. Där frågar jag bara efter datumet som kontot ska inaktiveras, samt mejladressen till användaren. Eftersom vi har en sådan jävla ruljans på folk (som 10-15 nya per månad skvallrar om) så är det såklart många som måste inaktiveras också. Detta sätter inaktiveringsdatumet till det valda datumet. Om det datumet redan har passerats så inaktiveras kontot på en gång. Nu måste jag bara kontakta vår CISO igen och försöka övertyga människan om att jag ska få sätta upp något schemalagt jobb som tar bort användare som har varit inaktiverade i mer än 6 månader varje natt... heja. Redigerad 16 augusti av Gof 1 1 Citera Länk till kommentar Dela på andra sidor More sharing options...
Henkibojj Skrivet 19 augusti Rapportera Share Skrivet 19 augusti Jag hade faktiskt inte ens hört talas om PowerShell förrän chefen hos min kund plockade in sommarjobbare som använde det till att automatisera namnhantering på bulkskannade dokument. Det låter som att mycket av det jag gör manuellt på heltid skulle kunna prova försiktiga små steg i PS, men jag är å andra sidan anlitad för att hålla på med saker där nästan allt som görs är undantag från normen, vilket är varför jag inte använt mig av klickmakron ens. Dock makron i W0rd, men bara för att snabba på det redan alltför manuella jobbet. Citera Länk till kommentar Dela på andra sidor More sharing options...
Gof Skrivet 20 augusti Rapportera Share Skrivet 20 augusti 2024-08-19 at 12:38, Henkibojj skrev: Jag hade faktiskt inte ens hört talas om PowerShell förrän chefen hos min kund plockade in sommarjobbare som använde det till att automatisera namnhantering på bulkskannade dokument. Det låter som att mycket av det jag gör manuellt på heltid skulle kunna prova försiktiga små steg i PS, men jag är å andra sidan anlitad för att hålla på med saker där nästan allt som görs är undantag från normen, vilket är varför jag inte använt mig av klickmakron ens. Dock makron i W0rd, men bara för att snabba på det redan alltför manuella jobbet. Skapa en kopia på ett av dina arbetsdokument och testa! Beroende på din arbetsplats så kan Powershell vara ganska nedlåst om du inte har adminaccess, men det går att påverka det mesta i en Windows-miljö. Citera Länk till kommentar Dela på andra sidor More sharing options...
Gof Skrivet 21 augusti Rapportera Share Skrivet 21 augusti Får man räkna sånt man skapar med AI som sitt eget, förresten? I sådanafall kan jag stoltsera med den här dunderhemsidan: https://tyrannosaurus.se Bakgrunden är jättesimpel - våra nyanställda tyckte det var så svårt att komma på egna lösenord, samt att förstå lösenordskraven. Internt har jag en funktion där dom loggar in med sitt Microsoft-konto så den tar namnet därifrån, men det kändes olämpligt att publicera, så alla (hela 83 någonsin!) besökare till den publika biten får fylla i sitt namn på egen hand. Citera Länk till kommentar Dela på andra sidor More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.