Pull to refresh
7
0
Маслов Александр @drakmail

SRE

Send message
о том, что между ними нет разницы пишут только фанаты редакторов, которые не освоили нормальную ide

Ну у меня есть idea, для джавы ее использую, т.е. вроде бы по вашей класификации IDE освоил. А вот для JS/TS использую vscode и считаю его более удобным чем webstorm.

UFO landed and left these words here
Такая же штука на питоне :)
Код
#!/usr/local/Cellar/python3/3.4.3/Frameworks/Python.framework/Versions/3.4/bin/python3.4
# -*- coding: utf-8 -*-
__author__ = 'admin'

api_url = "http://basicdata.ru/api/json/calend/"
from functools import lru_cache
import calendar
import datetime
import urllib.request
import json


def flatten(a):
    if isinstance(a, list):
        for b in a:
            for x in flatten(b):
                yield x
    else:
        yield a


# Генерирует расписание на заданный год по умолчанию
# Все дни с понедельника по пятницу отмечаются рабочими
# Все субботы и воскресенья - выходными
def generate_default_calendar(year):
    return group_by_month(
        map(lambda x: (x[0], x[1] < 6),
            map(lambda x: (x[0], x[1] + 1),
                filter(lambda x: x[0] > 0,
                       flatten(calendar.Calendar.yeardays2calendar(calendar.Calendar(), year))
                       )
                )
            )
    )


# Разделяет дни на группы по месяцам
def group_by_month_inner(items):
    month = []
    for day, flag in items:
        if month and month[-1][0] > day:
            # new month starting
            yield month
            month = []
        month.append((day, flag))
    if month:
        yield month


def group_by_month(items):
    return list(group_by_month_inner(items))


# Загружает дни-исключения
@lru_cache(maxsize=None)
def load_exceptions(apiurl, year):
    return json.loads(urllib.request.urlopen(apiurl).read().decode('utf8'))["data"][str(year)]


# Меняет значения структуры по умолчанию для дней-исключений

def apply_exceptions(months, exc):
    i = 0
    for m in months:
        newm = []
        i += 1
        for d in m:
            if str(i) in exc and str(d[0]) in exc[str(i)]:
                d = (d[0], exc[str(i)][str(d[0])]["isWorking"] != 2)
            newm.append(d)
        yield newm


# Удаляет все выходные, конвертирует кортежи в простые дни месяца
def filter_holidays(months):
    for m in months:
        yield list(
            map(
                lambda x: x[0],
                filter(
                    lambda x: x[1],
                    m
                )
            )
        )


# Получает все рабочие дни за определенные месяц/год в виде массива. Если указать месяц, вернет только его
def get_workdays(year=None, month=None):
    if year is None and month is None:
        year = datetime.datetime.now().year
        month = datetime.datetime.now().month
    if month is None:
        return list(filter_holidays(apply_exceptions(generate_default_calendar(year), load_exceptions(api_url, year))))
    else:
        return get_workdays(year)[month - 1]


# Считает кол-в рабочих дней в году/месяце
@lru_cache(maxsize=None)
def count_workdays(year=None, month=None):
    if month is None and year is None:
        return len(get_workdays())
    elif month is not None:
        return len(get_workdays(year, month))
    else:
        return sum(list(map(lambda x: len(x), get_workdays(year))), 0)

@lru_cache(maxsize=None)
def _get_expected_hours(year, month, day):
    return len(list(filter(lambda x: x < day, get_workdays()))) * 8
# Возвращает сколько часов ты уже должен был отработать
def get_expected_hours():
    return _get_expected_hours(datetime.datetime.now().year, datetime.datetime.now().month, datetime.datetime.now().day)


# Считает заработанные деньги исходя из зарплаты и кол-ва отработанны часов
@lru_cache(maxsize=None)
def earned(salary, hours):
    return hours / (count_workdays(datetime.datetime.now().year, datetime.datetime.now().month) * 8) * salary


def print_earned_with_stats(hours, salary=None):
    if salary is None:
        salary = 50000
    real = earned(salary, hours)
    expected = earned(salary, get_expected_hours())
    print("Earned: ", real, " Expected: ", expected)
    if real > expected:
        print("Well done, you've already earned extra ", real - expected, " money -", hours - get_expected_hours(),
              " extra hours worked")
    elif real < expected:
        print("You should work extra ", get_expected_hours() - hours, " hours to catch schedule")
    else:
        print("Going on schedule!")

if __name__ == '__main__':
    import sys
    _salary = None
    _hours = None
    if len(sys.argv) > 1:
        _hours = int(sys.argv[1])
    if len(sys.argv) > 2:
        _salary = int(sys.argv[2])
    if _hours is None:
        _hours = 8
    print_earned_with_stats(_hours, _salary)


Вспомнилась подборка самых адских заголовков подобного мусора
Мальчик-телепат глушит радио-сигналы во время мастурбации и другие
1. Вороны выклевали ветерану на лысине свастику.

2. Одинокий мужчина лишился прямой кишки во время самолечения простатита.

3. Пасхальный заяц загрыз отца семерых детей.

4. Группу заблудившихся школьников вывел из лесу дождевой червь.

5. Кошка утонула в менструации хозяйки.

6. Мальчик-телепат глушит радио-сигналы во время мастурбации.

7. Девочку разорвало на экзамене резинкой ее «стрингов».

8. На МКС голод — космонавты едят сперму друг друга.

9. Ребенок онанировал кипятильником, повторяя за матерью.

10. На ночь родители мазали девочку селедочными кишками.

11. Нижегородский крановщик подрабатывал виселицей.

12. Отец омрачил день рождения ребенка расчленением матери.

13. Пылесос с искусственным интеллектом устроил кровавую бойню.

14. Дизайнер могил: не миф, а реальность.

15. Причиной ДТП стал бобер-педераст.

16. Перелетные птицы оскорбили пометом ветеранов.

17. Школьник разбил голову, поскользнувшись на останках учителя.

Подпишусь под каждым словом. От себя добавлю нулевой пункт:
0. Если берете сравнительно большой проект с фиксированной ценой — не стесняйтесь брать деньги с клиента за предварительную оценку, детальную разработку ТЗ и плана работ.
Вот интересный канал про математику для не математиков www.youtube.com/user/numberphile
Можете порекомендовать маме отличную книгу –  Нора Галь «Слово живое и мёртвое». Тема канцелярита раскрыта более чем полностью :)
«Впервые я пережил ужас – подлинный ужас, а не встречу с демонами или призраками, живущими в моем воображении, – в один октябрьский день 1957 года. Мне только что исполнилось десять. И, как полагается, я находился в кинотеатре – в театре “Стратфорд” в центре города Стратфорд, штат Коннектикут.

И вот как раз в тот момент, когда в последней части фильма пришельцы готовятся к атаке на Капитолий, лента остановилась. Экран погас. Кинотеатр был битком набит детьми, но, как ни странно, все вели себя тихо. Если вы обратитесь к дням своей молодости, то вспомните, что толпа детишек умеет множеством способов выразить свое раздражение, если фильм прерывается или начинается с опозданием: ритмичное хлопанье; великий клич детского племени “Мы хотим кино! Мы хотим кино! Мы хотим кино!”; коробки от конфет, летящие в экран; трубы из пачек от попкорна, да мало ли еще что. Если у кого-то с четвертого июля сохранилась в кармане хлопушка, он непременно вынет ее, покажет приятелям, чтобы те одобрили и восхитились, а потом зажжет и швырнет к потолку.

Но в тот октябрьский день ничего похожего не произошло. И пленка не порвалась – просто выключили проектор. А дальше случилось нечто неслыханное: в зале зажгли свет. Мы сидели, оглядываясь и мигая от Яркого света, как кроты.
На сцену вышел управляющий и поднял руку, прося тишины, – совершенно излишний жест. Я вспомнил этот момент шесть лет спустя, в 1963 году, в ноябрьскую пятницу, когда парень, который вез нас домой из школы, сказал, что в Далласе застрелили президента.

Мы сидели на стульях, как манекены, и смотрели на управляющего. Вид у него был встревоженный и болезненный – а может, это было виновато освещение. Мы гадали, что за катастрофа заставила его остановить фильм в самый напряженный момент, но тут управляющий заговорил, и дрожь в его голосе еще больше смутила нас.
– Я хочу сообщить вам, – начал он, – что русские вывели на орбиту вокруг Земли космический сателлит. Они назвали его… “спутник”.
Сообщение было встречено абсолютным, гробовым молчанием. Полный кинотеатр детишек с ежиками и хвостиками, в джинсах и юбках, с кольцами Капитана Полночь, детишек, которые только что узнали Чака Берри и Литтла Ричардса и слушали по вечерам нью-йоркские радиостанции с таким замиранием сердца, словно это были сигналы с другой планеты. Мы выросли на Капитане Видео и “Терри и пиратах”. Мы любовались в комиксах, как герой Кейси разбрасывает, как кегли, целую кучу азиатов. Мы видели, как Ричард Карлсон в “Я вел тройную жизнь” (I Led Three Lives) тысячами ловит грязных коммунистических шпионов. Мы заплатили по четверть доллара за право увидеть Хью Марлоу в “Земле против летающих тарелок” и в качестве бесплатного приложения получили эту убийственную новость.
Помню очень отчетливо: страшное мертвое молчание кинозала вдруг было нарушено одиноким выкриком; не знаю, был это мальчик или девочка, голос был полон слез и испуганной злости: “Давай показывай кино, врун!»

Управляющий даже не посмотрел в ту сторону, откуда донесся голос, и почему-то это было хуже всего. Это было доказательство. Русские опередили нас в космосе. Где-то над нашими головами, триумфально попискивая, несется электронный мяч, сконструированный и запущенный за железным занавесом. Ни Капитан Полночь, ни Ричард Карлсон (который играл в “Звездных всадниках” (Riders to the Stars), боже, какая горькая ирония) не смогли его остановить. Он летел там, вверху.., и они назвали его “спутником”. Управляющий еще немного постоял, глядя на нас; казалось, он ищет, что бы еще добавить, но не находит. Потом он ушел, и вскоре фильм возобновился."

Стивен Кинг
UFO landed and left these words here
Верно ли я понимаю, что если я натравлю роботов на сайты конкурентов — я гарантированно выйду в топ (за счет пессимизации всех, кто выше)?
Возможно кому-нибудь пригодится.
Стандартно chrome и chromium не позволяют задавать прокси в настройках браузера. (Предлагается выставить системные настройки прокси)
Но есть опция командной строки через которую в chromium можно задавать прокси:

chromium-browser --proxy-server=localhost:8008


Также есть возможность запустить хромиум в чистом новом профайле

chromium-browser --temp-profile
забыл уточнить — смотреть без звука
а чего там сложного? можно тем же таром:
tar czvf /root/VPSbackups/VPSbackup.tar.gz -N"$LAST" --exclude-from=/VPSbackups/tar.excludelist.txt /etc/ /root/exportdb/ /home/username/ > /root/VPSbackups/backup.log 2>&1
##где tar.excludelist.txt - список исключений;
##а LAST - файл с датой в формате date +'%F %R:%S'
LAST=`cat /root/VPSbackups/lasttimebackup.log`
Еще к удобствам можно отнести работу с хистори и настройку окружения:
1. Ведение лога истории с datestamp'ом:
export HISTTIMEFORMAT='%F %T '
2. Занесение команды в .bash_history сразу же, после нажатия enter (а не после завершения сеанса), что весьма удобно при одновременной работе в нескольких сессиях:
PROMPT_COMMAND='history -a;history -n'
3. Удобная настройка PS1 (чтобы было видно и юзера/хост и желательно дату и время [у меня некоторые сессии висят неделями])
export PS1='\033[00;32m\][`date +%d" "%h" "%Y" "%T`] \u@\h \w\n \$\[\033[00m\] '
4. Увеличение размера хистори (при активной работе 500 — это очень мало)
export HISTSIZE=100500
5. Говорим башу не заносить в хистори повторяющиеся друг за другом команды:
export HISTCONTROL=ignoredups
6. Отключаем занесение «бесполезных» с точки зрения истории команд:
export HISTIGNORE="&:ls:[bf]g:exit:[ ]*:ssh:history"
7. Не забываем про bash_completition (который предварительно надо не забыть подключить):
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
— 8. $ ls some-file
$ cp !$ !$.back
( !$ — заменяется на последний аргумент [в данном случае some-file] )
9. фича только для bash 4 и выше (в 3, емнип, не работает)
shopt -s globstar
и echo ** будет практически равносилен find.
Вроде все, что вспомнил (:
UFO landed and left these words here

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity