stdray: (Default)
[personal profile] stdray
Вот наездники пигнвинов с чертями говорят, что главное - это возможность все автоматизировать своими руками. А я какой-то такой ленивый и люблю, чтобы за меня кто-то все сделал. Какбэ даже когда основной системой был Arch Linux и графическое окружение, собраное кустарным способом (Openbox, PyPanel там), все равно не тянуло что-то там скриптовать. Можно демона в rc.conf или там в автостарт Openbox'а что-то прописать, чтобы ручками не кликать. Но что-то большее? Мне всегда казалось, что проще каждый раз руками сделать, чем лезть и разбираться. Я, дубина, баш не знаю. Пробовал питон для написания скриптов - неприятно, все как-то ненативно и наискосок. Так и не писал.

Еще мне тут говорят, что F# это как Python только под ШИНДОУС. Питона вод винду какбэ нету, да? Обязательно надо найти язычек именно от Майкрософта и сказать, что вот альтератива. Ну конечно, именно как эльтернативу питону некий Дон Сайм эфшапрец задумывал. Надо в твиттор его оповестить, а то небось запамятовал истиных целей и отклонился от курса. Вот мне нравился в свое время питон. Очень хорошо было на нем всякие тензоры считать, сайты писать на джанге, твит-ботов каких-нибудь и, конечно же, УМНОЖАТЬ СТРОКУ НА ЧИСЛО. А потом пришло понимание какой-то хлипокости получаемых конструкций. Я ничего не говорю, какбэ не специалист, но мне жалко людей клепающих GUI на питоне. Есть же народная примета, что если гафическое приложение лагает, жрет сотни памяти и постоянно вылетает со всякиеи стэктрэйсами, то оно написано на питонес вероятностью 98%. Или вот с асинхронными системами что? Но это все так. Я просто криворукий, потому всегда боюсь, что где-то опечатался и просто написал фигню. Типизация, даже такая слабенькая как в C# успокаивает, дает надежду на стабильное будущее.

А это я к чему? Да решил вот проверить возможности F# для скриптописательтва. Ну REPL есть, для скрипта даже классы расписывать необязательно, вот решил попробовать написать скприт, который при подключении к рабочей VPN будет прописывать маршрут до моего рабочего ПК. Я какбы не даю выпоэночке вбрасывать мне маршруты. Весь трафик через VPN пускать не надо, тем более, что он все равно никуда дальше корпоративной подсети не уйдет.
  1. open System  
  2. open System.Diagnostics  
  3. open System.Net.NetworkInformation  
  4.   
  5. let intName = "tbc"  
  6. let pcIp = "192.168.11.141"  
  7. let mask = "255.255.255.255"  
  8.   
  9. printfn "Trying find default gateway to %s" pcIp  
  10. let int = NetworkInterface.GetAllNetworkInterfaces() |> Seq.find(fun i -> i.Name = intName)  
  11. let gatewayIp = (int.GetIPProperties().UnicastAddresses |> Seq.head).Address  
  12. printfn "Default gateway is %A" gatewayIp  
  13.   
  14. let buidProc file args =   
  15.     let p = new Process()  
  16.     p.StartInfo.UseShellExecute <- false;  
  17.     p.StartInfo.RedirectStandardError <- true;  
  18.     p.StartInfo.FileName <- file  
  19.     p.StartInfo.Arguments <- args  
  20.     p  
  21.   
  22. let removeRoute = buidProc "route" <| sprintf "delete %s" pcIp  
  23. let insertRoute = buidProc "route" <| String.Format("-p add {0} mask {1} {2}", pcIp, mask, gatewayIp)  
  24.   
  25. printfn "Trying remove route to %s" pcIp  
  26. removeRoute.Start() |> ignore  
  27. removeRoute.WaitForExit()  
  28.   
  29. printfn "Trying add route to %s" pcIp  
  30. insertRoute.Start() |> ignore  
  31.   
  32. Console.ReadKey() |> ignore  

Вот не знаю. Я скриптецы раз в 100 лет пишу, никак не могу понять, говно ли это? И как такое вообще сделать на питоне? Наверное же можно сделать, просто я экосистему дотнетов гораздо лучше знаю, потому догадывался, что смогу сделать за примелемое время. Время и впрям примелмое (ну минут 20 потратил), но результат как-то ниже моих ожиданий. Вроде F# краток и лаконичен, а тут такого наворотил. Либо эфшарп не торт, либо я криворук, либо же дело как раз в ШИНДОВС инфраструктуре, за которую всякие там любят ее материть. Еще я про PowerShell думал, да я его тоже не знаю. А стоит ли его учить, кто знает? Пригодится где?

PS: Забыл сказать, что при обычном запуске на Win7 оно ругается, что недостаточно прав доступа. Это нормально, ничего криминального. Но вот в дотнете, я например могу сделать:
а) чтобы оно само запрашивало права администратора
б) чтобы имея сохраненные данные админской учтеки (ОЛОЛО БЕЗОПАСТНОСТЬ) запускалось от админа.
Питон или руби какие так могут?

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags