stdray: (Default)
stdray ([personal profile] stdray) wrote2012-02-25 08:27 pm

Скриптование

Вот наездники пигнвинов с чертями говорят, что главное - это возможность все автоматизировать своими руками. А я какой-то такой ленивый и люблю, чтобы за меня кто-то все сделал. Какбэ даже когда основной системой был 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 оно ругается, что недостаточно прав доступа. Это нормально, ничего криминального. Но вот в дотнете, я например могу сделать:
а) чтобы оно само запрашивало права администратора
б) чтобы имея сохраненные данные админской учтеки (ОЛОЛО БЕЗОПАСТНОСТЬ) запускалось от админа.
Питон или руби какие так могут?

[identity profile] hls-1141.livejournal.com 2012-02-25 06:23 pm (UTC)(link)
Мне кажется, что для такого скриптования кроме баша или повершела, ничего и не нужно. Изучить их основы тоже много времени не должно занять. А пригодятся они всегда, ибо не надо за собой тащить питон, тем более дотнет с фшарпом, на любом компе взял - да и запустил.

[identity profile] stdray.livejournal.com 2012-02-25 08:59 pm (UTC)(link)
На винде от семерки и выше дотнет с эфшарпом в комплекте, так что ничего тащить не надо. Олсо на павершеле у меня было намного больше бы времени заняло.

[identity profile] stdray.livejournal.com 2012-02-25 10:07 pm (UTC)(link)
а) Пока не требовались, может они не нужны?
б) Синтаксис повершелла видел?
в) Баш мне на винде запустил!!!!1111
г) Заимплементируй аналог данного скрипта под любую ОС на баше или сильном аде.

[identity profile] nikolay tolmachev (from livejournal.com) 2012-02-25 06:54 pm (UTC)(link)
Павдерхелл надо.
А в руби можно квоту на число умножать, кстати, это совершенно иной уровень ёбы.

[identity profile] stdray.livejournal.com 2012-02-25 08:57 pm (UTC)(link)
"Квоту"? Что за история?
wizzard: (Default)

[personal profile] wizzard 2012-02-25 09:05 pm (UTC)(link)
да нормально выглядит, чо

[identity profile] stdray.livejournal.com 2012-02-25 09:22 pm (UTC)(link)
Да что-то функция формирования нового процесса, пишущего в консоль текущего и то, как создаются парметры несколько напрягли. Таки порождение сторонних процессов не есть родное умение эфшарпа.
Я сначало кинулся писать на павершеле и быстро откинулся, так как слишком непривычно. Хотя там должно быть короче.