بایگانی دسته: همیجوری

معماری بلاک در فلاتر



دارم سعی میکنم مثال لاگین معماری بلاک رو بخونم و بفهمم و اینجا مینویسم که مطمئن شم فهمیدمش.

https://bloclibrary.dev/tutorials/flutter-login

خوب توی فرآیند لاگین دوتا سرویس لازم داریم. سرویس احراز هویت و سرویس گرفتن اطلاعات کاربر

هر سرویس که باید با داده ها ارتباط داشته باشه رو میگیم ریپازیتوری.

ریپازیتوری ها که کد پیور دارت لنگ هستند رو به صورت پکیج میسازیم. پکیج از دایرکتوری lib جداست.

ریپازیتوری احراز هویت یه فایل داره که داخلش یه اینام داریم که وضعیت احراز هویت مشخص میکنه.

داخل ریپازیتوری احراز هویت یک

StreamController<AuthenticationStatus> _controller =  new StreamController<AuthenticationStatus>();

و یک جنراتور گت داریم که وضعیت هویت رو بر میگردونه

async* یعنی جنراتور async و yoield* یعنی مقداری که داره بر میگرده خودش جنراتور هست

پسندها(0)شاکی(0)

k8s



https://kodekloud.com/courses/kubernetes-for-the-absolute-beginners-hands-on/

https://kodekloud.com/wp-content/uploads/2021/10/KubernetesForBeginners-MumshadMannambeth-2.pdf

k8s overview

k8s architecture
Components

When you install Kubernetes on a System, you are actually installing the following
components. An API Server. An ETCD service. A kubelet service. A Container Runtime,
Controllers and Schedulers.
The API server acts as the front-end for kubernetes. The users, management devices,
Command line interfaces all talk to the API server to interact with the kubernetes
cluster.
Next is the ETCD key store. ETCD is a distributed reliable key-value store used by
kubernetes to store all data used to manage the cluster. Think of it this way, when you
have multiple nodes and multiple masters in your cluster, etcd stores all that
information on all the nodes in the cluster in a distributed manner. ETCD is
responsible for implementing locks within the cluster to ensure there are no conflicts
between the Masters.
The scheduler is responsible for distributing work or containers across multiple
nodes. It looks for newly created containers and assigns them to Nodes.
28
The controllers are the brain behind orchestration. They are responsible for noticing
and responding when nodes, containers or endpoints goes down. The controllers
makes decisions to bring up new containers in such cases.
The container runtime is the underlying software that is used to run containers. In our
case it happens to be Docker.
And finally kubelet is the agent that runs on each node in the cluster. The agent is
responsible for making sure that the containers are running on the nodes as
expected

kubectl run hello-minikube
kubectl cluster-info
kubectl get nodes

k8s concepts

pods
kubectl run nginx --image nginx
kubectl get pods
install kubectl

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux

https://minikube.sigs.k8s.io/docs/start

 minikube start --driver virtualbox
saeb@acer ~> minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
saeb@acer ~> kubectl get nodes
NAME       STATUS     ROLES           AGE   VERSION
minikube   NotReady   control-plane   22h   v1.28.3
saeb@acer ~> 
kubectl get po -A
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get services hello-minikube
minikube service hello-minikube

Alternatively, use kubectl to forward the port:

kubectl port-forward service/hello-minikube 7080:8080
demo pods
kubectl run nginx --image=nginx
kubectl get pods
kubectl get pods -o wide
kubectl describe pods nginx
پسندها(0)شاکی(0)

شناسایی حجم اضافه شده به پارتیشن یا هارد اضافه شده به سیستم بدون نیاز به ری استارت



بعضی وقتا درخواست میدی به ماشین مجازیت حجم اضافه کنن. حالا دو حالت داره یا یه هارد کنونیت رو اکستند میکنند یا یه هارد جدید اضافه میکنن (از نظر ماشین مجازیت) اگه ماشینت رو ری استارت کنی خود به خود تغییرات رو میشناسه. اگه نخوای ری استارت کنی باید کار زیر رو بکنی

اگه هارد جدید اضافه کنن

با دستور زیر هاست ها رو لیست می‌کنی

ls /sys/class/scsi_host

و با دستور زیر می‌گی که حاجی اسکن کن. به جای host0 اسم هاستات رو که لیست شده می‌نویسی

sudo echo "- - -" > /sys/class/scsi_host/host0/scan

اگه یه هاردت رو اکستند کرده باشن

با دستور زیر میگید که حاجی اسکن کن

اون قسمت 1\:0\:0\:0 ممکنه چند تا باشن به همه همین‌کار کنید

echo 1>/sys/class/scsi_device/1\:0\:0\:0/device/rescan

بعد با cfdisk یا fdisk می‌تونید پارتیشن جدید بسازید.

هرچی آموزش توی نت دیدم از کامند d توی cfdisk استفاده می‌کرد که من جراتش رو ندارم. لذا به جای اکستند پارتیشن، پارتیشن جدید میسازم

بعد فرمتش می‌کنم

mkfs.ext4 /dev/sda3

پارتیشن جدید رو به physical volume ها اضافه می‌کنم

pvcreate /dev/sda3

بعد pv رو به volume group اضافه می‌کنم. با دستور vgs می‌تونید اسم vg رو ببینید. مال من بود debian-vg و pv رو به vg اضافه می‌کنید.

vgextend debian-vg /dev/sda3

بعد هم حجم رو به هر logical volume که می‌خواید اضافه کنید. با دستور lvs می‌تونید اسم lv ها رو ببینید. می‌تونید مقدار حجمی که قراره اضافه شه رو بگید -L+238G یا کل حجم رو یک جا بدید مثل زیر

lvextend -r -l +100%FREE /dev/debian-vg/lv-var 

شاید نیاز باشه دستور زیر رو هم بزنید که پارتیشن حجم جدید رو بگیره

resize2fs /dev/debian-vg/lv-var 
پسندها(0)شاکی(0)

بش اسکریپت آب خوردی



#!/usr/bin/bash
while true 
do
    zenity --question --no-wrap  --text="آب خوردی؟" --ok-label="ها" --cancel-label="دو دقه واسا"
    status=$?
    while [ $status -eq 1 ]
    do
        sleep 3m
        zenity --question --no-wrap  --text="آب خوردی؟" --ok-label="ها" --cancel-label="دو دقه واسا"
        status=$?
    done
    sleep 30m;
done
cat /home/saeb/.config/autostart/sbs.saeb.water.desktop 
[Desktop Entry]
Name=DrinkWater
GenericName=Drink water
Comment=Some description about your script
Exec=/home/saeb/.local/bin/drinkwater.bash
Terminal=true
Type=Application
X-GNOME-Autostart-enabled=true
پسندها(1)شاکی(0)

مشاهده دسترسی های یه کاربر تو اوراکل



select dbms_metadata.get_granted_ddl( 'SYSTEM_GRANT', 'N_HSE' ) from dual;
select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'N_HSE' ) from dual;
select dbms_metadata.get_granted_ddl( 'ROLE_GRANT', 'N_HSE') from dual;

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
پسندها(0)شاکی(0)

kvm qemu libvirt



sudo pacman -S libvirt nftables
 ✘  ~  cat br10.xml 
<network>
  <name>br10</name>
  <uuid>4c2ce191-a0e3-4916-842e-a7cdc2012332</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='br10' stp='on' delay='0'/>
  <mac address='52:54:00:5f:d2:40'/>
  <ip address='172.18.0.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='172.18.0.100' end='172.18.0.200'/>
    </dhcp>
  </ip>
</network>
sudo virsh net-define br10.xml
sudo virsh net-list --all
 sudo virsh net-start br10
 sudo virt-install --name debian11 --memory 2048 --disk size=4 --cdrom Downloads/debian-11.0.0-amd64-netinst.iso --network bridge=br10
sudo virsh start debian11

پسندها(0)شاکی(0)

دکوراتورها تو پایتون



دکوراتورها یه متد رو میگیرن و قبل از اجرای اون یه سری بلا سرش میارن. البته این برداشت منه که ایشالله درسته

دکوراتور به عنوان متد
به صورت کلاس و به صورت فانکشن میشه نوشت


def saeb(func: Callable) -> Callable:
    def b(*arg, **kwarg):
        func(*arg, kwarg)

    return b


@saeb
def a(*args, **kwargs):
    print(args, kwargs)


پسندها(0)شاکی(0)

کوتاه کردن لینک از طریق خط فرمان



Fish shell

Python

#!/usr/bin/env python
# coding: utf-8

# In[1]:


from json import loads
from requests import post
from pprint import pprint


# In[ ]:


API="x0x6KYOk6WjuLBbA3Vwxl1rE5l9VuiMd0Yci88il0"
headers = {"X-API-key":API}
data = {"target":"https://sae13.ir"}


# In[6]:


response=post("https://kutt.it/api/url/submit",data=data,headers=headers)

js=loads(response.content.decode())

pprint(js)
پسندها(0)شاکی(0)