LINUX.ORG.RU

Сообщения bryak

 

nixos настройка шрифтов

 

{ config, lib, pkgs, ... }:

with lib;

let

  cfg = config.system.custom.fonts;

in {

  options.system.custom.fonts = {
    enable = mkEnableOption "enable fonts";
    dpi = mkOption {
      type = types.int;
      default = 141;
      description = ''
        dpi of the monitor
      '';
    };
  };

  config = mkIf cfg.enable {

    fonts = {

      enableFontDir = true;
      enableGhostscriptFonts = true;

      fontconfig = {
        dpi = cfg.dpi;
        subpixel = {
          lcdfilter = "none";
          rgba = "rgb";
        };
        hinting = {
          enable = true;
          autohint = true;
          style = "hintmedium";
        };
        enable = true;
        antialias = true;
        # defaultFonts = { monospace = [ "inconsolata" ]; };
      };

Не получается убрать «разноцветные шрифты»

bryak
()

Entrypoint's нужны?

 ,

Есть endpointA, endpointB, endpointC. Нужно ли для каждого endpoint’a делать свой entrypoint?

Т.е на endpoint’ах всё-равно доступ к API происходит на основании разрешений. Скажем, юзеры могут только обращаться к методу list, retrieve, а delete не могут делать. Какая принципиальная польза делать entrypoint, если внутрь него пробрасываются API из entrypoint’a?

bryak
()

NixOS некоторые пакеты собираются из сорсов. Можно этого избежать?

 

Делаю nixos-rebuild test и у меня собирается gcc из сорсов. Можно этого избежать?

bryak
()

nixos python-pip как поставить?

 

Сабж

bryak
()

Можно ли использовать celery без rabbitmq и redis? Database only

 ,

Можно ли использовать celery без rabbitmq и redis? Чтобы работало исключительно с базой данных. celery-beats

bryak
()

Стратегия отложенной записи

 , , ,

Есть endpointA, приходит запрос на добавление записи. В таблице есть hook на post_save

@receiver(post_save, sender=Some)
def some_create(sender, instance, created, **kwargs):
   ...

В этом хуке some_create вызывает API endpointB. Допустим, endpointB лежит. Что делать? Нужно же куда-то записать эти данные, а потом, когда endpointB поднимется, сделать call API –> endpointB. Как правильно это организовывается? Чтобы я какой-нибудь велосипед не изобретал:)

bryak
()

Оптимальные параметры монтирования + проблемы при commit=600

 

defaults,noatime,commit=600,data=writeback,barrier=0,journal_async_commit          0       2

При commit=600 при poweroff рабочая станция не выключается. В принципе удобно, 32гб озу, все пишется в оперативку. Раз в 10 минут скидывается на диск. Все эти 10 минут на диск ничего не пишется, диск постоянно не дёргается. Пробовал делать в скрипте выключения перед «shutdown -h now» sync - не помогает. Сейчас сделал commit=60 - вроде всё ок, но хотелось бы commit=600

Кстати, какие еще есть опции оптимальные для ext4?

bryak
()

dwm, st свой .nix

 , ,

У меня dwm со своими патчами и настройками. Я не знаю как лучше сделать. У dwm есть особенность - там после patch надо исправлять кое-какие строки. Делать чистые патчи и потом патчить настройки - не думаю, что это целесообразно. Итак, есть на битбакете полностью работоспособный dwm. Варианты:

  1. тянуть с битбакета(нужен ssh ключ + пароль, который я не знаю(хранится в keepassx). При установке проблематично его будет доставать с keepassx

  2. Формировать tar.gz и класть его внутрь конфигурации(правильно ли это?). Распаковывать и собирать

Какие еще есть варианты?

Если у кого-то есть примеры сборки своего dwm - если поделитесь будет круто:)

bryak
()

checkout в мастер. Не ясно почему так

 

  1. git checkout 3-some
  2. делаю изменения
  3. git add .;git commit;git push origin 3-some

Далее

  1. git checkout master
  2. git merge 3-some
Updating 5c5e62d..c463210
Fast-forward
 app/apps/dictionaries/urls.py | 40 +---------------------------------------
 1 file changed, 1 insertion(+), 39 deletions(-)
  1. git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
  1. git add .;git commit;git push origin master
Looking in links: /python-packages
test_upper (test_example.TestExample) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
Total 0 (delta 0), reused 0 (delta 0)
To bitbucket.org:some-name.git
   5c5e62d..c463210  master -> master

В визуализации и на битбакет нет мерджа ветки в мастер

bryak
()

Как спрятать функцию?

 ,

Есть модули, которые подключаются в .bashrc. Есть функции some-A, some-B,some-C,some-D, для их запуска нужна функция some-Z. Но функция some-Z появляется в автодополнении, к примеру:

some-<TAB>
some-A some-B some-C some-Z

Как спрятать some-Z из этого вывода?

bryak
()

serializers.Serialiser MethodField не могу получить внутри метода данные

 , ,

Сериализатор:

class GenderSerializer(serializers.Serializer):
    name = serializers.SerializerMethodField()

    def get_name(self, obj):
        print("------------------")
        print(obj)
        print("------------------")
        
        return "aaa"
        # return _(obj.name)

Во вьюхе:

serializer_gender = GenderSerializer(data=[{'id': 1, 'name': 'GENDER_MAN'}, {'id': 2, 'name': 'GENDER_WOMAN'}], many=True)
serializer_gender.is_valid(raise_exception=True)

out:

------------------
{}
------------------
------------------
{}
------------------
bryak
()

translate choice field

 , ,

Ок, есть

https://stackoverflow.com/questions/62045788/drf-serializer-return-translated-choice-field-value

во вьюхе я делаю:

language = kwargs.get('lang')
 translation.activate(language)

и у меня не возвращаются переведенные field

message сгенерированы

msgid "gender_man"
msgstr "Мужчина"

msgid "gender_wooman"
msgstr "Женщина"
в модели вот так:
    gender_man = 0
    gender_wooman = 1
    GENDER_CHOICES = (
        (gender_man, _('gender_man')),
        (gender_wooman, _('gender_wooman')),
    )
    name = models.TextField(choices=GENDER_CHOICES, verbose_name=_("Gender"))

```python
middleware подключен, LOCALE_PATHS настроен
MIDDLEWARE_CLASSES = [
    'django.middleware.locale.LocaleMiddleware',
]
print(request.META.get('HTTP_ACCEPT_LANGUAGE'))
ru
>>> with translation.override('ru'):
...     translation.gettext('gender_man')

'Мужчина'
bryak
()

Как работать с manytomany?

 , ,

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField()
    number_of_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):
        return self.headline
>>> from apps.dictionaries.models import Entry,Blog,Author
>>> Entry.objects.all().values()[0]

out:

{'id': 1, 'headline': 'Entry_headline1', 'pub_date': datetime.date(2020, 7, 9), 'number_of_comments': 1, 'mod_date': datetime.date(2020, 7, 12), 'rating': 1, 'body_text': 'Entry_body_text1', 'blog_id': 1, 'number_of_pingbacks': 1}

Т.е нет field ‘authors’

Далее, если я явно указываю field authors, тогда получаю следующее:

>>> Entry.objects.all().values('authors')[0]

out:

{'authors': 2}

Как мне выбрать в нормальном виде? Т.е

 {'id': 1, 'headline': 'Entry_headline1', ..., 'authors': ['Author_name1'], ['Author_name2']
bryak
()

delete

delete

bryak
()

Замена ключей в выборке

 ,

Есть Выборка. Его следующая выборка:

queryset = Person.objects.filter(id=1)
<QuerySet [{'id': 1, 'some_param_id': 1, 'some_param_2': False,}]>

Есть таблица

class SomeTable(models.Model):
    name = models.PositiveSmallIntegerField(
        validators=[MinValueValidator(15), MaxValueValidator(250)],
        verbose_name="some",
        unique=True
    )

в Person поле

some_param_id = models.IntegerField(validators=[MinValueValidator(1)], blank=True)

т.е не ForeignKey, prefetch_related не получится сделать

Мне нужно в первой выборке заменить значение 1 ключа some_param_id на SomeTable__name. Как это сделать?

bryak
()

Как это лучше переписать с lambda?

 ,

param_fields = request.GET.get('fields') or None
if param_fields is not None:
   param_fields = list(param_fields.split(","))

Чтобы два раза не создавать param_field

bryak
()

Сделать ремап caps lock --> ctrl, а сам ctrl отключить

 ,

setxkbmap -layout us,ru -option "grp:shift_toggle,grp_led:scroll",ctrl:nocaps -variant ",winkeys"

Есть еще ctrl:swapcaps, который меняет местами ctrl и caps. А как сделать так, чтобы caps == ctrl, а сам ctrl отключить? Чтобы приучить себя 100% нажимать caps(как ctrl)?

bryak
()

job сервер

 , , ,

Есть задача организовать отложенную запись данных(чтобы endpoint’ы не захлёбывались.

Как пример: Есть chat-data, который имеет апи записи и чтения сообщений. Есть entrypoint chat, который предоставляет клиенту возможность писать другому пользователю сообщения и читать сообщения, которые адресованы этому пользователю.

Если писать и читать сообщения напрямую, есть несколько узких мест:

  1. при большой нагрузке chat-data и chat могут захлёбываться
  2. при отключении chat и\или chat-data сообщения не будут записаны в базу

Это просто пример, это касается всех действий пользователей, которые выполняют какие-то действия(события). Как это пофиксить? Скорей всего, необходим какой-то job-сервер, в который будут прилетать job’ы. Эндпоинт или entrypoint(?) подписывается на rabbitmq очередь, в которой он будет получать события «есть задача». Далее эндпоинт или энтрипоинт идет на job-сервер, блокирует записи, над которыми работает и начинает выполнять job’ы. Допустим в 8 потоков(настраиваемо должно быть). И выполняет их до тех пор, пока их не будет ноль. После выполнения - производится удаление job’ов.

Т.е получается, что chat chat-data могут быть отключены. При этом сообщения падают в job-сервер. Как только chat chat-data включаются, они заходят на job-сервер и начинают оттуда брать job’ы. Это правильно архитектурно? Или как-то по-другому надо делать?

Вопрос по job-серверу. Rabbitmq позволяет изменять messag’и? Т.е я делаю queue, туда прилетают job’ы. В отдельном queue прилетают нотификации о наличие job’ов. Эндпоинт или энтрипоинт выбирает несколько сообщений, блокирует их и начинает выполнять. По окончанию - удаляет их из queue. Rabbitmq позволит так делать? Или делать отдельный job-сервер с апи добавления задач и записи их, скажем, в postgresql?

bryak
()

Вопрос про охлаждение

 

Есть системный блок

https://i.ibb.co/3CpJDt0/IMG-20200702-190542.jpg

https://i.ibb.co/ZX8tWZP/IMG-20200702-190554.jpg

https://i.ibb.co/Ct10Z5H/IMG-20200702-190559.jpg

https://i.ibb.co/gStTtyN/IMG-20200702-190839.jpg

Передняя часть у корпуса - сплошная сетка с фильтрами. Но у боковушки есть вентиляция и тянет воздух оттуда, где сопротивление потоку ниже т.е не с передней части, а с боковой крышки. Я вот думаю, может залепить скотчем вентиляционные отверстия на боковой крышке? Тогда воздух будет тянуть с торца передней части корпуса т.е через фильтры

  1. Меньше пыли
  2. Меньше шума от фана видеокарты и процессора
  3. Прохладный воздух будет проходить через hdd, охлаждая его

Как думаете, стоит закрывать вентиляционные отверстия скотчем на боковой крышке?

PS: сейчас скотч на боковой крышке - резонансы крышки убрал

bryak
()

git submodule after clone

 

Сделал я проект, скажем some-data. Есть отдельная репа common. Мои действия:

1. Создаю репу some-data
2. cd some-data
3. git init
4. change .git/config
5. git clone git@bitbucket.org:some_name/common.git
6 .git submodule add git@bitbucket.org:some_name/common.git;git submodule init
7. git add .;git commit;git push origin master
8. cd ..; rm -rf some-data

Далее я хочу проверить, всё ли ок

1. git clone --recurse-submodules -j8 git@bitbucket.org:some_name/some_data.git
2. cd some-data
ls -a common
.  ..  bash  .git  .gitignore  python

cat common/.git
gitdir: ../.git/modules/common
cd common
touch 1; echo "wefwewwe" > 1
git add .;git commit;git push origin master
error: unable to push to unqualified destination: HEAD
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@bitbucket.org:some_name/common.git'

  1. cd ..
  2. git add .;git commit;git push origin master

коммит проходит, но в репозитории common нет изменений, а в коммите some-data примерно такое:

-Subproject commit f971964634505ed3fd844675da0bd908c7d3a5a1

+Subproject commit 39ca9270f87da8276a8bd7e66f744f9c30e7352a
bryak
()

RSS подписка на новые темы