کاربر تایید شده
مدیر آخرین فعالیت ۵ روز پیش

@amir

پارس کلیکی از ١ سال پیش

تجربه

225400

  • ۴ هفته پیش @amir یک مقاله تازه به اسم میانبرهای Bash نوشت.

    در این قسمت سعی من بر این هست که میانبرهایی رو در Bash برای شما قرار بدهم که معمولا به خاطر استفاده نکردن زیاد ممکن هست یادتون بره، اما کاربرد اونها خیلی زیاد هست و اگر بدونیدشون خیلی جاها می تونه خیلی سریع کمکتون کنه:

    #!/bin/bash
    ##############################################################################
    # SHORTCUTS
    ##############################################################################
    
    CTRL+A  # move to beginning of line
    CTRL+C  # halts the current command
    CTRL+E  # moves to end of line
    CTRL+K  # deletes (kill) forward to end of line
    CTRL+L  # clears screen and redisplay the line
    
    CTRL+N  # next line in command history
    CTRL+P  # previous line in command history
    
    CTRL+R  # searches backward
    CTRL+S  # searches forward
    
    CTRL+T  # transposes two characters
    CTRL+U  # kills backward from point to the beginning of line
    CTRL+W  # kills the word behind the cursor
    CTRL+X  # lists the possible filename completions of the current word
    CTRL+Y  # retrieves (yank) last item killed
    CTRL+Z  # stops the current command, resume with fg in the foreground or bg in the background
    
    !!      # repeats the last command
    exit    # logs out of current session
    
    ##############################################################################
    # SSH, SYSTEM INFO & NETWORK COMMANDS
    ##############################################################################
    
    ssh [email protected]            # connects to host as user
    ssh -p <port> [email protected]  # connects to host on specified port as user
    ssh-copy-id [email protected]    # adds your ssh key to host for user to enable a keyed or passwordless login
    
    whoami                   # returns your username
    passwd                   # lets you change your password
    
    date                     # shows the current date and time
    cal                      # shows the month's calendar
    uptime                   # shows current uptime
    w                        # displays whois online
    finger <user>            # displays information about user
    uname -a                 # shows kernel information
    man <command>            # shows the manual for specified command
    df                       # shows disk usage
    du <filename>            # shows the disk usage of the files and directories in filename (du -s give only a total)
    last <yourUsername>      # lists your last logins
    ps -u yourusername       # lists your processes
    kill <PID>               # kills the processes with the ID you gave
    killall <processname>    # kill all processes with the name
    top                      # displays your currently active processes
    bg                       # lists stopped or background jobs ; resume a stopped job in the background
    fg                       # brings the most recent job in the foreground
    fg <job>                 # brings job to the foreground
    
    ping <host>              # pings host and outputs results
    whois <domain>           # gets whois information for domain
    dig <domain>             # gets DNS information for domain
    dig -x <host>            # reverses lookup host
    wget <file>              # downloads file
    curl <file>              # downloads file
    
    ##############################################################################
    # VARIABLES
    ##############################################################################
    
    varname=value                # defines a variable
    varname=value command        # defines a variable to be in the environment of a particular subprocess
    echo $varname                # checks a variable's value
    
    array[0]=valA                # how to define an array
    array[1]=valB
    array[2]=valC
    array=([2]=valC [0]=valA [1]=valB)  # another way
    array=(valA valB valC)              # and another
    
    ${array[i]}                  # displays array's value for this index. If no index is supplied, array element 0 is assumed
    ${#array[i]}                 # to find out the length of any element in the array
    ${#array[@]}                 # to find out how many values there are in the array
    
    declare -i d=123             # makes the variables integer
    declare -r e=456             # makes the variables read-only
    declare -l f="LOLCats"       # convert to lowercase -> lolcats
    declare -u g="LOLCats"       # convert to uppercase -> LOLCATS
    
    declare -a                   # the variables are treaded as arrays
    declare -f                   # uses function names only
    declare -F                   # displays function names without definitions
    declare -x                   # marks the variables for export via the environment
    
    ${varname:-word}             # if varname exists and isn't null, return its value; otherwise return word
    ${varname:=word}             # if varname exists and isn't null, return its value; otherwise set it word and then return its value
    ${varname:?message}          # if varname exists and isn't null, return its value; otherwise print varname, followed by message and abort the current command or script
    ${varname:+word}             # if varname exists and isn't null, return word; otherwise return null
    ${varname:offset:length}     # performs substring expansion. It returns the substring of $varname starting at offset and up to length characters
    
    ${variable#pattern}          # if the pattern matches the beginning of the variable's value, delete the shortest part that matches and return the rest
    ${variable##pattern}         # if the pattern matches the beginning of the variable's value, delete the longest part that matches and return the rest
    ${variable%pattern}          # if the pattern matches the end of the variable's value, delete the shortest part that matches and return the rest
    ${variable%%pattern}         # if the pattern matches the end of the variable's value, delete the longest part that matches and return the rest
    ${variable/pattern/string}   # the longest match to pattern in variable is replaced by string. Only the first match is replaced
    ${variable//pattern/string}  # the longest match to pattern in variable is replaced by string. All matches are replaced
    
    ${#varname}                  # returns the length of the value of the variable as a character string
    
    *(patternlist)               # matches zero or more occurrences of the given patterns
    +(patternlist)               # matches one or more occurrences of the given patterns
    ?(patternlist)               # matches zero or one occurrence of the given patterns
    @(patternlist)               # matches exactly one of the given patterns
    !(patternlist)               # matches anything except one of the given patterns
    
    $(UNIX command)              # command substitution: runs the command and returns standard output
    
    ##############################################################################
    # FUNCTIONS
    ##############################################################################
    
    # The function refers to passed arguments by position (as if they were positional parameters), that is, $1, $2, and so forth.
    # [email protected] is equal to "$1" "$2"... "$N", where N is the number of positional parameters. $# holds the number of positional parameters.
    
    function functname() {
      shell commands
    }
    
    unset -f functname  # deletes a function definition
    declare -f          # displays all defined functions in your login session
    
    ##############################################################################
    # FLOW CONTROLS
    ##############################################################################
    
    statement1 && statement2  # and operator
    statement1 || statement2  # or operator
    
    -a                        # and operator inside a test conditional expression
    -o                        # or operator inside a test conditional expression
    
    # STRINGS
    
    str1 = str2               # str1 matches str2
    str1 != str2              # str1 does not match str2
    str1 < str2               # str1 is less than str2 (alphabetically)
    str1 > str2               # str1 is greater than str2 (alphabetically)
    -n str1                   # str1 is not null (has length greater than 0)
    -z str1                   # str1 is null (has length 0)
    
    # FILES
    
    -a file                   # file exists
    -d file                   # file exists and is a directory
    -e file                   # file exists; same -a
    -f file                   # file exists and is a regular file (i.e., not a directory or other special type of file)
    -r file                   # you have read permission
    -s file                   # file exists and is not empty
    -w file                   # your have write permission
    -x file                   # you have execute permission on file, or directory search permission if it is a directory
    -N file                   # file was modified since it was last read
    -O file                   # you own file
    -G file                   # file's group ID matches yours (or one of yours, if you are in multiple groups)
    file1 -nt file2           # file1 is newer than file2
    file1 -ot file2           # file1 is older than file2
    
    # NUMBERS
    
    -lt                       # less than
    -le                       # less than or equal
    -eq                       # equal
    -ge                       # greater than or equal
    -gt                       # greater than
    -ne                       # not equal
    
    if condition
    then
      statements
    [elif condition
      then statements...]
    [else
      statements]
    fi
    
    for x in {1..10}
    do
      statements
    done
    
    for name [in list]
    do
      statements that can use $name
    done
    
    for (( initialisation ; ending condition ; update ))
    do
      statements...
    done
    
    case expression in
      pattern1 )
        statements ;;
      pattern2 )
        statements ;;
    esac
    
    select name [in list]
    do
      statements that can use $name
    done
    
    while condition; do
      statements
    done
    
    until condition; do
      statements
    done
    
    ##############################################################################
    # INPUT/OUTPUT REDIRECTORS
    ##############################################################################
    
    cmd1|cmd2  # pipe; takes standard output of cmd1 as standard input to cmd2
    < file     # takes standard input from file
    > file     # directs standard output to file
    >> file    # directs standard output to file; append to file if it already exists
    >|file     # forces standard output to file even if noclobber is set
    n>|file    # forces output to file from file descriptor n even if noclobber is set
    <> file    # uses file as both standard input and standard output
    n<>file    # uses file as both input and output for file descriptor n
    n>file     # directs file descriptor n to file
    n<file     # takes file descriptor n from file
    n>>file    # directs file description n to file; append to file if it already exists
    n>&        # duplicates standard output to file descriptor n
    n<&        # duplicates standard input from file descriptor n
    n>&m       # file descriptor n is made to be a copy of the output file descriptor
    n<&m       # file descriptor n is made to be a copy of the input file descriptor
    &>file     # directs standard output and standard error to file
    <&-        # closes the standard input
    >&-        # closes the standard output
    n>&-       # closes the ouput from file descriptor n
    n<&-       # closes the input from file descripor n
    
    ##############################################################################
    # PROCESS HANDLING
    ##############################################################################
    
    # To suspend a job, type CTRL+Z while it is running. You can also suspend a job with CTRL+Y.
    # This is slightly different from CTRL+Z in that the process is only stopped when it attempts to read input from terminal.
    # Of course, to interrupt a job, type CTRL+C.
    
    myCommand &  # runs job in the background and prompts back the shell
    
    jobs         # lists all jobs (use with -l to see associated PID)
    
    fg           # brings a background job into the foreground
    fg %+        # brings most recently invoked background job
    fg %-        # brings second most recently invoked background job
    fg %N        # brings job number N
    fg %string   # brings job whose command begins with string
    fg %?string  # brings job whose command contains string
    
    kill -l      # returns a list of all signals on the system, by name and number
    kill PID     # terminates process with specified PID
    
    ps           # prints a line of information about the current running login shell and any processes running under it
    ps -a        # selects all processes with a tty except session leaders
    
    trap cmd sig1 sig2  # executes a command when a signal is received by the script
    trap "" sig1 sig2   # ignores that signals
    trap - sig1 sig2    # resets the action taken when the signal is received to the default
    
    disown <PID|JID>    # removes the process from the list of jobs
    
    wait                # waits until all background jobs have finished
    
    ##############################################################################
    # DEBUGGING SHELL PROGRAMS
    ##############################################################################
    
    bash -n scriptname  # don't run commands; check for syntax errors only
    set -o noexec       # alternative (set option in script)
    
    bash -v scriptname  # echo commands before running them
    set -o verbose      # alternative (set option in script)
    
    bash -x scriptname  # echo commands after command-line processing
    set -o xtrace       # alternative (set option in script)
    
    trap 'echo $varname' EXIT  # useful when you want to print out the values of variables at the point that your script exits
    
    function errtrap {
      es=$?
      echo "ERROR line $1: Command exited with status $es."
    }
    
    trap 'errtrap $LINENO' ERR  # is run whenever a command in the surrounding script or function exits with non-zero status 
    
    function dbgtrap {
      echo "badvar is $badvar"
    }
    
    trap dbgtrap DEBUG  # causes the trap code to be executed before every statement in a function or script
    # ...section of code in which the problem occurs...
    trap - DEBUG  # turn off the DEBUG trap
    
    function returntrap {
      echo "A return occurred"
    }
    
    trap returntrap RETURN  # is executed each time a shell function or a script executed with the . or source commands finishes executing
  • ۴ هفته پیش @amir به بحث api اینستاگرام جواب داد.

    راستی یک جا خوندم باید برای این کار اول از اینستاگرام اجازه مخصوص بگیری. اما اینستاگرام برای نشون دادن عکسها و غیره API داره.

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

    https://www.instagram.com/developer/endpoints

  • ۴ هفته پیش @amir به بحث آمار بازدید سایت در php جواب داد.

    روشی که من بکار میبرم این هست که از cookie استفاده می کنم چون خیلی سریع تر است نسبت به IP.

    استفاده از IP رو برای ذخیره در دیتابیس پیشنهاد نمی کنم چون یادت نره چند نفری که مثلا تو کافی شاپ از یک WiFi استفاده می کنند همه IP آدرس های مشابهی دارند.

    یک cookie در مرورگر کاربر برای ۱۰ دقیقه ذخیره کن و برای هر صفحه اگر چیزی یکتا داری (مثلا هر گفتگوی پارس کلیک یک ID داره) چک کن ببین این کاربر با این cookie آیا این گفتگو با این ID رو در ظرف ۱۰ دقیقه پیش آیا دیده یا نه. اگر ندیده اونوقت به آمار بازدید ۱ اضافه کن.

    حالا چرا ۱۰ دقیقه و کوکی

    چون یادت باشه اگر کاربری ۱۰ دقیقه دیگه باز اومد و این مثلا گفتگو یا صفحه رو دید شما باز می خواهید که به آمار بازدید ۱ اضافه کنید چون باز اون کاربر مثلا اون گفتگو یا اون صفحه رو دیده و تقلب نکرده. فکر نمی کنم کاربر ها اینقدر بیکار باشند که بخوان cookie ها رو پاک کنند یا هر مثلا هر ۱۰ دقیقه یکبار بیان تو صفحه که آمار بازدید رو ببرن بالا مگر این که از آمار بازدید پول در بیاد مثل YouTube که اونوقت باید از میکس آی پی و سشن استفاده کرد.

    همه چیز بستگی داره که چی دارید میسازید.

    مثال لاراول:

    if ( ! request()->hasCookie($this->cacheKey())) {
        Redis::incr($this->cacheKey());
         // ۱۰ دقیقه
        cookie()->queue(cookie($this->cacheKey(), $this->model->id, 10));
    }
    
    // کلید یکتا برای هر کوکی
    public function cacheKey()
    {
        return sprintf(
            'visiting_%s_%s',
            strtolower(class_basename($this->model)),
            $this->model->id
        );
    }
  • @iranpour مگه پوسته تاریک روی تم سفید دوست دارید؟

    به هر حال تو اینجا می تونید تم رو تغییر بدید:

    Appearance & Behavior > Appearance > Theme

    ویندوز چرا تمش عوض میشه اطلاع ندارم ممکن هسن باگی در این اپ برای ویندوز وجود داشته باشه.

  • ١ ماه پیش @amir یک مقاله تازه به اسم میانبرهای یونیکس نوشت.

    در این قسمت سعی من بر این هست که میانبرهایی رو در یونیکیس برای شما قرار بدهم که معمولا به خاطر استفاده نکردن زیاد ممکن هست یادتون بره، اما کاربرد اونها خیلی زیاد هست و اگر بدونیدشون خیلی جاها می تونه خیلی سریع کمکتون کنه:

    میانبر ها در CLI
    • ctrl+a — move cursor to beginning of line
    • ctrl+e — move cursor to end of line
    • ctrl+u — clear to beginning of line
    • ctrl+k — clear to end of line
    فایل سیستم
    • cp -r dir1 dir - copy directory dir1 to dir2
    • ln -s file link — create a soft symbolic link to file - soft
    • ln file link — create a hard symbolic link to file - hard
    • less file — view file with page navigation
    • head file — output the first 10 lines of file
    • tail file — output the last 10 lines of file
    • tail -f file — output the contents of file as it grows
    سیستم
    • shutdown — shut down machine
    • reboot — restart machine
    • df — show disk usage
    • du — show directory space usage
    جستجو
    • grep pattern files — search for pattern in files
    • grep -r pattern dir — search recursively for pattern in dir
    • grep -rn pattern dir — search recursively for pattern in dir and show the line number found
    • grep -r pattern dir --include='*.ext — search recursively for pattern in dir and only search in files with .ext extension
    • grep -E pattern files — search for pattern using Extended regexp in files
    • command | grep pattern — search for pattern in the output of command
    • find file* — find all instances of file in real system
    • find . -iname 'string*' - find file case insensitive with a pattern
    • find -L . -iname '*.js' -exec chmod 744 {} \; - find js files and change mode to 644 within this directory
    • find /var/log/ -iname '*.tmp' -delete - find .tmp files within that directory and delete them
    • locate file — find all instances of file using indexed database built from the updatedb command. Much faster than find
    • sed -i 's/day/night/g' file — find all occurrences of day in a file and replace them with night - s means substitude and g means global - sed also supports regular expressions
    • sed -i -- 's/old/new/g' */**(.D) find and replace old string with new string withing this folder and all its subfolder
    مدیریت پروسه ها
    • ps — display your currently active processes
    • top — display all running processes
    • kill pid — kill process id pid
    • kill -9 pid — force kill process id pid
    شبکه
    • scp [email protected]:file dir — secure copy a file from remote server to the dir directory on your machine
    • scp file [email protected]:dir — secure copy a file from your machine to the dir directory on a remote server
    • scp -r [email protected]:dir dir — secure copy the directory dir from remote server to the directory dir on your machine
    • ssh -p port [email protected] — connect to host on port as user
    • ssh-copy-id [email protected] — add your key to host for user to enable a keyed or passwordless login
    • ping host — ping host and output results
    • whois domain — get information for domain
    • dig domain — get DNS information for domain
    • dig -x host — reverse lookup host
    • lsof -i tcp:1337 — list all processes running on port 1337
    زیپ و آنزیپ
    • tar cvzf file.tar.gz files — create a tar with Gzip compression
    • tar cafxz file.tar.gz — extract a tar using Gzip
    اجازه ها
    • chmod ugo file — change permissions of file to ugo - u is the user's permissions, g is the group's permissions, and o is everyone else's permissions. The values of u, g, and o can be any number between 0 and 7.
    • x = 1
    • w = 2
    • r = 4
    • u = user
    • g = group
    • o = other

    مثال

    • u+rwx
    • g=r
    • 0-rwx
    • 777 = a+rwx
  • ١ ماه پیش @amir به بحث اتوماسیون جواب داد.

    ممنون از اینکه از انجمن استفاده می کنید امـــــا برای پیشنهاد کاری از قسمت کارها استفاده کنید و همین رو اونجا ارسال کنید لطفا.

    کارها

  • ٢ ماه پیش @amir یک مقاله تازه به اسم میانبرها گیت با استفاده از Oh-My-Zsh نوشت.

    اگر از Oh-My-Zsh استفاده می کنید و پلاگین گیت رو براش نصب کردید، از این میانبرها برای گیت می توانید استفاده کنید.

    این مقاله صرفا برای رفرنس هست

    https://i.imgur.com/eyjEx1n.jpghttps://i.imgur.com/V7HBsrV.jpg

    gcf = git config --list
    ga = git add
    gaa = git add --all
    gb = git branch
    gbD = git branch -D
    gba = git branch -a
    gbd = git branch -d
    gbnm = git branch --no-merged
    ggsup = git branch --set-upstream-to=origin/$(git_current_branch)
    gcb = git checkout -b
    gcm = git checkout master
    gcr = git checkout release
    gcd = git checkout develop
    gch = git checkout hotfix
    gco = git checkout
    gcount = git shortlog -sn
    gcp = git cherry-pick
    gcpa = git cherry-pick --abort
    gcpc = git cherry-pick --continue
    gcmsg = git commit -m
    gcam = git commit -a -m
    gcsm = git commit -s -m
    gdct = git describe --tags `git rev-list --tags --max-count=1`
    gd = git diff
    gdcw = git diff --cached --word-diff
    gdw = git diff --word-diff
    gf = git fetch
    gfa = git fetch --all --prune
    gfo = git fetch origin
    gl = git pull
    gup = git pull --rebase
    glum = git pull upstream master
    ggpull = git pull origin "$(git_current_branch)"
    glola = git log --graph --pretty = \''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --all
    gm = git merge
    gma = git merge --abort
    gmom = git merge origin/master
    gmum = git merge upstream/master
    gp = git push
    gpd = git push --dry-run
    gpf = git push --force-with-lease
    'gpf!' = git push --force
    gpu = git push upstream
    ggpush = git push origin "$(git_current_branch)"
    gpsup = git push --set-upstream origin $(git_current_branch)
    gpristine = git reset --hard && git clean -dfx
    grb = git rebase
    grba = git rebase --abort
    grbc = git rebase --continue
    grbd = git rebase develop
    grbi = git rebase -i
    grbm = git rebase master
    grbs = git rebase --skip
    grh = git reset
    grhh = git reset --hard
    grm = git rm
    gra = git remote add
    grmv = git remote rename
    grrm = git remote remove
    grup = git remote update
    gsh = git show
    gcl = git clone --recurse-submodules
    gsi = git submodule init
    gsu = git submodule update
    gss = git status -s
    gst = git status
    gsta = git stash push
    gstaa = git stash apply
    gstall = git stash --all
    gstc = git stash clear
    gstd = git stash drop
    gstl = git stash list
    gstp = git stash pop
    gts = git tag -s
    gwip = git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"
    gclean = git clean -id
    
    nah = git reset --hard && git clean -df
    wip = git add . && git commit -m '\''WIP'\
    
    gfl = git flow
    gflf = git flow feature
    gflff = git flow feature finish
    gflfp = git flow feature publish
    gflfpll = git flow feature pull
    gflfs = git flow feature start
    gflh = git flow hotfix
    gflhf = git flow hotfix finish
    gflhp = git flow hotfix publish
    gflhs = git flow hotfix start
    gfli = git flow init
    gflr = git flow release
    gflrf = git flow release finish
    gflrp = git flow release publish
    gflrs = git flow release start
    
  • ٢ ماه پیش @amir به بحث آپدیت آنلاین پروژه های لاراول جواب داد.

    برای پی اچ پی میتونی از composer استفاده کنی. مثلا private package درست کنی. کاری که taylor otwell مثلا برای laravel spark کرده که برای دانلود باید پول بدی، بعد یک کلید بهت میده، اون کلید رو داخل ماشینت رجیستر می کنی بعد دانلود می کنی یا از parivate packagist استفاده کنی.

  • ٢ ماه پیش @amir به بحث آپدیت آنلاین پروژه های لاراول جواب داد.

    یک branch دیگه بساز مثلا به اسم staging. بعد با dns تنظیم کن که هر وقت push کردی به github بره به این domain.

    مثلا اسم برای پارس کلیک میشه:

    staging.parsclick.net

    بعدش آپدیت رو روی این branch اعمال کن، به مشتری نشون بده، اگر خوشش اومد و اوکی داد یه pull request تو github باز کن که از staging به master مرج کنی. یا میتونی local از staging به master مرج کنی بعد به شاخه ی remote در github پوش کنی. و تمام تغییرات رو میتونی ببینی.

    به شخصه فکر نمی کنم به Docker احتیاجی داشته باشی، به نظر من Docker بیشتر به درد ساختن Micro-App میخوره تا وبسایت های نسبتا متوسط ما

  • ٢ ماه پیش @amir به بحث اضافه نشدن foreign key جواب داد.

    @m-p یک نکته مهم:

    فایل های مایگریشن رو نگاه کن و مرتب کن چون اون ها به ترتیب اجرا میشن. یعنی اول باید جدول دیگه ای که foreign key رو شما داری توی این migration رفرنس می کنی

    • اول باید وجود داشته باشه
    • بعد شما foreign key رو بسازی

    مثلا فایل های مایگریشن اولشون تاریخ داره که می تونه یا فایل رو پاک کنی دوباره درست کنی یا تاریخ رو دست کاری کنی مثلا این چند تا فایل رو ببین که به ترتیب از بالا اجرا میشن:

    2014_10_12_000000_create_users_table.php
    2014_10_12_100000_create_password_resets_table.php
    2014_10_28_175635_create_threads_table.php
    2014_10_28_175710_create_messages_table.php
    2014_10_28_180224_create_participants_table.php
    2014_11_03_154831_add_soft_deletes_to_participants_table.php
    2014_12_04_124531_add_softdeletes_to_threads_table.php
    2017_02_20_172800_create_failed_jobs_table.php
    2017_02_20_172809_create_jobs_table.php

    پیشنهاد

    • اول تمام جدول ها تو بدون اشاره ای به foreign key تو مایگریشن ها بساز
    • دوم یک مایگریشن برای تمام جدول ها بساز و توی اون فقط foreign key ها رو اضافه کن

    در آخر اینکه foreign key برای دیتابیس در فریم ورک لاراول لزوما لازم نیست چون روابط جدول ها رو میشه با کمک لاراول درست کرد، برای همین NOSQL ها و Redis هم به راحتی می تونن دیتابیس ها ی خوبی باشن مثلا تو Firebase گوگل اصلا foreign key نداریم چون زبان اون رو درست می تونه کنه.

  • ٢ ماه پیش @amir به بحث شروع رکورد فصل دوم آموزش الکسیر جواب داد.

    @shahryarjb خیلی عالی بود. خیلی چیزها رو برام روشن کرد. دارم‌ میبینم که خیلی سریع داره میاد بالا و وقتی که مسلما سریع تر از ریلز هست خیلی از برنامه نویسا سویچ کردن بهش. مشتاق ویدیو ها هستم. مرسییییی ازت

  • ٢ ماه پیش @amir به بحث شروع رکورد فصل دوم آموزش الکسیر جواب داد.

    سوالی رو میخواستم بپرسم از @shahryarjb و دوستانی که از ELIXIR و PHOENIX تجربه دارند. اگر سوالی اشتباه هست بهم بگو.

    1. می دونم Phoenix از Ecto استفاده می کنه، کار با migration و فرقش با ORM چیه؟
    2. در Phoenix از queue ها چطور استفاده می شه و آیا اصلا لازم هستند؟
    3. Channel ها چی هستند آیا از websockets استفاده می کنند؟
    4. آیا در Phoenix احتیاجی به Event و Listener ها هست؟ اگر بله چطوری استفاده می شه؟
    5. Cashing و Hashing چطوری هست؟
    6. فرستادن ایمیل و notification چطوری هست؟
    7. آیا در Phoenix قابلیت استفاده از cron jobs در فریم ورک وجود دارد؟
    8. دیتابیس ریلیشن شیپ ها رو از کجا در doc میشه پیدا کرد؟
    9. بهترین پکیج کار با Stripe و Braintree؟

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

  • @mas1375 این روش ها اوکی هستند ولی برای سایتی که واقعا API یا RSS نداده معنیش این هست که نمی خوان شما استفاده کنید. به نظر من به رفتن تو دام و کرال کردن اطمینانی نیست چون سایت ممکنه عوض بشه.

  • ٢ ماه پیش @amir یک مقاله تازه به اسم نتایج نظر سنجی Stack Overflow در سال ۲۰۱۹ نوشت.

    نظرسنجی سالانه Developer Stack Overflow نهمین سال متوالی است که Stack Overflow نتایج نظرسنجی سالانه خود را منتشر می کند.

    بنابر Stack Overflow:

    نتایج کلیدی

    • پایتون، سریع ترین زبان برنامه نویسی بزرگ، در رتبه بندی ما در رتبه بندیهای زبانهای برنامه نویسی افزوده شده است و در سال جاری از جاوا خارج می شود و دومین محبوب ترین زبان Back End است.
    • بیش از نیمی از پاسخ دهندگان اولین خط کد خود را تا زمان شانزده سالگی خود نوشته بودند، هرچند این تجربه براساس کشور و جنسیت متفاوت است.
    • متخصصان DevOps یکی از بالاترین شغل های پرداخت شده است و مهندسین آن از مشاغل خود راضی هستند و به دنبال شغل های جدید در پایین ترین سطح هستند.
    • از کشورهای برتر در نظرسنجی ما، چین خوش بین ترین توسعه دهندگان را دارد، آنها معتقدند که امروزه مردم متولد شده زندگی بهتر از والدین خود دارند. توسعه دهندگان کشورهای اروپای غربی مانند فرانسه و آلمان در میان کمترین خوش بینی را در مورد آینده دارند.
    • هنگامی که فکر می کنم در مورد بلوک کننده ها به بهره وری، انواع مختلف توسعه دهندگان گزارش چالش های مختلف. مردان احتمال بیشتری دارند که گفته شود که مشغله کار غیر توسعه ای برای آنها مشکل است، در حالی که پاسخ دهندگان اقلیت جنسیت بیشتر به این نکته می گویند که محیط کار سمی مشکل است.
    • ما از پاسخ دهندگان خواسته بودیم که در مورد آخرین بار که مشکلات برنامه نویسی را با و بدون سایت ما حل می کردند فکر کنند. داده ها نشان می دهند که ما زمان حل مشکل را بین ۳۰ تا ۹۰ دقیقه در هفته برای توسعه دهنده پایین می آوریم!

    مقایسه ی فریم ورک های روز دنیا

    روی این لینک برای مقایسه ی فریم ورک های روز دنیا کلیک کنید


    بیشترین تکنولوژی های محبوب

    1. JavaScript 67.8٪
    2. HTML / CSS 63.5٪
    3. SQL 54.4٪
    4. Python 41.7٪
    5. Java 41.1٪
    6. Bash / Shell / PowerShell 36.6٪
    7. C# 31.0٪
    8. PHP 26.4٪
    9. C++ 23.5٪
    10. TypeScript 21.2٪
    11. C 20.6٪
    12. Ruby 8.4٪
    13. Go 8.2٪
    14. Assembly 6.7٪
    15. Swift 6.6٪
    16. Kotlin 6.4٪
    17. R 5.8٪
    18. VBA 5.5٪
    19. Objective-C 4.8٪
    20. Scala 3.8٪
    21. Rust 3.2٪
    22. Dart 1.9٪
    23. Elixir 1.4٪
    24. Clojure 1.4٪
    25. WebAssembly 1.2٪

    چارچوب وب

    1. jQuery 48.7%
    2. React.js 31.3%
    3. Angular/Angular.js 30.7%
    4. ASP.NET 26.3%
    5. Express 19.7%
    6. Spring 16.2%
    7. Vue.js 15.2%
    8. Django 13.0%
    9. Flask 12.1%
    10. Laravel 10.5%
    11. Ruby on Rails 8.2%
    12. Drupal 3.5%

    پایگاه های داده

    1. MySQL 54.0%
    2. PostgreSQL 34.3%
    3. Microsoft SQL Server 32.8%
    4. SQLite 31.6%
    5. MongoDB 25.5%
    6. Redis 18.6%
    7. MariaDB 16.5%
    8. Oracle 16.5%
    9. Elasticsearch 14.3%
    10. Firebase 12.8%
    11. DynamoDB 6.2%
    12. Cassandra 3.5%
    13. Couchbase 2.0%

    بیشترین علاقه، خواستنی و دوست داشتنی ترین زبان ها

    1. Rust 83.5%
    2. Python 73.1%
    3. TypeScript 73.1%
    4. Kotlin 72.6%
    5. WebAssembly 69.5%
    6. Swift 69.2%
    7. Clojure 68.3%
    8. Elixir 68.2%
    9. Go6 7.9%
    10. C# 67.0%
    11. JavaScript 66.8%
    12. Dart 66.3%
    13. SQL 64.1%
    14. HTML/CSS 62.2%
    15. F# 61.7%
    16. Bash/Shell/PowerShell 59.5%
    17. Scala 58.3%
    18. Java 53.4%
    19. C++ 52.0%
    20. R 51.7%
    21. Ruby 50.3%
    22. Erlang 47.4%
    23. PHP 45.8%
    24. C 42.5%
    25. Assembly 35.6%

    بیشترین علاقه، خواستنی و دوست داشتنی ترین چارچوب ها

    1. React.js 74.5%
    2. Vue.js 73.6%
    3. Express 68.3%
    4. Spring 65.6%
    5. ASP.NET 64.9%
    6. Django 62.1%
    7. Flask 61.1%
    8. Laravel 60.1%
    9. Angular/Angular.js 57.6%
    10. Ruby on Rails 57.1%
    11. jQuery 45.3%
    12. Drupal 30.1%

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

    1. Visual Studio Code 50.7%
    2. Visual Studio 31.5%
    3. Notepad++ 30.5%
    4. IntelliJ 25.4%
    5. Vim 25.4%
    6. Sublime Text 23.4%
    7. Android Studio 16.9%
    8. Eclipse 14.4%
    9. PyCharm 13.4%
    10. Atom 13.3%
    11. IPython / Jupyter 9.5%
    12. Xcode 9.4%
    13. PHPStorm 7.6%
    14. NetBeans 5.9%
    15. Emacs 4.5%
    16. RStudio 3.4%
    17. RubyMine 1.4%
    18. TextMate 0.9%
    19. Coda 0.7%
    20. Komodo 0.4%
    21. Zend 0.4%
    22. Light Table 0.2%

    بقیه ی این نتایج رو میتونید اینجا دنبال کنید.

  • ٣ ماه پیش @amir به بحث اصلاح / تکراری در url جواب داد.

    سرور ما Apache نیست. این لینک رو ببین:

    Stop using .htaccess. It’s horrible for performance. NGINX is designed to be efficient. Adding something like this destroys that.

  • ٣ ماه پیش @amir به بحث اصلاح / تکراری در url جواب داد.

    این اشکال نیست. بیشتر جاها همینطوریه. مثل اینکه شما آخر URL یک پارامتر اضافه کنید. سرور با اون پارامتر میتونه یا کار کنه یا نکنه. Slash ها رو میشه حذف کرد اما مزیتش رو من نمیدونم، بستگی به استفاده کننده ی URL داره.

  • ٣ ماه پیش @amir به بحث کار با کرون جاب جواب داد.

    سوال کوتاه، عمومی و از کاراکتر فاصله برای پر کردن استفاده شده! این دفعه اول شما نیست دوست محترم.

  • ٣ ماه پیش @amir به بحث ارور NotFoundHttpException جواب داد.

    مشکل از روت هست درسته:

    • یا وجود نداره
    • یا متودش اشتباهه مثلا POST بجای GET
    • یا اشتباه تایپ کردی
    • یا پارامتر باید بفرستی

    همه ی اینا رو چک کن