The other day, I found out that on Windows you can replace explorer.exe with an arbitrary program. This led me to thinking about replacing the window manager with something more manageable. Unfortunately, you can't really replace the window manager, the decorations are always going to be handled by the compositor built in. However, the win32 api does allow you to move windows around, change their properties, and close them from an unrelated process. So, while I can't make a whole window manager, I can try to make a program to tile my windows.
I've mentioned before that I use xmonad, so obviously I would base it off of that. For anything event based on the desktop, there's no reason for me to use anything other than Python, since there's no bottlenecks in program logic (the longest part would be win32 api calls) and the win32 apis for Python are pretty mature (although missing good documentation, not too surprising since not a lot of people want to use it). I originally planned this as just a propoganda post for Pyler, but there's not too much interesting to talk about in the ideas of the manager itself, it's basically a clone of xmonad in Python. So you can basically just check out the project on
GitHub. The more interesting parts are in the code.
The Config:
For the config file, I used an idea I found in xmonad and ipython, which is making the config file simply a source file in the language implementation, in this case Python. I like this a lot better in Python than in Haskell (although even in Haskell it's better than some key value or xml style config) because, if the package is created correctly, it allows you to duck punch any of the code you like, which basically allows the user to edit the program to do whatever they want without having to edit any built in source code.
I've used this idea before.
The config allows you to define hotkey functions that can call arbitrary functions, either built in, available through pyler modules (currently the only available module is
pyler.actions
. Hotkeys are described as a tuple, the first element is a mask, using bitwise or to select mutliple mods, e.g.
mod_super|mod_shift
would match holding the windows button and the shift button when you press the key. The second element of the tuple is the key pressed, e.g.
k_j
would match j,
k_Return
matches the enter key, etcetera. The keys are defined in
pyler.keycodes
. The value for the dictionary is a function to be called. The function must take at least one value, which is the key that was pressed. A finished hotkey description might look like this:
(mod_super|mod_shift,k_Return)
. So, for instance, by default, super-shift-Q by default ends the program, so it is described by
(mod_super|mod_shift,k_q): actions.quit
. Functions take in one parameter, which is the hotkey that was pressed. If you want to use multiple parameters, you can use a lambda to call the function, like for switching to the different workspaces, which looks a little like this:
(mod_super,k_1): lambda x: actions.switch_workspace(x,1)
. Unfortunately Python doesn't have the cool lazy functions like Haskell does, but lambdas make it pretty easy, just slightly more syntactically ugly.
Classes vs. Modules:
The other day at work, I was working on a program for for work and had a question about program structure. Ever since I started using object oriented programming, I've been creating Python programs in a Java style (which is weird, since I don't even like Java), where I would create an "application" object that would serve as the main loop or encapsulation for global variables and callbacks. This led to a kind of crazy program structure like this:
#imports
class myApp(object):
def __init__(self):
#Arg parsing
self.config = config.Config()
#Error checking
#Generally some gui code here
def run():
#Main loop
if __name__ == "__main__":
app = myApp()
app.run()
This seemed like it might be some extra, unnecessary constructs just to encapsulate variables, especially since the myApp object is never referenced from anywhere outside of itself. I wanted to do some research about what the accepted practice of structuring Python programs was. Apparently, though, there has been no discussion on this subject whatsoever, so I have no arguments to weigh and decide what's best. Because of this, I decided to build Pyler with a module structure, like this:
#Imports
#Error checking
#global variable definitions
def main():
#Arg parsing
config.init()
#Main loop
if __name__ == "__main__":
main()
In addition, I tried to not use classes for anything except what I consider to be a "thing". So, for instance, a window is a "thing", so it's a class. Config, on the other hand, is not a thing, therefor it is a module. Tilers could be considered either one, but since they aren't something you need more than one instance of, I decided modules would be better.
In some places, this is obviously superior. For instance, there's no reason to have a wrapper class for the keycodes module. You could have
kc = keycodes.KeyCodes(); kc.mod_shift
, it makes much more sense just to have the keycodes be properties of the keycodes module. In some places it's less obvious. For registering hotkeys, you need to keep track of which hotkeys have been registered, since all the windows api gives you is a hotkey id that you need to get the real hotkey based in. So you can keep the hotkeys as part of the module, or you can make a class that keeps track of the hotkeys. On the one hand, the module can have that as a property, just a dictionary in this case. You can also make a class that would have to get initialized, which some might argue makes more sense. Personally I prefer the module way.
After this, though, I still don't know which is the "right" way to do it. I'm going to have to take some more time to think about it.
Post Comment
Thomaskip:
Сергей Сароян: аферист и мошенник из Телетрейда Читать на русском Сергей Сароян: аферист и мошенник из Телетрейда То, что международный брокер Телетрейд вот уже четверть века обманывает клиентов по всему миру, давно ни для кого не секрет. А за каждой масштабной аферой, конечно же, стоят люди — те, кто придумал, организовал и десятилетиями внедряет в жизнь преступную мошенническую схему. Среди них особо выделяется Сергей Сароян — директор всех украинских офисов Телетрейд. “Отцом” компании Телетрейд был Владимир Чернобай. Недавно он скончался в Европе, где скрывался от правосудия. Его наследники — вдова Анна Чернобай и племянник Олег Суворов, и другие прижизненные приспешники Чернобая, продолжают «мошенничество в особо крупных размерах». Именно так квалифицировали деятельность Телетрейд в России и Казахстане, где на брокера уже открыты уголовные дела. Но в Украине, несмотря на многочисленные жалобы обманутых клиентов, уголовное дело пока не заведено. Похоже, Сергей Сароян знает, на какие рычаги во властных структурах нажимать, чтобы Телетрейд продолжал безнаказанно грабить украинцев. Сергей Сароян и его роль в глобальном мошенничестве Телетрейд Сергей Сароян — одиозная личность, с раздутым самолюбием и большими амбициями. Хитрый и двуличный, но при этом трусливый и бесхребетный, он умеет приспособиться и готов прогнуться, когда того требует ситуация. Он с легкостью раздает сладкие обещания, и с такой же легкостью подставляет тех, с кем работает, если обстоятельства складываются не в его пользу. Однажды, правда, это ему не помогло, и мошенника выгнали за воровство. Но обо всем по порядку. На заре своей карьеры выпускник одесской академии связи Сергей Сароян, работал в телекоммуникационной компании. В попытке продвинуться по картеной лестнице он не нашел ничего лучше, как предложить руководству свои услуги в качестве доносчика, обещая рассказывать, о чем говорят в коллективе и кто с кем в каких отношениях пребывает. Но это предложение не встретило одобрения и стукачу-неудачнику пришлось уволиться. А невостребованные «способности» пригодились несколько позже, в Телетрейд. В 2005-2006 годах Сергей Сароян был региональным куратором — фактически единоличным правителем Телетрейд в Украине. Ему подчинялись более 30 офисов по всей Украине: Киев, Одесса, Николаев, Харьков, Львов, Черновцы, и другие городах. В ведении Сарояна были также офисы в Европе и Азии — в Италии, Португалии, Польше, Венгрии, Малайзии, и других странах. И деньги лились в карман мошенника рекой — Сергей Сароян получал 3% от инаута (in-out), то есть от разницы между вводом денег клиентов(“in”) и выводом (“out”). Уже тогда в Телетрейд вращались гигантские суммы. В среднем ежемесячно клиенты только украинских офисов Сарояна приносили в компанию от $1 500 000, а выводили около $500 000. То есть in-out, соответственно, составлял $1 000 000, а зарплата Сарояна — более $30 000 в месяц. Но алчность, которая двигала Сарояном, заставляла его направлять всех клиентов в мошеннический проект Телетрейд “Биржа трейдеров”. Торговать на бирже умеет далеко не каждый, и самый логичный выход, который из этого видится — доверить свои деньги профессионалу. Однако брокерская компания не имеет право брать деньги клиентов в управление, и в Телетрейд создали якобы независимый проект «Биржа трейдеров». Мошенник Сергей Сароян именно туда направлял всех клиентов. И подконтрольные трейдеры сливали клиентам депозиты, иногда просто за одну ночь. «Биржа трейдеров» сливала клиентские деньги, и выводить клиентам уже было нечего. Инаут в украинских офисах в этом случае составлял $1 500 000, а зарплата мошенника вырастала до $45 000 только по Украине. Так Сергей Сароян обворовывал клиентов ни один год. Но, в итоге, был изгнан из компании за воровство. Найти равноценный источник дохода мошеннику не удалось, его образ жизни стал значительно скромнее. Попросту говоря, Сергей Сароян начал стремительно беднеть. Компании не спешили предлагать ему руководящие должности, а коучинг особых прибылей не приносил. Говорят, что в одну и ту же реку нельзя войти дважды. Но Сергей Сароян сумел. Спустя пять лет его снова позвали в Телетрейд, и он с радостью согласился. Вероятно руководство компании высоко ценит «талант» Сарояна разводить и обворовывать людей. Сегодня мошенник и хапуга Сергей Сароян вернулся и снова начал кидать клиентов, возглавив все клиентские офисы Телетрейд в Украине, Португалии, Италии, Польше, Румынии и Венгрии. Но теперь уже, как директор, он получает не 3%, а долю со слитых депозитов клиентов. А вот признаваться прилюдно в причастности к мошеннической брокерской компании новоиспеченный директор не спешит. В своих соцсетях Сергей Сароян лишь туманно намекает на консультационные услуги, которые оказывает Телетрейд. Аферист тщательно маскируется, однако обманутым клиентам компании удалось вывести его на чистую воду — они получили доказательство того, что именно Сергей Сароян сегодня стоит у руля украинского Телетрейд. Видеоролик, где он сам признается в этом, был показан на пресс-конференции, состоявшейся в июле 2020 года. В этом эксклюзивном видео видно как Сергей Сароян принимает в управление украинские офисы компании Центр Биржевых Технологий — дочернего предприятия Телетрейд в Украине. Эту пресс-конференцию провела инициативная группа обманутых клиентов Телетрейд. Цель, которую они поставили перед собой — вывести на чистую воду брокера-мошенника и все руководство компании, а также вернуть свои деньги. Материалы, собранные обманутыми клиентами демонстрируют схемы развода, которые используются в Телетрейд. В частности, проект «Синхронная торговля», который пришел на смену «Бирже трейдеров». В «Синхронной торговле» уже не люди-трейдеры, а торговые роботы сливают клиентские депозиты. Теперь именно в этот проект заманивает клиентов Сергей Сароян. А затем, в определенный момент, дает программистам компании указание, и те перепрограммируют роботов на заключение заведомо убыточных сделок. Так депозиты клиентов сливаются в ноль. Сергей Сароян опустошает карманы украинцев и подрывает экономику страны Эти мошеннические схемы давно попали в поле зрения правоохранительных органов в России — уголовное дело на Телетрейд там завели еще несколько лет назад. Последовали примеру российских коллег и в Казахстане, где уголовное производство началось летом 2020 года. Руководители казахского филиала Телетрейд и дочерней компании Wall Street Invest Partners сейчас находятся в следственном изоляторе. Чтобы замять уголовные дела в России, руководители Телетрейд Сергей Шамраев, Олег Суворов и Мингиян Манжиков дают взятки чиновникам в Следственном Комитете РФ — ежемесячно «отстегивают» им около 20% от поступлений, а это сотни тысяч. И не рублей, а долларов. По инсайдерской информации руководство Телетрейд в России заставляют также финансировать боевые действия на Востоке Украины — мошенники отдают на это еще 10% от поступлений. Если рассматривать деятельность Телетрейд и с этой стороны, то мошенник Сергей Сароян, как директор Телетрейд, не только обворовывает своих сограждан страны, а еще и финансирует боевиков ДНР и ЛНР, отнимающих жизни украинцев. Вызывает удивление тот факт, что в Украине деятельность Телетрейд на протяжении четверти века никто не проверяет. Количество обманутых клиентов брокера огромно. Мошенниками ежемесячно выводятся в офшоры миллионы долларов. Но пока правоохранительные органы не замечают, или не хотят замечать, противозаконной деятельности брокера. По сведениям из источников внутри компании Сергей Сароян рассказывает своим подчиненным — управляющим офисов в Украине, что им не нужно ничего бояться, так как руководство Департамента киберполиции Украины сидит у него на «зарплате». Вот так безнаказанно (пока!) Сергей Сароян разоряет украинцев, подрывает экономику Украины и спонсирует российскую агрессию на Донбассе.
Rachiohtf:
consists of the book itself
Garminzajt:
55 thousand Greek, 30 thousand Armenian
Feederskf:
way. Handwritten book
Broncokrg:
(palimpsests). In the XIII-XV centuries in
http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com:
FCxJjw http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com
http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com:
et7Ihq http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com