From e8d70cc4576a6558125145fe0cf2077494e7a9d6 Mon Sep 17 00:00:00 2001 From: github-actions-bot Date: Sat, 3 Aug 2024 13:03:23 +0000 Subject: [PATCH] Updates --- 1c-enterprise/daily/index.xml | 2 +- 2-dimensional-array/daily/index.xml | 2 +- 4d/daily/index.xml | 2 +- abap-cds/daily/index.xml | 2 +- abap/daily/index.xml | 2 +- abnf/daily/index.xml | 2 +- actionscript/daily/index.xml | 2 +- ada/daily/index.xml | 2 +- adobe-font-metrics/daily/index.xml | 2 +- agda/daily/index.xml | 2 +- ags-script/daily/index.xml | 2 +- aidl/daily/index.xml | 2 +- al/daily/index.xml | 2 +- all/daily/index.xml | 32 +++++++++---------- alloy/daily/index.xml | 2 +- alpine-abuild/daily/index.xml | 2 +- altium-designer/daily/index.xml | 2 +- ampl/daily/index.xml | 2 +- angelscript/daily/index.xml | 2 +- ant-build-system/daily/index.xml | 2 +- antlr/daily/index.xml | 2 +- apacheconf/daily/index.xml | 2 +- apex/daily/index.xml | 2 +- api-blueprint/daily/index.xml | 2 +- apl/daily/index.xml | 2 +- apollo-guidance-computer/daily/index.xml | 2 +- applescript/daily/index.xml | 2 +- arc/daily/index.xml | 2 +- asciidoc/daily/index.xml | 2 +- asl/daily/index.xml | 2 +- asn.1/daily/index.xml | 2 +- asp.net/daily/index.xml | 2 +- aspectj/daily/index.xml | 2 +- assembly/daily/index.xml | 2 +- astro/daily/index.xml | 9 +----- asymptote/daily/index.xml | 2 +- ats/daily/index.xml | 2 +- augeas/daily/index.xml | 2 +- autohotkey/daily/index.xml | 2 +- autoit/daily/index.xml | 2 +- avro-idl/daily/index.xml | 2 +- awk/daily/index.xml | 2 +- ballerina/daily/index.xml | 2 +- basic/daily/index.xml | 2 +- batchfile/daily/index.xml | 2 +- beef/daily/index.xml | 2 +- befunge/daily/index.xml | 2 +- berry/daily/index.xml | 2 +- bibtex/daily/index.xml | 2 +- bicep/daily/index.xml | 9 +----- bison/daily/index.xml | 2 +- bitbake/daily/index.xml | 2 +- blade/daily/index.xml | 2 +- blitzbasic/daily/index.xml | 2 +- blitzmax/daily/index.xml | 2 +- bluespec/daily/index.xml | 2 +- boo/daily/index.xml | 2 +- boogie/daily/index.xml | 2 +- brainfuck/daily/index.xml | 2 +- brightscript/daily/index.xml | 2 +- browserslist/daily/index.xml | 2 +- c%23/daily/index.xml | 9 +----- c++/daily/index.xml | 9 +----- c-objdump/daily/index.xml | 2 +- c/daily/index.xml | 9 +----- c2hs-haskell/daily/index.xml | 2 +- cabal-config/daily/index.xml | 2 +- cadence/daily/index.xml | 2 +- cairo/daily/index.xml | 2 +- cap'n-proto/daily/index.xml | 2 +- cartocss/daily/index.xml | 2 +- ceylon/daily/index.xml | 2 +- chapel/daily/index.xml | 2 +- charity/daily/index.xml | 2 +- chuck/daily/index.xml | 2 +- cil/daily/index.xml | 2 +- cirru/daily/index.xml | 2 +- clarion/daily/index.xml | 2 +- clarity/daily/index.xml | 2 +- classic-asp/daily/index.xml | 2 +- clean/daily/index.xml | 2 +- click/daily/index.xml | 2 +- clips/daily/index.xml | 2 +- clojure/daily/index.xml | 2 +- closure-templates/daily/index.xml | 2 +- .../daily/index.xml | 2 +- cmake/daily/index.xml | 2 +- cobol/daily/index.xml | 2 +- codeowners/daily/index.xml | 2 +- codeql/daily/index.xml | 2 +- coffeescript/daily/index.xml | 2 +- coldfusion-cfc/daily/index.xml | 2 +- coldfusion/daily/index.xml | 2 +- collada/daily/index.xml | 2 +- common-lisp/daily/index.xml | 2 +- common-workflow-language/daily/index.xml | 2 +- component-pascal/daily/index.xml | 2 +- conll-u/daily/index.xml | 2 +- cool/daily/index.xml | 2 +- coq/daily/index.xml | 2 +- cpp-objdump/daily/index.xml | 2 +- creole/daily/index.xml | 2 +- crystal/daily/index.xml | 2 +- cson/daily/index.xml | 2 +- csound-document/daily/index.xml | 2 +- csound-score/daily/index.xml | 2 +- csound/daily/index.xml | 2 +- css/daily/index.xml | 2 +- csv/daily/index.xml | 2 +- cuda/daily/index.xml | 9 +----- cue/daily/index.xml | 2 +- curl-config/daily/index.xml | 2 +- curry/daily/index.xml | 2 +- cweb/daily/index.xml | 2 +- cycript/daily/index.xml | 2 +- cython/daily/index.xml | 2 +- d-objdump/daily/index.xml | 2 +- d/daily/index.xml | 2 +- dafny/daily/index.xml | 2 +- darcs-patch/daily/index.xml | 2 +- dart/daily/index.xml | 9 +++++- dataweave/daily/index.xml | 2 +- debian-package-control-file/daily/index.xml | 2 +- denizenscript/daily/index.xml | 2 +- desktop/daily/index.xml | 2 +- dhall/daily/index.xml | 2 +- diff/daily/index.xml | 2 +- digital-command-language/daily/index.xml | 2 +- dircolors/daily/index.xml | 2 +- directx-3d-file/daily/index.xml | 2 +- dm/daily/index.xml | 2 +- dns-zone/daily/index.xml | 2 +- dockerfile/daily/index.xml | 2 +- dogescript/daily/index.xml | 2 +- dtrace/daily/index.xml | 2 +- dylan/daily/index.xml | 2 +- e-mail/daily/index.xml | 2 +- e/daily/index.xml | 2 +- eagle/daily/index.xml | 2 +- earthly/daily/index.xml | 2 +- easybuild/daily/index.xml | 2 +- ebnf/daily/index.xml | 2 +- ec/daily/index.xml | 2 +- ecere-projects/daily/index.xml | 2 +- ecl/daily/index.xml | 2 +- eclipse/daily/index.xml | 2 +- editorconfig/daily/index.xml | 2 +- edje-data-collection/daily/index.xml | 2 +- edn/daily/index.xml | 2 +- eiffel/daily/index.xml | 2 +- ejs/daily/index.xml | 2 +- elixir/daily/index.xml | 2 +- elm/daily/index.xml | 2 +- emacs-lisp/daily/index.xml | 2 +- emberscript/daily/index.xml | 2 +- eq/daily/index.xml | 2 +- erlang/daily/index.xml | 2 +- euphoria/daily/index.xml | 2 +- f%23/daily/index.xml | 2 +- f*/daily/index.xml | 2 +- factor/daily/index.xml | 2 +- fancy/daily/index.xml | 2 +- fantom/daily/index.xml | 2 +- faust/daily/index.xml | 2 +- fennel/daily/index.xml | 2 +- figlet-font/daily/index.xml | 2 +- filebench-wml/daily/index.xml | 2 +- filterscript/daily/index.xml | 2 +- fish/daily/index.xml | 2 +- fluent/daily/index.xml | 2 +- flux/daily/index.xml | 2 +- formatted/daily/index.xml | 2 +- forth/daily/index.xml | 2 +- fortran-free-form/daily/index.xml | 2 +- fortran/daily/index.xml | 2 +- freebasic/daily/index.xml | 2 +- freemarker/daily/index.xml | 2 +- frege/daily/index.xml | 2 +- futhark/daily/index.xml | 2 +- g-code/daily/index.xml | 2 +- game-maker-language/daily/index.xml | 2 +- gaml/daily/index.xml | 2 +- gams/daily/index.xml | 2 +- gap/daily/index.xml | 2 +- gcc-machine-description/daily/index.xml | 2 +- gdb/daily/index.xml | 2 +- gdscript/daily/index.xml | 2 +- gedcom/daily/index.xml | 2 +- gemfile.lock/daily/index.xml | 2 +- genie/daily/index.xml | 2 +- genshi/daily/index.xml | 2 +- gentoo-ebuild/daily/index.xml | 2 +- gentoo-eclass/daily/index.xml | 2 +- gerber-image/daily/index.xml | 2 +- gettext-catalog/daily/index.xml | 2 +- gherkin/daily/index.xml | 2 +- git-attributes/daily/index.xml | 2 +- git-config/daily/index.xml | 2 +- gleam/daily/index.xml | 2 +- glsl/daily/index.xml | 9 +----- .../daily/index.xml | 2 +- glyph/daily/index.xml | 2 +- gn/daily/index.xml | 2 +- gnuplot/daily/index.xml | 2 +- go-checksums/daily/index.xml | 2 +- go-module/daily/index.xml | 2 +- go/daily/index.xml | 9 +----- golo/daily/index.xml | 2 +- gosu/daily/index.xml | 2 +- grace/daily/index.xml | 2 +- gradle/daily/index.xml | 2 +- grammatical-framework/daily/index.xml | 2 +- graph-modeling-language/daily/index.xml | 2 +- graphql/daily/index.xml | 2 +- graphviz-(dot)/daily/index.xml | 2 +- groovy-server-pages/daily/index.xml | 2 +- groovy/daily/index.xml | 2 +- gsc/daily/index.xml | 2 +- hack/daily/index.xml | 2 +- haml/daily/index.xml | 2 +- handlebars/daily/index.xml | 2 +- haproxy/daily/index.xml | 2 +- harbour/daily/index.xml | 2 +- haskell/daily/index.xml | 2 +- haxe/daily/index.xml | 2 +- hcl/daily/index.xml | 2 +- hiveql/daily/index.xml | 2 +- hlsl/daily/index.xml | 2 +- holyc/daily/index.xml | 2 +- hoon/daily/index.xml | 2 +- html+ecr/daily/index.xml | 2 +- html+eex/daily/index.xml | 2 +- html+erb/daily/index.xml | 2 +- html+php/daily/index.xml | 2 +- html+razor/daily/index.xml | 2 +- html/daily/index.xml | 2 +- http/daily/index.xml | 2 +- hxml/daily/index.xml | 2 +- hy/daily/index.xml | 2 +- hyphy/daily/index.xml | 2 +- idl/daily/index.xml | 2 +- idris/daily/index.xml | 2 +- ignore-list/daily/index.xml | 2 +- igor-pro/daily/index.xml | 2 +- imagej-macro/daily/index.xml | 2 +- inform-7/daily/index.xml | 2 +- ini/daily/index.xml | 2 +- inno-setup/daily/index.xml | 2 +- io/daily/index.xml | 2 +- ioke/daily/index.xml | 2 +- irc-log/daily/index.xml | 2 +- isabelle-root/daily/index.xml | 2 +- isabelle/daily/index.xml | 2 +- j/daily/index.xml | 2 +- janet/daily/index.xml | 2 +- jar-manifest/daily/index.xml | 2 +- jasmin/daily/index.xml | 2 +- java-properties/daily/index.xml | 2 +- java-server-pages/daily/index.xml | 2 +- java/daily/index.xml | 12 +++---- javascript+erb/daily/index.xml | 2 +- javascript/daily/index.xml | 12 +++---- jest-snapshot/daily/index.xml | 2 +- jflex/daily/index.xml | 2 +- jinja/daily/index.xml | 2 +- jison-lex/daily/index.xml | 2 +- jison/daily/index.xml | 2 +- jolie/daily/index.xml | 2 +- jq/daily/index.xml | 2 +- json-with-comments/daily/index.xml | 2 +- json/daily/index.xml | 2 +- json5/daily/index.xml | 2 +- jsoniq/daily/index.xml | 2 +- jsonld/daily/index.xml | 2 +- jsonnet/daily/index.xml | 2 +- julia/daily/index.xml | 16 +--------- .../daily/index.xml | 6 ++-- kaitai-struct/daily/index.xml | 2 +- kakounescript/daily/index.xml | 2 +- kicad-layout/daily/index.xml | 2 +- kicad-legacy-layout/daily/index.xml | 2 +- kicad-schematic/daily/index.xml | 2 +- kit/daily/index.xml | 2 +- kotlin/daily/index.xml | 2 +- krl/daily/index.xml | 2 +- kusto/daily/index.xml | 2 +- kvlang/daily/index.xml | 2 +- labview/daily/index.xml | 2 +- lark/daily/index.xml | 2 +- lasso/daily/index.xml | 2 +- latte/daily/index.xml | 2 +- lean/daily/index.xml | 2 +- less/daily/index.xml | 2 +- lex/daily/index.xml | 2 +- lfe/daily/index.xml | 2 +- ligolang/daily/index.xml | 2 +- lilypond/daily/index.xml | 2 +- limbo/daily/index.xml | 2 +- linker-script/daily/index.xml | 2 +- linux-kernel-module/daily/index.xml | 2 +- liquid/daily/index.xml | 2 +- literate-agda/daily/index.xml | 2 +- literate-coffeescript/daily/index.xml | 2 +- literate-haskell/daily/index.xml | 2 +- livescript/daily/index.xml | 2 +- llvm/daily/index.xml | 2 +- logos/daily/index.xml | 2 +- logtalk/daily/index.xml | 2 +- lolcode/daily/index.xml | 2 +- lookml/daily/index.xml | 2 +- loomscript/daily/index.xml | 2 +- lsl/daily/index.xml | 2 +- ltspice-symbol/daily/index.xml | 2 +- lua/daily/index.xml | 9 +----- m/daily/index.xml | 2 +- m4/daily/index.xml | 2 +- m4sugar/daily/index.xml | 2 +- macaulay2/daily/index.xml | 2 +- makefile/daily/index.xml | 2 +- mako/daily/index.xml | 2 +- markdown/daily/index.xml | 2 +- marko/daily/index.xml | 2 +- mask/daily/index.xml | 2 +- mathematica/daily/index.xml | 2 +- matlab/daily/index.xml | 2 +- maven-pom/daily/index.xml | 2 +- max/daily/index.xml | 2 +- maxscript/daily/index.xml | 2 +- mcfunction/daily/index.xml | 2 +- mercury/daily/index.xml | 2 +- meson/daily/index.xml | 2 +- metal/daily/index.xml | 2 +- .../daily/index.xml | 2 +- .../daily/index.xml | 2 +- minid/daily/index.xml | 2 +- mint/daily/index.xml | 2 +- mirah/daily/index.xml | 2 +- mirc-script/daily/index.xml | 2 +- mlir/daily/index.xml | 2 +- modelica/daily/index.xml | 2 +- modula-2/daily/index.xml | 2 +- modula-3/daily/index.xml | 2 +- module-management-system/daily/index.xml | 2 +- monkey-c/daily/index.xml | 2 +- monkey/daily/index.xml | 2 +- moocode/daily/index.xml | 2 +- moonscript/daily/index.xml | 2 +- motoko/daily/index.xml | 2 +- motorola-68k-assembly/daily/index.xml | 2 +- mql4/daily/index.xml | 2 +- mql5/daily/index.xml | 2 +- mtml/daily/index.xml | 2 +- muf/daily/index.xml | 2 +- mupad/daily/index.xml | 2 +- muse/daily/index.xml | 2 +- mustache/daily/index.xml | 2 +- myghty/daily/index.xml | 2 +- nanorc/daily/index.xml | 2 +- nasl/daily/index.xml | 2 +- ncl/daily/index.xml | 2 +- nearley/daily/index.xml | 2 +- nemerle/daily/index.xml | 2 +- neon/daily/index.xml | 2 +- nesc/daily/index.xml | 2 +- netlinx+erb/daily/index.xml | 2 +- netlinx/daily/index.xml | 2 +- netlogo/daily/index.xml | 2 +- newlisp/daily/index.xml | 2 +- nextflow/daily/index.xml | 2 +- nginx/daily/index.xml | 2 +- nim/daily/index.xml | 2 +- ninja/daily/index.xml | 2 +- nit/daily/index.xml | 2 +- nix/daily/index.xml | 2 +- nl/daily/index.xml | 2 +- npm-config/daily/index.xml | 2 +- nsis/daily/index.xml | 2 +- nu/daily/index.xml | 2 +- numpy/daily/index.xml | 2 +- nunjucks/daily/index.xml | 2 +- nwscript/daily/index.xml | 2 +- objdump/daily/index.xml | 2 +- object-data-instance-notation/daily/index.xml | 2 +- objective-c++/daily/index.xml | 2 +- objective-c/daily/index.xml | 2 +- objective-j/daily/index.xml | 2 +- objectscript/daily/index.xml | 2 +- ocaml/daily/index.xml | 2 +- odin/daily/index.xml | 2 +- omgrofl/daily/index.xml | 2 +- ooc/daily/index.xml | 2 +- opa/daily/index.xml | 2 +- opal/daily/index.xml | 2 +- open-policy-agent/daily/index.xml | 2 +- opencl/daily/index.xml | 2 +- openedge-abl/daily/index.xml | 2 +- openqasm/daily/index.xml | 2 +- openrc-runscript/daily/index.xml | 2 +- openscad/daily/index.xml | 2 +- openstep-property-list/daily/index.xml | 2 +- opentype-feature-file/daily/index.xml | 2 +- org/daily/index.xml | 2 +- ox/daily/index.xml | 2 +- oxygene/daily/index.xml | 2 +- oz/daily/index.xml | 2 +- p4/daily/index.xml | 2 +- pan/daily/index.xml | 2 +- papyrus/daily/index.xml | 2 +- parrot-assembly/daily/index.xml | 2 +- .../daily/index.xml | 2 +- parrot/daily/index.xml | 2 +- pascal/daily/index.xml | 2 +- pawn/daily/index.xml | 2 +- peg.js/daily/index.xml | 2 +- pep8/daily/index.xml | 2 +- perl/daily/index.xml | 2 +- php/daily/index.xml | 2 +- pic/daily/index.xml | 2 +- pickle/daily/index.xml | 2 +- picolisp/daily/index.xml | 2 +- piglatin/daily/index.xml | 2 +- pike/daily/index.xml | 2 +- plantuml/daily/index.xml | 2 +- plpgsql/daily/index.xml | 2 +- plsql/daily/index.xml | 2 +- pod-6/daily/index.xml | 2 +- pod/daily/index.xml | 2 +- pogoscript/daily/index.xml | 2 +- pony/daily/index.xml | 2 +- postcss/daily/index.xml | 2 +- postscript/daily/index.xml | 2 +- pov-ray-sdl/daily/index.xml | 2 +- powerbuilder/daily/index.xml | 2 +- powershell/daily/index.xml | 2 +- prisma/daily/index.xml | 2 +- processing/daily/index.xml | 2 +- procfile/daily/index.xml | 2 +- proguard/daily/index.xml | 2 +- prolog/daily/index.xml | 2 +- promela/daily/index.xml | 2 +- propeller-spin/daily/index.xml | 2 +- protocol-buffer-text-format/daily/index.xml | 2 +- protocol-buffer/daily/index.xml | 2 +- public-key/daily/index.xml | 2 +- pug/daily/index.xml | 2 +- puppet/daily/index.xml | 2 +- pure-data/daily/index.xml | 2 +- purebasic/daily/index.xml | 2 +- purescript/daily/index.xml | 2 +- python-console/daily/index.xml | 2 +- python-traceback/daily/index.xml | 2 +- python/daily/index.xml | 23 +------------ q%23/daily/index.xml | 2 +- q/daily/index.xml | 2 +- qmake/daily/index.xml | 2 +- qml/daily/index.xml | 2 +- qt-script/daily/index.xml | 2 +- quake/daily/index.xml | 2 +- r/daily/index.xml | 2 +- racket/daily/index.xml | 9 +----- ragel/daily/index.xml | 2 +- raku/daily/index.xml | 2 +- raml/daily/index.xml | 2 +- rascal/daily/index.xml | 2 +- raw-token-data/daily/index.xml | 2 +- rdoc/daily/index.xml | 2 +- readline-config/daily/index.xml | 2 +- realbasic/daily/index.xml | 2 +- reason/daily/index.xml | 2 +- rebol/daily/index.xml | 2 +- record-jar/daily/index.xml | 2 +- red/daily/index.xml | 2 +- redcode/daily/index.xml | 2 +- redirect-rules/daily/index.xml | 2 +- regular-expression/daily/index.xml | 2 +- ren'py/daily/index.xml | 2 +- renderscript/daily/index.xml | 2 +- rescript/daily/index.xml | 2 +- restructuredtext/daily/index.xml | 2 +- rexx/daily/index.xml | 2 +- ring/daily/index.xml | 2 +- riot/daily/index.xml | 2 +- rmarkdown/daily/index.xml | 2 +- robotframework/daily/index.xml | 2 +- robots.txt/daily/index.xml | 2 +- roff-manpage/daily/index.xml | 2 +- roff/daily/index.xml | 2 +- rouge/daily/index.xml | 2 +- rpc/daily/index.xml | 2 +- rpgle/daily/index.xml | 2 +- rpm-spec/daily/index.xml | 2 +- ruby/daily/index.xml | 2 +- runoff/daily/index.xml | 2 +- rust/daily/index.xml | 9 +----- sage/daily/index.xml | 2 +- saltstack/daily/index.xml | 2 +- sas/daily/index.xml | 2 +- sass/daily/index.xml | 2 +- scala/daily/index.xml | 2 +- scaml/daily/index.xml | 2 +- scheme/daily/index.xml | 2 +- scilab/daily/index.xml | 2 +- scss/daily/index.xml | 9 +----- sed/daily/index.xml | 2 +- self/daily/index.xml | 2 +- selinux-policy/daily/index.xml | 2 +- shaderlab/daily/index.xml | 2 +- shell/daily/index.xml | 16 +++++++++- shellcheck-config/daily/index.xml | 2 +- shellsession/daily/index.xml | 2 +- shen/daily/index.xml | 2 +- sieve/daily/index.xml | 2 +- singularity/daily/index.xml | 2 +- slash/daily/index.xml | 2 +- slice/daily/index.xml | 2 +- slim/daily/index.xml | 2 +- smali/daily/index.xml | 2 +- smalltalk/daily/index.xml | 2 +- smarty/daily/index.xml | 2 +- smpl/daily/index.xml | 2 +- smt/daily/index.xml | 2 +- solidity/daily/index.xml | 2 +- soong/daily/index.xml | 2 +- sourcepawn/daily/index.xml | 2 +- sparql/daily/index.xml | 2 +- spline-font-database/daily/index.xml | 2 +- sqf/daily/index.xml | 2 +- sql/daily/index.xml | 2 +- sqlpl/daily/index.xml | 2 +- squirrel/daily/index.xml | 2 +- srecode-template/daily/index.xml | 2 +- ssh-config/daily/index.xml | 2 +- stan/daily/index.xml | 2 +- standard-ml/daily/index.xml | 2 +- starlark/daily/index.xml | 2 +- stata/daily/index.xml | 2 +- ston/daily/index.xml | 2 +- stringtemplate/daily/index.xml | 2 +- stylus/daily/index.xml | 2 +- subrip-text/daily/index.xml | 2 +- sugarss/daily/index.xml | 2 +- supercollider/daily/index.xml | 2 +- svelte/daily/index.xml | 2 +- svg/daily/index.xml | 2 +- swift/daily/index.xml | 9 +----- swig/daily/index.xml | 2 +- systemverilog/daily/index.xml | 2 +- talon/daily/index.xml | 2 +- tcl/daily/index.xml | 2 +- tcsh/daily/index.xml | 2 +- tea/daily/index.xml | 2 +- terra/daily/index.xml | 2 +- tex/daily/index.xml | 2 +- texinfo/daily/index.xml | 2 +- text/daily/index.xml | 2 +- textile/daily/index.xml | 2 +- textmate-properties/daily/index.xml | 2 +- thrift/daily/index.xml | 2 +- ti-program/daily/index.xml | 2 +- tla/daily/index.xml | 2 +- toml/daily/index.xml | 2 +- tsql/daily/index.xml | 2 +- tsv/daily/index.xml | 2 +- tsx/daily/index.xml | 2 +- turing/daily/index.xml | 2 +- turtle/daily/index.xml | 2 +- twig/daily/index.xml | 2 +- txl/daily/index.xml | 2 +- type-language/daily/index.xml | 2 +- typescript/daily/index.xml | 23 +------------ unified-parallel-c/daily/index.xml | 2 +- unity3d-asset/daily/index.xml | 2 +- unix-assembly/daily/index.xml | 2 +- unknown/daily/index.xml | 7 ++++ uno/daily/index.xml | 2 +- unrealscript/daily/index.xml | 2 +- urweb/daily/index.xml | 2 +- v/daily/index.xml | 2 +- vala/daily/index.xml | 2 +- valve-data-format/daily/index.xml | 2 +- vba/daily/index.xml | 2 +- vbscript/daily/index.xml | 2 +- vcl/daily/index.xml | 2 +- verilog/daily/index.xml | 2 +- vhdl/daily/index.xml | 2 +- vim-help-file/daily/index.xml | 2 +- vim-script/daily/index.xml | 2 +- vim-snippet/daily/index.xml | 2 +- visual-basic-.net/daily/index.xml | 2 +- volt/daily/index.xml | 2 +- vue/daily/index.xml | 2 +- vyper/daily/index.xml | 2 +- wavefront-material/daily/index.xml | 2 +- wavefront-object/daily/index.xml | 2 +- wdl/daily/index.xml | 2 +- web-ontology-language/daily/index.xml | 2 +- webassembly/daily/index.xml | 2 +- webidl/daily/index.xml | 2 +- webvtt/daily/index.xml | 2 +- wget-config/daily/index.xml | 2 +- wikitext/daily/index.xml | 2 +- windows-registry-entries/daily/index.xml | 2 +- wisp/daily/index.xml | 2 +- witcher-script/daily/index.xml | 2 +- wollok/daily/index.xml | 2 +- world-of-warcraft-addon-data/daily/index.xml | 2 +- x-bitmap/daily/index.xml | 2 +- x-font-directory-index/daily/index.xml | 2 +- x-pixmap/daily/index.xml | 2 +- x10/daily/index.xml | 2 +- xbase/daily/index.xml | 2 +- xc/daily/index.xml | 2 +- xcompose/daily/index.xml | 2 +- xml-property-list/daily/index.xml | 2 +- xml/daily/index.xml | 2 +- xojo/daily/index.xml | 2 +- xonsh/daily/index.xml | 2 +- xpages/daily/index.xml | 2 +- xproc/daily/index.xml | 2 +- xquery/daily/index.xml | 2 +- xs/daily/index.xml | 2 +- xslt/daily/index.xml | 2 +- xtend/daily/index.xml | 2 +- yacc/daily/index.xml | 2 +- yaml/daily/index.xml | 2 +- yang/daily/index.xml | 2 +- yara/daily/index.xml | 2 +- yasnippet/daily/index.xml | 2 +- zap/daily/index.xml | 2 +- zeek/daily/index.xml | 2 +- zenscript/daily/index.xml | 2 +- zephir/daily/index.xml | 2 +- zig/daily/index.xml | 2 +- zil/daily/index.xml | 2 +- zimpl/daily/index.xml | 2 +- 635 files changed, 689 insertions(+), 808 deletions(-) rename {rich-text-format => jupyter-notebook}/daily/index.xml (57%) create mode 100644 unknown/daily/index.xml diff --git a/1c-enterprise/daily/index.xml b/1c-enterprise/daily/index.xml index 8542e2d2ce8..e3f391ba7fe 100644 --- a/1c-enterprise/daily/index.xml +++ b/1c-enterprise/daily/index.xml @@ -1,7 +1,7 @@ GitHub 1C Enterprise Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:30Z + 2024-08-03T01:27:42Z Daily Trending of 1C Enterprise in GitHub \ No newline at end of file diff --git a/2-dimensional-array/daily/index.xml b/2-dimensional-array/daily/index.xml index 6843a35904f..5036fe32c93 100644 --- a/2-dimensional-array/daily/index.xml +++ b/2-dimensional-array/daily/index.xml @@ -1,7 +1,7 @@ GitHub 2-Dimensional Array Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:30Z + 2024-08-03T01:27:42Z Daily Trending of 2-Dimensional Array in GitHub \ No newline at end of file diff --git a/4d/daily/index.xml b/4d/daily/index.xml index d45173a7d42..14f1f0827c5 100644 --- a/4d/daily/index.xml +++ b/4d/daily/index.xml @@ -1,7 +1,7 @@ GitHub 4D Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:41Z + 2024-08-03T01:27:55Z Daily Trending of 4D in GitHub \ No newline at end of file diff --git a/abap-cds/daily/index.xml b/abap-cds/daily/index.xml index 9280cede1f0..072608884ef 100644 --- a/abap-cds/daily/index.xml +++ b/abap-cds/daily/index.xml @@ -1,7 +1,7 @@ GitHub ABAP CDS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:41Z + 2024-08-03T01:27:56Z Daily Trending of ABAP CDS in GitHub \ No newline at end of file diff --git a/abap/daily/index.xml b/abap/daily/index.xml index 3dd232f2a8e..d359c8f76a2 100644 --- a/abap/daily/index.xml +++ b/abap/daily/index.xml @@ -1,7 +1,7 @@ GitHub ABAP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:42Z + 2024-08-03T01:27:56Z Daily Trending of ABAP in GitHub \ No newline at end of file diff --git a/abnf/daily/index.xml b/abnf/daily/index.xml index ddd02a02db2..0043d0d8272 100644 --- a/abnf/daily/index.xml +++ b/abnf/daily/index.xml @@ -1,7 +1,7 @@ GitHub ABNF Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:41Z + 2024-08-03T01:27:55Z Daily Trending of ABNF in GitHub \ No newline at end of file diff --git a/actionscript/daily/index.xml b/actionscript/daily/index.xml index 07ff7b6f5f2..28b747f84e1 100644 --- a/actionscript/daily/index.xml +++ b/actionscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub ActionScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:43Z + 2024-08-03T01:27:57Z Daily Trending of ActionScript in GitHub \ No newline at end of file diff --git a/ada/daily/index.xml b/ada/daily/index.xml index ecebf3b7a48..27dcd930958 100644 --- a/ada/daily/index.xml +++ b/ada/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ada Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:43Z + 2024-08-03T01:27:57Z Daily Trending of Ada in GitHub \ No newline at end of file diff --git a/adobe-font-metrics/daily/index.xml b/adobe-font-metrics/daily/index.xml index d3f821afaf9..9deff044824 100644 --- a/adobe-font-metrics/daily/index.xml +++ b/adobe-font-metrics/daily/index.xml @@ -1,7 +1,7 @@ GitHub Adobe Font Metrics Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:42Z + 2024-08-03T01:27:57Z Daily Trending of Adobe Font Metrics in GitHub \ No newline at end of file diff --git a/agda/daily/index.xml b/agda/daily/index.xml index 35472152b98..784c75ac0fd 100644 --- a/agda/daily/index.xml +++ b/agda/daily/index.xml @@ -1,7 +1,7 @@ GitHub Agda Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:44Z + 2024-08-03T01:27:58Z Daily Trending of Agda in GitHub \ No newline at end of file diff --git a/ags-script/daily/index.xml b/ags-script/daily/index.xml index 5ee3f2a50fc..0f61641d92b 100644 --- a/ags-script/daily/index.xml +++ b/ags-script/daily/index.xml @@ -1,7 +1,7 @@ GitHub AGS Script Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:44Z + 2024-08-03T01:27:59Z Daily Trending of AGS Script in GitHub \ No newline at end of file diff --git a/aidl/daily/index.xml b/aidl/daily/index.xml index c96ef430d7a..ffef8c68815 100644 --- a/aidl/daily/index.xml +++ b/aidl/daily/index.xml @@ -1,7 +1,7 @@ GitHub AIDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:44Z + 2024-08-03T01:27:58Z Daily Trending of AIDL in GitHub \ No newline at end of file diff --git a/al/daily/index.xml b/al/daily/index.xml index 17bcc7a806c..dadc364891e 100644 --- a/al/daily/index.xml +++ b/al/daily/index.xml @@ -1,7 +1,7 @@ GitHub AL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:45Z + 2024-08-03T01:27:59Z Daily Trending of AL in GitHub \ No newline at end of file diff --git a/all/daily/index.xml b/all/daily/index.xml index 78d4c22d59e..49b93437ef2 100644 --- a/all/daily/index.xml +++ b/all/daily/index.xml @@ -1,28 +1,28 @@ GitHub All Languages Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:31Z + 2024-08-03T01:27:44Z Daily Trending of All Languages in GitHub - bol-van/zapret - 2024-08-02T01:27:31Z - tag:github.com,2024-08-02:/bol-van/zapret - - <p>DPI bypass multi platform</p><hr><p>zapret v.60</p> <h2>English</h2> <p>For english version refer to docs/readme.eng.txt</p> <h2>Для чего это надо</h2> <p>Автономное, без задействования сторонних серверов, средство противодействия DPI. Может помочь обойти блокировки или замедление сайтов http(s), сигнатурный анализ tcp и udp протоколов, например с целью блокировки VPN.</p> <p>Проект нацелен прежде всего на маломощные embedded устройства - роутеры, работающие под openwrt. Поддерживаются традиционные Linux системы, FreeBSD, OpenBSD, частично MacOS. В некоторых случаях возможна самостоятельная прикрутка решения к различным прошивкам.</p> <p>Большая часть функционала работает на windows.</p> <h2>Как побыстрее начать</h2> <p>Читайте docs/quick_start.txt для linux и openwrt, docs/quick_start_windows.txt для windows.</p> <h2>Как это работает</h2> <p>В самом простейшем случае вы имеете дело с пассивным DPI. Пассивный DPI может читать трафик из потока, может инжектить свои пакеты, но не может блокировать проходящие пакеты. Если запрос "плохой", пассивный DPI инжектит пакет RST, опционально дополняя его пакетом http redirect. Если фейк пакет инжектится только для клиента, в этом случае можно обойтись командами iptables для дропа RST и/или редиректа на заглушку по определенным условиям, которые нужно подбирать для каждого провайдера индивидуально. Так мы обходим последствия срабатывания триггера запрета. Если пассивный DPI направляет пакет RST в том числе и серверу, то вы ничего с этим не сможете сделать. Ваша задача - не допустить срабатывания триггера запрета. Одними iptables уже не обойдетесь. Этот проект нацелен именно на предотвращение срабатывания запрета, а не ликвидацию его последствий.</p> <p>Активный DPI ставится в разрез провода и может дропать пакеты по любым критериям, в том числе распознавать TCP потоки и блокировать любые пакеты, принадлежащие потоку.</p> <p>Как не допустить срабатывания триггера запрета ? Послать то, на что DPI не расчитывает и что ломает ему алгоритм распознавания запросов и их блокировки.</p> <p>Некоторые DPI не могут распознать http запрос, если он разделен на TCP сегменты. Например, запрос вида "GET / HTTP/1.1\r\nHost: kinozal.tv......" мы посылаем 2 частями : сначала идет "GET ", затем "/ HTTP/1.1\r\nHost: kinozal.tv.....". Другие DPI спотыкаются, когда заголовок "Host:" пишется в другом регистре : например, "host:". Кое-где работает добавление дополнительного пробела после метода : "GET /" =&gt; "GET /" или добавление точки в конце имени хоста : "Host: kinozal.tv."</p> <p>Существует и более продвинутая магия, направленная на преодоление DPI на пакетном уровне.</p> <p>Подробнее про DPI : <a href="https://habr.com/ru/post/335436">https://habr.com/ru/post/335436</a> <a href="https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf">https://geneva.cs.umd.edu/papers/geneva_ccs19.pdf</a></p> <h2>Что сейчас происходит в России</h2> <p>Раньше , до внедрения повсеместных систем ТСПУ, использовался зоопарк различных DPI у провайдеров. Какие-то были активными, какие-то пассивными. Сейчас время простых iptables окончательно ушло. Везде активный DPI ТСПУ, но кое-где могут оставаться невыключенными дополнительные старые DPI из зоопарка. В этом случае приходится обходить сразу несколько DPI. Все больше становится внереестровых блокировок, о которых вы узнаете только по факту недоступности чего-либо, в списках этого нет. Применяются блокировки некоторых диапазонов ip адресов (автономный обход невозможен) и протоколов (VPN). На некоторых диапазонах IP используется более строгий фильтр, распознающий попытки обмана через сегментацию. Должно быть это связано с некоторыми сервисами, которые пытаются таким образом обмануть DPI.</p> <h2>Как это реализовать на практике в системе linux</h2> <p>Если кратко, то варианты можно классифицировать по следующей схеме :</p> <ol> <li>Пассивный DPI, не отправляющий RST серверу. Помогут индивидуально настраиваемые под провайдера команды iptables. На rutracker в разделе "обход блокировок - другие способы" по этому вопросу существует отдельная тема. В данном проекте не рассматривается. Если вы не допустите срабатывание триггера запрета, то и не придется бороться с его последствиями.</li> <li>Модификация TCP соединения на уровне потока. Реализуется через proxy или transparent proxy.</li> <li>Модификация TCP соединения на уровне пакетов. Реализуется через обработчик очереди NFQUEUE и raw сокеты.</li> </ol> <p>Для вариантов 2 и 3 реализованы программы tpws и nfqws соответственно. Чтобы они работали, необходимо их запустить с нужными параметрами и перенаправить на них определенный трафик средствами iptables или nftables.</p> <p>Для перенаправления tcp соединения на transparent proxy используются команды следующего вида :</p> <p>проходящий трафик : iptables -t nat -I PREROUTING -i &lt;внутренний_интерфейс&gt; -p tcp --dport 80 -j DNAT --to 127.0.0.127:988 исходящий трафик : iptables -t nat -I OUTPUT -o &lt;внешний_интерфейс&gt; -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to 127.0.0.127:988</p> <p>DNAT на localhost работает в цепочке OUTPUT, но не работает в цепочке PREROUTING без включения параметра route_localnet :</p> <p>sysctl -w net.ipv4.conf.&lt;внутренний_интерфейс&gt;.route_localnet=1</p> <p>Можно использовать "-j REDIRECT --to-port 988" вместо DNAT , однако в этом случае процесс transparent proxy должен слушать на ip адресе входящего интерфейса или на всех адресах. Слушать на всех - не есть хорошо с точки зрения безопасности. Слушать на одном (локальном) можно, но в случае автоматизированного скрипта придется его узнавать, потом динамически вписывать в команду. В любом случае требуются дополнительные усилия. Использование route_localnet тоже имеет потенциальные проблемы с безопасностью. Вы делаете доступным все, что висит на 127.0.0.0/8 для локальной подсети &lt;внутренний_интерфейс&gt;. Службы обычно привязываются к 127.0.0.1, поэтому можно средствами iptables запретить входящие на 127.0.0.1 не с интерфейса lo, либо повесить tpws на любой другой IP из из 127.0.0.0/8, например на 127.0.0.127, и разрешить входящие не с lo только на этот IP.</p> <p>iptables -A INPUT ! -i lo -d 127.0.0.127 -j ACCEPT iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP</p> <p>Фильтр по owner необходим для исключения рекурсивного перенаправления соединений от самого tpws. tpws запускается под пользователем "tpws", для него задается исключающее правило.</p> <p>tpws может использоваться в режиме socks proxy. В этом случае iptables не нужны, а нужно прописать socks в настройки программы (например, броузера), с которой будем обходить блокировки. transparent proxy отличается от socks именно тем, что в варианте transparent настраивать клиентские программы не нужно.</p> <p>Для перенаправления на очередь NFQUEUE исходящего и проходящего в сторону внешнего интерфейса трафика используются команды следующего вида :</p> <p>iptables -t mangle -I POSTROUTING -o &lt;внешний_интерфейс&gt; -p tcp --dport 80 -j NFQUEUE --queue-num 200 --queue-bypass</p> <p>Чтобы не трогать трафик на незаблокированные адреса, можно взять список заблокированных хостов, заресолвить его в IP адреса и загнать в ipset zapret, затем добавить фильтр в команду :</p> <p>iptables -t mangle -I POSTROUTING -o &lt;внешний_интерфейс&gt; -p tcp --dport 80 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass</p> <p>DPI может ловить только первый http запрос, игнорируя последующие запросы в keep-alive сессии. Тогда можем уменьшить нагрузку на проц, отказавшись от процессинга ненужных пакетов.</p> <p>iptables -t mangle -I POSTROUTING -o &lt;внешний_интерфейс&gt; -p tcp --dport 80 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -m set --match-set zapret dst -j NFQUEUE --queue-num 200 --queue-bypass</p> <p>Фильтр по mark нужен для отсечения от очереди пакетов, сгенерированных внутри nfqws. Если применяется фильтр по connbytes 1:6, то обязательно добавлять в iptables и фильтр по mark. Иначе возможно перепутывание порядка следования пакетов, что приведет к неработоспособности метода.</p> <p>Для некоторых атак на DPI требуется перенаправлять один или несколько входящих пакетов от соединения :</p> <p>iptables -t mangle -I PREROUTING -i &lt;внешний_интерфейс&gt; -p tcp --sport 80 -m connbytes --connbytes-dir=reply --connbytes-mode=packets --connbytes 1:6 -m set --match-set zapret src -j NFQUEUE --queue-num 200 --queue-bypass</p> <p>Получаемые пакеты будут фильтровться по входящему интерфейсу, порту и IP источника, то есть наоборот прямому правилу.</p> <p>Некоторые техники, ломающие NAT, не всегда можно реализовать через iptables. Требуются nftables.</p> <p>Если ваше устройство поддерживает аппаратное ускорение (flow offloading, hardware nat, hardware acceleration), то iptables могут не работать. При включенном offloading пакет не проходит по обычному пути netfilter. Необходимо или его отключить, или выборочно им управлять.</p> <p>В новых ядрах (и в более старых, openwrt портировал изменение на 4.14) присутствует software flow offloading (SFO). Пакеты, проходящие через SFO, так же проходят мимо большей части механизмов iptables. При включенном SFO работает DNAT/REDIRECT (tpws). Эти соединения исключаются из offloading. Однако, остальные соединения идут через SFO, потому NFQUEUE будет срабатывать только до помещения соединения в flowtable. Практически это означает, что nfqws будет работать на window size changing, но не будут работать опции по модификации содержимого пакетов. Offload включается через специальный target в iptables "FLOWOFFLOAD". Не обязательно пропускать весь трафик через offload. Можно исключить из offload соединения, которые должны попасть на tpws или nfqws. openwrt не предусматривает выборочного управления offload. Поэтому скрипты zapret поддерживают свою систему выборочного управления offload в openwrt.</p> <h2>Особенности применения ip6tables</h2> <p>ip6tables работают почти точно так же, как и ipv4, но есть ряд важных нюансов. В DNAT следует брать адрес --to в квадратные скобки. Например :</p> <p>ip6tables -t nat -I OUTPUT -o &lt;внешний_интерфейс&gt; -p tcp --dport 80 -m owner ! --uid-owner tpws -j DNAT --to [::1]:988</p> <p>Параметра route_localnet не существует для ipv6. DNAT на localhost (::1) возможен только в цепочке OUTPUT. В цепочке PREROUTING DNAT возможен на любой global address или на link local address того же интерфейса, откуда пришел пакет. NFQUEUE работает без изменений.</p> <h2>Особенности применения nftables</h2> <p>Более подробно преимущества и недостатки nftables применительно к данной системе описаны в docs/nftables_notes.txt Если коротко, то в nftables невозможно работать с большими ip листами на системах с малым количеством RAM. Остальные рассматриваемые здесь функции могут быть перенесены на nftables.</p> <p>Рекомендуется версия nft 1.0.2 или выше. Но чем выше версия, тем лучше. В nft регулярно находят баги.</p> <p>Относительно старые версии ядра и/или утилиты nft могут вызывать ошибки. В частности, на ubuntu 18.04 с ядром 4.15 будут проблемы. В 20.04 - работает.</p> <p>Некоторые техники можно полноценно использовать только с nftables. Например, в iptables невозможно перенаправить пакеты на nfqws после NAT. Следовательно, при использовании NAT невозможно произвести атаку, не совместимую с NAT. В nftables этой проблемы не существует, потому что приоритеты хука выставляете вы сами, а не привязаны к фиксированным значениям, соответствующим разным таблицам iptables. В iptables нет таблицы, способной перехватить пакеты после MASQUERDADE.</p> <h2>Когда это работать не будет</h2> <ul> <li>Если подменяется DNS. С этой проблемой легко справиться.</li> <li>Если блокировка осуществляется по IP.</li> <li>Если соединение проходит через фильтр, способный реконструировать TCP соединение, и который следует всем стандартам. Например, нас заворачивают на squid. Соединение идет через полноценный стек tcpip операционной системы, фрагментация отпадает сразу как средство обхода. Squid правильный, он все найдет как надо, обманывать его бесполезно. НО. Заворачивать на squid могут позволить себе лишь небольшие провайдеры, поскольку это очень ресурсоемко. Большие компании обычно используют DPI, который расчитан на гораздо большую пропускную способность. Может применяться комбинированный подход, когда на DPI заворачивают только IP из "плохого" списка, и дальше уже DPI решает пропускать или нет. Так можно снизить нагрузку на DPI в десятки, если не сотни раз, а следовательно не покупать очень дорогие решения, обойдясь чем-то существенно более дешевым. Мелкие провайдеры могут покупать услугу фильтрации у вышестоящих, чтобы самим не морочиться, и они уже будут применять DPI.</li> </ul> <h2>nfqws</h2> <p>Эта программа - модификатор пакетов и обработчик очереди NFQUEUE. Для BSD систем существует адаптированный вариант - dvtws, собираемый из тех же исходников (см. bsd.txt).</p> <p>--debug=0|1 ; 1=выводить отладочные сообщения --daemon ; демонизировать прогу --pidfile= <file> ; сохранить PID в файл --user= <username> ; менять uid процесса --uid=uid[:gid] ; менять uid процесса --qnum=N ; номер очереди N --bind-fix4 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv4 пакетов --bind-fix6 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv6 пакетов --wsize= <winsize> [:&lt;scale_factor&gt;] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !) --wssize= <winsize> [:&lt;scale_factor&gt;] ; менять tcp window size на указанный размер в исходящих пакетах. scale_factor по умолчанию 0. (см. conntrack !) --wssize-cutoff=[n|d|s]N ; изменять server window size в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N --ctrack-timeouts=S:E:F[:U] ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udp. по умолчанию 60:300:60:60 --hostcase ; менять регистр заголовка "Host:" по умолчанию на "host:". --hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета --hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase --domcase ; домен после Host: сделать таким : TeSt.cOm --dpi-desync=[ <mode0> ,] <mode> [,&lt;mode2] ; атака по десинхронизации DPI. mode : synack syndata fake fakeknown rst rstack hopbyhop destopt ipfrag1 disorder disorder2 split split2 ipfrag2 udplen tamper --dpi-desync-fwmark=&lt;int|0xHEX&gt; ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 --dpi-desync-ttl= <int> ; установить ttl для десинхронизирующих пакетов --dpi-desync-ttl6= <int> ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение ttl --dpi-desync-autottl=[ <delta> [: <min> [- <max> ]]] ; режим auto ttl для ipv4 и ipv6. по умолчанию: 1:3-20. delta=0 отключает функцию. --dpi-desync-autottl6=[ <delta> [: <min> [- <max> ]]] ; переопределение предыдущего параметра для ipv6 --dpi-desync-fooling= <fooling> ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack hopbyhop hopbyhop2 --dpi-desync-repeats= <n> ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты) --dpi-desync-skip-nosni=0| 1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI --dpi-desync-split-pos=&lt;1..1500&gt; ; (только для split*, disorder*) разбивать пакет на указанной позиции --dpi-desync-split-http-req=method|host ; разбивка http request на указанном логическом месте --dpi-desync-split-tls=sni|sniext ; разбивка tls client hello на указанном логическом месте --dpi-desync-split-seqovl= <int> ; использовать sequence overlap перед первым отсылаемым оригинальным tcp сегментом --dpi-desync-split-seqovl-pattern= <filename> |0xHEX ; чем заполнять фейковую часть overlap --dpi-desync-badseq-increment=&lt;int|0xHEX&gt; ; инкремент sequence number для badseq. по умолчанию -10000 --dpi-desync-badack-increment=&lt;int|0xHEX&gt; ; инкремент ack sequence number для badseq. по умолчанию -66000 --dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных --dpi-desync-fake-http= <filename> |0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному <a href="http://www.iana.org">www.iana.org</a> --dpi-desync-fake-tls= <filename> |0xHEX ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному <a href="http://www.iana.org">www.iana.org</a> --dpi-desync-fake-unknown= <filename> |0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт --dpi-desync-fake-syndata= <filename> |0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata --dpi-desync-fake-quic= <filename> |0xHEX ; файл, содержащий фейковый QUIC Initial --dpi-desync-fake-dht= <filename> |0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fake, на замену стандартным нулям 64 байт --dpi-desync-fake-unknown-udp= <filename> |0xHEX ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт --dpi-desync-udplen-increment= <int> ; насколько увеличивать длину udp пейлоада в режиме udplen --dpi-desync-udplen-pattern= <filename> |0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули --dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N --dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N --hostlist= <filename> ; применять дурение только к хостам из листа. может быть множество листов, они обьединяются. пустой обший лист = его отсутствие --hostlist-exclude= <filename> ; не применять дурение к хостам из листа. может быть множество листов, они обьединяются --hostlist-auto= <filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto-fail-threshold= <int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-time= <int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-retrans-threshold= <int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3) --hostlist-auto-debug= <logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. </logfile> </int> </int> </int> </filename> </filename> </filename> </filename> </int> </filename> </filename> </filename> </filename> </filename> </filename> </filename> </filename> </int> </n> </fooling> </max> </min> </delta> </max> </min> </delta> </int> </int> </mode> </mode0> </winsize> </winsize> </username> </file></p> <p>Параметры манипуляции могут сочетаться в любых комбинациях.</p> <p>ЗАМЕЧАНИЕ. Параметр --wsize считается устаревшим и более не поддерживается в скриптах. Функции сплита выполняются в рамках атаки десинхронизации. Это быстрее и избавляет от целого ряда недостатков wsize.</p> <p>АТАКА ДЕСИНХРОНИЗАЦИИ DPI Суть ее в следующем. После выполнения tcp 3-way handshake идет первый пакет с данными от клиента. Там обычно "GET / ..." или TLS ClientHello. Мы дропаем этот пакет, заменяя чем-то другим. Это может быть поддельная версия с безобидным, но валидным запросом http или https (вариант fake), пакет сброса соединения (варианты rst, rstack), разбитый на части оригинальный пакет с перепутанным порядком следования сегментов + обрамление первого сегмента фейками (disorder), то же самое без перепутывания порядка сегментов (split). fakeknown отличается от fake тем, что применяется только к распознанному протоколу. В литературе такие атаки еще называют TCB desynchronization и TCB teardown. Надо, чтобы фейковые пакеты дошли до DPI, но не дошли до сервера. На вооружении есть следующие возможности : установить низкий TTL, посылать пакет с инвалидной чексуммой, добавлять tcp option "MD5 signature", испортить sequence numbers. Все они не лишены недостатков.</p> <ul> <li>md5sig работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux.</li> <li>badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. Наиболее распространенная настройка NAT роутера в Linux их не пропускает. На Linux построено большинство домашних роутеров. Непропускание обеспечивается так : настройка ядра sysctl по умолчанию net.netfilter.nf_conntrack_checksum=1 заставляет conntrack проверять tcp и udp чексуммы входящих пакетов и выставлять state INVALID для пакетов с инвалидной суммой. Обычно в правилах iptables вставляется правило для дропа пакетов с состоянием INVALID в цепочке FORWARD. Совместное сочетание этих факторов приводит к непрохождению badsum через такой роутер. В openwrt из коробки net.netfilter.nf_conntrack_checksum=0, в других роутерах часто нет, и не всегда это можно изменить. Чтобы nfqws мог работать через роутер, нужно на нем выставить указанное значение sysctl в 0. nfqws на самом роутере будет работать и без этой настройки, потому что чексумма локально созданных пакетов не проверяется никогда. Если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets вы ничего не сможете с этим сделать. Но обычно провайдеры все же пропускают badsum. На некоторых адаптерах/свитчах/драйверах принудительно включен rx-checksum offload, badsum пакеты отсекаются еще до получения в ОС. В этом случае если что-то и можно сделать, то только модифицировать драйвер, что представляется задачей крайне нетривиальной. Установлено, что так себя ведут некоторые роутеры на базе mediatek. badsum пакеты уходят с клиентской ОС, но роутером не видятся в br-lan через tcpdump. При этом если nfqws выполняется на самом роутере, обход может работать. badsum нормально уходят с внешнего интерфейса.</li> <li>Пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence numbers. По умолчанию смещение seq выбирается -10000. Практика показала, что некоторые DPI не пропускают seq вне определенного окна. Однако, такое небольшое смещение может вызвать проблемы при существенной потоковой передаче и потере пакетов. Если вы используете --dpi-desync-any-protocol, может понадобится установить badseq increment 0x80000000. Это обеспечит надежную гарантию, что поддельный пакет не вклинится в tcp window на сервере. Так же было замечено, что badseq ломает логику некоторых DPI при анализе http, вызывая зависание соединения. Причем на тех же DPI TLS с badseq работает нормально.</li> <li>TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Ситуация усугубляется наличием ТСПУ на магистралах, что вынуждает делать TTL достаточно высоким, увеличивая риск пробоя фейка до сервера. Необходим ip exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой шанс работы сайтов, до которых "плохой" пакет дойдет по TTL. Если не удается найти автоматическое решение, воспользуйтесь файлом zapret-hosts-user-exclude.txt. Некоторые стоковые прошивки роутеров фиксируют исходящий TTL, без отключения этой опции через них работать не будет. КАКИМ СТОИТ ВЫБИРАТЬ TTL : найдите минимальное значение, при котором обход еще работает. Это и будет номер хопа вашего DPI.</li> <li>hopbyhop относится только к ipv6. Добавляется ipv6 extenstion header "hop-by-hop options". В варианте hopbyhop2 добавляются 2 хедера, что является нарушением стандарта и гарантированно отбрасывается стеком протоколов во всех ОС. Один хедер hop-by-hop принимается всеми ОС, однако на некоторых каналах/провайдерах такие пакеты могут фильтроваться и не доходить. Расчет идет на то, что DPI проанализирует пакет с hop-by-hop, но он либо не дойдет до адресата всилу фильтров провайдера, либо будет отброшен сервером, потому что хедера два.</li> <li>datanoack высылает фейки со снятым tcp флагом ACK. Сервера такое не принимают, а DPI может принять. Эта техника может ломать NAT и не всегда работает с iptables, если используется masquerade, даже с локальной системы (почти всегда на роутерах ipv4). На системах c iptables без masquerade и на nftables работает без ограничений. Экспериментально выяснено, что многие провайдерские NAT не отбрасывают эти пакеты, потому работает даже с внутренним провайдерским IP. Но linux NAT оно не пройдет, так что за домашним роутером эта техника не сработает, но может сработать с него.</li> <li>autottl. Суть режима в автоматическом определении TTL, чтобы он почти наверняка прошел DPI и немного не дошел до сервера. Берутся базовые значения TTL 64,128,255, смотрится входящий пакет (да, требуется направить первый входящий пакет на nfqws !). Вычисляется длина пути, отнимается delta (1 по умолчанию). Если TTL вне диапазона (min,max - 3,20 по умолчанию), то берутся значения min,max, чтобы вписаться в диапазон. Если при этом полученый TTL больше длины пути, то автоматизм не сработал и берутся фиксированные значения TTL для атаки. Техника позволяет решить вопрос , когда вся сеть перегорожена шлагбаумами (DPI, ТСПУ) везде где только можно, включая магистралов. Но потенциально может давать сбои. Например, при ассиметрии входящего и исходящего канала до конкретного сервера. На каких-то провайдерах эта техника будет работать неплохо, на других доставит больше проблем, чем пользы. Где-то может потребоваться тюнинг параметров. Лучше использовать с дополнительным ограничителем. Не рекомендуется для BSD систем, поскольку там нельзя ограничить количество входящих пакетов через connbytes.</li> </ul> <p>Режимы дурения могут сочетаться в любых комбинациях. --dpi-desync-fooling берет множество значений через запятую.</p> <p>Для режимов fake, rst, rstack после фейка отправляем оригинальный пакет.</p> <p>Режим disorder делит оригинальный пакет на 2 части и отправляет следующую комбинацию в указанном порядке :</p> <ol> <li>2-я часть пакета</li> <li>поддельная 1-я часть пакета, поле данных заполнено нулями</li> <li>1-я часть пакета</li> <li>поддельная 1-я часть пакета, поле данных заполнено нулями. отсылка 2-й раз. Оригинальный пакет дропается всегда. Параметр --dpi-desync-split-pos позволяет указать байтовую позицию, на которой происходит разбивка. По умолчанию - 2. Если позиция больше длины пакета, позиция выбирается 1. Этой последовательностью для DPI максимально усложняется задача реконструкции начального сообщения, по которому принимается решение о блокировке. Некоторым DPI хватит и tcp сегментов в неправильном порядке, поддельные части сделаны для дополнительной надежности и более сложных алгоритмов реконструкции. Режим disorder2 отключает отправку поддельных частей.</li> </ol> <p>Режим split очень похож на disorder, только нет изменения порядка следования сегментов :</p> <ol> <li>поддельная 1-я часть пакета, поле данных заполнено нулями</li> <li>1-я часть пакета</li> <li>поддельная 1-я часть пакета, поле данных заполнено нулями. отсылка 2-й раз.</li> <li>2-я часть пакета Режим split2 отключает отправку поддельных частей. Он может быть использован как более быстрая альтернатива --wsize.</li> </ol> <p>disorder2 и split2 не предполагают отсылку фейк пакетов, поэтому опции ttl и fooling неактуальны.</p> <p>seqovl добавляет в начало первой отсылаемой части оригинального пакета (1 часть для split и 2 часть для disorder) seqovl байт со смещенным в минус sequence number на величину seqovl. В случае split2 расчет идет на то, что предыдущий отсыл, если он был, уже попал в сокет серверного приложения, поэтому новая пришедшая часть лишь частично находится в пределах текущего окна (in-window). Спереди фейковая часть отбрасывается, а оставшаяся часть содержит оригинал и начинается с начала window, поэтому попадает в сокет. Серверное приложение получает все, что реально отсылает клиент, отбрасывая фейковую out-of-window часть. Но DPI не может этого понять, поэтому у него происходит sequence десинхронизация.</p> <p>Для disorder2 overlap идет на 2-ю часть пакета. Обязательно, чтобы seqovl был меньше split_pos, иначе все отосланное будет передано в сокет сразу же, включая фейк, ломая протокол прикладного уровня. При соблюдении этого условия 2-я часть пакета является полностью in-window, поэтому серверная ОС принимает ее целиком, включая фейк. Но поскольку начальная часть данных из 1 пакета еще не принята, то фейк и реальные данные остаются в памяти ядра, не отправляясь в серверное приложение. Как только приходит 1-я часть пакета, она переписывает фейковую часть в памяти ядра. Ядро получает данные из 1 и 2 части, поэтому далее идет отправка в сокет приложения. Таково поведение всех unix ОС, кроме solaris - оставлять последние принятые данные. Windows оставляет старые данные, поэтому disorder с seqovl будет приводить к зависаниям соединения при работе с Windows серверами. Solaris практически мертв, windows серверов очень немного. Можно использовать листы при необходимости. Метод позволяет обойтись без fooling и TTL. Фейки перемешаны с реальным данными. split/disorder вместо split2/disorder2 по-прежнему добавляют дополнительные отдельные фейки.</p> <p>Режимы десинхронизации hopbyhop, destopt и ipfrag1 (не путать с fooling !) относятся только к ipv6 и заключается в добавлении хедера "hop-by-hop options" , "destination options" или "fragment" во все пакеты, попадающие под десинхронизацию. Здесь надо обязательно понимать, что добавление хедера увеличивает размер пакета, потому не может быть применено к пакетам максимального размера. Это имеет место при передаче больших сообщений. В случае невозможности отослать пакет дурение будет отменено, пакет будет выслан в оригинале. Расчет идет на то, что DPI увидит 0 в поле next header основного заголовка ipv6 и не будет скакать по extension хедерам в поисках транспортного хедера. Таким образом не поймет, что это tcp или udp, и пропустит пакет без анализа. Возможно, какие-то DPI на это купятся. Может сочетаться с любыми режимами 2-й фазы, кроме варианта "ipfrag1+ipfrag2". Например, "hopbyhop,split2" означает разбить tcp пакет на 2 сегмента, в каждый из них добавить hop-by-hop. При "hopbyhop,ipfrag2" последовательность хедеров будет : ipv6,hop-by-hop,fragment,tcp/udp. Режим "ipfrag1" может срабатывать не всегда без специальной подготовки. См. раздел "IP фрагментация".</p> <p>Есть DPI, которые анализируют ответы от сервера, в частности сертификат из ServerHello, где прописаны домены. Подтверждением доставки ClientHello является ACK пакет от сервера с номером ACK sequence, соответствующим длине ClientHello+1. В варианте disorder обычно приходит сперва частичное подтверждение (SACK), потом полный ACK. Если вместо ACK или SACK идет RST пакет с минимальной задержкой, то DPI вас отсекает еще на этапе вашего запроса. Если RST идет после полного ACK спустя задержку, равную примерно пингу до сервера, тогда вероятно DPI реагирует на ответ сервера. DPI может отстать от потока, если ClientHello его удовлетворил и не проверять ServerHello. Тогда вам повезло. Вариант fake может сработать. Если же он не отстает и упорно проверяет ServerHello, то можно попробовать заставить сервер высылать ServerHello частями через параметр --wssize (см. conntrack). Если и это не помогает, то сделать с этим что-либо вряд ли возможно без помощи со стороны сервера. Лучшее решение - включить на сервере поддержку TLS 1.3. В нем сертификат сервера передается в зашифрованном виде. Это рекомендация ко всем админам блокируемых сайтов. Включайте TLS 1.3. Так вы дадите больше возможностей преодолеть DPI.</p> <p>Хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. Субдомены учитываются автоматически. Поддерживаются листы gzip.</p> <p>iptables для задействования атаки на первый пакет данных :</p> <p>iptables -t mangle -I POSTROUTING -o &lt;внешний_интерфейс&gt; -p tcp -m multiport --dports 80,443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass</p> <p>Этот вариант применяем, когда DPI не следит за всеми запросами http внутри keep-alive сессии. Если следит, направляем только первый пакет от https и все пакеты от http :</p> <p>iptables -t mangle -I POSTROUTING -o &lt;внешний_интерфейс&gt; -p tcp --dport 443 -m connbytes --connbytes-dir=original --connbytes-mode=packets --connbytes 1:6 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass iptables -t mangle -I POSTROUTING -o &lt;внешний_интерфейс&gt; -p tcp --dport 80 -m mark ! --mark 0x40000000/0x40000000 -j NFQUEUE --queue-num 200 --queue-bypass</p> <p>mark нужен, чтобы сгенерированный поддельный пакет не попал опять к нам на обработку. nfqws выставляет fwmark при его отсылке. хотя nfqws способен самостоятельно различать помеченные пакеты, фильтр в iptables по mark нужен при использовании connbytes, чтобы не допустить изменения порядка следования пакетов. Процессинг очереди - процесс отложенный. Если ядро имеет пакеты на отсылку вне очереди - оно их отправляет незамедлительно. Изменение правильного порядка следования пакетов при десинхронизации ломает всю идею. При отсутствии ограничения на connbytes, атака будет работать и без фильтра по mark. Но лучше его все же оставить для увеличения скорости.</p> <p>Почему --connbytes 1:6 : 1 - для работы методов десинхронизации 0-й фазы и wssize 2 - иногда данные идут в 3-м пакете 3-way handshake 3 - стандартная ситуация приема одного пакета запроса 4-6 - на случай ретрансмиссии или запроса длиной в несколько пакетов (TLSClientHello с kyber, например)</p> <p>КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ В параметре dpi-desync можно указать до 3 режимов через запятую. 0 фаза предполагает работу на этапе установления соединения. Может быть synack или syndata. На 0 фазу не действует фильтр по hostlist. Последующие режимы отрабатывают на пакетах с данными. Режим 1-й фазы может быть fake,rst,rstack. Режим 2-й фазы может быть disorder,disorder2,split,split2,ipfrag2. Может быть полезно, когда у провайдера стоит не один DPI.</p> <p>РЕЖИМ SYNACK В документации по geneva это называется "TCB turnaround". Попытка ввести DPI в заблуждение относительно ролей клиента и сервера. !!! Поскольку режим нарушает работу NAT, техника может сработать только если между атакующим устройством и DPI нет NAT. Атака не сработает через NAT роутер, но может сработать с него. Для реализации атаки в linux обязательно требуется отключить стандартное правило firewall, дропающее инвалидные пакеты в цепочке OUTPUT. Например : -A OUTPUT -m state --state INVALID -j DROP В openwrt можно отключить drop INVALID в OUTPUT и FORWARD через опцию в /etc/config/firewall :</p> <p>config zone option name 'wan' ......... option masq_allow_invalid '1'</p> <p>К сожалению, отключить только в OUTPUT таким образом нельзя. Но можно сделать иначе. Вписать в /etc/firewall.user :</p> <p>iptables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT ip6tables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT</p> <p>Лучше делать так, потому что отсутствие дропа INVALID в FORWARD может привести к нежелательным утечкам пакетов из LAN. Если не принять эти меры, отсылка SYN,ACK сегмента вызовет ошибку и операция будет прервана. Остальные режимы тоже не сработают. Если поймете, что вам synack не нужен, обязательно верните правило дропа INVALID.</p> <p>РЕЖИМ SYNDATA Тут все просто. Добавляются данные в пакет SYN. Все ОС их игнорируют, если не используется TCP fast open (TFO), а DPI может воспринять, не разобравшись есть там TFO или нет. Оригинальные соединения с TFO не трогаются, поскольку это их точно сломает. Без уточняющего параметра добавляются 16 нулевых байтов.</p> <p>ВИРТУАЛЬНЫЕ МАШИНЫ Изнутри VM от virtualbox и vmware в режиме NAT не работают многие техники пакетной магии nfqws. Принудительно заменяется ttl, не проходят фейк пакеты. Необходимо настроить сеть в режиме bridge.</p> <p>CONNTRACK nfqws оснащен ограниченной реализацией слежения за состоянием tcp соединений (conntrack). Он включается для реализации некоторых методов противодействия DPI. conntrack способен следить за фазой соединения : SYN,ESTABLISHED,FIN , количеством пакетов в каждую сторону, sequence numbers. conntrack способен "кормиться" пакетами в обе или только в одну сторону. Соединение попадает в таблицу при обнаружении пакетов с выставленными флагами SYN или SYN,ACK. Поэтому если необходим conntrack, в правилах перенаправления iptables соединение должно идти на nfqws с самого первого пакета, хотя затем может обрываться по фильтру connbytes. Для UDP инициатором попадания в таблицу является первый UDP пакет. Он же и определяет направление потока. Считается, что первый UDP пакет исходит от клиента к серверу. Далее все пакеты с совпадающими src_ip,src_port,dst_ip,dst_port считаются принадлежащими этому потоку до истечения времени неактивности. conntrack - простенький, он не писался с учетом всевозможных атак на соединение, он не проверяет пакеты на валидность sequence numbers или чексумму. Его задача - лишь обслуживание нужд nfqws, он обычно кормится только исходящим трафиком, потому нечувствителен к подменам со стороны внешней сети. Соединение удаляется из таблицы, как только отпадает нужда в слежении за ним или по таймауту неактивности. Существуют отдельные таймауты на каждую фазу соединения. Они могут быть изменены параметром --ctrack-timeouts.</p> <p>--wssize позволяет изменить с клиента размер tcp window для сервера, чтобы он послал следующие ответы разбитыми на части. Чтобы это подействовало на все серверные ОС, необходимо менять window size в каждом исходящем с клиента пакете до отсылки сообщения, ответ на который должен быть разбит (например, TLS ClientHello). Именно поэтому и необходим conntrack, чтобы знать когда надо остановиться. Если не остановиться и все время устанавливать низкий wssize, скорость упадет катастрофически. В linux это может быть купировано через connbytes, но в BSD системах такой возможности нет. В случае http(s) останавливаемся сразу после отсылки первого http запроса или TLS ClientHello. Если вы имеете дело с не http(s), то вам потребуется параметр --wssize-cutoff. Он устанавливает предел, с которого действие wssize прекращается. Префикс d перед номером означает учитывать только пакеты с data payload, префикс s - relative sequence number, проще говоря количество переданных клиентом байтов + 1. Если проскочит пакет с http request или TLS ClientHello, действие wssize прекращается сразу же, не дожидаясь wssize-cutoff. Если ваш протокол склонен к долгому бездействию, следует увеличить таймаут фазы ESTABLISHED через параметр --ctrack-timeouts. Таймаут по умолчанию низкий - всего 5 минут. Не забывайте, что nfqws кормится приходящими на него пакетами. Если вы ограничили поступление пакетов через connbytes, то в таблице могут остаться повисшие соединения в фазе ESTABLISHED, которые отвалятся только по таймауту. Для диагностики состояния conntrack пошлите сигнал SIGUSR1 процессу nfqws : killall -SIGUSR1 nfqws. Текущая таблица будет выведена nfqws в stdout.</p> <p>Обычно в SYN пакете клиент отсылает кроме window size еще и TCP extension "scaling factor". scaling factor представляет из себя степень двойки, на которую умножается window size : 0=&gt;1, 1=&gt;2, 2=&gt;4, ..., 8=&gt;256, ... В параметре wssize scaling factor указывается через двоеточие. Scaling factor может только снижаться, увеличение заблокировано, чтобы не допустить превышение размера окна со стороны сервера. Для принуждения сервера к фрагментации ServerHello, чтобы избежать просекание имени сервера из сертификата сервера на DPI, лучше всего использовать --wssize=1:6 . Основное правило - делать scale_factor как можно больше, чтобы после восстановления window size итоговый размер окна стал максимально возможным. Если вы сделаете 64:0, будет очень медленно. С другой стороны нельзя допустить, чтобы ответ сервера стал достаточно большим, чтобы DPI нашел там искомое.</p> <p>На --wssize не влияет фильтр hostlist, поскольку он действует с самого начала соединения, когда еще нельзя принять решение о попадании в лист. --wssize может замедлять скорость и/или увеличивать время ответа сайтов, поэтому если есть другие работающие способы обхода DPI, лучше применять их.</p> <p>--dpi-desync-cutoff позволяет задать предел, при достижении которого прекращается применение dpi-desync. Доступны префиксы n,d,s по аналогии с --wssize-cutoff. Полезно совместно с --dpi-desync-any-protocol=1. На склонных к бездействию соединениях следует изменить таймауты conntrack. Если соединение выпало из conntrack и задана опция --dpi-desync-cutoff, dpi desync применяться не будет.</p> <p>РЕАССЕМБЛИНГ nfqws поддерживает реассемблинг некоторых видов запросов. На текущий момент это TLS и QUIC ClientHello. Они бывает длинными, если в chrome включить пост-квантовую криптографию tls-kyber, и занимают как правило 2 или 3 пакета. kyber включен по умолчанию, начиная с chromium 124. chrome рандомизирует фингерпринт TLS. SNI может оказаться как в начале, так и в конце, то есть попасть любой пакет. stateful DPI обычно реассемблирует запрос целиком, и только потом принимает решение о блокировке. В случае получения TLS или QUIC пакета с частичным ClientHello начинается процесс сборки, а пакеты задерживаются и не отсылаются до ее окончания. По окончании сборки пакеты проходит через десинхронизацию на основании полностью собранного ClientHello. При любой ошибке в процессе сборки задержанные пакеты немедленно отсылаются в сеть, а десинхронизация отменяется.</p> <p>Есть специальная поддержка всех вариантов tcp сплита для многосегментного TLS. Если указать позицию сплита больше длины первого пакета или использовать --dpi-desync-split-tls, то разбивка происходит не обязательно первого пакета, а того, на который пришлась итоговая позиция. Если, допустим, клиент послал TLS ClientHello длиной 2000, а SNI начинается с 1700, и заданы опции fake,split2, то перед первым пакетом идет fake, затем первый пакет в оригинале, а последний пакет разбивается на 2 сегмента. В итоге имеем фейк в начале и 3 реальных сегмента.</p> <p>ПОДДЕРЖКА UDP Атаки на udp более ограничены в возможностях. udp нельзя фрагментировать иначе, чем на уровне ip. Для UDP действуют только режимы десинхронизации fake,hopbyhop,destopt,ipfrag1,ipfrag2,udplen,tamper. Возможно сочетание fake,hopbyhop,destopt с ipfrag2, fake,fakeknown с udplen и tamper. udplen увеличивает размер udp пакета на указанное в --dpi-desync-udplen-increment количество байтов. Паддинг заполняется нулями по умолчанию, но можно задать свой паттерн. Предназначено для обмана DPI, ориентирующегося на размеры пакетов. Может сработать, если пользовательсткий протокол не привязан жестко к размеру udp пейлоада. Режим tamper означает модификацию пакетов известных протоколов особенным для протокола образом. На текущий момент работает только с DHT. Поддерживается определение пакетов QUIC Initial с расшифровкой содержимого и имени хоста, то есть параметр --hostlist будет работать. Определяются пакеты wireguard handshake initiation и DHT (начинается с 'd1', кончается 'e'). Для десинхронизации других протоколов обязательно указывать --dpi-desync-any-protocol. Реализован conntrack для udp. Можно пользоваться --dpi-desync-cutoff. Таймаут conntrack для udp можно изменить 4-м параметром в --ctrack-timeouts. Атака fake полезна только для stateful DPI, она бесполезна для анализа на уровне отдельных пакетов. По умолчанию fake наполнение - 64 нуля. Можно указать файл в --dpi-desync-fake-unknown-udp.</p> <p>IP ФРАГМЕНТАЦИЯ Современная сеть практически не пропускает фрагментированные tcp на уровне ip. На udp с этим дело получше, поскольку некоторые udp протоколы могут опираться на этот механизм (IKE старых версий). Однако, кое-где бывает, что режут и фрагментированный udp. Роутеры на базе linux могут самопроизвольно собирать или перефрагментировать пакеты. Позиция фрагментации задается отдельно для tcp и udp. По умолчанию 24 и 8 соответственно, должна быть кратна 8. Смещение считается с транспортного заголовка.</p> <p>Существует ряд моментов вокруг работы с фрагментами на Linux, без понимания которых может ничего не получиться.</p> <p>ipv4 : Linux дает отсылать ipv4 фрагменты, но стандартные настройки iptables в цепочке OUTPUT могут вызывать ошибки отправки.</p> <p>ipv6 : Нет способа для приложения гарантированно отослать фрагменты без дефрагментации в conntrack. На разных системах получается по-разному. Где-то нормально уходят, где-то пакеты дефрагментируются. Для ядер &lt;4.16 похоже, что нет иного способа решить эту проблему, кроме как выгрузить модуль nf_conntrack, который подтягивает зависимость nf_defrag_ipv6. Он то как раз и выполняет дефрагментацию. Для ядер 4.16+ ситуация чуть лучше. Из дефрагментации исключаются пакеты в состоянии NOTRACK. Чтобы не загромождать описание, смотрите пример решения этой проблемы в blockcheck.sh.</p> <p>Иногда требуется подгружать модуль ip6table_raw с параметром raw_before_defrag=1. В openwrt параметры модулей указываются через пробел после их названий в файлах /etc/modules.d. В традиционных системах посмотрите используется ли iptables-legacy или iptables-nft. Если legacy, то нужно создать файл /etc/modprobe.d/ip6table_raw.conf с содержимым : options ip6table_raw raw_before_defrag=1 В некоторых традиционных дистрибутивах можно изменить текущий ip6tables через : update-alternatives --config ip6tables Если вы хотите оставаться на iptables-nft, вам придется пересобрать патченную версию. Патч совсем небольшой. В nft.c найдите фрагмент : { .name = "PREROUTING", .type = "filter", .prio = -300, /* NF_IP_PRI_RAW <em>/ .hook = NF_INET_PRE_ROUTING, }, { .name = "OUTPUT", .type = "filter", .prio = -300, /</em> NF_IP_PRI_RAW */ .hook = NF_INET_LOCAL_OUT, }, и замените везде -300 на -450.</p> <p>Это нужно сделать вручную, никакой автоматики в blockcheck.sh нет.</p> <p>Либо можно раз и навсегда избавиться от этой проблемы, используя nftables. Там можно создать netfilter hook с любым приоритетом. Используйте приоритет -401 и ниже.</p> <p>При использовании iptables и NAT, похоже, что нет способа прицепить обработчик очереди после NAT. Пакет попадает в nfqws с source адресом внутренней сети, затем фрагментируется и уже не обрабатывается NAT. Так и уходит во внешюю сеть с src ip 192.168.x.x. Следовательно, метод не срабатывает. Видимо единственный рабочий метод - отказаться от iptables и использовать nftables. Хук должен быть с приоритетом 101 или выше.</p> <h2>tpws</h2> <p>tpws - это transparent proxy. --debug=0|1|2 ; Количество буковок в output : 0(default)=тихо, 1=подробно, 2=отладка --daemon ; демонизировать прогу --pidfile= <file> ; сохранить PID в файл --user= <username> ; менять uid процесса --uid=uid[:gid] ; менять uid процесса --bind-addr ; на каком адресе слушать. может быть ipv4 или ipv6 адрес ; если указан ipv6 link local, то требуется указать с какого он интерфейса : fe80::1%br-lan --bind-linklocal=no|unwanted|prefer|force ; no : биндаться только на global ipv6 ; unwanted (default) : предпочтительно global, если нет - LL ; prefer : предпочительно LL, если нет - global ; force : биндаться только на LL --bind-iface4= <iface> ; слушать на первом ipv4 интерфейса iface --bind-iface6= <iface> ; слушать на первом ipv6 интерфейса iface --bind-wait-ifup= <sec> ; ждать до N секунд появления и поднятия интерфейса --bind-wait-ip= <sec> ; ждать до N секунд получения IP адреса (если задан --bind-wait-ifup - время идет после поднятия интерфейса) --bind-wait-ip-linklocal= <sec> ; имеет смысл только при задании --bind-wait-ip ; --bind-linklocal=unwanted : согласиться на LL после N секунд ; --bind-linklocal=prefer : согласиться на global address после N секунд --bind-wait-only ; подождать все бинды и выйти. результат 0 в случае успеха, иначе не 0. --socks ; вместо прозрачного прокси реализовать socks4/5 proxy --no-resolve ; запретить ресолвинг имен через socks5 --resolve-threads ; количество потоков ресолвера --port= <port> ; на каком порту слушать --maxconn=&lt;max_connections&gt; ; максимальное количество соединений от клиентов к прокси --maxfiles=&lt;max_open_files&gt; ; макс количество файловых дескрипторов (setrlimit). мин требование (X <em>connections+16), где X=6 в tcp proxy mode, X=4 в режиме тамперинга. ; стоит сделать запас с коэффициентом как минимум 1.5. по умолчанию maxfiles (X</em>connections)*1.5+16 --max-orphan-time= <sec> ; если вы запускаете через tpws торрент-клиент с множеством раздач, он пытается установить очень много исходящих соединений, ; большая часть из которых отваливается по таймату (юзера сидят за NAT, firewall, ...) ; установление соединения в linux может длиться очень долго. локальный конец отвалился, перед этим послав блок данных, ; tpws ждет подключения удаленного конца, чтобы отослать ему этот блок, и зависает надолго. ; настройка позволяет сбрасывать такие подключения через N секунд, теряя блок данных. по умолчанию 5 сек. 0 означает отключить функцию ; эта функция не действует на успешно подключенные ранее соединения </sec> </port> </sec> </sec> </sec> </iface> </iface> </username> </file></p> <p>--local-rcvbuf= <bytes> ; SO_RCVBUF для соединений client-proxy --local-sndbuf= <bytes> ; SO_SNDBUF для соединений client-proxy --remote-rcvbuf= <bytes> ; SO_RCVBUF для соединений proxy-target --remote-sndbuf= <bytes> ; SO_SNDBUF для соединений proxy-target --nosplice ; не использовать splice на linux системах --skip-nodelay ; не устанавливать в исходящих соединения TCP_NODELAY. несовместимо со split. </bytes> </bytes> </bytes> </bytes></p> <p>--split-http-req=method|host ; способ разделения http запросов на сегменты : около метода (GET,POST) или около заголовка Host --split-pos= <offset> ; делить все посылы на сегменты в указанной позиции. единственная опция, работающая на не-http. при указании split-http-req он имеет преимущество на http. --split-any-protocol ; применять split-pos к любым пакетам. по умолчанию - только к http и TLS ClientHello --disorder[=http|tls] ; путем манипуляций с сокетом вынуждает отправлять первым второй сегмент разделенного запроса --oob[=http|tls] ; отправить байт out-of-band data (OOB) в конце первой части сплита --oob-data= <char> |0xHEX ; переопределить байт OOB. по умолчанию 0x00. --hostcase ; менять регистр заголовка "Host:". по умолчанию на "host:". --hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase --hostdot ; добавление точки после имени хоста : "Host: kinozal.tv." --hosttab ; добавление табуляции после имени хоста : "Host: kinozal.tv\t" --hostnospace ; убрать пробел после "Host:" --hostpad= <bytes> ; добавить паддинг-хедеров общей длиной <bytes> перед Host: --domcase ; домен после Host: сделать таким : TeSt.cOm --methodspace ; добавить пробел после метода : "GET /" =&gt; "GET /" --methodeol ; добавить перевод строки перед методом : "GET /" =&gt; "\r\nGET /" --unixeol ; конвертировать 0D0A в 0A и использовать везде 0A --tlsrec=sni|sniext ; разбивка TLS ClientHello на 2 TLS records. режем между 1 и 2 символами hostname в SNI или между байтами длины SNI extension. Если SNI нет - отмена. --tlsrec-pos= <pos> ; разбивка TLS ClientHello на 2 TLS records. режем на указанной позиции, если длина слишком мелкая - на позиции 1. --mss= <int> ; установить MSS для клиента. может заставить сервер разбивать ответы, но существенно снижает скорость --mss-pf=[~]port1[-port2] ; применять MSS только к портам назначения, подпадающим под фильтр. ~ означает инверсию --tamper-start=[n] <pos> ; начинать дурение только с указанной байтовой позиции или номера блока исходяшего потока (считается позиция начала принятого блока) --tamper-cutoff=[n] <pos> ; закончить дурение на указанной байтовой позиции или номере блока исходящего потока (считается позиция начала принятого блока) --hostlist= <filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются. ; в файле должен быть хост на каждой строке. ; список читается 1 раз при старте и хранится в памяти в виде иерархической структуры для быстрого поиска. ; по сигналу HUP список будет перечитан при следующем принятом соединении ; список может быть запакован в gzip. формат автоматически распознается и разжимается ; списков может быть множество, они обьединяются. пустой общий лист = его отсутствие ; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello. --hostlist-exclude= <filename> ; не применять дурение к доменам из листа. может быть множество листов, они обьединяются --hostlist-auto= <filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика) --hostlist-auto-fail-threshold= <int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3) --hostlist-auto-fail-time= <int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60) --hostlist-auto-debug= <logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты. </logfile> </int> </int> </filename> </filename> </filename> </pos> </pos> </int> </pos> </bytes> </bytes> </char> </offset></p> <p>Параметры манипуляции могут сочетаться в любых комбинациях.</p> <p>В случае http запроса split-http-req имеет преимущество над split-pos. split-pos по умолчанию работает только на http и TLS ClientHello. Чтобы он работал на любых пакетах, укажите --split-any-protocol.</p> <p>На прикладном уровне в общем случае нет гарантированного средства заставить ядро выплюнуть блок данных, порезанным в определенном месте. ОС держит буфер отсылки (SNDBUF) у каждого сокета. Если у сокета включена опция TCP_NODELAY и буфер пуст, то каждый send приводит к отсылке отдельного ip пакета или группы пакетов, если блок не вмещается в один ip пакет. Однако, если в момент send уже имеется неотосланный буфер, то ОС присоединит данные к нему, никакой отсылки отдельным пакетом не будет. Но в этом случае и так нет никакой гарантии, что какой-то блок сообщения пойдет в начале пакета, на что собственно и заточены DPI. Разбиение будет производится согласно MSS, который зависит от MTU исходящего интерфейса. Таким образом DPI, смотрящие в начало поля данных TCP пакета, будут поломаны в любом случае. Протокол http относится к запрос-ответным протоколам. Новое сообщение посылается только тогда, когда сервер получил запрос и полностью вернул ответ. Значит запрос фактически был не только отослан, но и принят другой стороной, а следовательно буфер отсылки пуст, и следующие 2 send приведут к отсылке сегментов данных разными ip пакетами. Резюме : tpws гарантирует сплит только за счет раздельных вызовов send, что на практике вполне достаточно для протоколов http(s).</p> <p>tpws может биндаться на множество интерфейсов и IP адресов (до 32 шт). Порт всегда только один. Параметры --bind-iface* и --bind-addr создают новый бинд. Остальные параметры --bind-* относятся к последнему бинду. Для бинда на все ipv4 укажите --bind-addr "0.0.0.0", на все ipv6 - "::". --bind-addr="" - биндаемся на все ipv4 и ipv6. Выбор режима использования link local ipv6 адресов (fe80::/8) : --bind-iface6 --bind-linklocal=no : сначала приватный адрес fc00::/7, затем глобальный адрес --bind-iface6 --bind-linklocal=unwanted : сначала приватный адрес fc00::/7, затем глобальный адрес, затем link local. --bind-iface6 --bind-linklocal=prefer : сначала link local, затем приватный адрес fc00::/7, затем глобальный адрес. --bind-iface6 --bind-linklocal=force : только link local Если не указано ни одного бинда, то создается бинд по умолчанию на все адреса всех интерфейсов. Для бинда на конкретный link-local address делаем так : --bind-iface6=fe80::aaaa:bbbb:cccc:dddd%iface-name Параметры --bind-wait* могут помочь в ситуациях, когда нужно взять IP с интерфейса, но его еще нет, он не поднят или не сконфигурирован. В разных системах события ifup ловятся по-разному и не гарантируют, что интерфейс уже получил IP адрес определенного типа. В общем случае не существует единого механизма повеситься на событие типа "на интерфейсе X появился link local address". Для бинда на известный ip, когда еще интерфейс не сконфигурирован, нужно делать так : --bind-addr=192.168.5.3 --bind-wait-ip=20 В режиме transparent бинд возможен на любой несуществующий адрес, в режиме socks - только на существующий.</p> <p>Параметры rcvbuf и sndbuf позволяют установить setsockopt SO_RCVBUF SO_SNDBUF для локального и удаленного соединения.</p> <p>Если не указан ни один из параметров модификации содержимого, tpws работает в режиме "tcp proxy mode". Он отличается тем, что в оба конца применяется splice для переброски данных из одного сокета в другой без копирования в память процесса. Практически - это то же самое, но может быть чуть побыстрее. TCP проксирование может быть полезно для обхода блокировок, когда DPI спотыкается на экзотических хедерах IP или TCP. Вы вряд ли сможете поправить хедеры, исходящие от айфончиков и гаджетиков, но на linux сможете влиять на них в какой-то степени через sysctl. Когда соединение проходит через tpws, фактически прокси-сервер сам устанавливает подключение к удаленному узлу от своего имени, и на это распространяются настройки системы, на которой работает прокси. tpws можно использовать на мобильном устройстве, раздающем интернет на тарифе сотового оператора, где раздача запрещена, в socks режиме даже без рута. Соединения от tpws неотличимы от соединений с самого раздающего устройства. Отличить можно только по содержанию (типа обновлений windows). Заодно можно и обойти блокировки. 2 зайца одним выстрелом. Более подробную информацию по вопросу обхода ограничений операторов гуглите на 4pda.ru.</p> <p>Режим "--socks" не требует повышенных привилегий (кроме бинда на привилегированные порты 1..1023). Поддерживаются версии socks 4 и 5 без авторизации. Версия протокола распознается автоматически. Подключения к IP того же устройства, на котором работает tpws, включая localhost, запрещены. socks5 позволяет удаленно ресолвить хосты (curl : --socks5-hostname firefox : socks_remote_dns=true). tpws поддерживает эту возможность асинхронно, не блокируя процессинг других соединений, используя многопоточный пул ресолверов. Количество потоков определяется автоматически в зависимости от "--maxconn", но можно задать и вручную через параметр "--resolver-threads". Запрос к socks выставляется на паузу, пока домен не будет преобразован в ip адрес в одном из потоков ресолвера. Ожидание может быть более длинным, если все потоки заняты. Если задан параметр "--no-resolve", то подключения по именам хостов запрещаются, а пул ресолверов не создается. Тем самым экономятся ресурсы.</p> <p>Параметр --hostpad= <bytes> добавляет паддинг-хедеров перед Host: на указанное количество байтов. Если размер <bytes> слишком большой, то идет разбивка на разные хедеры по 2K. Общий буфер приема http запроса - 64K, больший паддинг не поддерживается, да и http сервера такое уже не принимают. Полезно против DPI, выполняющих реассемблинг TCP с ограниченным буфером. Если техника работает, то после некоторого количества bytes http запрос начнет проходить до сайта. Если при этом критический размер padding около MTU, значит скорее всего DPI не выполняет реассемблинг пакетов, и лучше будет использовать обычные опции --split-… Если все же реассемблинг выполняется, то критический размер будет около размера буфера DPI. Он может быть 4K или 8K, возможны и другие значения. </bytes> </bytes></p> <p>--disorder - это попытка симулировать режим disorder2 nfqws , используя особенности ОС по реализации stream сокетов. Однако, в отличие от nfqws, здесь не требуются повышенные привилегии. Реализовано это следующим образом. У сокета есть возможность выставить TTL. Все пакеты будут отправляться с ним. Перед отправкой первого сегмента ставим TTL=1. Пакет будет дропнут на первом же роутере, он не дойдет ни до DPI, ни до сервера. Затем возвращаем TTL в значение по умолчанию. ОС отсылает второй сегмент, и он уже доходит до сервера. Сервер возвращает SACK, потому что не получил первый кусок, и ОС его отправляет повторно, но здесь уже мы ничего не делаем. Этот режим работает как ожидается на Linux и MacOS. Однако, на FreeBSD и OpenBSD он работает не так хорошо. Ядро этих ОС отсылает ретрансмиссию в виде полного пакета. Потому выходит, что до сервера идет сначала второй кусок, а потом полный запрос без сплита. На него может отреагировать DPI штатным образом. --disorder является дополнительным флагом к любому сплиту. Сам по себе он не делает ничего.</p> <p>--tlsrec и --tlsrec-pos позволяют внутри одного tcp сегмента разрезать TLS ClientHello на 2 TLS records. --tlsrec=sni режет между 1 и 2 символами hostname в SNI, делая невозможным бинарный поиск паттерна без анализа структуры данных. В случае отсутствия SNI разбиение отменяется. --tlsrec-pos режет на указанной позиции. Если длина блока данных TLS меньше указанной позиции, режем на позиции 1. Параметр сочетается с --split-pos. В этом случае происходит сначала разделение на уровне TLS record layer, потом на уровне TCP. Самая изорщенная атака --tslrec, --split-pos и --disorder вместе. --tlsrec ломает значительное количество сайтов. Криптобиблиотеки (openssl, ...) на оконечных http серверах без проблем принимают разделенные tls сегменты, но мидлбоксы - не всегда. К мидлбоксам можно отнести CDN или системы ddos-защиты. Поэтому применение --tlsrec без ограничителей вряд ли целесообразно. В РФ --tlsrec обычно не работает с TLS 1.2, потому что цензор парсит сертификат сервера из ServerHello. Работает только с TLS 1.3, поскольку там эта информация шифруется. Впрочем, сейчас сайтов, не поддерживающих TLS 1.3, осталось немного.</p> <p>--mss устанавливает опцию сокета TCP_MAXSEG. Клиент выдает это значение в tcp опциях SYN пакета. Сервер в ответ в SYN,ACK выдает свой MSS. На практике сервера обычно снижают размеры отсылаемых ими пакетов, но они все равно не вписываются в низкий MSS, указанный клиентом. Обычно чем больше указал клиент, тем больше шлет сервер. На TLS 1.2 если сервер разбил заброс так, чтобы домен из сертификата не попал в первый пакет, это может обмануть DPI, секущий ответ сервера. Схема может значительно снизить скорость и сработать не на всех сайтах. С фильтром по hostlist совместимо только в режиме socks при включенном удаленном ресолвинге хостов. (firefox network.proxy.socks_remote_dns). Это единственный вариант, когда tpws может узнать имя хоста еще на этапе установления соединения. Невозможен фильтр по версии TLS. Взамен имеется фильтр по портам --mss-pf. --mss-pf=443 применяет дурение только к https. Применяя данную опцию к сайтам TLS1.3, если броузер тоже поддерживает TLS1.3, то вы делаете только хуже. Но нет способа автоматически узнать когда надо применять, когда нет, поскольку MSS идет только в 3-way handshake еще до обмена данными, а версию TLS можно узнать только по ответу сервера, который может привести к реакции DPI. Использовать только когда нет ничего лучше или для отдельных ресурсов. Работает только на linux, не работает на BSD и MacOS.</p> <p>--skip-nodelay может быть полезен, чтобы привести MTU к MTU системы, на которой работает tpws. Это может быть полезно для скрытия факта использования VPN. Пониженный MTU - 1 из способов обнаружения подозрительного подключения. С tcp proxy ваши соединения неотличимы от тех, что сделал бы сам шлюз.</p> <h2>Способы получения списка заблокированных IP</h2> <p>!!! nftables не могут работать с ipset-ами. Собственный аналогичный механизм требует огромного количество RAM !!! для загрузки больших листов. Например, для загона 100K записей в nfset не хватает даже 256 Mb. !!! Если вам нужны большие листы на домашних роутерах, откатывайтесь на iptables+ipset.</p> <ol> <li>Внесите заблокированные домены в ipset/zapret-hosts-user.txt и запустите ipset/get_user.sh На выходе получите ipset/zapret-ip-user.txt с IP адресами.</li> </ol> <p>Cкрипты с названием get_reestr_* оперируют дампом реестра заблокированных сайтов :</p> <ol start="2"> <li> <p>ipset/get_reestr_resolve.sh получает список доменов от rublacklist и дальше их ресолвит в ip адреса в файл ipset/zapret-ip.txt.gz. В этом списке есть готовые IP адреса, но судя во всему они там в точности в том виде, что вносит в реестр РосКомПозор. Адреса могут меняться, позор не успевает их обновлять, а провайдеры редко банят по IP : вместо этого они банят http запросы с "нехорошим" заголовком "Host:" вне зависимости от IP адреса. Поэтому скрипт ресолвит все сам, хотя это и занимает много времени. Используется мультипоточный ресолвер mdig (собственная разработка).</p> </li> <li> <p>ipset/get_reestr_preresolved.sh. то же самое, что и 2), только берется уже заресолвленый список со стороннего ресурса.</p> </li> <li> <p>ipset/get_reestr_preresolved_smart.sh. то же самое, что и 3), с добавлением всего диапазона некоторых автономных систем (прыгающие IP адреса из cloudflare, facebook, ...) и некоторых поддоменов блокируемых сайтов</p> </li> </ol> <p>Cкрипты с названием get_antifilter_* оперируют списками адресов и масок подсетей с сайтов antifilter.network и antifilter.download :</p> <ol start="5"> <li> <p>ipset/get_antifilter_ip.sh. получает лист <a href="https://antifilter.download/list/ip.lst">https://antifilter.download/list/ip.lst</a>.</p> </li> <li> <p>ipset/get_antifilter_ipsmart.sh. получает лист <a href="https://antifilter.network/download/ipsmart.lst">https://antifilter.network/download/ipsmart.lst</a>. умная суммаризация отдельных адресов из ip.lst по маскам от /32 до /22</p> </li> <li> <p>ipset/get_antifilter_ipsum.sh. получает лист <a href="https://antifilter.download/list/ipsum.lst">https://antifilter.download/list/ipsum.lst</a>. суммаризация отдельных адресов из ip.lst по маске /24</p> </li> <li> <p>ipset/get_antifilter_ipresolve.sh. получает лист <a href="https://antifilter.download/list/ipresolve.lst">https://antifilter.download/list/ipresolve.lst</a>. пре-ресолвленный список, аналогичный получаемый при помощи get_reestr_resolve. только ipv4.</p> </li> <li> <p>ipset/get_antifilter_allyouneed.sh. получает лист <a href="https://antifilter.download/list/allyouneed.lst">https://antifilter.download/list/allyouneed.lst</a>. Суммарный список префиксов, созданный из ipsum.lst и subnet.lst.</p> </li> </ol> <p>Все варианты рассмотренных скриптов автоматически создают и заполняют ipset. Варианты 2-9 дополнительно вызывают вариант 1.</p> <ol start="10"> <li>ipset/get_config.sh. этот скрипт вызывает то, что прописано в переменной GETLIST из файла config Если переменная не определена, то ресолвятся лишь листы для ipset nozapret/nozapret6.</li> </ol> <p>Листы РКН все время изменяются. Возникают новые тенденции. Требования к RAM могут меняться. Поэтому необходима нечастая, но все же регулярная ревизия что же вообще у вас происходит на роутере. Или вы можете узнать о проблеме лишь когда у вас начнет постоянно пропадать wifi, и вам придется его перезагружать каждые 2 часа (метод кувалды).</p> <p>Самые щадящие варианты по RAM - get_antifilter_allyouneed.sh, get_antifilter_ipsum.sh.</p> <p>Листы zapret-ip.txt и zapret-ipban.txt сохраняются в сжатом виде в файлы .gz. Это позволяет снизить их размер во много раз и сэкономить место на роутере. Отключить сжатие листов можно параметром конфига GZIP_LISTS=0.</p> <p>На роутерах не рекомендуется вызывать эти скрипты чаще раза за 2 суток, поскольку сохранение идет либо во внутреннюю флэш память роутера, либо в случае extroot - на флэшку. В обоих случаях слишком частая запись может убить флэшку, но если это произойдет с внутренней флэш памятью, то вы просто убьете роутер.</p> <p>Принудительное обновление ipset выполняет скрипт ipset/create_ipset.sh. Если передан параметр "no-update", скрипт не обновляет ipset, а только создает его при его отсутствии и заполняет. Это полезно, когда могут случиться несколько последовательных вызовов скрипта. Нет смысла несколько раз перезаполнять ipset, это длительная операция на больших листах. Листы можно обновлять раз в несколько суток, и только тогда вызывать create_ipset без параметра "no-update". Во всех остальных случаях стоит применять "no-update".</p> <p>Список РКН уже достиг внушительных размеров в сотни тысяч IP адресов. Поэтому для оптимизации ipset применяется утилита ip2net. Она берет список отдельных IP адресов и пытается интеллектуально создать из него подсети для сокращения количества адресов. ip2net отсекает неправильные записи в листах, гарантируя осутствие ошибок при их загрузке. ip2net написан на языке C, поскольку операция ресурсоемкая. Иные способы роутер может не потянуть.</p> <p>Можно внести список доменов в ipset/zapret-hosts-user-ipban.txt. Их ip адреса будут помещены в отдельный ipset "ipban". Он может использоваться для принудительного завертывания всех соединений на прозрачный proxy "redsocks" или на VPN.</p> <p>IPV6 : если включен ipv6, то дополнительно создаются листы с таким же именем, но с "6" на конце перед расширением. zapret-ip.txt =&gt; zapret-ip6.txt Создаются ipset-ы zapret6 и ipban6. Листы с antifilter не содержат список ipv6 адресов.</p> <p>СИСТЕМА ИСКЛЮЧЕНИЯ IP. Все скрипты ресолвят файл zapret-hosts-user-exclude.txt, создавая zapret-ip-exclude.txt и zapret-ip-exclude6.txt. Они загоняются в ipset-ы nozapret и nozapret6. Все правила, создаваемые init скриптами, создаются с учетом этих ipset. Помещенные в них IP не участвуют в процессе. zapret-hosts-user-exclude.txt может содержать домены, ipv4 и ipv6 адреса или подсети.</p> <p>FreeBSD. Скрипты ipset/*.sh работают так же на FreeBSD. Вместо ipset они создают lookup таблицы ipfw с аналогичными именами. ipfw таблицы в отличие от ipset могут содержать как ipv4, так и ipv6 адреса и подсети в одной таблице, поэтому разделения нет.</p> <p>Параметр конфига LISTS_RELOAD задает произвольную команду для перезагрузки листов. Это особенно полезно на BSD системах с PF. LISTS_RELOAD=- отключает перезагрузку листов.</p> <h2>ip2net</h2> <p>Утилита ip2net предназначена для преобразования ipv4 или ipv6 списка ip в список подсетей с целью сокращения размера списка. Входные данные берутся из stdin, выходные выдаются в stdout.</p> <p>-4 ; лист - ipv4 (по умолчанию) -6 ; лист - ipv6 --prefix-length=min[-max] ; диапазон рассматриваемых длин префиксов. например : 22-30 (ipv4), 56-64 (ipv6) --v4-threshold=mul/div ; ipv4 : включать подсети, в которых заполнено по крайней мере mul/div адресов. например : 3/4 --v6-threshold=N ; ipv6 : минимальное количество ip для создания подсети</p> <p>В списке могут присутствовать записи вида ip/prefix и ip1-ip2. Такие записи выкидываются в stdout без изменений. Они принимаются командой ipset. ipset умеет для листов hash:net из ip1-ip2 делать оптимальное покрытие ip/prefix. ipfw из FreeBSD понимает ip/prefix, но не понимает ip1-ip2. ip2net фильтрует входные данные, выкидывая неправильные IP адреса.</p> <p>Выбирается подсеть, в которой присутствует указанный минимум адресов. Для ipv4 минимум задается как процент от размера подсети (mul/div. например, 3/4), для ipv6 минимум задается напрямую.</p> <p>Размер подсети выбирается следующим алгоритмом : Сначала в указанном диапазоне длин префиксов ищутся подсети, в которых количество адресов - максимально. Если таких сетей найдено несколько, берется наименьшая сеть (префикс больше). Например, заданы параметры v6_threshold=2 prefix_length=32-64, имеются следующие ipv6 : 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 Результат будет : 1234:5678:aaa8::/45 Эти адреса так же входят в подсеть /32. Однако, нет смысла проходиться ковровой бомбардировкой, когда те же самые адреса вполне влезают в /45 и их ровно столько же. Если изменить v6_threshold=4, то результат будет : 1234:5678:aaaa::5 1234:5678:aaaa::6 1234:5678:aaac::5 То есть ip не объединятся в подсеть, потому что их слишком мало. Если изменить prefix_length=56-64, результат будет : 1234:5678:aaaa::/64 1234:5678:aaac::5</p> <p>Требуемое процессорное время для вычислений сильно зависит от ширины диапазона длин префиксов, размера искомых подсетей и длины листа. Если ip2net думает слишком долго, не используйте слишком большие подсети и уменьшите диапазон длин префиксов. Учтите, что арифметика mul/div - целочисленная. При превышении разрядной сетки 32 bit результат непредсказуем. Не надо делать такое : 5000000/10000000. 1/2 - гораздо лучше.</p> <h2>Фильтрация по именам доменов</h2> <p>Альтернативой ipset является использование tpws или nfqws со списком доменов. Оба демона принимают неограниченное количество листов include (--hostlist) и exclude (--hostlist-exclude). Все листы одного типа обьединяются, и таким образом остаются только 2 листа. Прежде всего проверяется exclude list. При вхождении в него происходит отказ от дурения. Далее при наличии include list проверяется домен на вхождение в него. При невхождении в список отказ от дурения. Пустой список приравнивается к его отсутствию. В иных случаях происходит дурение. Нет ни одного списка - дурение всегда. Есть только exclude список - дурение всех, кроме. Есть только include список - дурение только их. Есть оба - дурение только include, кроме exclude.</p> <p>В системе запуска это обыграно следующим образом. Присутствуют 2 include списка : ipset/zapret-hosts-users.txt.gz или ipset/zapret-hosts-users.txt ipset/zapret-hosts.txt.gz или ipset/zapret-hosts.txt и 1 exclude список ipset/zapret-hosts-users-exclude.txt.gz или ipset/zapret-hosts-users-exclude.txt</p> <p>При режиме фильтрации MODE_FILTER=hostlist система запуска передает nfqws или tpws все листы, файлы которых присутствуют. Если вдруг листы include присутствуют, но все они пустые, то работа аналогична отсутствию include листа. Файл есть, но не смотря на это дурится все, кроме exclude. Если вам нужен именно такой режим - не обязательно удалять zapret-hosts-users.txt. Достаточно сделать его пустым.</p> <p>Поддомены учитываются автоматически. Например, строчка "ru" вносит в список "<em>.ru". Строчка "</em>.ru" в списке не сработает.</p> <p>Список доменов РКН может быть получен скриптами ipset/get_reestr_hostlist.sh или ipset/get_antizapret_domains.sh</p> <ul> <li>кладется в ipset/zapret-hosts.txt.gz.</li> </ul> <p>Чтобы обновить списки, перезапускать nfqws или tpws не нужно. Обновляете файлы, затем даете сигнал HUP. По HUP листы будут перечитаны. Если вдруг какого-то листа не окажется, процесс завершится с ошибкой. Скрипты получения листов из ipset сами выдают HUP в конце.</p> <p>При фильтрации по именам доменов демон должен запускаться без фильтрации по ipset. tpws и nfqws решают нужно ли применять дурение в зависимости от хоста, полученного из протокола прикладного уровня (http, tls, quic). При использовании больших списков, в том числе списка РКН, оцените объем RAM на роутере ! Если после запуска демона RAM под завязку или случаются oom, значит нужно отказаться от таких больших списков.</p> <h2>Режим фильтрации autohostlist</h2> <p>Этот режим позволяет проанализировать как запросы со стороны клиента, так и ответы от сервера. Если хост еще не находится ни в каких листах и обнаруживается ситуация, похожая на блокировку, происходит автоматическое добавление хоста в список autohostlist как в памяти, так и в файле. nfqws или tpws сами ведут этот файл. Чтобы какой-то хост не смог попась в autohostlist используйте hostlist-exclude. Если он все-же туда попал - удалите запись из файла вручную. Процессы автоматически перечитают файл. tpws/nfqws сами назначают владельцем файла юзера, под которым они работают после сброса привилегий, чтобы иметь возможность обновлять лист.</p> <p>В случае nfqws данный режим требует перенаправления в том числе и входящего трафика. Крайне рекомендовано использовать ограничитель connbytes, чтобы nfqws не обрабатывал гигабайты. По этой же причине не рекомендуется использование режима на BSD системах. Там нет фильтра connbytes.</p> <p>На linux системах при использовании nfqws и фильтра connbytes может понадобится : sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1 Было замечено, что некоторые DPI в России возвращают RST с неверным ACK. Это принимается tcp/ip стеком linux, но через раз приобретает статус INVALID в conntrack. Поэтому правила с connbytes срабатывают через раз, не пересылая RST пакет nfqws.</p> <p>Как вообще могут вести себя DPI, получив "плохой запрос" и приняв решение о блокировке :</p> <ol> <li>Зависание : просто отмораживается, блокируя прохождение пакетов по TCP каналу.</li> <li>RST : отправляет RST клиенту и/или серверу</li> <li>Редирект : (только для http) отправляет редирект на сайт-заглушку</li> <li>Подмена сертификата : (только для https) полный перехват TLS сеанса с попыткой всунуть что-то свое клиенту. Применяется нечасто, поскольку броузеры на такое ругаются.</li> </ol> <p>nfqws и tpws могут сечь варианты 1-3, 4 они не распознают. Всилу специфики работы с отдельными пакетами или с TCP каналом tpws и nfqws распознают эти ситуации по-разному. Что считается ситуацией, похожей на блокировку :</p> <ol> <li>[nfqws] Несколько ретрансмиссий первого запроса в TCP сеансе, в котором имеется host.</li> <li>[nfqws,tpws] RST, пришедший в ответ на первый запрос с хостом.</li> <li>[nfqws,tpws] HTTP редирект, пришедший в ответ на первый запрос с хостом, на глобальный адрес с доменом 2 уровня, не совпадающим с доменом 2 уровня оригинального запроса.</li> <li>[tpws] закрытие соединения клиентом после отправки первого запроса с хостом, если не было на него ответа со стороны сервера. Это обычно случается по таймауту, когда нет ответа (случай "зависание").</li> </ol> <p>Чтобы снизить вероятность ложных срабатываний, имеется счетчик ситуаций, похожих на блокировку. Если за определенное время произойдет более определенного их количества, хост считается заблокированным и заносится в autohostlist. По нему сразу же начинает работать стратегия по обходу блокировки. Если в процессе счета вебсайт отвечает без признаков блокировки, счетчик сбрасывается. Вероятно, это был временный сбой сайта.</p> <p>На практике работа с данным режимом выглядит так. Первый раз пользователь заходит на сайт и получает заглушку, сброс соединения или броузер подвисает, вываливаясь по таймауту с сообщением о невозможности загрузить страницу. Надо долбить F5, принуждая броузер повторять попытки. После некоторой попытки сайт начинает работать, и дальше он будет работать всегда.</p> <p>С этим режимом можно использовать техники обхода, ломающие значительное количество сайтов. Если сайт не ведет себя как заблокированный, значит обход применен не будет. В противном случае терять все равно нечего. Однако, могут быть временные сбои сервера, приводящие к ситуации, аналогичной блокировке. Могут происходит ложные срабатывания. Если такое произошло, стратегия может начать ломать незаблокированный сайт. Эту ситуацию, увы, придется вам контролировать вручную. Заносите такие домены в ipset/zapret-hosts-user-exclude.txt, чтобы избежать повторения. Чтобы впоследствии разобраться почему домен был занесен в лист, можно включить autohostlist debug log. Он полезен тем, что работает без постоянного просмотра вывода nfqws в режиме debug. В лог заносятся только основные события, ведущие к занесению хоста в лист. По логу можно понять как избежать ложных срабатываний и подходит ли вообще вам этот режим.</p> <p>Можно использовать один autohostlist с множеством процессов. Все процессы проверяют время модификации файла. Если файл был изменен в другом процессе, то происходит перечитывание всех include листов, включая autohostlist. Все процессы должны работать под одним uid, чтобы были права доступа на файл.</p> <p>Скрипты zapret ведут autohostlist в ipset/zapret-hosts-auto.txt. install_easy.sh при апгрейде zapret сохраняет этот файл. Режим autohostlist включает в себя режим hostlist. Можно вести ipset/zapret-hosts-user.txt, ipset/zapret-hosts-user-exclude.txt.</p> <h2>Проверка провайдера</h2> <p>Перед настройкой нужно провести исследование какую бяку устроил вам ваш провайдер.</p> <p>Нужно выяснить не подменяет ли он DNS и какой метод обхода DPI работает. В этом вам поможет скрипт blockcheck.sh.</p> <p>Если DNS подменяется, но провайдер не перехватывает обращения к сторонним DNS, поменяйте DNS на публичный. Например : 8.8.8.8, 8.8.4.4, 1.1.1.1, 1.0.0.1, 9.9.9.9 Если DNS подменяется и провайдер перехватывает обращения к сторонним DNS, настройте dnscrypt. Еще один эффективный вариант - использовать ресолвер от yandex 77.88.8.88 на нестандартном порту 1253. Многие провайдеры не анализируют обращения к DNS на нестандартных портах.</p> <p>Следует прогнать blockcheck по нескольким заблокированным сайтам и выявить общий характер блокировок. Разные сайты могут быть заблокированы по-разному, нужно искать такую технику, которая работает на большинстве. Чтобы записать вывод blockcheck.sh в файл, выполните : ./blockcheck.sh | tee /tmp/blockcheck.txt</p> <p>Проанализируйте какие методы дурения DPI работают, в соответствии с ними настройте /opt/zapret/config.</p> <p>Имейте в виду, что у провайдеров может быть несколько DPI или запросы могут идти через разные каналы по методу балансировки нагрузки. Балансировка может означать, что на разных ветках разные DPI или они находятся на разных хопах. Такая ситуация может выражаться в нестабильности работы обхода. Дернули несколько раз curl. То работает, то connection reset или редирект. blockcheck.sh выдает странноватые результаты. То split работает на 2-м. хопе, то на 4-м. Достоверность результата вызывает сомнения. В этом случае задайте несколько повторов одного и того же теста. Тест будет считаться успешным только, если все попытки пройдут успешно.</p> <p>При использовании autottl следует протестировать как можно больше разных доменов. Эта техника может на одних провайдерах работать стабильно, на других потребуется выяснить при каких параметрах она стабильна, на третьих полный хаос, и проще отказаться.</p> <p>Blockcheck имеет 3 уровня сканирования. Цель режима quick - максимально быстро найти хоть что-то работающее. standard дает возможность провести исследование как и на что реагирует DPI в плане методов обхода. force дает максимум проверок даже в случаях, когда ресурс работает без обхода или с более простыми стратегиями.</p> <p>СКАН ПОРТОВ Если в системе присутствует совместимый netcat (ncat от nmap или openbsd ncat. в openwrt по умолчанию нет.), то выполняется сканирование портов http или https всех IP адресов домена. Если ни один IP не отвечает, то результат очевиден. Можно останавливать сканирование. Автоматически оно не остановится, потому что netcat-ы недостаточно подробно информируют о причинах ошибки. Если доступна только часть IP, то можно ожидать хаотичных сбоев, т.к. подключение идет к случайному адресу из списка.</p> <p>ПРОВЕРКА НА ЧАСТИЧНЫЙ IP block Под частичным блоком подразумевается ситуация, когда конект на порты есть, но по определенному транспортному или прикладному протоколу всегда идет реакция DPI вне зависимости от запрашиваемого домена. Эта проверка так же не выдаст автоматического вердикта/решения, потому что может быть очень много вариаций. Вместо этого анализ происходящего возложен на самого пользователя или тех, кто будет читать лог. Суть этой проверки в попытке дернуть неблокированный IP с блокированным доменом и наоборот, анализируя при этом реакцию DPI. Реакция DPI обычно проявляется в виде таймаута (зависание запроса), connection reset или http redirect на заглушку. Любой другой вариант скорее всего говорит об отсутствии реакции DPI. В частности, любые http коды, кроме редиректа, ведущего именно на заглушку, а не куда-то еще. На TLS - ошибки handshake без задержек. Ошибка сертификата может говорить как о реакции DPI с MiTM атакой (подмена сертификата), так и о том, что принимающий сервер неблокированного домена все равно принимает ваш TLS handshake с чужим доменом, пытаясь при этом выдать сертификат без запрошенного домена. Требуется дополнительный анализ. Если на заблокированный домен есть реакция на всех IP адресах, значит есть блокировака по домену. Если на неблокированный домен есть реакция на IP адресах блокированного домена, значит имеет место блок по IP. Соответственно, если есть и то, и другое, значит есть и блок по IP, и блок по домену. Неблокированный домен первым делом проверяется на доступность на оригинальном адресе. При недоступности тест отменяется, поскольку он будет неинформативен.</p> <p>Если выяснено, что есть частичный блок по IP на DPI, то скорее всего все остальные тесты будут провалены вне зависимости от стратегий обхода. Но бывают и некоторые исключения. Например, пробитие через ipv6 option headers. Или сделать так, чтобы он не мог распознать протокол прикладного уровня. Дальнейшие тесты могут быть не лишены смысла.</p> <p>ПРИМЕРЫ БЛОКИРОВКИ ТОЛЬКО ПО ДОМЕНУ БЕЗ БЛОКА ПО IP</p> <blockquote> <p>testing iana.org on it's original ip !!!!! AVAILABLE !!!!! testing rutracker.org on 192.0.43.8 (iana.org) curl: (28) Operation timed out after 1002 milliseconds with 0 bytes received testing iana.org on 172.67.182.196 (rutracker.org) HTTP/1.1 409 Conflict testing iana.org on 104.21.32.39 (rutracker.org) HTTP/1.1 409 Conflict</p> </blockquote> <blockquote> <p>testing iana.org on it's original ip !!!!! AVAILABLE !!!!! testing rutracker.org on 192.0.43.8 (iana.org) curl: (28) Connection timed out after 1001 milliseconds testing iana.org on 172.67.182.196 (rutracker.org) curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure testing iana.org on 104.21.32.39 (rutracker.org) curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure</p> </blockquote> <blockquote> <p>testing iana.org on it's original ip !!!!! AVAILABLE !!!!! testing rutracker.org on 192.0.43.8 (iana.org) HTTP/1.1 307 Temporary Redirect Location: <a href="https://www.gblnet.net/blocked.php">https://www.gblnet.net/blocked.php</a> testing iana.org on 172.67.182.196 (rutracker.org) HTTP/1.1 409 Conflict testing iana.org on 104.21.32.39 (rutracker.org) HTTP/1.1 409 Conflict</p> </blockquote> <blockquote> <p>testing iana.org on it's original ip !!!!! AVAILABLE !!!!! testing rutracker.org on 192.0.43.8 (iana.org) curl: (35) Recv failure: Connection reset by peer testing iana.org on 172.67.182.196 (rutracker.org) curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure testing iana.org on 104.21.32.39 (rutracker.org) curl: (35) OpenSSL/3.2.1: error:0A000410:SSL routines::ssl/tls alert handshake failure</p> </blockquote> <p>ПРИМЕР ПОЛНОГО IP БЛОКА ИЛИ БЛОКА TCP ПОРТА ПРИ ОТСУТСТВИИ БЛОКА ПО ДОМЕНУ</p> <ul> <li> <p>port block tests ipv4 startmail.com:80 ncat -z -w 1 145.131.90.136 80 145.131.90.136 does not connect. netcat code 1 ncat -z -w 1 145.131.90.152 80 145.131.90.152 does not connect. netcat code 1</p> </li> <li> <p>curl_test_http ipv4 startmail.com</p> </li> </ul> <ul> <li> <p>checking without DPI bypass curl: (28) Connection timed out after 2002 milliseconds UNAVAILABLE code=28</p> </li> <li> <p>IP block tests (requires manual interpretation)</p> </li> </ul> <blockquote> <p>testing iana.org on it's original ip !!!!! AVAILABLE !!!!! testing startmail.com on 192.0.43.8 (iana.org) HTTP/1.1 302 Found Location: <a href="https://www.iana.org/">https://www.iana.org/</a> testing iana.org on 145.131.90.136 (startmail.com) curl: (28) Connection timed out after 2002 milliseconds testing iana.org on 145.131.90.152 (startmail.com) curl: (28) Connection timed out after 2002 milliseconds</p> </blockquote> <h2>Выбор параметров</h2> <p>Файл /opt/zapret/config используется различными компонентами системы и содержит основные настройки. Его нужно просмотреть и при необходимости отредактировать.</p> <p>На linux системах можно выбрать использовать iptables или nftables. По умолчанию на традиционных linux выбирается nftables, если установлен nft. На openwrt по умолчанию выбирается nftables на новых версиях с firewall4.</p> <p>FWTYPE=iptables</p> <p>Основной режим : tpws - tpws в режиме transparent tpws-socks - tpws в режиме socks вешается на localhost и LAN интерфейс (если задан IFACE_LAN или если система - OpenWRT). порт 988 nfqws - nfqws filter - только заполнить ipset или загрузить hostlist custom - нужно самому запрограммировать запуск демонов в init скрипте и правила iptables</p> <p>MODE=tpws</p> <p>Применять ли дурение к HTTP :</p> <p>MODE_HTTP=1</p> <p>Применять ли дурение к последовательным http запросам в одном tcp соединении (http keeaplive). Относится только к nfqws. Выключение данной функции способно сэкономить загрузку процессора. tpws всегда работает с http keepalive</p> <p>MODE_HTTP_KEEPALIVE=0</p> <p>Применять ли дурение к HTTPS :</p> <p>MODE_HTTPS=1</p> <p>Применять ли дурение к QUIC :</p> <p>MODE_QUIC=0</p> <p>Режим фильтрации хостов : none - применять дурение ко всем хостам ipset - ограничить дурение ipset-ом zapret/zapret6 hostlist - ограничить дурение списком хостов из файла autohostlist - режим hostlist + распознавание блокировок и ведения автоматического листа</p> <p>MODE_FILTER=none</p> <p>Опции tpws :</p> <p>TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3"</p> <p>Опции nfqws для атаки десинхронизации DPI :</p> <p>DESYNC_MARK=0x40000000 DESYNC_MARK_POSTNAT=0x20000000 NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=badsum"</p> <p>Задание раздельных опций nfqws для http и https и для версий ip протоколов 4,6 :</p> <p>NFQWS_OPT_DESYNC_HTTP="--dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum" NFQWS_OPT_DESYNC_HTTPS="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum" NFQWS_OPT_DESYNC_HTTP6="--dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none" NFQWS_OPT_DESYNC_HTTPS6="--wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none"</p> <p>Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS не определена, берется значение NFQWS_OPT_DESYNC. Если какая-то из переменных NFQWS_OPT_DESYNC_HTTP6/NFQWS_OPT_DESYNC_HTTPS6 не определена, берется значение NFQWS_OPT_DESYNC_HTTP/NFQWS_OPT_DESYNC_HTTPS.</p> <p>Опции дурения для QUIC : NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake" NFQWS_OPT_DESYNC_QUIC6="--dpi-desync=hopbyhop" Если NFQWS_OPT_DESYNC_QUIC6 не задано, то берется NFQWS_OPT_DESYNC_QUIC.</p> <p>Настройка системы управления выборочным traffic offload (только если поддерживается) donttouch : выборочное управление отключено, используется системная настройка, простой инсталятор выключает системную настройку, если она не совместима с выбранным режимом none : выборочное управление отключено, простой инсталятор выключает системную настройку software : выборочное управление включено в режиме software, простой инсталятор выключает системную настройку hardware : выборочное управление включено в режиме hardware, простой инсталятор выключает системную настройку</p> <p>FLOWOFFLOAD=donttouch</p> <p>Параметр GETLIST указывает инсталятору install_easy.sh какой скрипт дергать для обновления списка заблокированных ip или хостов. Он же вызывается через get_config.sh из запланированных заданий (crontab или systemd timer). Поместите сюда название скрипта, который будете использовать для обновления листов. Если не нужно, то параметр следует закомментировать.</p> <p>Можно индивидуально отключить ipv4 или ipv6. Если параметр закомментирован или не равен "1", использование протокола разрешено. #DISABLE_IPV4=1 DISABLE_IPV6=1</p> <p>Количество потоков для многопоточного DNS ресолвера mdig (1..100). Чем их больше, тем быстрее, но не обидится ли на долбежку ваш DNS сервер ? MDIG_THREADS=30</p> <p>Место для хранения временных файлов. При скачивании огромных реестров в /tmp места может не хватить. Если файловая система на нормальном носителе (не встроенная память роутера), то можно указать место на флэшке или диске. TMPDIR=/opt/zapret/tmp</p> <p>Опции для создания ipset-ов и nfset-ов</p> <p>SET_MAXELEM=262144 IPSET_OPT="hashsize 262144 maxelem 2097152"</p> <p>Хук, позволяющий внести ip адреса динамически. $1 = имя таблицы Адреса выводятся в stdout. В случае nfset автоматически решается проблема возможного пересечения интервалов. IPSET_HOOK="/etc/zapret.ipset.hook"</p> <p>ПРО РУГАНЬ в dmesg по поводу нехватки памяти. Может так случиться, что памяти в системе достаточно, но при попытке заполнить огромный ipset ядро начинает громко ругаться, ipset заполняется не полностью. Вероятная причина в том, что превышается hashsize, заданный при создании ipset (create_ipset.sh). Происходит переаллокация списка, не находится непрерывных фрагментов памяти нужной длины. Это лечится увеличением hashsize. Но чем больше hashsize, тем больше занимает ipset в памяти. Задавать слишком большой hashsize для недостаточно больших списков нецелесообразно.</p> <p>Опции для вызова ip2net. Отдельно для листов ipv4 и ipv6. IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4" IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"</p> <p>Настройка режима autohostlist. AUTOHOSTLIST_RETRANS_THRESHOLD=3 AUTOHOSTLIST_FAIL_THRESHOLD=2 AUTOHOSTLIST_FAIL_TIME=60 AUTOHOSTLIST_DEBUG=0</p> <p>Включить или выключить сжатие больших листов в скриптах ipset/*.sh. По умолчанию включено. GZIP_LISTS=1</p> <p>Команда для перезагрузки ip таблиц фаервола. Если не указано или пустое, выбирается автоматически ipset или ipfw при их наличии. На BSD системах с PF нет автоматической загрузки. Там нужно указать команду явно : pfctl -f /etc/pf.conf На более новых pfctl (есть в новых FreeBSD, нет в OpenBSD 6.8) можно дать команду загрузки только таблиц : pfctl -Tl -f /etc/pf.conf "-" означает отключение загрузки листов даже при наличии поддерживаемого backend. #LISTS_RELOAD="pfctl -f /etc/pf.conf" #LISTS_RELOAD=-</p> <p>В openwrt существует сеть по умолчанию 'lan'. Только трафик с этой сети будет перенаправлен на tpws. Но возможно задать другие сети или список сетей : OPENWRT_LAN="lan lan2 lan3"</p> <p>В openwrt в качестве wan берутся интерфейсы, имеющие default route. Отдельно для ipv4 и ipv6. Это можно переопределить : OPENWRT_WAN4="wan4 vpn" OPENWRT_WAN6="wan6 vpn6"</p> <p>Параметр INIT_APPLY_FW=1 разрешает init скрипту самостоятельно применять правила iptables. При иных значениях или если параметр закомментирован, правила применены не будут. Это полезно, если у вас есть система управления фаерволом, в настройки которой и следует прикрутить правила. На openwrt неприменимо при использовании firewall3+iptables.</p> <p>Следующие настройки не актуальны для openwrt :</p> <p>Если ваша система работает как роутер, то нужно вписать названия внутренних и внешних интерфейсов : IFACE_LAN=eth0 IFACE_WAN=eth1 IFACE_WAN6="henet ipsec0" Несколько интерфейсов могут быть вписаны через пробел. Если IFACE_WAN6 не задан, то берется значение IFACE_WAN.</p> <p>ВАЖНО : настройка маршрутизации , маскарада и т.д. не входит в задачу zapret. Включаются только режимы, обеспечивающие перехват транзитного трафика. Возможно определить несколько интерфейсов следующим образом : IFACE_LAN="eth0 eth1 eth2"</p> <h2>Прикручивание к системе управления фаерволом или своей системе запуска</h2> <p>Если вы используете какую-то систему управления фаерволом, то она может вступать в конфликт с имеющимся скриптом запуска. При повторном применении правил она могла бы поломать настройки iptables от zapret. В этом случае правила для iptables должны быть прикручены к вашему фаерволу отдельно от запуска tpws или nfqws.</p> <p>Следующие вызовы позволяют применить или убрать правила iptables отдельно :</p> <p>/opt/zapret/init.d/sysv/zapret start_fw /opt/zapret/init.d/sysv/zapret stop_fw /opt/zapret/init.d/sysv/zapret restart_fw</p> <p>А так можно запустить или остановить демоны отдельно от фаервола :</p> <p>/opt/zapret/init.d/sysv/zapret start_daemons /opt/zapret/init.d/sysv/zapret stop_daemons /opt/zapret/init.d/sysv/zapret restart_daemons</p> <p>nftables сводят практически на нет конфликты между разными системами управления, поскольку позволяют использовать независимые таблицы и хуки. Используется отдельная nf-таблица "zapret". Если ваша система ее не будет трогать, скорее всего все будет нормально.</p> <p>Для nftables предусмотрено несколько дополнительных вызовов :</p> <p>Посмотреть set-ы интерфейсов, относящихся к lan, wan и wan6. По ним идет завертывание трафика. А так же таблицу flow table с именами интерфейсов ingress hook. /opt/zapret/init.d/sysv/zapret list_ifsets</p> <p>Обновить set-ы интерфейсов, относящихся к lan, wan и wan6. Для традиционных linux список интерфейсов берется из переменных конфига IFACE_LAN, IFACE_WAN. Для openwrt определяется автоматически. Множество lanif может быть расширено параметром OPENWRT_LAN. Все интерфейсы lan и wan так же добавляются в ingress hook от flow table. /opt/zapret/init.d/sysv/zapret reload_ifsets</p> <p>Просмотр таблицы без содержимого set-ов. Вызывает nft -t list table inet zapret /opt/zapret/init.d/sysv/zapret list_table</p> <p>Так же возможно прицепиться своим скриптом к любой стадии применения и снятия фаервола со стороны zapret скриптов :</p> <p>INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up" INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up" INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down" INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down"</p> <p>Эти настройки доступны в config. Может быть полезно, если вам нужно использовать nftables set-ы, например ipban/ipban6. nfset-ы принадлежат только одной таблице, следовательно вам придется писать правила для таблицы zapret, а значит нужно синхронизироваться с применением/снятием правил со стороны zapret скриптов.</p> <h2>Вариант custom</h2> <p>custom код вынесен в отдельный shell include /opt/zapret/init.d/sysv/custom или /opt/zapret/init.d/openwrt/custom</p> <p>Нужно свой код вписать в функции : zapret_custom_daemons zapret_custom_firewall zapret_custom_firewall_nft</p> <p>В файле custom пишите ваш код, пользуясь хелперами из "functions" или "zapret". Смотрите как там сделано добавление iptables или запуск демонов. Используя хелпер функции, вы избавитесь от необходимости учитывать все возможные случаи типа наличия/отсутствия ipv6, является ли система роутером, имена интерфейсов, ... Хелперы это учитывают , вам нужно сосредоточиться лишь на фильтрах {ip,nf}tables и параметрах демонов.</p> <p>Код для openwrt и sysv немного отличается. В sysv нужно обрабатывать и запуск, и остановку демонов. Запуск это или остановка передается в параметре $1 (0 или 1). В openwrt за остановку отвечает procd.</p> <p>Для фаервола кастом пишется отдельно для iptables и nftables. Все очень похоже, но отличается написание фильтров и названия процедур хелперов. Если вам не нужны iptables или nftables - можете не писать соответствующую функцию.</p> <p>Готовый custom скрипт custom-tpws4http-nfqws4https позволяет применить дурение tpws к http и nfqws к https. При этом поддерживаются установки из config. Его можно использовать как стартовую точку для написания своих скриптов.</p> <h2>Простая установка</h2> <p>install_easy.sh автоматизирует ручные варианты процедур установки (см manual_setup.txt). Он поддерживает OpenWRT, linux системы на базе systemd или openrc и MacOS.</p> <p>Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".</p> <p>Если система запуска поддерживается, но используется не поддерживаемый инсталятором менеджер пакетов или названия пакетов не соответствуют прописанным в инсталятор, пакеты нужно установить вручную. Всегда требуется curl. ipset - только для режима iptables, для nftables - не нужен.</p> <p>Для совсем обрезанных дистрибутивов (alpine) требуется отдельно установить iptables и ip6tables, либо nftables.</p> <p>В комплекте идут статические бинарики для большинства архитектур. Какой-то из них подойдет с вероятностью 99%. Но если у вас экзотическая система, инсталятор попробует собрать бинарики сам через make. Для этого нужны gcc, make и необходимые -dev пакеты. Можно форсировать режим компиляции следующим вызовом :</p> <p>install_easy.sh make</p> <p>Под openwrt все уже сразу готово для использования системы в качестве роутера. Имена интерфейсов WAN и LAN известны из настроек системы. Под другими системами роутер вы настраиваете самостоятельно. Инсталятор в это не вмешивается. Инсталятор в зависимости от выбранного режима может спросить LAN и WAN интерфейсы. Нужно понимать, что заворот проходящего трафика на tpws в прозрачном режиме происходит до выполнения маршрутизации, следовательно возможна фильтрация по LAN и невозможна по WAN. Решение о завороте на tpws локального исходящего трафика принимается после выполнения маршрутизации, следовательно ситуация обратная : LAN не имеет смысла, фильтрация по WAN возможна. Заворот на nfqws происходит всегда после маршрутизации, поэтому к нему применима только фильтрация по WAN. Возможность прохождения трафика в том или ином направлении настраивается вами в процессе конфигурации роутера.</p> <p>Деинсталяция выполняется через uninstall_easy.sh</p> <h2>Простая установка на openwrt</h2> <p>Работает только если у вас на роутере достаточно места.</p> <p>Копируем zapret на роутер в /tmp.</p> <p>Запускаем установщик : sh /tmp/zapret/install_easy.sh Он скопирует в /opt/zapret только необходимый минимум файлов.</p> <p>После успешной установки можно удалить zapret из tmp для освобождения RAM : rm -r /tmp/zapret</p> <p>Для более гибкой настройки перед запуском инсталятора следует выполнить раздел "Выбор параметров".</p> <p>Система простой инсталяции заточена на любое умышленное или неумышленное изменение прав доступа на файлы. Устойчива к репаку под windows. После копирования в /opt права будут принудительно восстановлены.</p> <h2>Android</h2> <p>Без рута забудьте про nfqws и tpws в режиме transparent proxy. tpws будет работать только в режиме --socks.</p> <p>Ядра Android имеют поддержку NFQUEUE. nfqws работает.</p> <p>В стоковых ядрах нет поддержки ipset. В общем случае сложность задачи по поднятию ipset варьируется от "не просто" до "почти невозможно". Если только вы не найдете готовое собранное ядро под ваш девайс.</p> <p>tpws будет работать в любом случае, он не требует чего-либо особенного. В android нет /etc/passwd, потому опция --user не будет работать. Вместо нее можно пользоваться числовыми user id и опцией --uid. Рекомендую использовать gid 3003 (AID_INET). Иначе можете получить permission denied на создание сокета. Например : --uid 1:3003 В iptables укажите : "! --uid-owner 1" вместо "! --uid-owner tpws". Напишите шелл скрипт с iptables и tpws, запускайте его средствами вашего рут менеджера. Скрипты автозапуска лежат тут : magisk : /data/adb/service.d supersu : /system/su.d</p> <p>nfqws может иметь такой глюк. При запуске с uid по умолчанию (0x7FFFFFFF) при условии работы на сотовом интерфейсе и отключенном кабеле внешнего питания система может частично виснуть. Перестает работать тач и кнопки, но анимация на экране может продолжаться. Если экран был погашен, то включить его кнопкой power невозможно. Это, видимо, связано с переводом в suspend процессов с определенным UID. UID соответствует приложению или системному сервису. По UID android определяет политику power saving. Так же возможно, что глюк связан с кривым драйвером сотового интерфейса от китайцев, поскольку при использовании wifi такого не наблюдается. suspend обработчика nfqueue на обычном linux не вызывает подобных фатальных последствий. Изменение UID на низкий (--uid 1 подойдет) позволяет решить эту проблему. Глюк был замечен на android 8.1 на девайсе , основанном на платформе mediatek.</p> <p>Ответ на вопрос куда поместить tpws на android без рута, чтобы потом его запускать из приложений. Файл заливаем через adb shell в /data/local/tmp/, лучше всего в субфолдер. mkdir /data/local/tmp/zapret adb push tpws /data/local/tmp/zapret chmod 755 /data/local/tmp/zapret /data/local/tmp/zapret/tpws chcon u:object_r:system_file:s0 /data/local/tmp/zapret/tpws</p> <p>Как найти стратегию обхода сотового оператора : проще всего раздать инет на комп с linux. Можно записать live image linux на флэшку и загрузиться с нее или запустить виртуалку с linux и пробросить в нее usb устройство от режима модема с телефона. На компе с linux прогнать стандартную процедуру blockcheck. При переносе правил на телефон уменьшить TTL на 1, если правила с TTL присутствуют в стратегии. Можно развернуть rootfs какого-нибудь дистрибутива linux прямо на телефоне, имея рута. Это лучше всего делать с компа через adb shell. Если компа нет, то это единственный вариант, хотя и неудобный. Подойдет что-то легковесное, например, alpine или даже openwrt. Если это не эмулятор android, то универсальная архитектура - arm (любой вариант). Если вы точно знаете, что ОС у вас 64-разрядная, то лучше вместо arm - aarch64.</p> <p>mount --bind /dev /data/linux/dev mount --bind /proc /data/linux/proc mount --bind /sys /data/linux/sys chroot /data/linux</p> <p>Первым делом вам нужно будет один раз настроить DNS. Сам он не заведется.</p> <p>echo nameserver 1.1.1.1 &gt;/etc/resolv.conf</p> <p>Далее нужно средствами пакетного менеджера установить iptables-legacy. Обязательно НЕ iptables-nft, который как правило присутствует по умолчанию. В ядре android нет nftables. ls -la $(which iptables) Линк должен указывать на legacy вариант. Если нет, значит устанавливайте нужные пакеты вашего дестрибутива, и убеждайтесь в правильности ссылок. iptables -S Так можно проверить, что ваш iptables увидел то, что туда насовал android. iptables-nft выдаст ошибку. Далее качаем zapret в /opt/zapret. Обычные действия с install_prereq.sh, install_bin.sh, blockcheck.sh.</p> <p>Учтите, что стратегии обхода сотового оператора и домашнего wifi вероятно будут разные. Выделить сотового оператора легко через параметр iptables -o &lt;имя интерфейса&gt;. Имя может быть , например, ccmni0. Его легко увидеть через ifconfig. Wifi сеть - обычно wlan0.</p> <p>Переключать blockcheck между оператором и wifi можно вместе со всем инетом - включив или выключив wifi. Если найдете стратегию для wifi и впишите ее в автостарт, то при подключении к другому wifi она может не сработать или вовсе что-то поломать, потому подумайте стоит ли. Может быть лучше сделать скрипты типа "запустить обход домашнего wifi", "снять обход домашнего wifi", и пользоваться ими по необходимости из терминала. Но домашний wifi лучше все-же обходить на роутере.</p> <h2>Мобильные модемы и роутеры huawei</h2> <p>Устройства типа E3372, E8372, E5770 разделяют общую идеологию построения системы. Имеются 2 вычислительных ядра. Одно ядро выполняет vxworks, другое - linux. На 4pda имеются модицифированные прошивки с telnet и adb. Их и нужно использовать.</p> <p>Дальнейшие утверждения проверены на E8372. На других может быть аналогично или похоже. Присутствуют дополнительные аппаратные блоки для offload-а сетевых функций. Не весь трафик идет через linux. Исходящий трафик с самого модема проходит цепочку OUTPUT нормально, на FORWARD =&gt;wan часть пакетов выпадает из tcpdump.</p> <p>tpws работает обычным образом.</p> <p>nfqueue поломан. можно собрать фиксящий модуль <a href="https://github.com/im-0/unfuck-nfqueue-on-e3372h">https://github.com/im-0/unfuck-nfqueue-on-e3372h</a>, используя исходники с huawei open source. Исходники содержат тулчейн и полусобирающееся, неактуальное ядро. Конфиг можно взять с рабочего модема из /proc/config.gz. С помощью этих исходников умельцы могут собрать модуль unfuck_nfqueue.ko. После его применения NFQUEUE и nfqws для arm работают нормально.</p> <p>Чтобы избежать проблемы с offload-ом при использвании nfqws, следует комбинировать tpws в режиме tcp proxy и nfqws. Правила NFQUEUE пишутся для цепочки OUTPUT. connbytes придется опускать, поскольку модуля в ядре нет. Но это не смертельно.</p> <p>Скрипт автозапуска - /system/etc/autorun.sh. Создайте свой скрипт настройки zapret, запускайте из конца autorun.sh через "&amp;". Скрипт должен в начале делать sleep 5, чтобы дождаться поднятия сети и iptables от huawei.</p> <p>ПРЕДУПРЕЖДЕНИЕ. На этом модеме происходят хаотические сбросы соединений tcp по непонятным причинам. Выглядит это так, если запускать curl с самого модема : curl <a href="http://www.ru">www.ru</a> curl: (7) Failed to connect to <a href="http://www.ru">www.ru</a> port 80: Host is unreachable Возникает ошибка сокета EHOSTUNREACH (errno -113). То же самое видно в tpws. В броузере не подгружаются части веб страниц, картинки, стили. В tcpdump на внешнем интерфейсе eth_x виден только единственный и безответный SYN пакет, без сообщений ICMP. ОС каким-то образом узнает о невозможности установить TCP соединение и выдает ошибку. Если выполнять подключение с клиента, то SYN пропадают, соединение не устанавливается. ОС клиента проводит ретрансмиссию, и с какого-то раза подключение удается. Поэтому без tcp проксирования в этой ситуации сайты тупят, но загружаются, а с проксированием подключение выполняется, но вскоре сбрасывается без каких-либо данных, и броузеры не пытаются установить его заново. Поэтому качество броузинга с tpws может быть хуже, но дело не в tpws. Частота сбросов заметно возрастает, если запущен торент клиент, имеется много tcp соединений. Однако, причина не в переполнении таблицы conntrack. Увеличение лимитов и очистка conntrack не помогают. Предположительно эта особенность связана с обработкой пакетов сброса соединения в hardware offload. Точного ответа на вопрос у меня нет. Если вы знаете - поделитесь, пожалуйста. Чтобы не ухудшать качество броузинга, можно фильтровать заворот на tpws по ip фильтру. Поддержка ipset отсутствует. Значит, все, что можно сделать - создать индивидуальные правила на небольшое количество хостов.</p> <p>Некоторые наброски скриптов присутствуют в files/huawei. Не готовое решение ! Смотрите, изучайте, приспосабливайте. Здесь можно скачать готовые полезные статические бинарики для arm, включая curl : <a href="https://github.com/bol-van/bins">https://github.com/bol-van/bins</a></p> <h2>FreeBSD, OpenBSD, MacOS</h2> <p>Описано в docs/bsd.txt</p> <h2>Windows</h2> <p>Описано в docs/windows.txt</p> <h2>Другие прошивки</h2> <p>Для статических бинариков не имеет значения на чем они запущены : PC, android, приставка, роутер, любой другой девайс. Подойдет любая прошивка, дистрибутив linux. Статические бинарики запустятся на всем. Им нужно только ядро с необходимыми опциями сборки или модулями. Но кроме бинариков в проекте используются еще и скрипты, в которых задействуются некоторые стандартные программы.</p> <p>Основные причины почему нельзя просто так взять и установить эту систему на что угодно :</p> <ul> <li>отсутствие доступа к девайсу через shell</li> <li>отсутствие рута</li> <li>отсутствие раздела r/w для записи и энергонезависимого хранения файлов</li> <li>отсутствие возможности поставить что-то в автозапуск</li> <li>отсутствие cron</li> <li>неотключаемый flow offload или другая проприетарщина в netfilter</li> <li>недостаток модулей ядра или опций его сборки</li> <li>недостаток модулей iptables (/usr/lib/iptables/lib*.so)</li> <li>недостаток стандартных программ (типа ipset, curl) или их кастрированность (облегченная замена)</li> <li>кастрированный или нестандартный шелл sh</li> </ul> <p>Если в вашей прошивке есть все необходимое, то вы можете адаптировать zapret под ваш девайс в той или иной степени. Может быть у вас не получится поднять все части системы, однако вы можете хотя бы попытаться поднять tpws и завернуть на него через -j REDIRECT весь трафик на порт 80. Если вам есть куда записать tpws, есть возможность выполнять команды при старте, то как минимум это вы сделать сможете. Скорее всего поддержка REDIRECT в ядре есть. Она точно есть на любом роутере, на других устройствах под вопросом. NFQUEUE, ipset на большинстве прошивок отсутствуют из-за ненужности.</p> <p>Пересобрать ядро или модули для него будет скорее всего достаточно трудно. Для этого вам необходимо будет по крайней мере получить исходники вашей прошивки. User mode компоненты могут быть привнесены относительно безболезненно, если есть место куда их записать. Специально для девайсов, имеющих область r/w, существует проект entware. Некоторые прошивки даже имеют возможность его облегченной установки через веб интерфейс. entware содержит репозиторий user-mode компонент, которые устанавливаются в /opt. С их помощью можно компенсировать недостаток ПО основной прошивки, за исключением ядра.</p> <p>Можно попытаться использовать sysv init script таким образом, как это описано в разделе "Прикручивание к системе управления фаерволом или своей системе запуска". В случае ругани на отсутствие каких-то базовых программ, их следует восполнить посредством entware. Перед запуском скрипта путь к дополнительным программам должен быть помещен в PATH.</p> <p>Подробное описание настроек для других прошивок выходит за рамки данного проекта.</p> <p>Openwrt является одной из немногих относительно полноценных linux систем для embedded devices. Она характеризуется следующими вещами, которые и послужили основой выбора именно этой прошивки :</p> <ul> <li>полный root доступ к девайсу через shell. на заводских прошивках чаще всего отсутствует, на многих альтернативных есть</li> <li>корень r/w. это практически уникальная особенность openwrt. заводские и большинство альтернативных прошивок построены на базе squashfs root (r/o), а конфигурация хранится в специально отформатированной области встроенной памяти, называемой nvram. не имеющие r/w корня системы сильно кастрированы. они не имеют возможности доустановки ПО из репозитория без специальных вывертов и заточены в основном на чуть более продвинутого, чем обычно, пользователя и управление имеющимся функционалом через веб интерфейс, но функционал фиксированно ограничен. альтернативные прошивки как правило могут монтировать r/w раздел в какую-то область файловой системы, заводские обычно могут монтировать лишь флэшки, подключенные к USB, и не факт, что есть поддержка unix файловых системы. может быть поддержка только fat и ntfs.</li> <li>возможность выноса корневой файловой системы на внешний носитель (extroot) или создания на нем оверлея (overlay)</li> <li>наличие менеджера пакетов opkg и репозитория софта</li> <li>flow offload предсказуемо, стандартно и выборочно управляем, а так же отключаем</li> <li>в репозитории есть все модули ядра, их можно доустановить через opkg. ядро пересобирать не нужно.</li> <li>в репозитории есть все модули iptables, их можно доустановить через opkg</li> <li>в репозитории есть огромное количество стандартных программ и дополнительного софта</li> <li>наличие SDK, позволяющего собрать недостающее</li> </ul> <h2>Обход блокировки через сторонний хост</h2> <p>Если не работает автономный обход, приходится перенаправлять трафик через сторонний хост. Предлагается использовать прозрачный редирект через socks5 посредством iptables+redsocks, либо iptables+iproute+vpn. Настройка варианта с redsocks на openwrt описана в redsocks.txt. Настройка варианта с iproute+wireguard - в wireguard_iproute_openwrt.txt.</p> <h2>Почему стоит вложиться в покупку VPS</h2> <p>VPS - это виртуальный сервер. Существует огромное множество датацентров, предлагающих данную услугу. На VPS могут выполняться какие угодно задачи. От простого веб сайта до навороченной системы собственной разработки. Можно использовать VPS и для поднятия собственного vpn или прокси. Сама широта возможных способов применения , распространенность услуги сводят к минимуму возможности регуляторов по бану сервисов такого типа. Да, если введут белые списки, то решение загнется, но это будет уже другая реальность, в которой придется изобретать иные решения. Пока этого не сделали, никто не будет банить хостинги просто потому , что они предоставляют хостинг услуги. Вы как индивидуум скорее всего никому не нужны. Подумайте чем вы отличаетесь от известного VPN провайдера. VPN провайдер предоставляет <em>простую</em> и <em>доступную</em> услугу по обходу блокировок для масс. Этот факт делает его первоочередной целью блокировки. РКН направит уведомление, после отказа сотрудничать заблокирует VPN. Предоплаченная сумма пропадет. У регуляторов нет и никогда не будет ресурсов для тотальной проверки каждого сервера в сети. Возможен китайский расклад, при котором DPI выявляет vpn протоколы и динамически банит IP серверов, предоставляющих нелицензированный VPN. Но имея знания, голову, вы всегда можете обфусцировать vpn трафик или применить другие типы VPN, более устойчивые к анализу на DPI или просто менее широкоизвестные, а следовательно с меньшей вероятностью обнаруживамые регулятором. У вас есть свобода делать на вашем VPS все что вы захотите, адаптируясь к новым условиям. Да, это потребует знаний. Вам выбирать учиться и держать ситуацию под контролем, когда вам ничего запретить не могут, или покориться системе.</p> <p>VPS можно прибрести в множестве мест. Существуют специализированные на поиске предложений VPS порталы. Например, вот этот : <a href="https://vps.today/">https://vps.today/</a> Для персонального VPN сервера обычно достаточно самой минимальной конфигурации, но с безлимитным трафиком или с большим лимитом по трафику (терабайты). Важен и тип VPS. Openvz подойдет для openvpn, но вы не поднимете на нем wireguard, ipsec, то есть все, что требует kernel mode. Для kernel mode требуется тип виртуализации, предполагающий запуск полноценного экземпляра ОС linux вместе с ядром. Подойдут kvm, xen, hyper-v, vmware.</p> <p>По цене можно найти предложения, которые будут дешевле готовой VPN услуги, но при этом вы сам хозяин в своей лавке и не рискуете попасть под бан регулятора, разве что "заодно" под ковровую бомбардировку с баном миллионов IP. Кроме того, если вам совсем все кажется сложным, прочитанное вызывает ступор, и вы точно знаете, что ничего из описанного сделать не сможете, то вы сможете хотя бы использовать динамическое перенаправление портов ssh для получения шифрованного socks proxy и прописать его в броузер. Знания linux не нужны совсем. Это вариант наименее напряжный для чайников, хотя и не самый удобный в использовании.</p> + pytorch/torchchat + 2024-08-03T01:27:44Z + tag:github.com,2024-08-03:/pytorch/torchchat + + <p>Run PyTorch LLMs locally on servers, desktop and mobile</p><hr><h1>Chat with LLMs Everywhere</h1> <p>torchchat is a small codebase showcasing the ability to run large language models (LLMs) seamlessly. With torchchat, you can run LLMs using Python, within your own (C/C++) application (desktop or server) and on iOS and Android.</p> <h2>What can you do with torchchat?</h2> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#running-via-pytorch--python">Run models via PyTorch / Python</a> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#chat">Chat</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#generate">Generate</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#browser">Run chat in the Browser</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#desktopserver-execution">Run models on desktop/server without python</a> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#aoti-aot-inductor">Use AOT Inductor for faster execution</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#running-native-using-our-c-runner">Running in c++ using the runner</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#mobile-execution">Run models on mobile</a> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#deploy-and-run-on-ios">Deploy and run on iOS</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#deploy-and-run-on-android">Deploy and run on Android</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#eval">Evaluate a model</a></li> </ul> <h2>Highlights</h2> <ul> <li>Command line interaction with popular LLMs such as Llama 3, Llama 2, Stories, Mistral and more</li> <li>PyTorch-native execution with performance</li> <li>Supports popular hardware and OS <ul> <li>Linux (x86)</li> <li>Mac OS (M1/M2/M3)</li> <li>Android (Devices that support XNNPACK)</li> <li>iOS 17+ (iPhone 13 Pro+)</li> </ul> </li> <li>Multiple data types including: float32, float16, bfloat16</li> <li>Multiple quantization schemes</li> <li>Multiple execution modes including: Python (Eager, Compile) or Native (AOT Inductor (AOTI), ExecuTorch)</li> </ul> <h2>Installation</h2> <p>The following steps require that you have <a href="https://www.python.org/downloads/release/python-3100/">Python 3.10</a> installed.</p> <pre><code class="language-bash"># get the code git clone https://github.com/pytorch/torchchat.git cd torchchat # set up a virtual environment python3 -m venv .venv source .venv/bin/activate # install dependencies ./install_requirements.sh </code></pre> <h2>Commands</h2> <p>The interfaces of torchchat are leveraged through <strong>Python Commands</strong> and <strong>Native Runners</strong>. While the Python Commands are enumerable in the --help menu, the latter are explored in their respective sections.</p> <pre><code class="language-bash">python3 torchchat.py --help </code></pre> <pre><code class="language-bash"># Output usage: torchchat [-h] {chat,browser,generate,export,eval,download,list,remove,where,server} ... positional arguments: {chat,browser,generate,export,eval,download,list,remove,where,server} The specific command to run chat Chat interactively with a model via the CLI generate Generate responses from a model given a prompt browser Chat interactively with a model in a locally hosted browser export Export a model artifact to AOT Inductor or ExecuTorch download Download model artifacts list List all supported models remove Remove downloaded model artifacts where Return directory containing downloaded model artifacts server [WIP] Starts a locally hosted REST server for model interaction eval Evaluate a model via lm-eval options: -h, --help show this help message and exit </code></pre> <p><strong>Python Inference</strong> (chat, generate, browser, server)</p> <ul> <li>These commands represent different flavors of performing model inference in a Python enviroment.</li> <li>Models are constructed either from CLI args or from loading exported artifacts.</li> </ul> <p><strong>Exporting</strong> (export)</p> <ul> <li>This command generates model artifacts that are consumed by Python Inference or Native Runners.</li> <li>More information is provided in the <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#aoti-aot-inductor">AOT Inductor</a> and <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#export-for-mobile">ExecuTorch</a> sections.</li> </ul> <p><strong>Inventory Management</strong> (download, list, remove, where)</p> <ul> <li>These commands are used to manage and download models.</li> <li>More information is provided in the <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#download-weights">Download Weights</a> section.</li> </ul> <p><strong>Evaluation</strong> (eval)</p> <ul> <li>This command test model fidelity via EleutherAI's <a href="https://github.com/EleutherAI/lm-evaluation-harness">lm_evaluation_harness</a>.</li> <li>More information is provided in the <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#eval">Evaluation</a> section.</li> </ul> <h2>Download Weights</h2> <p>Most models use Hugging Face as the distribution channel, so you will need to create a Hugging Face account. Create a Hugging Face user access token <a href="https://huggingface.co/docs/hub/en/security-tokens">as documented here</a> with the <code>write</code> role.</p> <p>Log into Hugging Face:</p> <pre><code>huggingface-cli login </code></pre> <p>Once this is done, torchchat will be able to download model artifacts from Hugging Face.</p> <pre><code>python3 torchchat.py download llama3.1 </code></pre> <blockquote> <p>[!NOTE] This command may prompt you to request access to Llama 3 via Hugging Face, if you do not already have access. Simply follow the prompts and re-run the command when access is granted.*</p> </blockquote> <details> <summary>Additional Model Inventory Management Commands</summary> <h3>List</h3> <p>This subcommands shows the available models</p> <pre><code class="language-bash">python3 torchchat.py list </code></pre> <h3>Where</h3> <p>This subcommands shows location of a particular model.</p> <pre><code class="language-bash">python3 torchchat.py list </code></pre> <p>This is useful in scripts when you do not want to hard-code paths</p> <h3>Remove</h3> <p>This subcommands removes the specified model</p> <pre><code class="language-bash">python3 torchchat.py remove llama3.1 </code></pre> <p>More information about these commands can be found by adding the <code>--help</code> option.</p> </details> <h2>Running via PyTorch / Python</h2> <p>The simplest way to run a model in PyTorch is via <a href="https://pytorch.org/blog/optimizing-production-pytorch-performance-with-graph-transformations/">eager execution</a>. This is the default execution mode for both PyTorch and torchchat. It performs inference without creating exporting artifacts or using a separate runner.</p> <p>The model used for inference can also be configured and tailored to specific needs (compilation, quantization, etc.). See the <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/model_customization.md">customization guide</a> for the options supported by torchchat.</p> <blockquote> <p>[!TIP] For more information about these commands, please refer to the <code>--help</code> menu.</p> </blockquote> <h3>Chat</h3> <p>This mode allows you to chat with an LLM in an interactive fashion.</p> <pre><code class="language-bash">python3 torchchat.py chat llama3.1 </code></pre> <h3>Generate</h3> <p>This mode generates text based on an input prompt.</p> <pre><code class="language-bash">python3 torchchat.py generate llama3.1 --prompt "write me a story about a boy and his bear" </code></pre> <h3>Browser</h3> <p>This mode allows you to chat with the model using a UI in your browser Running the command automatically open a tab in your browser.</p> <pre><code>streamlit run torchchat.py -- browser llama3.1 </code></pre> <h3>Server</h3> <p><strong>Note: This feature is still a work in progress and not all endpoints are working</strong></p> <details> <summary>This mode gives a REST API that matches the OpenAI API spec for interacting with a model</summary> <p>To test out the REST API, <strong>you'll need 2 terminals</strong>: one to host the server, and one to send the request.</p> <p>In one terminal, start the server</p> <pre><code class="language-bash">python3 torchchat.py server llama3.1 </code></pre> <p>In another terminal, query the server using <code>curl</code>. Depending on the model configuration, this query might take a few minutes to respond.</p> <p>Setting <code>stream</code> to "true" in the request emits a response in chunks. Currently, this response is plaintext and will not be formatted to the OpenAI API specification. If <code>stream</code> is unset or not "true", then the client will await the full response from the server.</p> <p><strong>Example Input + Output</strong></p> <pre><code>curl http://127.0.0.1:5000/chat \ -H "Content-Type: application/json" \ -d '{ "model": "llama3.1", "stream": "true", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] }' </code></pre> <pre><code>{"response":" I'm a software developer with a passion for building innovative and user-friendly applications. I have experience in developing web and mobile applications using various technologies such as Java, Python, and JavaScript. I'm always looking for new challenges and opportunities to learn and grow as a developer.\n\nIn my free time, I enjoy reading books on computer science and programming, as well as experimenting with new technologies and techniques. I'm also interested in machine learning and artificial intelligence, and I'm always looking for ways to apply these concepts to real-world problems.\n\nI'm excited to be a part of the developer community and to have the opportunity to share my knowledge and experience with others. I'm always happy to help with any questions or problems you may have, and I'm looking forward to learning from you as well.\n\nThank you for visiting my profile! I hope you find my information helpful and interesting. If you have any questions or would like to discuss any topics, please feel free to reach out to me. I"} </code></pre> </details> <h2>Desktop/Server Execution</h2> <h3>AOTI (AOT Inductor)</h3> <p><a href="https://pytorch.org/blog/pytorch2-2/">AOTI</a> compiles models before execution for faster inference. The process creates a <a href="https://en.wikipedia.org/wiki/Shared_library">DSO</a> model (represented by a file with extension <code>.so</code>) that is then loaded for inference. This can be done with both Python and C++ enviroments.</p> <p>The following example exports and executes the Llama3.1 8B Instruct model. The first command compiles and performs the actual export.</p> <pre><code>python3 torchchat.py export llama3.1 --output-dso-path exportedModels/llama3.1.so </code></pre> <blockquote> <p>[!NOTE] If your machine has cuda add this flag for performance <code>--quantize config/data/cuda.json</code> when exporting.</p> </blockquote> <p>For more details on quantization and what settings to use for your use case visit our <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/model_customization.md">customization guide</a>.</p> <h3>Run in a Python Enviroment</h3> <p>To run in a python enviroment, use the generate subcommand like before, but include the dso file.</p> <pre><code>python3 torchchat.py generate llama3.1 --dso-path exportedModels/llama3.1.so --prompt "Hello my name is" </code></pre> <p><strong>Note:</strong> Depending on which accelerator is used to generate the .dso file, the command may need the device specified: <code>--device (cuda | cpu)</code>.</p> <h3>Run using our C++ Runner</h3> <p>To run in a C++ enviroment, we need to build the runner binary.</p> <pre><code class="language-bash">scripts/build_native.sh aoti </code></pre> <p>Then run the compiled executable, with the exported DSO from earlier.</p> <pre><code class="language-bash">cmake-out/aoti_run exportedModels/llama3.1.so -z `python3 torchchat.py where llama3.1`/tokenizer.model -l 3 -i "Once upon a time" </code></pre> <p><strong>Note:</strong> Depending on which accelerator is used to generate the .dso file, the runner may need the device specified: <code>-d (CUDA | CPU)</code>.</p> <h2>Mobile Execution</h2> <p><a href="https://github.com/pytorch/executorch">ExecuTorch</a> enables you to optimize your model for execution on a mobile or embedded device.</p> <h3>Set Up ExecuTorch</h3> <p>Before running any commands in torchchat that require ExecuTorch, you must first install ExecuTorch.</p> <p>To install ExecuTorch, run the following commands. This will download the ExecuTorch repo to ./et-build/src and install various ExecuTorch libraries to ./et-build/install.</p> <blockquote> <p>[!IMPORTANT] The following commands should be run from the torchchat root directory.</p> </blockquote> <pre><code>export TORCHCHAT_ROOT=${PWD} ./scripts/install_et.sh </code></pre> <h3>Export for mobile</h3> <p>Similar to AOTI, to deploy onto device, we first export the PTE artifact, then we load the artifact for inference.</p> <p>The following example uses the Llama3.1 8B Instruct model.</p> <pre><code># Export python3 torchchat.py export llama3.1 --quantize config/data/mobile.json --output-pte-path llama3.1.pte </code></pre> <blockquote> <p>[!NOTE] We use <code>--quantize config/data/mobile.json</code> to quantize the llama3.1 model to reduce model size and improve performance for on-device use cases.</p> </blockquote> <p>For more details on quantization and what settings to use for your use case visit our <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/model_customization.md">customization guide</a>.</p> <h3>Deploy and run on Desktop</h3> <p>While ExecuTorch does not focus on desktop inference, it is capable of doing so. This is handy for testing out PTE models without sending them to a physical device.</p> <p>Specifically there are 2 ways of doing so: Pure Python and via a Runner</p> <details> <summary>Deploying via Python</summary> <pre><code># Execute python3 torchchat.py generate llama3.1 --device cpu --pte-path llama3.1.pte --prompt "Hello my name is" </code></pre> </details> <details> <summary>Deploying via a Runner</summary> <p>Build the runner</p> <pre><code class="language-bash">scripts/build_native.sh et </code></pre> <p>Execute using the runner</p> <pre><code class="language-bash">cmake-out/et_run llama3.1.pte -z `python3 torchchat.py where llama3.1`/tokenizer.model -l 3 -i "Once upon a time" </code></pre> </details> <h3>Deploy and run on iOS</h3> <p>The following assumes you've completed the steps for <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#set-up-executorch">Setting up ExecuTorch</a>.</p> <details> <summary>Deploying with Xcode</summary> <h4>Requirements</h4> <ul> <li><a href="https://apps.apple.com/us/app/xcode/id497799835?mt=12/">Xcode</a> 15.0 or later</li> <li><a href="https://cmake.org/download/">Cmake</a> 3.19 or later <ul> <li>Download and open the macOS <code>.dmg</code> installer and move the Cmake app to <code>/Applications</code> folder.</li> <li>Install Cmake command line tools: <code>sudo /Applications/CMake.app/Contents/bin/cmake-gui --install</code></li> </ul> </li> <li>A development provisioning profile with the <a href="https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_kernel_increased-memory-limit"><code>increased-memory-limit</code></a> entitlement.</li> </ul> <h4>Steps</h4> <ol> <li> <p>Open the Xcode project:</p> <pre><code class="language-bash">open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeproj </code></pre> <blockquote> <p>Note: If you're running into any issues related to package dependencies, close Xcode, clean some of the caches and/or the build products, and open the Xcode project again:</p> <pre><code class="language-bash">rm -rf \ ~/Library/org.swift.swiftpm \ ~/Library/Caches/org.swift.swiftpm \ ~/Library/Caches/com.apple.dt.Xcode \ ~/Library/Developer/Xcode/DerivedData </code></pre> </blockquote> </li> <li> <p>Click the Play button to launch the app in the Simulator.</p> </li> <li> <p>To run on a device, ensure you have it set up for development and a provisioning profile with the <code>increased-memory-limit</code> entitlement. Update the app's bundle identifier to match your provisioning profile with the required capability.</p> </li> <li> <p>After successfully launching the app, copy the exported ExecuTorch model (<code>.pte</code>) and tokenizer (<code>.model</code>) files to the iLLaMA folder. You can find the model file called <code>llama3.1.pte</code> in the current <code>torchchat</code> directory and the tokenizer file at <code>$(python3 torchchat.py where llama3.1)/tokenizer.model</code> path.</p> <ul> <li><strong>For the Simulator:</strong> Drag and drop both files onto the Simulator window and save them in the <code>On My iPhone &gt; iLLaMA</code> folder.</li> <li><strong>For a device:</strong> Open a separate Finder window, navigate to the Files tab, drag and drop both files into the iLLaMA folder, and wait for the copying to finish.</li> </ul> </li> <li> <p>Follow the app's UI guidelines to select the model and tokenizer files from the local filesystem and issue a prompt.</p> </li> </ol> <p><em>Click the image below to see it in action!</em></p> <p align="center"> <a href="https://pytorch.org/executorch/main/_static/img/llama_ios_app.mp4"> <img src="https://pytorch.org/executorch/main/_static/img/llama_ios_app.png" width="600" alt="iOS app running a LlaMA model"> </a> </p> </details> <h3>Deploy and run on Android</h3> <p>The following assumes you've completed the steps for <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#set-up-executorch">Setting up ExecuTorch</a>.</p> <details> <summary>Approach 1 (Recommended): Android Studio</summary> <h4>Requirements</h4> <ul> <li>Android Studio</li> <li><a href="https://developer.android.com/build/jdks">Java 17</a></li> <li><a href="https://developer.android.com/about/versions/14/setup-sdk">Android SDK 34</a></li> <li><a href="https://developer.android.com/tools/adb">adb</a></li> </ul> <h4>Steps</h4> <ol> <li> <p>Download the AAR file, which contains the Java library and corresponding JNI library, to build and run the app.</p> <ul> <li><a href="https://ossci-android.s3.amazonaws.com/executorch/main/executorch-llama-tiktoken-rc3-0719.aar">executorch-llama-tiktoken-rc3-0719.aar</a> (SHASUM: c3e5d2a97708f033c2b1839a89f12f737e3bbbef)</li> </ul> </li> <li> <p>Rename the downloaded AAR file to <code>executorch.aar</code> and move the file to <code>android/torchchat/app/libs/</code>. You may need to create directory <code>android/torchchat/app/libs/</code> if it does not exist.</p> </li> <li> <p>Push the model and tokenizer file to your device. You can find the model file called <code>llama3.1.pte</code> in the current <code>torchchat</code> directory and the tokenizer file at <code>$(python3 torchchat.py where llama3.1)/tokenizer.model</code> path.</p> <pre><code>adb shell mkdir -p /data/local/tmp/llama adb push &lt;model.pte&gt; /data/local/tmp/llama adb push &lt;tokenizer.model or tokenizer.bin&gt; /data/local/tmp/llama </code></pre> </li> <li> <p>Use Android Studio to open the torchchat app skeleton, located at <code>android/torchchat</code>.</p> </li> <li> <p>Click the Play button (^R) to launch it to emulator/device.</p> <ul> <li>We recommend using a device with at least 12GB RAM and 20GB storage.</li> <li>If using an emulated device, refer to <a href="https://stackoverflow.com/questions/45517553/cant-change-the-ram-size-in-avd-manager-android-studio">this post</a> on how to set the RAM.</li> </ul> </li> <li> <p>Follow the app's UI guidelines to pick the model and tokenizer files from the local filesystem. Then issue a prompt.</p> </li> </ol> <p><strong>Note:</strong> The AAR file listed in Step 1 has the tiktoken tokenizer, which is used for Llama 3. To tweak or use a custom tokenizer and runtime, modify the ExecuTorch code and use <a href="https://github.com/pytorch/executorch/raw/main/build/build_android_llm_demo.sh">this script</a> to build the AAR library. For convenience, we also provide an AAR for sentencepiece tokenizer (e.g. Llama 2): <a href="https://ossci-android.s3.amazonaws.com/executorch/main/executorch-llama-bpe-rc3-0719.aar">executorch-llama-bpe-rc3-0719.aar</a> (SHASUM: d5fe81d9a4700c36b50ae322e6bf34882134edb0)</p> <p align="center"> <img src="https://pytorch.org/executorch/main/_static/img/android_llama_app.png" width="600" alt="Android app running a LlaMA model"> </p> </details> <details> <summary>Approach 2: E2E Script</summary> <p>Alternatively, you can run <code>scripts/android_example.sh</code> which sets up Java, Android SDK Manager, Android SDK, Android emulator (if no physical device is found), builds the app, and launches it for you. It can be used if you don't have a GUI.</p> <pre><code>export TORCHCHAT_ROOT=$(pwd) export USE_TIKTOKEN=ON # Set this only for tiktoken tokenizer sh scripts/android_example.sh </code></pre> </details> <h2>Eval</h2> <p><strong>Note: This feature is still a work in progress and not all features are working</strong></p> <p>Uses the lm_eval library to evaluate model accuracy on a variety of tasks. Defaults to wikitext and can be manually controlled using the tasks and limit args. See <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/evaluation.md">Evaluation</a></p> <p><strong>Examples</strong></p> <p>Eager mode:</p> <pre><code>python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5 </code></pre> <p>To test the perplexity for a lowered or quantized model, pass it in the same way you would to generate:</p> <pre><code>python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5 </code></pre> <h2>Models</h2> <p>The following models are supported by torchchat and have associated aliases.</p> <table> <thead> <tr> <th>Model</th> <th>Mobile Friendly</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct">meta-llama/Meta-Llama-3.1-8B-Instruct</a></td> <td>✅</td> <td>Tuned for <code>chat</code> . Alias to <code>llama3.1</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B">meta-llama/Meta-Llama-3.1-8B</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>llama3.1-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct">meta-llama/Meta-Llama-3-8B-Instruct</a></td> <td>✅</td> <td>Tuned for <code>chat</code> . Alias to <code>llama3</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B">meta-llama/Meta-Llama-3-8B</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>llama3-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-7b-chat-hf">meta-llama/Llama-2-7b-chat-hf</a></td> <td>✅</td> <td>Tuned for <code>chat</code>. Alias to <code>llama2</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-13b-chat-hf">meta-llama/Llama-2-13b-chat-hf</a></td> <td></td> <td>Tuned for <code>chat</code>. Alias to <code>llama2-13b-chat</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-70b-chat-hf">meta-llama/Llama-2-70b-chat-hf</a></td> <td></td> <td>Tuned for <code>chat</code>. Alias to <code>llama2-70b-chat</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-7b-hf">meta-llama/Llama-2-7b-hf</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>llama2-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/CodeLlama-7b-Python-hf">meta-llama/CodeLlama-7b-Python-hf</a></td> <td>✅</td> <td>Tuned for Python and <code>generate</code>. Alias to <code>codellama</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/CodeLlama-34b-Python-hf">meta-llama/CodeLlama-34b-Python-hf</a></td> <td>✅</td> <td>Tuned for Python and <code>generate</code>. Alias to <code>codellama-34b</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/mistralai/Mistral-7B-v0.1">mistralai/Mistral-7B-v0.1</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>mistral-7b-v01-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1">mistralai/Mistral-7B-Instruct-v0.1</a></td> <td>✅</td> <td>Tuned for <code>chat</code>. Alias to <code>mistral-7b-v01-instruct</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2">mistralai/Mistral-7B-Instruct-v0.2</a></td> <td>✅</td> <td>Tuned for <code>chat</code>. Alias to <code>mistral</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/karpathy/tinyllamas/tree/main">tinyllamas/stories15M</a></td> <td>✅</td> <td>Toy model for <code>generate</code>. Alias to <code>stories15M</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/karpathy/tinyllamas/tree/main">tinyllamas/stories42M</a></td> <td>✅</td> <td>Toy model for <code>generate</code>. Alias to <code>stories42M</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/karpathy/tinyllamas/tree/main">tinyllamas/stories110M</a></td> <td>✅</td> <td>Toy model for <code>generate</code>. Alias to <code>stories110M</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/openlm-research/open_llama_7b">openlm-research/open_llama_7b</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>open-llama</code>.</td> </tr> </tbody> </table> <p>While we describe how to use torchchat using the popular llama3 model, you can perform the example commands with any of these models.</p> <h2>Design Principles</h2> <p>torchchat embodies PyTorch’s design philosophy <a href="https://pytorch.org/docs/stable/community/design.html">details</a>, especially "usability over everything else".</p> <h3>Native PyTorch</h3> <p>torchchat is a native-PyTorch library. While we provide integrations with the surrounding ecosystem (eg: Hugging Face models, etc), all of the core functionality is written in PyTorch.</p> <h3>Simplicity and Extensibility</h3> <p>torchchat is designed to be easy to understand, use and extend.</p> <ul> <li>Composition over implementation inheritance - layers of inheritance for code re-use makes the code hard to read and extend</li> <li>No training frameworks - explicitly outlining the training logic makes it easy to extend for custom use cases</li> <li>Code duplication is preferred over unnecessary abstractions</li> <li>Modular building blocks over monolithic components</li> </ul> <h3>Correctness</h3> <p>torchchat provides well-tested components with a high-bar on correctness. We provide</p> <ul> <li>Extensive unit-tests to ensure things operate as they should</li> </ul> <h2>Community Contributions</h2> <p>We really value our community and the contributions made by our wonderful users. We'll use this section to call out some of these contributions! If you'd like to help out as well, please see the <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/CONTRIBUTING.md">CONTRIBUTING</a> guide.</p> <h2>Troubleshooting</h2> <p>A section of commonly encountered setup errors/exceptions. If this section doesn't contain your situation, check the GitHub <a href="https://github.com/pytorch/torchchat/issues">issues</a></p> <h3>Model Access</h3> <p><strong>Access to model is restricted and you are not in the authorized list</strong></p> <p>Some models require an additional step to access. Follow the link provided in the error to get access.</p> <h3>Installing ExecuTorch</h3> <p><strong>Failed Building Wheel</strong></p> <p>If <code>./scripts/install_et.sh</code> fails with an error like <code>Building wheel for executorch (pyproject.toml) did not run successfully</code> It's possible that it's linking to an older version of pytorch installed some other way like via homebrew. You can break the link by uninstalling other versions such as <code>brew uninstall pytorch</code> Note: You may break something that depends on this, so be aware.</p> <p><strong>CERTIFICATE_VERIFY_FAILED</strong></p> <p>Run <code>pip install --upgrade certifi</code>.</p> <h2>Filing Issues</h2> <p>If you encounter bugs or difficulty using torchchat, please file an GitHub <a href="https://github.com/pytorch/torchchat/issues">issue</a>.</p> <p>Please include the exact command you ran and the output of that command. Also, run this script and include the output saved to <code>system_info.txt</code> so that we can better debug your issue.</p> <pre><code>(echo "Operating System Information"; uname -a; echo ""; cat /etc/os-release; echo ""; echo "Python Version"; python --version || python3 --version; echo ""; echo "PIP Version"; pip --version || pip3 --version; echo ""; echo "Installed Packages"; pip freeze || pip3 freeze; echo ""; echo "PyTorch Version"; python -c "import torch; print(torch.__version__)" || python3 -c "import torch; print(torch.__version__)"; echo ""; echo "Collection Complete") &gt; system_info.txt </code></pre> <h2>Disclaimer</h2> <p>The torchchat Repository Content is provided without any guarantees about performance or compatibility. In particular, torchchat makes available model architectures written in Python for PyTorch that may not perform in the same manner or meet the same standards as the original versions of those models. When using the torchchat Repository Content, including any model architectures, you are solely responsible for determining the appropriateness of using or redistributing the torchchat Repository Content and assume any risks associated with your use of the torchchat Repository Content or any models, outputs, or results, both alone and in combination with any other technologies. Additionally, you may have other legal obligations that govern your use of other content, such as the terms of service for third-party models, weights, data, or other technologies, and you are solely responsible for complying with all such obligations.</p> <h2>Acknowledgements</h2> <p>Thank you to the community for all the awesome libraries and tools you've built around local LLM inference.</p> <ul> <li> <p>Georgi Gerganov and his <a href="https://github.com/ggerganov/ggml">GGML</a> project shining a spotlight on community-based enablement and inspiring so many other projects.</p> </li> <li> <p>Andrej Karpathy and his <a href="https://github.com/karpathy/llama2.c">llama2.c</a> project. So many great (and simple!) ideas in llama2.c that we have directly adopted (both ideas and code) from his repo. You can never go wrong by following Andrej's work.</p> </li> <li> <p>Michael Gschwind, Bert Maher, Scott Wolchok, Bin Bao, Chen Yang, Huamin Li and Mu-Chu Li who built the first version of nanogpt (<code>DSOGPT</code>) with AOT Inductor proving that AOTI can be used to build efficient LLMs, and DSOs are a viable distribution format for models. <a href="https://github.com/karpathy/nanoGPT">nanoGPT</a>.</p> </li> <li> <p>Bert Maher and his <a href="https://github.com/bertmaher/llama2.so">llama2.so</a>, which built on Andrej's llama2.c and on DSOGPT to close the loop on Llama models with AOTInductor.</p> </li> <li> <p>Christian Puhrsch, Horace He, Joe Isaacson and many more for their many contributions in Accelerating GenAI models in the <em>"Anything, Fast!"</em> pytorch.org blogs, and, in particular, Horace He for <a href="https://github.com/pytorch-labs/gpt-fast">GPT, Fast!</a>, which we have directly adopted (both ideas and code) from his repo.</p> </li> </ul> <h2>License</h2> <p>torchchat is released under the <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/LICENSE">BSD 3 license</a>. (Additional code in this distribution is covered by the MIT and Apache Open Source licenses.) However you may have other legal obligations that govern your use of content, such as the terms of service for third-party models.</p> - RSSNext/follow - 2024-08-02T01:27:31Z - tag:github.com,2024-08-02:/RSSNext/follow - - <p>🧡 Next generation information browser</p><hr><p align="center"> <img src="https://github.com/RSSNext/follow/assets/41265413/c6c02ad5-cddc-46f5-8420-a47afe1c82fe" alt="Follow" width="100"> </p> <h1 align="center">Follow</h1> <blockquote> <p>Next generation information browser</p> </blockquote> <p>Roadmap: <a href="https://github.com/orgs/RSSNext/projects/1/views/1">https://github.com/orgs/RSSNext/projects/1/views/1</a></p> <p><a href="https://discord.gg/xHCVQZ6wmZ"><img src="https://img.shields.io/discord/1243823539426033696?logo=discord&amp;label=Discord&amp;style=flat-square&amp;color=5865F2" alt="Discord"></a> <a href="https://x.com/intent/follow?screen_name=follow_app_"><img src="https://img.shields.io/badge/any_text-Follow-blue?color=2CA5E0&amp;label=_&amp;logo=x&amp;cacheSeconds=3600&amp;style=flat-square" alt=""></a></p> <h2>License</h2> <p>Follow Desktop is licensed under the GNU General Public License version 3 with the addition of the following special exception:</p> <p>All content in the <code>icons/mgc</code> directory is copyrighted by <a href="https://mgc.mingcute.com/">https://mgc.mingcute.com/</a> and cannot be redistributed.</p> + getredash/redash + 2024-08-03T01:27:44Z + tag:github.com,2024-08-03:/getredash/redash + + <p>Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.</p><hr><p align="center"> <img title="Redash" src="https://redash.io/assets/images/logo.png" width="200px"> </p> <p><a href="https://redash.io/help/"><img src="https://img.shields.io/badge/docs-redash.io/help-brightgreen.svg?sanitize=true" alt="Documentation"></a> <a href="https://github.com/getredash/redash/actions"><img src="https://github.com/getredash/redash/actions/workflows/ci.yml/badge.svg?sanitize=true" alt="GitHub Build"></a></p> <p>Redash is designed to enable anyone, regardless of the level of technical sophistication, to harness the power of data big and small. SQL users leverage Redash to explore, query, visualize, and share data from any data sources. Their work in turn enables anybody in their organization to use the data. Every day, millions of users at thousands of organizations around the world use Redash to develop insights and make data-driven decisions.</p> <p>Redash features:</p> <ol> <li><strong>Browser-based</strong>: Everything in your browser, with a shareable URL.</li> <li><strong>Ease-of-use</strong>: Become immediately productive with data without the need to master complex software.</li> <li><strong>Query editor</strong>: Quickly compose SQL and NoSQL queries with a schema browser and auto-complete.</li> <li><strong>Visualization and dashboards</strong>: Create <a href="https://redash.io/help/user-guide/visualizations/visualization-types">beautiful visualizations</a> with drag and drop, and combine them into a single dashboard.</li> <li><strong>Sharing</strong>: Collaborate easily by sharing visualizations and their associated queries, enabling peer review of reports and queries.</li> <li><strong>Schedule refreshes</strong>: Automatically update your charts and dashboards at regular intervals you define.</li> <li><strong>Alerts</strong>: Define conditions and be alerted instantly when your data changes.</li> <li><strong>REST API</strong>: Everything that can be done in the UI is also available through REST API.</li> <li><strong>Broad support for data sources</strong>: Extensible data source API with native support for a long list of common databases and platforms.</li> </ol> <img src="https://raw.githubusercontent.com/getredash/website/8e820cd02c73a8ddf4f946a9d293c54fd3fb08b9/website/_assets/images/redash-anim.gif" width="80%"> <h2>Getting Started</h2> <ul> <li><a href="https://redash.io/help/open-source/setup">Setting up Redash instance</a> (includes links to ready-made AWS/GCE images).</li> <li><a href="https://redash.io/help/">Documentation</a>.</li> </ul> <h2>Supported Data Sources</h2> <p>Redash supports more than 35 SQL and NoSQL <a href="https://redash.io/help/data-sources/supported-data-sources">data sources</a>. It can also be extended to support more. Below is a list of built-in sources:</p> <ul> <li>Amazon Athena</li> <li>Amazon CloudWatch / Insights</li> <li>Amazon DynamoDB</li> <li>Amazon Redshift</li> <li>ArangoDB</li> <li>Axibase Time Series Database</li> <li>Apache Cassandra</li> <li>ClickHouse</li> <li>CockroachDB</li> <li>Couchbase</li> <li>CSV</li> <li>Databricks</li> <li>DB2 by IBM</li> <li>Dgraph</li> <li>Apache Drill</li> <li>Apache Druid</li> <li>e6data</li> <li>Eccenca Corporate Memory</li> <li>Elasticsearch</li> <li>Exasol</li> <li>Microsoft Excel</li> <li>Firebolt</li> <li>Databend</li> <li>Google Analytics</li> <li>Google BigQuery</li> <li>Google Spreadsheets</li> <li>Graphite</li> <li>Greenplum</li> <li>Apache Hive</li> <li>Apache Impala</li> <li>InfluxDB</li> <li>InfluxDBv2</li> <li>IBM Netezza Performance Server</li> <li>JIRA (JQL)</li> <li>JSON</li> <li>Apache Kylin</li> <li>OmniSciDB (Formerly MapD)</li> <li>MariaDB</li> <li>MemSQL</li> <li>Microsoft Azure Data Warehouse / Synapse</li> <li>Microsoft Azure SQL Database</li> <li>Microsoft Azure Data Explorer / Kusto</li> <li>Microsoft SQL Server</li> <li>MongoDB</li> <li>MySQL</li> <li>Oracle</li> <li>Apache Phoenix</li> <li>Apache Pinot</li> <li>PostgreSQL</li> <li>Presto</li> <li>Prometheus</li> <li>Python</li> <li>Qubole</li> <li>Rockset</li> <li>RisingWave</li> <li>Salesforce</li> <li>ScyllaDB</li> <li>Shell Scripts</li> <li>Snowflake</li> <li>SPARQL</li> <li>SQLite</li> <li>TiDB</li> <li>Tinybird</li> <li>TreasureData</li> <li>Trino</li> <li>Uptycs</li> <li>Vertica</li> <li>Yandex AppMetrrica</li> <li>Yandex Metrica</li> </ul> <h2>Getting Help</h2> <ul> <li>Issues: <a href="https://github.com/getredash/redash/issues">https://github.com/getredash/redash/issues</a></li> <li>Discussion Forum: <a href="https://github.com/getredash/redash/discussions/">https://github.com/getredash/redash/discussions/</a></li> <li>Development Discussion: <a href="https://discord.gg/tN5MdmfGBp">https://discord.gg/tN5MdmfGBp</a></li> </ul> <h2>Reporting Bugs and Contributing Code</h2> <ul> <li>Want to report a bug or request a feature? Please open <a href="https://github.com/getredash/redash/issues/new">an issue</a>.</li> <li>Want to help us build <strong><em>Redash</em></strong>? Fork the project, edit in a <a href="https://github.com/getredash/redash/wiki/Local-development-setup">dev environment</a> and make a pull request. We need all the help we can get!</li> </ul> <h2>Security</h2> <p>Please email <a href="mailto:security@redash.io">security@redash.io</a> to report any security vulnerabilities. We will acknowledge receipt of your vulnerability and strive to send you regular updates about our progress. If you're curious about the status of your disclosure please feel free to email us again. If you want to encrypt your disclosure email, you can use <a href="https://keybase.io/arikfr/key.asc">this PGP key</a>.</p> <h2>License</h2> <p>BSD-2-Clause.</p> - RedisInsight/RedisInsight - 2024-08-02T01:27:31Z - tag:github.com,2024-08-02:/RedisInsight/RedisInsight - - <p>Redis GUI by Redis</p><hr><p><a href="https://github.com/RedisInsight/RedisInsight/releases"><img src="https://img.shields.io/github/v/release/RedisInsight/RedisInsight.svg?sort=semver" alt="Release"></a> <a href="https://circleci.com/gh/RedisInsight/RedisInsight/tree/main"><img src="https://circleci.com/gh/RedisInsight/RedisInsight/tree/main.svg?style=svg" alt="CircleCI"></a></p> <h1><img src="https://redis.com/wp-content/uploads/2019/11/ico-redisinsight.svg?sanitize=true" alt="logo" width="25"> Redis Insight - Developer GUI for Redis, by Redis.</h1> <p><a href="https://forum.redis.com/c/redisinsight/65"><img src="https://img.shields.io/badge/Forum-RedisInsight-red" alt="Forum"></a> <a href="https://discord.gg/QUkjSsk"><img src="https://img.shields.io/discord/697882427875393627?style=flat-square" alt="Discord"></a></p> <p>Redis Insight is a visual tool that provides capabilities to design, develop, and optimize your Redis application. Query, analyse and interact with your Redis data. <a href="https://redis.io/insight/#insight-form">Download it here</a>!</p> <p><img src="https://raw.githubusercontent.com/RedisInsight/RedisInsight/main/.github/redisinsight_browser.png" alt="Redis Insight Browser screenshot"></p> <p>Built with love using <a href="https://www.electronjs.org/">Electron</a>, <a href="https://microsoft.github.io/monaco-editor/">Monaco Editor</a> and NodeJS.</p> <h2>Overview</h2> <p>Redis Insight is an intuitive and efficient GUI for Redis, allowing you to interact with your databases and manage your data—with built-in support for Redis modules.</p> <h3>Redis Insight Highlights:</h3> <ul> <li>Browse, filter, visualise your key-value Redis data structures and see key values in different formats (including JSON, Hex, ASCII, etc.)</li> <li>CRUD support for lists, hashes, strings, sets, sorted sets, and streams</li> <li>CRUD support for <a href="https://redis.io/json/">JSON</a> data structure</li> <li>Interactive tutorials to learn easily, among other things, how to leverage the native JSON data structure supporting structured querying and full-text search, including vector similarity search for your AI use cases</li> <li>Contextualised recommendations to optimize performance and memory usage. The list of recommendations gets updated as you interact with your database</li> <li>Profiler - analyze every command sent to Redis in real-time</li> <li>SlowLog - analyze slow operations in Redis instances based on the <a href="https://github.com/RedisInsight/RedisInsight/releases#:~:text=results%20of%20the-,Slowlog,-command%20to%20analyze">Slowlog</a> command</li> <li>Pub/Sub - support for <a href="https://redis.io/docs/latest/develop/interact/pubsub/">Redis pub/sub</a>, enabling subscription to channels and posting messages to channels</li> <li>Bulk actions - Delete the keys in bulk based on the filters set in Browser or Tree view</li> <li>Workbench - advanced command line interface with intelligent command auto-complete, complex data visualizations and support for the raw mode</li> <li>Command auto-complete support for <a href="https://redis.io/search/">search and query</a> capability, <a href="https://redis.io/json/">JSON</a> and <a href="https://redis.io/timeseries/">time series</a> data structures</li> <li>Visualizations of your <a href="https://redis.io/search/">search and query</a> indexes and results.</li> <li>Ability to build <a href="https://github.com/RedisInsight/Packages">your own data visualization plugins</a></li> <li>Officially supported for Redis OSS, <a href="https://redis.io/cloud/">Redis Cloud</a>. Works with Microsoft Azure Cache for Redis</li> </ul> <p>Check out the <a href="https://github.com/RedisInsight/RedisInsight/releases">release notes</a>.</p> <h2>Get started with Redis Insight</h2> <p>This repository includes the code for Redis Insight. Check out the <a href="https://redis.com/blog/introducing-redisinsight-2/">blogpost</a> announcing it.</p> <h3>Installable</h3> <p>Available to download for free from <a href="https://redis.io/insight/#insight-form">here</a>. Redis Insight is also available on Microsoft Store, Apple Store, Snapcraft, Flathub and <a href="https://hub.docker.com/r/redis/redisinsight">Docker</a>.</p> <h3>Build</h3> <p>Alternatively you can also build from source. See our wiki for instructions.</p> <ul> <li><a href="https://github.com/RedisInsight/RedisInsight/wiki/How-to-build-and-contribute">How to build</a></li> </ul> <h2>How to debug</h2> <p>If you have any issues occurring in Redis Insight, you can follow the steps below to get more information about the errors and find their root cause.</p> <ul> <li><a href="https://github.com/RedisInsight/RedisInsight/wiki/How-to-debug">How to debug</a></li> </ul> <h2>Feedback</h2> <ul> <li>Request a new <a href="https://github.com/RedisInsight/RedisInsight/issues/new?assignees=&amp;labels=&amp;template=feature_request.md&amp;title=%5BFeature+Request%5D%3A">feature</a></li> <li>Upvote <a href="https://github.com/RedisInsight/RedisInsight/issues?q=is%3Aopen+is%3Aissue+label%3Afeature+sort%3Areactions-%2B1-desc">popular feature requests</a></li> <li>File a <a href="https://github.com/RedisInsight/RedisInsight/issues/new?assignees=&amp;labels=&amp;template=bug_report.md&amp;title=%5BBug%5D%3A">bug</a></li> </ul> <h2>Redis Insight Plugins</h2> <p>With Redis Insight you can now also extend the core functionality by building your own data visualizations. See our wiki for more information.</p> <ul> <li><a href="https://github.com/RedisInsight/RedisInsight/wiki/Plugin-Documentation">Plugin Documentation</a></li> </ul> <h2>Contributing</h2> <p>If you would like to contribute to the code base or fix and issue, please consult the wiki.</p> <ul> <li><a href="https://github.com/RedisInsight/RedisInsight/wiki/How-to-build-and-contribute">How to build and contribute</a></li> </ul> <h2>Telemetry</h2> <p>Redis Insight includes an opt-in telemetry system, that is leveraged to help improve the developer experience (DX) within the app. We value your privacy, so stay assured, that all the data collected is anonymised.</p> <h2>License</h2> <p>Redis Insight is licensed under <a href="https://raw.githubusercontent.com/RedisInsight/RedisInsight/main/LICENSE">SSPL</a> license.</p> + projectdiscovery/nuclei + 2024-08-03T01:27:44Z + tag:github.com,2024-08-03:/projectdiscovery/nuclei + + <p>Fast and customizable vulnerability scanner based on simple YAML based DSL.</p><hr><h1 align="center"> <br> <a href="https://nuclei.projectdiscovery.io"><img src="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/static/nuclei-logo.png" width="200px" alt="Nuclei"></a> </h1> <h4 align="center">Fast and customisable vulnerability scanner based on simple YAML based DSL.</h4> <p align="center"> <img src="https://img.shields.io/github/go-mod/go-version/projectdiscovery/nuclei"> <a href="https://github.com/projectdiscovery/nuclei/releases"><img src="https://img.shields.io/github/downloads/projectdiscovery/nuclei/total"> </a><a href="https://github.com/projectdiscovery/nuclei/graphs/contributors"><img src="https://img.shields.io/github/contributors-anon/projectdiscovery/nuclei"> </a><a href="https://github.com/projectdiscovery/nuclei/releases/"><img src="https://img.shields.io/github/release/projectdiscovery/nuclei"> </a><a href="https://github.com/projectdiscovery/nuclei/issues"><img src="https://img.shields.io/github/issues-raw/projectdiscovery/nuclei"> </a><a href="https://github.com/projectdiscovery/nuclei/discussions"><img src="https://img.shields.io/github/discussions/projectdiscovery/nuclei"> </a><a href="https://discord.gg/projectdiscovery"><img src="https://img.shields.io/discord/695645237418131507.svg?logo=discord"></a> <a href="https://twitter.com/pdnuclei"><img src="https://img.shields.io/twitter/follow/pdnuclei.svg?logo=twitter"></a> </p> <p align="center"> <a href="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/#how-it-works">How</a> • <a href="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/#install-nuclei">Install</a> • <a href="https://docs.projectdiscovery.io/tools/nuclei/">Documentation</a> • <a href="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/#credits">Credits</a> • <a href="https://docs.projectdiscovery.io/tools/nuclei/faq">FAQs</a> • <a href="https://discord.gg/projectdiscovery">Join Discord</a> </p> <p align="center"> <a href="https://github.com/projectdiscovery/nuclei/raw/main/README.md">English</a> • <a href="https://github.com/projectdiscovery/nuclei/raw/main/README_CN.md">中文</a> • <a href="https://github.com/projectdiscovery/nuclei/raw/main/README_KR.md">Korean</a> • <a href="https://github.com/projectdiscovery/nuclei/raw/main/README_ID.md">Indonesia</a> • <a href="https://github.com/projectdiscovery/nuclei/raw/main/README_ES.md">Spanish</a> • <a href="https://github.com/projectdiscovery/nuclei/raw/main/README_JP.md">日本語</a> </p> <p></p> <hr> <p>Nuclei is used to send requests across targets based on a template, leading to zero false positives and providing fast scanning on a large number of hosts. Nuclei offers scanning for a variety of protocols, including TCP, DNS, HTTP, SSL, File, Whois, Websocket, Headless, Code etc. With powerful and flexible templating, Nuclei can be used to model all kinds of security checks.</p> <p>We have a <a href="https://github.com/projectdiscovery/nuclei-templates">dedicated repository</a> that houses various type of vulnerability templates contributed by <strong>more than 300</strong> security researchers and engineers.</p> <h2>How it works</h2> <h3 align="center"> <img src="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/static/nuclei-flow.jpg" alt="nuclei-flow" width="700px"> </h3> <table> <thead> <tr> <th><span>❗</span> <strong>Disclaimer</strong></th> </tr> </thead> <tbody> <tr> <td><strong>This project is in active development</strong>. Expect breaking changes with releases. Review the release changelog before updating.</td> </tr> <tr> <td>This project was primarily built to be used as a standalone CLI tool. <strong>Running nuclei as a service may pose security risks.</strong> It's recommended to use with caution and additional security measures.</td> </tr> </tbody> </table> <h1>Install Nuclei</h1> <p>Nuclei requires <strong>go1.21</strong> to install successfully. Run the following command to install the latest version -</p> <pre><code class="language-sh">go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest </code></pre> <details> <summary>Brew</summary> <pre><code class="language-sh">brew install nuclei </code></pre> </details> <details> <summary>Docker</summary> <pre><code class="language-sh">docker pull projectdiscovery/nuclei:latest </code></pre> </details> <p><strong>More installation <a href="https://docs.projectdiscovery.io/tools/nuclei/install">methods can be found here</a>.</strong></p> <table> <tbody> <tr> <td> <h3>Nuclei Templates</h3> <p>Nuclei has built-in support for automatic template download/update as default since version <a href="https://github.com/projectdiscovery/nuclei/releases/tag/v2.5.2">v2.5.2</a>. <a href="https://github.com/projectdiscovery/nuclei-templates"><strong>Nuclei-Templates</strong></a> project provides a community-contributed list of ready-to-use templates that is constantly updated.</p> <p>You may still use the <code>update-templates</code> flag to update the nuclei templates at any time; You can write your own checks for your individual workflow and needs following Nuclei's <a href="https://docs.projectdiscovery.io/templates/">templating guide</a>.</p> <p>The YAML DSL reference syntax is available <a href="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/SYNTAX-REFERENCE.md">here</a>.</p> </td> </tr> </tbody> </table> <h3>Usage</h3> <pre><code class="language-sh">nuclei -h </code></pre> <p>This will display help for the tool. Here are all the switches it supports.</p> <pre><code class="language-console">Nuclei is a fast, template based vulnerability scanner focusing on extensive configurability, massive extensibility and ease of use. Usage: ./nuclei [flags] Flags: TARGET: -u, -target string[] target URLs/hosts to scan -l, -list string path to file containing a list of target URLs/hosts to scan (one per line) -eh, -exclude-hosts string[] hosts to exclude to scan from the input list (ip, cidr, hostname) -resume string resume scan using resume.cfg (clustering will be disabled) -sa, -scan-all-ips scan all the IP's associated with dns record -iv, -ip-version string[] IP version to scan of hostname (4,6) - (default 4) TARGET-FORMAT: -im, -input-mode string mode of input file (list, burp, jsonl, yaml, openapi, swagger) (default "list") -ro, -required-only use only required fields in input format when generating requests -sfv, -skip-format-validation skip format validation (like missing vars) when parsing input file TEMPLATES: -nt, -new-templates run only new templates added in latest nuclei-templates release -ntv, -new-templates-version string[] run new templates added in specific version -as, -automatic-scan automatic web scan using wappalyzer technology detection to tags mapping -t, -templates string[] list of template or template directory to run (comma-separated, file) -turl, -template-url string[] template url or list containing template urls to run (comma-separated, file) -w, -workflows string[] list of workflow or workflow directory to run (comma-separated, file) -wurl, -workflow-url string[] workflow url or list containing workflow urls to run (comma-separated, file) -validate validate the passed templates to nuclei -nss, -no-strict-syntax disable strict syntax check on templates -td, -template-display displays the templates content -tl list all available templates -tgl list all available tags -sign signs the templates with the private key defined in NUCLEI_SIGNATURE_PRIVATE_KEY env variable -code enable loading code protocol-based templates -dut, -disable-unsigned-templates disable running unsigned templates or templates with mismatched signature FILTERING: -a, -author string[] templates to run based on authors (comma-separated, file) -tags string[] templates to run based on tags (comma-separated, file) -etags, -exclude-tags string[] templates to exclude based on tags (comma-separated, file) -itags, -include-tags string[] tags to be executed even if they are excluded either by default or configuration -id, -template-id string[] templates to run based on template ids (comma-separated, file, allow-wildcard) -eid, -exclude-id string[] templates to exclude based on template ids (comma-separated, file) -it, -include-templates string[] path to template file or directory to be executed even if they are excluded either by default or configuration -et, -exclude-templates string[] path to template file or directory to exclude (comma-separated, file) -em, -exclude-matchers string[] template matchers to exclude in result -s, -severity value[] templates to run based on severity. Possible values: info, low, medium, high, critical, unknown -es, -exclude-severity value[] templates to exclude based on severity. Possible values: info, low, medium, high, critical, unknown -pt, -type value[] templates to run based on protocol type. Possible values: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript -ept, -exclude-type value[] templates to exclude based on protocol type. Possible values: dns, file, http, headless, tcp, workflow, ssl, websocket, whois, code, javascript -tc, -template-condition string[] templates to run based on expression condition OUTPUT: -o, -output string output file to write found issues/vulnerabilities -sresp, -store-resp store all request/response passed through nuclei to output directory -srd, -store-resp-dir string store all request/response passed through nuclei to custom directory (default "output") -silent display findings only -nc, -no-color disable output content coloring (ANSI escape codes) -j, -jsonl write output in JSONL(ines) format -irr, -include-rr -omit-raw include request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only) [DEPRECATED use -omit-raw] (default true) -or, -omit-raw omit request/response pairs in the JSON, JSONL, and Markdown outputs (for findings only) -ot, -omit-template omit encoded template in the JSON, JSONL output -nm, -no-meta disable printing result metadata in cli output -ts, -timestamp enables printing timestamp in cli output -rdb, -report-db string nuclei reporting database (always use this to persist report data) -ms, -matcher-status display match failure status -me, -markdown-export string directory to export results in markdown format -se, -sarif-export string file to export results in SARIF format -je, -json-export string file to export results in JSON format -jle, -jsonl-export string file to export results in JSONL(ine) format CONFIGURATIONS: -config string path to the nuclei configuration file -tp, -profile string template profile config file to run -tpl, -profile-list list community template profiles -fr, -follow-redirects enable following redirects for http templates -fhr, -follow-host-redirects follow redirects on the same host -mr, -max-redirects int max number of redirects to follow for http templates (default 10) -dr, -disable-redirects disable redirects for http templates -rc, -report-config string nuclei reporting module configuration file -H, -header string[] custom header/cookie to include in all http request in header:value format (cli, file) -V, -var value custom vars in key=value format -r, -resolvers string file containing resolver list for nuclei -sr, -system-resolvers use system DNS resolving as error fallback -dc, -disable-clustering disable clustering of requests -passive enable passive HTTP response processing mode -fh2, -force-http2 force http2 connection on requests -ev, -env-vars enable environment variables to be used in template -cc, -client-cert string client certificate file (PEM-encoded) used for authenticating against scanned hosts -ck, -client-key string client key file (PEM-encoded) used for authenticating against scanned hosts -ca, -client-ca string client certificate authority file (PEM-encoded) used for authenticating against scanned hosts -sml, -show-match-line show match lines for file templates, works with extractors only -ztls use ztls library with autofallback to standard one for tls13 [Deprecated] autofallback to ztls is enabled by default -sni string tls sni hostname to use (default: input domain name) -dka, -dialer-keep-alive value keep-alive duration for network requests. -lfa, -allow-local-file-access allows file (payload) access anywhere on the system -lna, -restrict-local-network-access blocks connections to the local / private network -i, -interface string network interface to use for network scan -at, -attack-type string type of payload combinations to perform (batteringram,pitchfork,clusterbomb) -sip, -source-ip string source ip address to use for network scan -rsr, -response-size-read int max response size to read in bytes -rss, -response-size-save int max response size to read in bytes (default 1048576) -reset reset removes all nuclei configuration and data files (including nuclei-templates) -tlsi, -tls-impersonate enable experimental client hello (ja3) tls randomization -hae, -http-api-endpoint string experimental http api endpoint INTERACTSH: -iserver, -interactsh-server string interactsh server url for self-hosted instance (default: oast.pro,oast.live,oast.site,oast.online,oast.fun,oast.me) -itoken, -interactsh-token string authentication token for self-hosted interactsh server -interactions-cache-size int number of requests to keep in the interactions cache (default 5000) -interactions-eviction int number of seconds to wait before evicting requests from cache (default 60) -interactions-poll-duration int number of seconds to wait before each interaction poll request (default 5) -interactions-cooldown-period int extra time for interaction polling before exiting (default 5) -ni, -no-interactsh disable interactsh server for OAST testing, exclude OAST based templates FUZZING: -ft, -fuzzing-type string overrides fuzzing type set in template (replace, prefix, postfix, infix) -fm, -fuzzing-mode string overrides fuzzing mode set in template (multiple, single) -fuzz enable loading fuzzing templates (Deprecated: use -dast instead) -dast enable / run dast (fuzz) nuclei templates -dfp, -display-fuzz-points display fuzz points in the output for debugging -fuzz-param-frequency int frequency of uninteresting parameters for fuzzing before skipping (default 10) -fa, -fuzz-aggression string fuzzing aggression level controls payload count for fuzz (low, medium, high) (default "low") UNCOVER: -uc, -uncover enable uncover engine -uq, -uncover-query string[] uncover search query -ue, -uncover-engine string[] uncover search engine (shodan,censys,fofa,shodan-idb,quake,hunter,zoomeye,netlas,criminalip,publicwww,hunterhow,google) (default shodan) -uf, -uncover-field string uncover fields to return (ip,port,host) (default "ip:port") -ul, -uncover-limit int uncover results to return (default 100) -ur, -uncover-ratelimit int override ratelimit of engines with unknown ratelimit (default 60 req/min) (default 60) RATE-LIMIT: -rl, -rate-limit int maximum number of requests to send per second (default 150) -rld, -rate-limit-duration value maximum number of requests to send per second (default 1s) -rlm, -rate-limit-minute int maximum number of requests to send per minute (DEPRECATED) -bs, -bulk-size int maximum number of hosts to be analyzed in parallel per template (default 25) -c, -concurrency int maximum number of templates to be executed in parallel (default 25) -hbs, -headless-bulk-size int maximum number of headless hosts to be analyzed in parallel per template (default 10) -headc, -headless-concurrency int maximum number of headless templates to be executed in parallel (default 10) -jsc, -js-concurrency int maximum number of javascript runtimes to be executed in parallel (default 120) -pc, -payload-concurrency int max payload concurrency for each template (default 25) -prc, -probe-concurrency int http probe concurrency with httpx (default 50) OPTIMIZATIONS: -timeout int time to wait in seconds before timeout (default 10) -retries int number of times to retry a failed request (default 1) -ldp, -leave-default-ports leave default HTTP/HTTPS ports (eg. host:80,host:443) -mhe, -max-host-error int max errors for a host before skipping from scan (default 30) -te, -track-error string[] adds given error to max-host-error watchlist (standard, file) -nmhe, -no-mhe disable skipping host from scan based on errors -project use a project folder to avoid sending same request multiple times -project-path string set a specific project path (default "/tmp") -spm, -stop-at-first-match stop processing HTTP requests after the first match (may break template/workflow logic) -stream stream mode - start elaborating without sorting the input -ss, -scan-strategy value strategy to use while scanning(auto/host-spray/template-spray) (default auto) -irt, -input-read-timeout value timeout on input read (default 3m0s) -nh, -no-httpx disable httpx probing for non-url input -no-stdin disable stdin processing HEADLESS: -headless enable templates that require headless browser support (root user on Linux will disable sandbox) -page-timeout int seconds to wait for each page in headless mode (default 20) -sb, -show-browser show the browser on the screen when running templates with headless mode -ho, -headless-options string[] start headless chrome with additional options -sc, -system-chrome use local installed Chrome browser instead of nuclei installed -lha, -list-headless-action list available headless actions DEBUG: -debug show all requests and responses -dreq, -debug-req show all sent requests -dresp, -debug-resp show all received responses -p, -proxy string[] list of http/socks5 proxy to use (comma separated or file input) -pi, -proxy-internal proxy all internal requests -ldf, -list-dsl-function list all supported DSL function signatures -tlog, -trace-log string file to write sent requests trace log -elog, -error-log string file to write sent requests error log -version show nuclei version -hm, -hang-monitor enable nuclei hang monitoring -v, -verbose show verbose output -profile-mem string optional nuclei memory profile dump file -vv display templates loaded for scan -svd, -show-var-dump show variables dump for debugging -ep, -enable-pprof enable pprof debugging server -tv, -templates-version shows the version of the installed nuclei-templates -hc, -health-check run diagnostic check up UPDATE: -up, -update update nuclei engine to the latest released version -ut, -update-templates update nuclei-templates to latest released version -ud, -update-template-dir string custom directory to install / update nuclei-templates -duc, -disable-update-check disable automatic nuclei/templates update check STATISTICS: -stats display statistics about the running scan -sj, -stats-json display statistics in JSONL(ines) format -si, -stats-interval int number of seconds to wait between showing a statistics update (default 5) -mp, -metrics-port int port to expose nuclei metrics on (default 9092) CLOUD: -auth configure projectdiscovery cloud (pdcp) api key (default true) -cup, -cloud-upload upload scan results to pdcp dashboard -sid, -scan-id string upload scan results to existing scan id (optional) -sname, -scan-name string scan name to set (optional) AUTHENTICATION: -sf, -secret-file string[] path to config file containing secrets for nuclei authenticated scan -ps, -prefetch-secrets prefetch secrets from the secrets file EXAMPLES: Run nuclei on single host: $ nuclei -target example.com Run nuclei with specific template directories: $ nuclei -target example.com -t http/cves/ -t ssl Run nuclei against a list of hosts: $ nuclei -list hosts.txt Run nuclei with a JSON output: $ nuclei -target example.com -json-export output.json Run nuclei with sorted Markdown outputs (with environment variables): $ MARKDOWN_EXPORT_SORT_MODE=template nuclei -target example.com -markdown-export nuclei_report/ Additional documentation is available at: https://docs.nuclei.sh/getting-started/running </code></pre> <h3>Running Nuclei</h3> <p>See <a href="https://docs.projectdiscovery.io/tools/nuclei/running">https://docs.projectdiscovery.io/tools/nuclei/running</a> for details on running Nuclei</p> <h3>Using Nuclei From Go Code</h3> <p>Complete guide of using Nuclei as Library/SDK is available at <a href="https://pkg.go.dev/github.com/projectdiscovery/nuclei/v3/lib#section-readme">godoc</a></p> <h3>Resources</h3> <p>You can access the main documentation for Nuclei at <a href="https://docs.projectdiscovery.io/tools/nuclei/">https://docs.projectdiscovery.io/tools/nuclei/</a>, and learn more about Nuclei in the cloud with <a href="https://cloud.projectdiscovery.io">ProjectDiscovery Cloud Platform</a></p> <p>See <a href="https://docs.projectdiscovery.io/tools/nuclei/resources">https://docs.projectdiscovery.io/tools/nuclei/resources</a> for more resources and videos about Nuclei!</p> <h3>Credits</h3> <p>Thanks to all the amazing <a href="https://github.com/projectdiscovery/nuclei/graphs/contributors">community contributors for sending PRs</a> and keeping this project updated. <span>❤️</span></p> <p>If you have an idea or some kind of improvement, you are welcome to contribute and participate in the Project, feel free to send your PR.</p> <p align="center"> <a href="https://github.com/projectdiscovery/nuclei/graphs/contributors"> <img src="https://contrib.rocks/image?repo=projectdiscovery/nuclei&amp;max=500"> </a> </p> <p>Do also check out the below similar open-source projects that may fit in your workflow:</p> <p><a href="https://github.com/ffuf/ffuf">FFuF</a>, <a href="https://github.com/ameenmaali/qsfuzz">Qsfuzz</a>, <a href="https://github.com/proabiral/inception">Inception</a>, <a href="https://github.com/hannob/snallygaster">Snallygaster</a>, <a href="https://github.com/Static-Flow/gofingerprint">Gofingerprint</a>, <a href="https://github.com/1N3/Sn1per/tree/master/templates">Sn1per</a>, <a href="https://github.com/google/tsunami-security-scanner">Google tsunami</a>, <a href="https://github.com/jaeles-project/jaeles">Jaeles</a>, <a href="https://github.com/michelin/ChopChop">ChopChop</a></p> <h3>License</h3> <p>Nuclei is distributed under <a href="https://github.com/projectdiscovery/nuclei/raw/main/LICENSE.md">MIT License</a></p> <h1 align="left"> <a href="https://discord.gg/projectdiscovery"><img src="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/static/Join-Discord.png" width="380" alt="Join Discord"></a> <a href="https://docs.projectdiscovery.io"><img src="https://raw.githubusercontent.com/projectdiscovery/nuclei/dev/static/check-nuclei-documentation.png" width="380" alt="Check Nuclei Documentation"></a> </h1> \ No newline at end of file diff --git a/alloy/daily/index.xml b/alloy/daily/index.xml index e0ce5fefcb4..71ea096924c 100644 --- a/alloy/daily/index.xml +++ b/alloy/daily/index.xml @@ -1,7 +1,7 @@ GitHub Alloy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:46Z + 2024-08-03T01:28:00Z Daily Trending of Alloy in GitHub \ No newline at end of file diff --git a/alpine-abuild/daily/index.xml b/alpine-abuild/daily/index.xml index 641c3c09643..4325fb92afe 100644 --- a/alpine-abuild/daily/index.xml +++ b/alpine-abuild/daily/index.xml @@ -1,7 +1,7 @@ GitHub Alpine Abuild Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:46Z + 2024-08-03T01:28:01Z Daily Trending of Alpine Abuild in GitHub \ No newline at end of file diff --git a/altium-designer/daily/index.xml b/altium-designer/daily/index.xml index 77635dce015..b9755f066f6 100644 --- a/altium-designer/daily/index.xml +++ b/altium-designer/daily/index.xml @@ -1,7 +1,7 @@ GitHub Altium Designer Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:46Z + 2024-08-03T01:28:00Z Daily Trending of Altium Designer in GitHub \ No newline at end of file diff --git a/ampl/daily/index.xml b/ampl/daily/index.xml index dbdcffb61fa..1e420f2b915 100644 --- a/ampl/daily/index.xml +++ b/ampl/daily/index.xml @@ -1,7 +1,7 @@ GitHub AMPL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:45Z + 2024-08-03T01:28:01Z Daily Trending of AMPL in GitHub \ No newline at end of file diff --git a/angelscript/daily/index.xml b/angelscript/daily/index.xml index bde12556f44..7486877de73 100644 --- a/angelscript/daily/index.xml +++ b/angelscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub AngelScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:47Z + 2024-08-03T01:28:02Z Daily Trending of AngelScript in GitHub \ No newline at end of file diff --git a/ant-build-system/daily/index.xml b/ant-build-system/daily/index.xml index c22c2a58fc4..dd6d98d451e 100644 --- a/ant-build-system/daily/index.xml +++ b/ant-build-system/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ant Build System Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:47Z + 2024-08-03T01:28:01Z Daily Trending of Ant Build System in GitHub \ No newline at end of file diff --git a/antlr/daily/index.xml b/antlr/daily/index.xml index 659651d2a18..0a61377a783 100644 --- a/antlr/daily/index.xml +++ b/antlr/daily/index.xml @@ -1,7 +1,7 @@ GitHub ANTLR Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:48Z + 2024-08-03T01:28:03Z Daily Trending of ANTLR in GitHub \ No newline at end of file diff --git a/apacheconf/daily/index.xml b/apacheconf/daily/index.xml index 4cbc307738c..2b4936604fa 100644 --- a/apacheconf/daily/index.xml +++ b/apacheconf/daily/index.xml @@ -1,7 +1,7 @@ GitHub ApacheConf Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:49Z + 2024-08-03T01:28:04Z Daily Trending of ApacheConf in GitHub \ No newline at end of file diff --git a/apex/daily/index.xml b/apex/daily/index.xml index 1b599a57f21..3910fc11a3b 100644 --- a/apex/daily/index.xml +++ b/apex/daily/index.xml @@ -1,7 +1,7 @@ GitHub Apex Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:49Z + 2024-08-03T01:28:04Z Daily Trending of Apex in GitHub \ No newline at end of file diff --git a/api-blueprint/daily/index.xml b/api-blueprint/daily/index.xml index 21b78b4081a..acd0c6a4f84 100644 --- a/api-blueprint/daily/index.xml +++ b/api-blueprint/daily/index.xml @@ -1,7 +1,7 @@ GitHub API Blueprint Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:48Z + 2024-08-03T01:28:03Z Daily Trending of API Blueprint in GitHub \ No newline at end of file diff --git a/apl/daily/index.xml b/apl/daily/index.xml index b172f687077..da6ed890fa5 100644 --- a/apl/daily/index.xml +++ b/apl/daily/index.xml @@ -1,7 +1,7 @@ GitHub APL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:48Z + 2024-08-03T01:28:03Z Daily Trending of APL in GitHub \ No newline at end of file diff --git a/apollo-guidance-computer/daily/index.xml b/apollo-guidance-computer/daily/index.xml index 506d5532f97..f16d2870e85 100644 --- a/apollo-guidance-computer/daily/index.xml +++ b/apollo-guidance-computer/daily/index.xml @@ -1,7 +1,7 @@ GitHub Apollo Guidance Computer Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:50Z + 2024-08-03T01:28:05Z Daily Trending of Apollo Guidance Computer in GitHub \ No newline at end of file diff --git a/applescript/daily/index.xml b/applescript/daily/index.xml index 711d2a189dc..940edc46263 100644 --- a/applescript/daily/index.xml +++ b/applescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub AppleScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:50Z + 2024-08-03T01:28:05Z Daily Trending of AppleScript in GitHub \ No newline at end of file diff --git a/arc/daily/index.xml b/arc/daily/index.xml index af63a1df2e9..bb3dcdfdef8 100644 --- a/arc/daily/index.xml +++ b/arc/daily/index.xml @@ -1,7 +1,7 @@ GitHub Arc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:50Z + 2024-08-03T01:28:05Z Daily Trending of Arc in GitHub \ No newline at end of file diff --git a/asciidoc/daily/index.xml b/asciidoc/daily/index.xml index 892e0d85b57..36d8f38c160 100644 --- a/asciidoc/daily/index.xml +++ b/asciidoc/daily/index.xml @@ -1,7 +1,7 @@ GitHub AsciiDoc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:51Z + 2024-08-03T01:28:06Z Daily Trending of AsciiDoc in GitHub \ No newline at end of file diff --git a/asl/daily/index.xml b/asl/daily/index.xml index 9869cf4604c..bbc58160a6a 100644 --- a/asl/daily/index.xml +++ b/asl/daily/index.xml @@ -1,7 +1,7 @@ GitHub ASL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:52Z + 2024-08-03T01:28:07Z Daily Trending of ASL in GitHub \ No newline at end of file diff --git a/asn.1/daily/index.xml b/asn.1/daily/index.xml index b3d23629821..5195e594f73 100644 --- a/asn.1/daily/index.xml +++ b/asn.1/daily/index.xml @@ -1,7 +1,7 @@ GitHub ASN.1 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:52Z + 2024-08-03T01:28:07Z Daily Trending of ASN.1 in GitHub \ No newline at end of file diff --git a/asp.net/daily/index.xml b/asp.net/daily/index.xml index 9a325bf0831..3c221da2ba1 100644 --- a/asp.net/daily/index.xml +++ b/asp.net/daily/index.xml @@ -1,7 +1,7 @@ GitHub ASP.NET Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:51Z + 2024-08-03T01:28:06Z Daily Trending of ASP.NET in GitHub \ No newline at end of file diff --git a/aspectj/daily/index.xml b/aspectj/daily/index.xml index a12eca4b9fb..8c33f8eef1c 100644 --- a/aspectj/daily/index.xml +++ b/aspectj/daily/index.xml @@ -1,7 +1,7 @@ GitHub AspectJ Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:53Z + 2024-08-03T01:28:08Z Daily Trending of AspectJ in GitHub \ No newline at end of file diff --git a/assembly/daily/index.xml b/assembly/daily/index.xml index de64aabc421..780aa955ffa 100644 --- a/assembly/daily/index.xml +++ b/assembly/daily/index.xml @@ -1,7 +1,7 @@ GitHub Assembly Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:54Z + 2024-08-03T01:28:09Z Daily Trending of Assembly in GitHub \ No newline at end of file diff --git a/astro/daily/index.xml b/astro/daily/index.xml index 35758755ee2..829bbda251c 100644 --- a/astro/daily/index.xml +++ b/astro/daily/index.xml @@ -1,14 +1,7 @@ GitHub Astro Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:54Z + 2024-08-03T01:28:08Z Daily Trending of Astro in GitHub - - EveSunMaple/Frosti - 2024-08-02T01:27:54Z - tag:github.com,2024-08-02:/EveSunMaple/Frosti - - <p>A clean, elegant, and fast static blog template! 🚀 Build with Astro</p><hr> - \ No newline at end of file diff --git a/asymptote/daily/index.xml b/asymptote/daily/index.xml index 12340fe94f4..af177a6c039 100644 --- a/asymptote/daily/index.xml +++ b/asymptote/daily/index.xml @@ -1,7 +1,7 @@ GitHub Asymptote Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:53Z + 2024-08-03T01:28:08Z Daily Trending of Asymptote in GitHub \ No newline at end of file diff --git a/ats/daily/index.xml b/ats/daily/index.xml index 449da2c1671..53f979e40d7 100644 --- a/ats/daily/index.xml +++ b/ats/daily/index.xml @@ -1,7 +1,7 @@ GitHub ATS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:55Z + 2024-08-03T01:28:10Z Daily Trending of ATS in GitHub \ No newline at end of file diff --git a/augeas/daily/index.xml b/augeas/daily/index.xml index 91fd874b08b..e04799903ee 100644 --- a/augeas/daily/index.xml +++ b/augeas/daily/index.xml @@ -1,7 +1,7 @@ GitHub Augeas Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:56Z + 2024-08-03T01:28:10Z Daily Trending of Augeas in GitHub \ No newline at end of file diff --git a/autohotkey/daily/index.xml b/autohotkey/daily/index.xml index f84e9473642..ea37daba2cb 100644 --- a/autohotkey/daily/index.xml +++ b/autohotkey/daily/index.xml @@ -1,7 +1,7 @@ GitHub AutoHotkey Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:55Z + 2024-08-03T01:28:11Z Daily Trending of AutoHotkey in GitHub \ No newline at end of file diff --git a/autoit/daily/index.xml b/autoit/daily/index.xml index 0f9dfc3f480..8afa5fde31b 100644 --- a/autoit/daily/index.xml +++ b/autoit/daily/index.xml @@ -1,7 +1,7 @@ GitHub AutoIt Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:56Z + 2024-08-03T01:28:10Z Daily Trending of AutoIt in GitHub \ No newline at end of file diff --git a/avro-idl/daily/index.xml b/avro-idl/daily/index.xml index 31a04857bfe..dc305e521ba 100644 --- a/avro-idl/daily/index.xml +++ b/avro-idl/daily/index.xml @@ -1,7 +1,7 @@ GitHub Avro IDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:57Z + 2024-08-03T01:28:12Z Daily Trending of Avro IDL in GitHub \ No newline at end of file diff --git a/awk/daily/index.xml b/awk/daily/index.xml index 1a0d3f83f91..57dc7e6398b 100644 --- a/awk/daily/index.xml +++ b/awk/daily/index.xml @@ -1,7 +1,7 @@ GitHub Awk Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:57Z + 2024-08-03T01:28:12Z Daily Trending of Awk in GitHub \ No newline at end of file diff --git a/ballerina/daily/index.xml b/ballerina/daily/index.xml index d906eb74163..10c4757c26a 100644 --- a/ballerina/daily/index.xml +++ b/ballerina/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ballerina Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:57Z + 2024-08-03T01:28:13Z Daily Trending of Ballerina in GitHub \ No newline at end of file diff --git a/basic/daily/index.xml b/basic/daily/index.xml index d969c5ee07d..e6283c5a9de 100644 --- a/basic/daily/index.xml +++ b/basic/daily/index.xml @@ -1,7 +1,7 @@ GitHub BASIC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:57Z + 2024-08-03T01:28:12Z Daily Trending of BASIC in GitHub \ No newline at end of file diff --git a/batchfile/daily/index.xml b/batchfile/daily/index.xml index 5bca2d93046..c8f82b40b1c 100644 --- a/batchfile/daily/index.xml +++ b/batchfile/daily/index.xml @@ -1,7 +1,7 @@ GitHub Batchfile Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:59Z + 2024-08-03T01:28:15Z Daily Trending of Batchfile in GitHub \ No newline at end of file diff --git a/beef/daily/index.xml b/beef/daily/index.xml index 43a4307fbc7..ca2e26d1168 100644 --- a/beef/daily/index.xml +++ b/beef/daily/index.xml @@ -1,7 +1,7 @@ GitHub Beef Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:58Z + 2024-08-03T01:28:13Z Daily Trending of Beef in GitHub \ No newline at end of file diff --git a/befunge/daily/index.xml b/befunge/daily/index.xml index 0bc50a19b7a..87e5b7a9b3d 100644 --- a/befunge/daily/index.xml +++ b/befunge/daily/index.xml @@ -1,7 +1,7 @@ GitHub Befunge Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:59Z + 2024-08-03T01:28:13Z Daily Trending of Befunge in GitHub \ No newline at end of file diff --git a/berry/daily/index.xml b/berry/daily/index.xml index 7b132d27ecd..3c2c5ef37a4 100644 --- a/berry/daily/index.xml +++ b/berry/daily/index.xml @@ -1,7 +1,7 @@ GitHub Berry Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:58Z + 2024-08-03T01:28:14Z Daily Trending of Berry in GitHub \ No newline at end of file diff --git a/bibtex/daily/index.xml b/bibtex/daily/index.xml index 2156ca6a21f..75a25724ada 100644 --- a/bibtex/daily/index.xml +++ b/bibtex/daily/index.xml @@ -1,7 +1,7 @@ GitHub BibTeX Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:00Z + 2024-08-03T01:28:16Z Daily Trending of BibTeX in GitHub \ No newline at end of file diff --git a/bicep/daily/index.xml b/bicep/daily/index.xml index 11220ed5475..8cf4e08aa31 100644 --- a/bicep/daily/index.xml +++ b/bicep/daily/index.xml @@ -1,14 +1,7 @@ GitHub Bicep Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:01Z + 2024-08-03T01:28:17Z Daily Trending of Bicep in GitHub - - Azure-Samples/serverless-chat-langchainjs - 2024-08-02T01:28:01Z - tag:github.com,2024-08-02:/Azure-Samples/serverless-chat-langchainjs - - <p>Build your own serverless AI Chat with Retrieval-Augmented-Generation using LangChain.js, TypeScript and Azure</p><hr> - \ No newline at end of file diff --git a/bison/daily/index.xml b/bison/daily/index.xml index f6d8be9a252..802f09119f8 100644 --- a/bison/daily/index.xml +++ b/bison/daily/index.xml @@ -1,7 +1,7 @@ GitHub Bison Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:00Z + 2024-08-03T01:28:15Z Daily Trending of Bison in GitHub \ No newline at end of file diff --git a/bitbake/daily/index.xml b/bitbake/daily/index.xml index eee236adf0e..4da8dccc677 100644 --- a/bitbake/daily/index.xml +++ b/bitbake/daily/index.xml @@ -1,7 +1,7 @@ GitHub BitBake Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:03Z + 2024-08-03T01:28:19Z Daily Trending of BitBake in GitHub \ No newline at end of file diff --git a/blade/daily/index.xml b/blade/daily/index.xml index d981973e531..8b4ada4c7ee 100644 --- a/blade/daily/index.xml +++ b/blade/daily/index.xml @@ -1,7 +1,7 @@ GitHub Blade Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:02Z + 2024-08-03T01:28:18Z Daily Trending of Blade in GitHub \ No newline at end of file diff --git a/blitzbasic/daily/index.xml b/blitzbasic/daily/index.xml index 62c48d73262..e30998a13c6 100644 --- a/blitzbasic/daily/index.xml +++ b/blitzbasic/daily/index.xml @@ -1,7 +1,7 @@ GitHub BlitzBasic Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:02Z + 2024-08-03T01:28:17Z Daily Trending of BlitzBasic in GitHub \ No newline at end of file diff --git a/blitzmax/daily/index.xml b/blitzmax/daily/index.xml index 5f590ac9d78..8a37a59adb4 100644 --- a/blitzmax/daily/index.xml +++ b/blitzmax/daily/index.xml @@ -1,7 +1,7 @@ GitHub BlitzMax Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:02Z + 2024-08-03T01:28:17Z Daily Trending of BlitzMax in GitHub \ No newline at end of file diff --git a/bluespec/daily/index.xml b/bluespec/daily/index.xml index f4068c8118b..d0d1f541650 100644 --- a/bluespec/daily/index.xml +++ b/bluespec/daily/index.xml @@ -1,7 +1,7 @@ GitHub Bluespec Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:04Z + 2024-08-03T01:28:20Z Daily Trending of Bluespec in GitHub \ No newline at end of file diff --git a/boo/daily/index.xml b/boo/daily/index.xml index b5162f424cf..514c16a5c9c 100644 --- a/boo/daily/index.xml +++ b/boo/daily/index.xml @@ -1,7 +1,7 @@ GitHub Boo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:04Z + 2024-08-03T01:28:19Z Daily Trending of Boo in GitHub \ No newline at end of file diff --git a/boogie/daily/index.xml b/boogie/daily/index.xml index 8575c27d0b8..7564b3f8627 100644 --- a/boogie/daily/index.xml +++ b/boogie/daily/index.xml @@ -1,7 +1,7 @@ GitHub Boogie Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:04Z + 2024-08-03T01:28:20Z Daily Trending of Boogie in GitHub \ No newline at end of file diff --git a/brainfuck/daily/index.xml b/brainfuck/daily/index.xml index 1867e43298c..f1220f40d68 100644 --- a/brainfuck/daily/index.xml +++ b/brainfuck/daily/index.xml @@ -1,7 +1,7 @@ GitHub Brainfuck Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:05Z + 2024-08-03T01:28:22Z Daily Trending of Brainfuck in GitHub \ No newline at end of file diff --git a/brightscript/daily/index.xml b/brightscript/daily/index.xml index fbe352c6b31..3b30bb64ab9 100644 --- a/brightscript/daily/index.xml +++ b/brightscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub Brightscript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:06Z + 2024-08-03T01:28:21Z Daily Trending of Brightscript in GitHub \ No newline at end of file diff --git a/browserslist/daily/index.xml b/browserslist/daily/index.xml index 03ee8a74442..90eba964a27 100644 --- a/browserslist/daily/index.xml +++ b/browserslist/daily/index.xml @@ -1,7 +1,7 @@ GitHub Browserslist Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:07Z + 2024-08-03T01:28:22Z Daily Trending of Browserslist in GitHub \ No newline at end of file diff --git a/c%23/daily/index.xml b/c%23/daily/index.xml index 288b896deb5..f6e18f2d00f 100644 --- a/c%23/daily/index.xml +++ b/c%23/daily/index.xml @@ -1,14 +1,7 @@ GitHub C# Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:16Z + 2024-08-03T01:28:33Z Daily Trending of C# in GitHub - - openai/openai-dotnet - 2024-08-02T01:28:16Z - tag:github.com,2024-08-02:/openai/openai-dotnet - - <p>The official .NET library for the OpenAI API</p><hr><h1>OpenAI .NET API library</h1> <p><a href="https://www.nuget.org/packages/OpenAI/absoluteLatest"><img src="https://img.shields.io/nuget/vpre/openai.svg?sanitize=true" alt="NuGet version"></a></p> <p>The OpenAI .NET library provides convenient access to the OpenAI REST API from .NET applications.</p> <p>It is generated from our <a href="https://github.com/openai/openai-openapi">OpenAPI specification</a> in collaboration with Microsoft.</p> <h2>Table of Contents</h2> <ul> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#getting-started">Getting started</a> <ul> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#prerequisites">Prerequisites</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#install-the-nuget-package">Install the NuGet package</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#using-the-client-library">Using the client library</a> <ul> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#namespace-organization">Namespace organization</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#using-the-async-api">Using the async API</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#using-the-openaiclient-class">Using the <code>OpenAIClient</code> class</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-use-chat-completions-with-streaming">How to use chat completions with streaming</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-use-chat-completions-with-tools-and-function-calling">How to use chat completions with tools and function calling</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-generate-text-embeddings">How to generate text embeddings</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-generate-images">How to generate images</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-transcribe-audio">How to transcribe audio</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-use-assistants-with-retrieval-augmented-generation-rag">How to use assistants with retrieval augmented generation (RAG)</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-use-streaming-and-gpt-4o-vision-with-assistants">How to use streaming and GPT-4o vision with assistants</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#how-to-work-with-azure-openai">How to work with Azure OpenAI</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#advanced-scenarios">Advanced scenarios</a> <ul> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#using-protocol-methods">Using protocol methods</a></li> <li><a href="https://raw.githubusercontent.com/openai/openai-dotnet/main/#automatically-retrying-errors">Automatically retrying errors</a></li> </ul> </li> </ul> <h2>Getting started</h2> <h3>Prerequisites</h3> <p>To call the OpenAI REST API, you will need an API key. To obtain one, first <a href="https://platform.openai.com/signup">create a new OpenAI account</a> or <a href="https://platform.openai.com/login">log in</a>. Next, navigate to the <a href="https://platform.openai.com/account/api-keys">API key page</a> and select "Create new secret key", optionally naming the key. Make sure to save your API key somewhere safe and do not share it with anyone.</p> <h3>Install the NuGet package</h3> <p>Add the client library to your .NET project with <a href="https://www.nuget.org/">NuGet</a> using your IDE or the dotnet CLI:</p> <pre><code class="language-cli">dotnet add package OpenAI --prerelease </code></pre> <p>Note that the code examples included below were written using <a href="https://dotnet.microsoft.com/download/dotnet/8.0">.NET 8</a>. The OpenAI .NET library is compatible with all .NET Standard 2.0 applications but some code examples in this document may depend on newer language features.</p> <h2>Using the client library</h2> <p>The full API of this library can be found in the <a href="https://github.com/openai/openai-dotnet/raw/main/api/api.md">api.md</a> file, and there are many <a href="https://github.com/openai/openai-dotnet/tree/main/examples">code examples</a> to help. For instance, the following snippet illustrates the basic use of the chat completions API:</p> <pre><code class="language-csharp">using OpenAI.Chat; ChatClient client = new(model: "gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); ChatCompletion completion = client.CompleteChat("Say 'this is a test.'"); Console.WriteLine($"[ASSISTANT]: {completion}"); </code></pre> <p>While you can pass your API key directly as a string, it is highly recommended to keep it in a secure location and instead access it via an environment variable or configuration file as shown above to avoid storing it in source control.</p> <h3>Namespace organization</h3> <p>The library is organized into several namespaces corresponding to OpenAI feature areas. Each namespace contains a corresponding client class.</p> <table> <thead> <tr> <th>Namespace</th> <th>Client class</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td><code>OpenAI.Assistants</code></td> <td><code>AssistantClient</code></td> <td>[Experimental]</td> </tr> <tr> <td><code>OpenAI.Audio</code></td> <td><code>AudioClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Batch</code></td> <td><code>BatchClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Chat</code></td> <td><code>ChatClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Embeddings</code></td> <td><code>EmbeddingClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.FineTuning</code></td> <td><code>FineTuningClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Files</code></td> <td><code>FileClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Images</code></td> <td><code>ImageClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Models</code></td> <td><code>ModelClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.Moderations</code></td> <td><code>ModerationClient</code></td> <td></td> </tr> <tr> <td><code>OpenAI.VectorStores</code></td> <td><code>VectorStoreClient</code></td> <td>[Experimental]</td> </tr> </tbody> </table> <h3>Using the async API</h3> <p>Every client method that performs a synchronous API call has an asynchronous variant in the same client class. For instance, the asynchronous variant of the <code>ChatClient</code>'s <code>CompleteChat</code> method is <code>CompleteChatAsync</code>. To rewrite the call above using the asynchronous counterpart, simply <code>await</code> the call to the corresponding async variant:</p> <pre><code class="language-csharp">ChatCompletion completion = await client.CompleteChatAsync("Say 'this is a test.'"); </code></pre> <h3>Using the <code>OpenAIClient</code> class</h3> <p>In addition to the namespaces mentioned above, there is also the parent <code>OpenAI</code> namespace itself:</p> <pre><code class="language-csharp">using OpenAI; </code></pre> <p>This namespace contains the <code>OpenAIClient</code> class, which offers certain conveniences when you need to work with multiple feature area clients. Specifically, you can use an instance of this class to create instances of the other clients and have them share the same implementation details, which might be more efficient.</p> <p>You can create an <code>OpenAIClient</code> by specifying the API key that all clients will use for authentication:</p> <pre><code class="language-csharp">OpenAIClient client = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); </code></pre> <p>Next, to create an instance of an <code>AudioClient</code>, for example, you can call the <code>OpenAIClient</code>'s <code>GetAudioClient</code> method by passing the OpenAI model that the <code>AudioClient</code> will use, just as if you were using the <code>AudioClient</code> constructor directly. If necessary, you can create additional clients of the same type to target different models.</p> <pre><code class="language-csharp">AudioClient ttsClient = client.GetAudioClient("tts-1"); AudioClient whisperClient = client.GetAudioClient("whisper-1"); </code></pre> <h2>How to use chat completions with streaming</h2> <p>When you request a chat completion, the default behavior is for the server to generate it in its entirety before sending it back in a single response. Consequently, long chat completions can require waiting for several seconds before hearing back from the server. To mitigate this, the OpenAI REST API supports the ability to stream partial results back as they are being generated, allowing you to start processing the beginning of the completion before it is finished.</p> <p>The client library offers a convenient approach to working with streaming chat completions. If you wanted to re-write the example from the previous section using streaming, rather than calling the <code>ChatClient</code>'s <code>CompleteChat</code> method, you would call its <code>CompleteChatStreaming</code> method instead:</p> <pre><code class="language-csharp">CollectionResult&lt;StreamingChatCompletionUpdate&gt; updates = client.CompleteChatStreaming("Say 'this is a test.'"); </code></pre> <p>Notice that the returned value is a <code>CollectionResult&lt;StreamingChatCompletionUpdate&gt;</code> instance, which can be enumerated to process the streaming response chunks as they arrive:</p> <pre><code class="language-csharp">Console.WriteLine($"[ASSISTANT]:"); foreach (StreamingChatCompletionUpdate update in updates) { foreach (ChatMessageContentPart updatePart in update.ContentUpdate) { Console.Write(updatePart); } } </code></pre> <p>Alternatively, you can do this asynchronously by calling the <code>CompleteChatStreamingAsync</code> method to get an <code>AsyncCollectionResult&lt;StreamingChatCompletionUpdate&gt;</code> and enumerate it using <code>await foreach</code>:</p> <pre><code class="language-csharp">AsyncCollectionResult&lt;StreamingChatCompletionUpdate&gt; updates = client.CompleteChatStreamingAsync("Say 'this is a test.'"); Console.WriteLine($"[ASSISTANT]:"); await foreach (StreamingChatCompletionUpdate update in updates) { foreach (ChatMessageContentPart updatePart in update.ContentUpdate) { Console.Write(updatePart.Text); } } </code></pre> <h2>How to use chat completions with tools and function calling</h2> <p>In this example, you have two functions. The first function can retrieve a user's current geographic location (e.g., by polling the location service APIs of the user's device), while the second function can query the weather in a given location (e.g., by making an API call to some third-party weather service). You want chat completions to be able to call these functions if the model deems it necessary to have this information in order to respond to a user request. For illustrative purposes, consider the following:</p> <pre><code class="language-csharp">private static string GetCurrentLocation() { // Call the location API here. return "San Francisco"; } private static string GetCurrentWeather(string location, string unit = "celsius") { // Call the weather API here. return $"31 {unit}"; } </code></pre> <p>Start by creating two <code>ChatTool</code> instances using the static <code>CreateFunctionTool</code> method to describe each function:</p> <pre><code class="language-csharp">private static readonly ChatTool getCurrentLocationTool = ChatTool.CreateFunctionTool( functionName: nameof(GetCurrentLocation), functionDescription: "Get the user's current location" ); private static readonly ChatTool getCurrentWeatherTool = ChatTool.CreateFunctionTool( functionName: nameof(GetCurrentWeather), functionDescription: "Get the current weather in a given location", functionParameters: BinaryData.FromString(""" { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. Boston, MA" }, "unit": { "type": "string", "enum": [ "celsius", "fahrenheit" ], "description": "The temperature unit to use. Infer this from the specified location." } }, "required": [ "location" ] } """) ); </code></pre> <p>Next, create a <code>ChatCompletionOptions</code> instance and add both to its <code>Tools</code> property. You will pass the <code>ChatCompletionOptions</code> as an argument in your calls to the <code>ChatClient</code>'s <code>CompleteChat</code> method.</p> <pre><code class="language-csharp">List&lt;ChatMessage&gt; messages = [ new UserChatMessage("What's the weather like today?"), ]; ChatCompletionOptions options = new() { Tools = { getCurrentLocationTool, getCurrentWeatherTool }, }; </code></pre> <p>When the resulting <code>ChatCompletion</code> has a <code>FinishReason</code> property equal to <code>ChatFinishReason.ToolCalls</code>, it means that the model has determined that one or more tools must be called before the assistant can respond appropriately. In those cases, you must first call the function specified in the <code>ChatCompletion</code>'s <code>ToolCalls</code> and then call the <code>ChatClient</code>'s <code>CompleteChat</code> method again while passing the function's result as an additional <code>ChatRequestToolMessage</code>. Repeat this process as needed.</p> <pre><code class="language-csharp">bool requiresAction; do { requiresAction = false; ChatCompletion chatCompletion = client.CompleteChat(messages, options); switch (chatCompletion.FinishReason) { case ChatFinishReason.Stop: { // Add the assistant message to the conversation history. messages.Add(new AssistantChatMessage(chatCompletion)); break; } case ChatFinishReason.ToolCalls: { // First, add the assistant message with tool calls to the conversation history. messages.Add(new AssistantChatMessage(chatCompletion)); // Then, add a new tool message for each tool call that is resolved. foreach (ChatToolCall toolCall in chatCompletion.ToolCalls) { switch (toolCall.FunctionName) { case nameof(GetCurrentLocation): { string toolResult = GetCurrentLocation(); messages.Add(new ToolChatMessage(toolCall.Id, toolResult)); break; } case nameof(GetCurrentWeather): { // The arguments that the model wants to use to call the function are specified as a // stringified JSON object based on the schema defined in the tool definition. Note that // the model may hallucinate arguments too. Consequently, it is important to do the // appropriate parsing and validation before calling the function. using JsonDocument argumentsJson = JsonDocument.Parse(toolCall.FunctionArguments); bool hasLocation = argumentsJson.RootElement.TryGetProperty("location", out JsonElement location); bool hasUnit = argumentsJson.RootElement.TryGetProperty("unit", out JsonElement unit); if (!hasLocation) { throw new ArgumentNullException(nameof(location), "The location argument is required."); } string toolResult = hasUnit ? GetCurrentWeather(location.GetString(), unit.GetString()) : GetCurrentWeather(location.GetString()); messages.Add(new ToolChatMessage(toolCall.Id, toolResult)); break; } default: { // Handle other unexpected calls. throw new NotImplementedException(); } } } requiresAction = true; break; } case ChatFinishReason.Length: throw new NotImplementedException("Incomplete model output due to MaxTokens parameter or token limit exceeded."); case ChatFinishReason.ContentFilter: throw new NotImplementedException("Omitted content due to a content filter flag."); case ChatFinishReason.FunctionCall: throw new NotImplementedException("Deprecated in favor of tool calls."); default: throw new NotImplementedException(chatCompletion.FinishReason.ToString()); } } while (requiresAction); </code></pre> <h2>How to generate text embeddings</h2> <p>In this example, you want to create a trip-planning website that allows customers to write a prompt describing the kind of hotel that they are looking for and then offers hotel recommendations that closely match this description. To achieve this, it is possible to use text embeddings to measure the relatedness of text strings. In summary, you can get embeddings of the hotel descriptions, store them in a vector database, and use them to build a search index that you can query using the embedding of a given customer's prompt.</p> <p>To generate a text embedding, use <code>EmbeddingClient</code> from the <code>OpenAI.Embeddings</code> namespace:</p> <pre><code class="language-csharp">using OpenAI.Embeddings; EmbeddingClient client = new(model: "text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); string description = "Best hotel in town if you like luxury hotels. They have an amazing infinity pool, a spa," + " and a really helpful concierge. The location is perfect -- right downtown, close to all the tourist" + " attractions. We highly recommend this hotel."; Embedding embedding = client.GenerateEmbedding(description); ReadOnlyMemory&lt;float&gt; vector = embedding.Vector; </code></pre> <p>Notice that the resulting embedding is a list (also called a vector) of floating point numbers represented as an instance of <code>ReadOnlyMemory&lt;float&gt;</code>. By default, the length of the embedding vector will be 1536 when using the <code>text-embedding-3-small</code> model or 3072 when using the <code>text-embedding-3-large</code> model. Generally, larger embeddings perform better, but using them also tends to cost more in terms of compute, memory, and storage. You can reduce the dimensions of the embedding by creating an instance of the <code>EmbeddingGenerationOptions</code> class, setting the <code>Dimensions</code> property, and passing it as an argument in your call to the <code>GenerateEmbedding</code> method:</p> <pre><code class="language-csharp">EmbeddingGenerationOptions options = new() { Dimensions = 512 }; Embedding embedding = client.GenerateEmbedding(description, options); </code></pre> <h2>How to generate images</h2> <p>In this example, you want to build an app to help interior designers prototype new ideas based on the latest design trends. As part of the creative process, an interior designer can use this app to generate images for inspiration simply by describing the scene in their head as a prompt. As expected, high-quality, strikingly dramatic images with finer details deliver the best results for this application.</p> <p>To generate an image, use <code>ImageClient</code> from the <code>OpenAI.Images</code> namespace:</p> <pre><code class="language-csharp">using OpenAI.Images; ImageClient client = new(model: "dall-e-3", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); </code></pre> <p>Generating an image always requires a <code>prompt</code> that describes what should be generated. To further tailor the image generation to your specific needs, you can create an instance of the <code>ImageGenerationOptions</code> class and set the <code>Quality</code>, <code>Size</code>, and <code>Style</code> properties accordingly. Note that you can also set the <code>ResponseFormat</code> property of <code>ImageGenerationOptions</code> to <code>GeneratedImageFormat.Bytes</code> in order to receive the resulting PNG as <code>BinaryData</code> (instead of the default remote <code>Uri</code>) if this is convenient for your use case.</p> <pre><code class="language-csharp">string prompt = "The concept for a living room that blends Scandinavian simplicity with Japanese minimalism for" + " a serene and cozy atmosphere. It's a space that invites relaxation and mindfulness, with natural light" + " and fresh air. Using neutral tones, including colors like white, beige, gray, and black, that create a" + " sense of harmony. Featuring sleek wood furniture with clean lines and subtle curves to add warmth and" + " elegance. Plants and flowers in ceramic pots adding color and life to a space. They can serve as focal" + " points, creating a connection with nature. Soft textiles and cushions in organic fabrics adding comfort" + " and softness to a space. They can serve as accents, adding contrast and texture."; ImageGenerationOptions options = new() { Quality = GeneratedImageQuality.High, Size = GeneratedImageSize.W1792xH1024, Style = GeneratedImageStyle.Vivid, ResponseFormat = GeneratedImageFormat.Bytes }; </code></pre> <p>Finally, call the <code>ImageClient</code>'s <code>GenerateImage</code> method by passing the prompt and the <code>ImageGenerationOptions</code> instance as arguments:</p> <pre><code class="language-csharp">GeneratedImage image = client.GenerateImage(prompt, options); BinaryData bytes = image.ImageBytes; </code></pre> <p>For illustrative purposes, you could then save the generated image to local storage:</p> <pre><code class="language-csharp">using FileStream stream = File.OpenWrite($"{Guid.NewGuid()}.png"); bytes.ToStream().CopyTo(stream); </code></pre> <h2>How to transcribe audio</h2> <p>In this example, an audio file is transcribed using the Whisper speech-to-text model, including both word- and audio-segment-level timestamp information.</p> <pre><code class="language-csharp">using OpenAI.Audio; AudioClient client = new(model: "whisper-1", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); string audioFilePath = Path.Combine("Assets", "audio_houseplant_care.mp3"); AudioTranscriptionOptions options = new() { ResponseFormat = AudioTranscriptionFormat.Verbose, Granularities = AudioTimestampGranularities.Word | AudioTimestampGranularities.Segment, }; AudioTranscription transcription = client.TranscribeAudio(audioFilePath, options); Console.WriteLine("Transcription:"); Console.WriteLine($"{transcription.Text}"); Console.WriteLine(); Console.WriteLine($"Words:"); foreach (TranscribedWord word in transcription.Words) { Console.WriteLine($" {word.Word,15} : {word.Start.TotalMilliseconds,5:0} - {word.End.TotalMilliseconds,5:0}"); } Console.WriteLine(); Console.WriteLine($"Segments:"); foreach (TranscribedSegment segment in transcription.Segments) { Console.WriteLine($" {segment.Text,90} : {segment.Start.TotalMilliseconds,5:0} - {segment.End.TotalMilliseconds,5:0}"); } </code></pre> <h2>How to use assistants with retrieval augmented generation (RAG)</h2> <p>In this example, you have a JSON document with the monthly sales information of different products, and you want to build an assistant capable of analyzing it and answering questions about it.</p> <p>To achieve this, use both <code>FileClient</code> from the <code>OpenAI.Files</code> namespace and <code>AssistantClient</code> from the <code>OpenAI.Assistants</code> namespace.</p> <p>Important: The Assistants REST API is currently in beta. As such, the details are subject to change, and correspondingly the <code>AssistantClient</code> is attributed as <code>[Experimental]</code>. To use it, suppress the <code>OPENAI001</code> warning at either the project level or, as below, in the code itself.</p> <pre><code class="language-csharp">using OpenAI.Assistants; using OpenAI.Files; // Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning. #pragma warning disable OPENAI001 OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); FileClient fileClient = openAIClient.GetFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); </code></pre> <p>Here is an example of what the JSON document might look like:</p> <pre><code class="language-csharp">using Stream document = BinaryData.FromString(""" { "description": "This document contains the sale history data for Contoso products.", "sales": [ { "month": "January", "by_product": { "113043": 15, "113045": 12, "113049": 2 } }, { "month": "February", "by_product": { "113045": 22 } }, { "month": "March", "by_product": { "113045": 16, "113055": 5 } } ] } """).ToStream(); </code></pre> <p>Upload this document to OpenAI using the <code>FileClient</code>'s <code>UploadFile</code> method, ensuring that you use <code>FileUploadPurpose.Assistants</code> to allow your assistant to access it later:</p> <pre><code class="language-csharp">OpenAIFileInfo salesFile = fileClient.UploadFile( document, "monthly_sales.json", FileUploadPurpose.Assistants); </code></pre> <p>Create a new assistant using an instance of the <code>AssistantCreationOptions</code> class to customize it. Here, we use:</p> <ul> <li>A friendly <code>Name</code> for the assistant, as will display in the Playground</li> <li>Tool definition instances for the tools that the assistant should have access to; here, we use <code>FileSearchToolDefinition</code> to process the sales document we just uploaded and <code>CodeInterpreterToolDefinition</code> so we can analyze and visualize the numeric data</li> <li>Resources for the assistant to use with its tools, here using the <code>VectorStoreCreationHelper</code> type to automatically make a new vector store that indexes the sales file; alternatively, you could use <code>VectorStoreClient</code> to manage the vector store separately</li> </ul> <pre><code class="language-csharp">AssistantCreationOptions assistantOptions = new() { Name = "Example: Contoso sales RAG", Instructions = "You are an assistant that looks up sales data and helps visualize the information based" + " on user queries. When asked to generate a graph, chart, or other visualization, use" + " the code interpreter tool to do so.", Tools = { new FileSearchToolDefinition(), new CodeInterpreterToolDefinition(), }, ToolResources = new() { FileSearch = new() { NewVectorStores = { new VectorStoreCreationHelper([salesFile.Id]), } } }, }; Assistant assistant = assistantClient.CreateAssistant("gpt-4o", assistantOptions); </code></pre> <p>Next, create a new thread. For illustrative purposes, you could include an initial user message asking about the sales information of a given product and then use the <code>AssistantClient</code>'s <code>CreateThreadAndRun</code> method to get it started:</p> <pre><code class="language-csharp">ThreadCreationOptions threadOptions = new() { InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." } }; ThreadRun threadRun = assistantClient.CreateThreadAndRun(assistant.Id, threadOptions); </code></pre> <p>Poll the status of the run until it is no longer queued or in progress:</p> <pre><code class="language-csharp">do { Thread.Sleep(TimeSpan.FromSeconds(1)); threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id); } while (!threadRun.Status.IsTerminal); </code></pre> <p>If everything went well, the terminal status of the run will be <code>RunStatus.Completed</code>.</p> <p>Finally, you can use the <code>AssistantClient</code>'s <code>GetMessages</code> method to retrieve the messages associated with this thread, which now include the responses from the assistant to the initial user message.</p> <p>For illustrative purposes, you could print the messages to the console and also save any images produced by the assistant to local storage:</p> <pre><code class="language-csharp">PageCollection&lt;ThreadMessage&gt; messagePages = assistantClient.GetMessages(threadRun.ThreadId, new MessageCollectionOptions() { Order = ListOrder.OldestFirst }); IEnumerable&lt;ThreadMessage&gt; messages = messagePages.GetAllValues(); foreach (ThreadMessage message in messages) { Console.Write($"[{message.Role.ToString().ToUpper()}]: "); foreach (MessageContent contentItem in message.Content) { if (!string.IsNullOrEmpty(contentItem.Text)) { Console.WriteLine($"{contentItem.Text}"); if (contentItem.TextAnnotations.Count &gt; 0) { Console.WriteLine(); } // Include annotations, if any. foreach (TextAnnotation annotation in contentItem.TextAnnotations) { if (!string.IsNullOrEmpty(annotation.InputFileId)) { Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}"); } if (!string.IsNullOrEmpty(annotation.OutputFileId)) { Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}"); } } } if (!string.IsNullOrEmpty(contentItem.ImageFileId)) { OpenAIFileInfo imageInfo = fileClient.GetFile(contentItem.ImageFileId); BinaryData imageBytes = fileClient.DownloadFile(contentItem.ImageFileId); using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png"); imageBytes.ToStream().CopyTo(stream); Console.WriteLine($"&lt;image: {imageInfo.Filename}.png&gt;"); } } Console.WriteLine(); } </code></pre> <p>And it would yield something like this:</p> <pre><code class="language-text">[USER]: How well did product 113045 sell in February? Graph its trend over time. [ASSISTANT]: Product 113045 sold 22 units in February【4:0†monthly_sales.json】. Now, I will generate a graph to show its sales trend over time. * File citation, file ID: file-hGOiwGNftMgOsjbynBpMCPFn [ASSISTANT]: &lt;image: 015d8e43-17fe-47de-af40-280f25452280.png&gt; The sales trend for Product 113045 over the past three months shows that: - In January, 12 units were sold. - In February, 22 units were sold, indicating significant growth. - In March, sales dropped slightly to 16 units. The graph above visualizes this trend, showing a peak in sales during February. </code></pre> <h2>How to use streaming and GPT-4o vision with assistants</h2> <p>This example shows how to use the v2 Assistants API to provide image data to an assistant and then stream the run's response.</p> <p>As before, you will use a <code>FileClient</code> and an <code>AssistantClient</code>:</p> <pre><code class="language-csharp">// Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning. #pragma warning disable OPENAI001 OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); FileClient fileClient = openAIClient.GetFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); </code></pre> <p>For this example, we will use both image data from a local file as well as an image located at a URL. For the local data, we upload the file with the <code>Vision</code> upload purpose, which would also allow it to be downloaded and retrieved later.</p> <pre><code class="language-csharp">OpenAIFileInfo pictureOfAppleFile = fileClient.UploadFile( "picture-of-apple.jpg", FileUploadPurpose.Vision); Uri linkToPictureOfOrange = new("https://platform.openai.com/fictitious-files/picture-of-orange.png"); </code></pre> <p>Next, create a new assistant with a vision-capable model like <code>gpt-4o</code> and a thread with the image information referenced:</p> <pre><code class="language-csharp">Assistant assistant = assistantClient.CreateAssistant( model: "gpt-4o", new AssistantCreationOptions() { Instructions = "When asked a question, attempt to answer very concisely. " + "Prefer one-sentence answers whenever feasible." }); AssistantThread thread = assistantClient.CreateThread(new ThreadCreationOptions() { InitialMessages = { new ThreadInitializationMessage( [ "Hello, assistant! Please compare these two images for me:", MessageContent.FromImageFileId(pictureOfAppleFile.Id), MessageContent.FromImageUrl(linkToPictureOfOrange), ]), } }); </code></pre> <p>With the assistant and thread prepared, use the <code>CreateRunStreaming</code> method to get an enumerable <code>CollectionResult&lt;StreamingUpdate&gt;</code>. You can then iterate over this collection with <code>foreach</code>. For async calling patterns, use <code>CreateRunStreamingAsync</code> and iterate over the <code>AsyncCollectionResult&lt;StreamingUpdate&gt;</code> with <code>await foreach</code>, instead. Note that streaming variants also exist for <code>CreateThreadAndRunStreaming</code> and <code>SubmitToolOutputsToRunStreaming</code>.</p> <pre><code class="language-csharp">CollectionResult&lt;StreamingUpdate&gt; streamingUpdates = assistantClient.CreateRunStreaming( thread, assistant, new RunCreationOptions() { AdditionalInstructions = "When possible, try to sneak in puns if you're asked to compare things.", }); </code></pre> <p>Finally, to handle the <code>StreamingUpdates</code> as they arrive, you can use the <code>UpdateKind</code> property on the base <code>StreamingUpdate</code> and/or downcast to a specifically desired update type, like <code>MessageContentUpdate</code> for <code>thread.message.delta</code> events or <code>RequiredActionUpdate</code> for streaming tool calls.</p> <pre><code class="language-csharp">foreach (StreamingUpdate streamingUpdate in streamingUpdates) { if (streamingUpdate.UpdateKind == StreamingUpdateReason.RunCreated) { Console.WriteLine($"--- Run started! ---"); } if (streamingUpdate is MessageContentUpdate contentUpdate) { Console.Write(contentUpdate.Text); } } </code></pre> <p>This will yield streamed output from the run like the following:</p> <pre><code class="language-text">--- Run started! --- The first image shows a red apple with a smooth skin and a single leaf, while the second image depicts an orange with a rough, textured skin and a leaf with droplets of water. Comparing them might seem impossible - it's like apples and oranges! </code></pre> <h2>How to work with Azure OpenAI</h2> <p>Details for using the OpenAI .NET library with <a href="https://learn.microsoft.com/azure/ai-services/openai/overview">Azure OpenAI</a> are coming soon. Please watch here and the <a href="https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/openai/Azure.AI.OpenAI">Azure.AI.OpenAI project</a> for updates.</p> <h2>Advanced scenarios</h2> <h3>Using protocol methods</h3> <p>In addition to the client methods that use strongly-typed request and response objects, the .NET library also provides <em>protocol methods</em> that enable more direct access to the REST API. Protocol methods are "binary in, binary out" accepting <code>BinaryContent</code> as request bodies and providing <code>BinaryData</code> as response bodies.</p> <p>For example, to use the protocol method variant of the <code>ChatClient</code>'s <code>CompleteChat</code> method, pass the request body as <code>BinaryContent</code>:</p> <pre><code class="language-csharp">ChatClient client = new("gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); BinaryData input = BinaryData.FromBytes(""" { "model": "gpt-4o", "messages": [ { "role": "user", "content": "How does AI work? Explain it in simple terms." } ] } """u8.ToArray()); using BinaryContent content = BinaryContent.Create(input); ClientResult result = client.CompleteChat(content); BinaryData output = result.GetRawResponse().Content; using JsonDocument outputAsJson = JsonDocument.Parse(output); string message = outputAsJson.RootElement .GetProperty("choices"u8)[0] .GetProperty("message"u8) .GetProperty("content"u8) .GetString(); </code></pre> <p>Notice how you can then call the resulting <code>ClientResult</code>'s <code>GetRawResponse</code> method and retrieve the response body as <code>BinaryData</code> via the <code>PipelineResponse</code>'s <code>Content</code> property.</p> <h3>Automatically retrying errors</h3> <p>By default, the client classes will automatically retry the following errors up to three additional times using exponential backoff:</p> <ul> <li>408 Request Timeout</li> <li>429 Too Many Requests</li> <li>500 Internal Server Error</li> <li>502 Bad Gateway</li> <li>503 Service Unavailable</li> <li>504 Gateway Timeout</li> </ul> - \ No newline at end of file diff --git a/c++/daily/index.xml b/c++/daily/index.xml index 0a981420ee7..e732b659b16 100644 --- a/c++/daily/index.xml +++ b/c++/daily/index.xml @@ -1,14 +1,7 @@ GitHub C++ Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:24Z + 2024-08-03T01:28:40Z Daily Trending of C++ in GitHub - - AdaptiveCpp/AdaptiveCpp - 2024-08-02T01:28:24Z - tag:github.com,2024-08-02:/AdaptiveCpp/AdaptiveCpp - - <p>Implementation of SYCL and C++ standard parallelism for CPUs and GPUs from all vendors: The independent, community-driven compiler for C++-based heterogeneous programming models. Lets applications adapt themselves to all the hardware in the system - even at runtime!</p><hr><p><img src="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/img/logo/logo-color.png" alt="Project logo"></p> <h1>AdaptiveCpp (formerly known as hipSYCL / Open SYCL)</h1> <p><strong>(Note: This project is currently in progress of changing its name to AdaptiveCpp due to external legal pressure. Documentation and code may still use the older name hipSYCL / Open SYCL)</strong></p> <p>AdaptiveCpp is the independent, community-driven modern platform for C++-based heterogeneous programming models targeting CPUs and GPUs from all major vendors. AdaptiveCpp lets applications adapt themselves to all the hardware found in the system. This includes use cases where a single binary needs to be able to target all supported hardware, or utilize hardware from different vendors simultaneously.</p> <p>It currently supports the following programming models:</p> <ol> <li><strong>SYCL</strong>: At its core is a highly competitive and flexible SYCL implementation that supports many compilation flows.</li> <li><strong>C++ standard parallelism</strong>: Additionally, AdaptiveCpp features experimental support for offloading C++ algorithms from the parallel STL. See <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/stdpar.md">here</a> for details on which algorithms can be offloaded. <strong>AdaptiveCpp is currently the only solution capable of demonstrating C++ standard parallelism performance across NVIDIA, AMD and Intel GPUs, and in most cases outperforms vendor compilers.</strong></li> </ol> <p>AdaptiveCpp supports CPUs (including x86, arm and other LLVM-supported architectures) as well as GPUs from Intel, NVIDIA, and AMD. This includes the ability to generate a single binary that can offload to all supported devices.</p> <p>AdaptiveCpp's compilation flows include</p> <ol> <li>A powerful, generic LLVM JIT compiler. This is AdaptiveCpp's default, most portable and usually most performant compilation flow. It is also the <strong>world's only SYCL compiler that only needs to parse the source code a single time</strong> across both host and device compilation.</li> <li>Compilation flows focused on providing interoperability at source code level with vendor programming models (including e.g. the ability to mix-and-match CUDA and SYCL in the same source file)</li> <li>Library-only compilation flows focused on deployment simplicity. These compilation flows allow utilizing third-party compilers, with AdaptiveCpp merely acting as a library.</li> </ol> <p>A full list of its compilation capabilities can be found <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/compilation.md">here</a>.</p> <p>Because a program compiled with AdaptiveCpp appears just like any other program written in vendor-supported programming models (like CUDA or HIP) to vendor-provided software, vendor tools such as profilers or debuggers also work with AdaptiveCpp.</p> <p>An illustration on how the project fits into the SYCL ecosystem can be found (<a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/sycl-ecosystem.md">here</a>).</p> <h2>Performance &amp; benchmarking</h2> <p>See the <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/performance.md">AdaptiveCpp performance guide</a>.</p> <h2>Installing and using AdaptiveCpp</h2> <ul> <li><a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/installing.md">Building &amp; Installing</a></li> </ul> <p>In order to compile software with AdaptiveCpp, use <code>acpp</code>. <code>acpp</code> can be used like a regular compiler, i.e. you can use <code>acpp -o test test.cpp</code> to compile your application called <code>test.cpp</code> with AdaptiveCpp.</p> <p><code>acpp</code> accepts both command line arguments and environment variables to configure its behavior (e.g., to select the target to compile for). See <code>acpp --help</code> for a comprehensive list of options.</p> <p>For details and instructions on using AdaptiveCpp in CMake projects, please see the documentation on <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/using-hipsycl.md">using AdaptiveCpp</a>.</p> <h2>About the project</h2> <p>Development of AdaptiveCpp is currently primarily led by Heidelberg University, with contributions from a growing community. We see AdaptiveCpp as a community-driven project, in contrast to the many vendor-driven heterogeneous compiler efforts. AdaptiveCpp not only serves as a research platform, but is also a solution used in production on machines of all scales, including some of the most powerful supercomputers.</p> <h3>Getting in touch</h3> <p>Join us on <a href="https://discord.gg/s2p7Vccwh3">Discord</a>! Alternatively, open a discussion or issue in this repository.</p> <h3>Contributing to AdaptiveCpp</h3> <p>We encourage contributions and are looking forward to your pull request! Please have a look at <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/CONTRIBUTING.md">CONTRIBUTING.md</a>. If you need any guidance, please just open an issue and we will get back to you shortly.</p> <p>If your institution or organization is considering to support the AdaptiveCpp development in some official capacity, we are always happy to discuss collaborations and to broaden the developer community. Please do reach out :-)</p> <p>If you are a student at Heidelberg University and wish to work on AdaptiveCpp, please get in touch with us. There are various options possible and we are happy to include you in the project :-)</p> <h3>Citing AdaptiveCpp</h3> <p>AdaptiveCpp is a production platform for heterogeneous computing, but also a research project. As such, if you use AdaptiveCpp in your research, we kindly request that you cite one of the following publications, depending on your focus:</p> <ul> <li>A general overview, SYCL 2020, performance and the relationship with oneAPI: <em>Aksel Alpay, Bálint Soproni, Holger Wünsche, and Vincent Heuveline. 2022. Exploring the possibility of a hipSYCL-based implementation of oneAPI. In International Workshop on OpenCL (IWOCL'22). Association for Computing Machinery, New York, NY, USA, Article 10, 1–12. <a href="https://doi.org/10.1145/3529538.3530005">https://doi.org/10.1145/3529538.3530005</a></em></li> <li>C++ standard parallelism offloading support (stdpar): <em>Aksel Alpay and Vincent Heuveline. 2024. AdaptiveCpp Stdpar: C++ Standard Parallelism Integrated Into a SYCL Compiler. In Proceedings of the 12th International Workshop on OpenCL and SYCL (IWOCL '24). Association for Computing Machinery, New York, NY, USA, Article 5, 1–12. <a href="https://doi.org/10.1145/3648115.3648117">https://doi.org/10.1145/3648115.3648117</a></em></li> <li>The generic single-pass compiler: <em>Aksel Alpay and Vincent Heuveline. 2023. One Pass to Bind Them: The First Single-Pass SYCL Compiler with Unified Code Representation Across Backends. In Proceedings of the 2023 International Workshop on OpenCL (IWOCL '23). Association for Computing Machinery, New York, NY, USA, Article 7, 1–12. <a href="https://doi.org/10.1145/3585341.3585351">https://doi.org/10.1145/3585341.3585351</a></em></li> <li>Our CPU compiler: <em>Joachim Meyer, Aksel Alpay, Sebastian Hack, Holger Fröning, and Vincent Heuveline. 2023. Implementation Techniques for SPMD Kernels on CPUs. In Proceedings of the 2023 International Workshop on OpenCL (IWOCL '23). Association for Computing Machinery, New York, NY, USA, Article 1, 1–12. <a href="https://doi.org/10.1145/3585341.3585342">https://doi.org/10.1145/3585341.3585342</a></em></li> <li>The original talk and the idea of implementing SYCL on non-OpenCL backends: <em>Aksel Alpay and Vincent Heuveline. 2020. SYCL beyond OpenCL: The architecture, current state and future direction of hipSYCL. In Proceedings of the International Workshop on OpenCL (IWOCL ’20). Association for Computing Machinery, New York, NY, USA, Article 8, 1. DOI:<a href="https://doi.org/10.1145/3388333.3388658">https://doi.org/10.1145/3388333.3388658</a></em></li> </ul> <p>(The latter is a talk and available <a href="https://www.youtube.com/watch?v=kYrY80J4ZAs">online</a>. Note that some of the content in this talk is outdated by now)</p> <h3>Acknowledgements</h3> <p>We gratefully acknowledge <a href="https://github.com/illuhad/hipSYCL/graphs/contributors">contributions</a> from the community.</p> <h2>Documentation</h2> <ul> <li>AdaptiveCpp <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/architecture.md">design and architecture</a></li> <li>AdaptiveCpp runtime <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/runtime-spec.md">specification</a></li> <li>AdaptiveCpp <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/compilation.md">compilation model</a></li> <li>How to use raw HIP/CUDA inside AdaptiveCpp code to create <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/hip-source-interop.md">optimized code paths</a></li> <li>A simple SYCL example code for testing purposes can be found <a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/examples.md">here</a>.</li> <li><a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/extensions.md">SYCL Extensions implemented in AdaptiveCpp</a></li> <li><a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/macros.md">Macros used by AdaptiveCpp</a></li> <li><a href="https://raw.githubusercontent.com/AdaptiveCpp/AdaptiveCpp/develop/doc/env_variables.md">Environment variables supported by AdaptiveCpp</a></li> </ul> - \ No newline at end of file diff --git a/c-objdump/daily/index.xml b/c-objdump/daily/index.xml index 1dbb8e201bf..5f4cdbb78b1 100644 --- a/c-objdump/daily/index.xml +++ b/c-objdump/daily/index.xml @@ -1,7 +1,7 @@ GitHub C-ObjDump Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:22Z + 2024-08-03T01:28:37Z Daily Trending of C-ObjDump in GitHub \ No newline at end of file diff --git a/c/daily/index.xml b/c/daily/index.xml index 1df86d789de..b231ef51e95 100644 --- a/c/daily/index.xml +++ b/c/daily/index.xml @@ -1,14 +1,7 @@ GitHub C Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:09Z + 2024-08-03T01:28:25Z Daily Trending of C in GitHub - - basil00/Divert - 2024-08-02T01:28:09Z - tag:github.com,2024-08-02:/basil00/Divert - - <p>WinDivert: Windows Packet Divert</p><hr><h1>WinDivert 2.2: Windows Packet Divert</h1> <ol> <li>Introduction</li> </ol> <hr> <p>Windows Packet Divert (WinDivert) is a user-mode packet interception library for Windows 7, Windows 8 and Windows 10.</p> <p>WinDivert enables user-mode capturing/modifying/dropping of network packets sent to/from the Windows network stack. In summary, WinDivert can: - capture network packets - filter/drop network packets - sniff network packets - (re)inject network packets - modify network packets WinDivert can be used to implement user-mode packet filters, sniffers, firewalls, NATs, VPNs, IDSs, tunneling applications, etc..</p> <p>WinDivert supports the following features: - packet interception, sniffing, or dropping modes - support for loopback (localhost) traffic - full IPv6 support - network layer - simple yet powerful API - high-level filtering language - filter priorities - freely available under the terms of the GNU Lesser General Public License (LGPLv3)</p> <p>For more information see doc/windivert.html</p> <ol start="2"> <li>Architecture</li> </ol> <hr> <p>The basic architecture of WinDivert is as follows:</p> <pre><code> +-----------------+ | | +-------&gt;| PROGRAM |--------+ | | (WinDivert.dll) | | | +-----------------+ | | | (3) re-injected | (2a) matching packet | packet | | | | </code></pre> <p>[user mode] | | ....................|...................................|................... [kernel mode] | | | | | | +---------------+ +-----------------&gt; (1) packet | | (2b) non-matching packet ------------&gt;| WinDivert.sys |--------------------------------------------&gt; | | +---------------+</p> <p>The WinDivert.sys driver is installed below the Windows network stack. The following actions occur:</p> <p>(1) A new packet enters the network stack and is intercepted by WinDivert.sys (2a) If the packet matches the PROGRAM-defined filter, it is diverted. The PROGRAM can then read the packet using a call to WinDivertRecv(). (2b) If the packet does not match the filter, the packet continues as normal. (3) PROGRAM either drops, modifies, or re-injects the packet. PROGRAM can re-inject the (modified) using a call to WinDivertSend().</p> <ol start="3"> <li>License</li> </ol> <hr> <p>WinDivert is dual-licensed under your choice of the GNU Lesser General Public License (LGPL) Version 3 or the GNU General Public License (GPL) Version 2. See the LICENSE file for more information.</p> <ol start="4"> <li>About</li> </ol> <hr> <p>WinDivert was written by basil.</p> <p>For further information, or bug reports, please contact:</p> <pre><code>basil@reqrypt.org </code></pre> <p>The homepage for WinDivert is:</p> <pre><code>https://reqrypt.org/windivert.html </code></pre> <p>The source code for WinDivert is hosted by GitHub at:</p> <pre><code>https://github.com/basil00/Divert </code></pre> - \ No newline at end of file diff --git a/c2hs-haskell/daily/index.xml b/c2hs-haskell/daily/index.xml index 4f15aa65bc1..f63fc1d7fea 100644 --- a/c2hs-haskell/daily/index.xml +++ b/c2hs-haskell/daily/index.xml @@ -1,7 +1,7 @@ GitHub C2hs Haskell Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:22Z + 2024-08-03T01:28:38Z Daily Trending of C2hs Haskell in GitHub \ No newline at end of file diff --git a/cabal-config/daily/index.xml b/cabal-config/daily/index.xml index efa358afe12..67b504ed102 100644 --- a/cabal-config/daily/index.xml +++ b/cabal-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cabal Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:21Z + 2024-08-03T01:28:38Z Daily Trending of Cabal Config in GitHub \ No newline at end of file diff --git a/cadence/daily/index.xml b/cadence/daily/index.xml index e5434825ed4..b658b69453d 100644 --- a/cadence/daily/index.xml +++ b/cadence/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cadence Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:27Z + 2024-08-03T01:28:49Z Daily Trending of Cadence in GitHub \ No newline at end of file diff --git a/cairo/daily/index.xml b/cairo/daily/index.xml index ab03ea53cb6..0124fd3de6f 100644 --- a/cairo/daily/index.xml +++ b/cairo/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cairo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:28Z + 2024-08-03T01:28:49Z Daily Trending of Cairo in GitHub \ No newline at end of file diff --git a/cap'n-proto/daily/index.xml b/cap'n-proto/daily/index.xml index 6e237af3b28..b5cecb7c0fa 100644 --- a/cap'n-proto/daily/index.xml +++ b/cap'n-proto/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cap'n Proto Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:29Z + 2024-08-03T01:28:51Z Daily Trending of Cap'n Proto in GitHub \ No newline at end of file diff --git a/cartocss/daily/index.xml b/cartocss/daily/index.xml index 54c5a5cb2b7..b888fcafb77 100644 --- a/cartocss/daily/index.xml +++ b/cartocss/daily/index.xml @@ -1,7 +1,7 @@ GitHub CartoCSS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:29Z + 2024-08-03T01:28:50Z Daily Trending of CartoCSS in GitHub \ No newline at end of file diff --git a/ceylon/daily/index.xml b/ceylon/daily/index.xml index f30b252c0af..d8382a9b32d 100644 --- a/ceylon/daily/index.xml +++ b/ceylon/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ceylon Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:29Z + 2024-08-03T01:28:50Z Daily Trending of Ceylon in GitHub \ No newline at end of file diff --git a/chapel/daily/index.xml b/chapel/daily/index.xml index 2f54a93013e..667a09437cb 100644 --- a/chapel/daily/index.xml +++ b/chapel/daily/index.xml @@ -1,7 +1,7 @@ GitHub Chapel Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:30Z + 2024-08-03T01:28:53Z Daily Trending of Chapel in GitHub \ No newline at end of file diff --git a/charity/daily/index.xml b/charity/daily/index.xml index b2f0b8d1b33..9baea9712be 100644 --- a/charity/daily/index.xml +++ b/charity/daily/index.xml @@ -1,7 +1,7 @@ GitHub Charity Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:30Z + 2024-08-03T01:28:52Z Daily Trending of Charity in GitHub \ No newline at end of file diff --git a/chuck/daily/index.xml b/chuck/daily/index.xml index 74e1988370c..ffc2810b540 100644 --- a/chuck/daily/index.xml +++ b/chuck/daily/index.xml @@ -1,7 +1,7 @@ GitHub ChucK Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:30Z + 2024-08-03T01:28:52Z Daily Trending of ChucK in GitHub \ No newline at end of file diff --git a/cil/daily/index.xml b/cil/daily/index.xml index 202f3fcbab3..41ce252f2a4 100644 --- a/cil/daily/index.xml +++ b/cil/daily/index.xml @@ -1,7 +1,7 @@ GitHub CIL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:31Z + 2024-08-03T01:28:53Z Daily Trending of CIL in GitHub \ No newline at end of file diff --git a/cirru/daily/index.xml b/cirru/daily/index.xml index 6635c0ebc9d..8205384ebaf 100644 --- a/cirru/daily/index.xml +++ b/cirru/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cirru Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:32Z + 2024-08-03T01:28:54Z Daily Trending of Cirru in GitHub \ No newline at end of file diff --git a/clarion/daily/index.xml b/clarion/daily/index.xml index 2f98cbc1a3e..c23ccd61ae7 100644 --- a/clarion/daily/index.xml +++ b/clarion/daily/index.xml @@ -1,7 +1,7 @@ GitHub Clarion Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:32Z + 2024-08-03T01:28:54Z Daily Trending of Clarion in GitHub \ No newline at end of file diff --git a/clarity/daily/index.xml b/clarity/daily/index.xml index c1946cfafc0..b2bd4065ef6 100644 --- a/clarity/daily/index.xml +++ b/clarity/daily/index.xml @@ -1,7 +1,7 @@ GitHub Clarity Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:33Z + 2024-08-03T01:28:55Z Daily Trending of Clarity in GitHub \ No newline at end of file diff --git a/classic-asp/daily/index.xml b/classic-asp/daily/index.xml index 045fabd723a..6677fe6c660 100644 --- a/classic-asp/daily/index.xml +++ b/classic-asp/daily/index.xml @@ -1,7 +1,7 @@ GitHub Classic ASP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:27:52Z + 2024-08-03T01:28:07Z Daily Trending of Classic ASP in GitHub \ No newline at end of file diff --git a/clean/daily/index.xml b/clean/daily/index.xml index 74be9220433..c0b6efac3bd 100644 --- a/clean/daily/index.xml +++ b/clean/daily/index.xml @@ -1,7 +1,7 @@ GitHub Clean Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:34Z + 2024-08-03T01:28:55Z Daily Trending of Clean in GitHub \ No newline at end of file diff --git a/click/daily/index.xml b/click/daily/index.xml index 060be5fa30f..52fb1699f38 100644 --- a/click/daily/index.xml +++ b/click/daily/index.xml @@ -1,7 +1,7 @@ GitHub Click Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:33Z + 2024-08-03T01:28:56Z Daily Trending of Click in GitHub \ No newline at end of file diff --git a/clips/daily/index.xml b/clips/daily/index.xml index 93ed3dab92d..f4417b8a4a2 100644 --- a/clips/daily/index.xml +++ b/clips/daily/index.xml @@ -1,7 +1,7 @@ GitHub CLIPS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:33Z + 2024-08-03T01:28:55Z Daily Trending of CLIPS in GitHub \ No newline at end of file diff --git a/clojure/daily/index.xml b/clojure/daily/index.xml index 6bc97b2f2ac..be249841d42 100644 --- a/clojure/daily/index.xml +++ b/clojure/daily/index.xml @@ -1,7 +1,7 @@ GitHub Clojure Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:36Z + 2024-08-03T01:28:57Z Daily Trending of Clojure in GitHub \ No newline at end of file diff --git a/closure-templates/daily/index.xml b/closure-templates/daily/index.xml index 8bb81cd50e9..c59a1563d48 100644 --- a/closure-templates/daily/index.xml +++ b/closure-templates/daily/index.xml @@ -1,7 +1,7 @@ GitHub Closure Templates Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:34Z + 2024-08-03T01:28:56Z Daily Trending of Closure Templates in GitHub \ No newline at end of file diff --git a/cloud-firestore-security-rules/daily/index.xml b/cloud-firestore-security-rules/daily/index.xml index c0e3d93565d..c4ed332a7ca 100644 --- a/cloud-firestore-security-rules/daily/index.xml +++ b/cloud-firestore-security-rules/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cloud Firestore Security Rules Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:34Z + 2024-08-03T01:28:56Z Daily Trending of Cloud Firestore Security Rules in GitHub \ No newline at end of file diff --git a/cmake/daily/index.xml b/cmake/daily/index.xml index 31d8b7d651d..d33558002e2 100644 --- a/cmake/daily/index.xml +++ b/cmake/daily/index.xml @@ -1,7 +1,7 @@ GitHub CMake Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:35Z + 2024-08-03T01:28:58Z Daily Trending of CMake in GitHub \ No newline at end of file diff --git a/cobol/daily/index.xml b/cobol/daily/index.xml index c66b0174ec3..1707c26bbe0 100644 --- a/cobol/daily/index.xml +++ b/cobol/daily/index.xml @@ -1,7 +1,7 @@ GitHub COBOL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:36Z + 2024-08-03T01:28:59Z Daily Trending of COBOL in GitHub \ No newline at end of file diff --git a/codeowners/daily/index.xml b/codeowners/daily/index.xml index ef634af99eb..817fb1eab4b 100644 --- a/codeowners/daily/index.xml +++ b/codeowners/daily/index.xml @@ -1,7 +1,7 @@ GitHub CODEOWNERS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:37Z + 2024-08-03T01:28:59Z Daily Trending of CODEOWNERS in GitHub \ No newline at end of file diff --git a/codeql/daily/index.xml b/codeql/daily/index.xml index 874bf75b003..b79817307fc 100644 --- a/codeql/daily/index.xml +++ b/codeql/daily/index.xml @@ -1,7 +1,7 @@ GitHub CodeQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:37Z + 2024-08-03T01:28:59Z Daily Trending of CodeQL in GitHub \ No newline at end of file diff --git a/coffeescript/daily/index.xml b/coffeescript/daily/index.xml index 9de5d0111a9..ff1c9db9002 100644 --- a/coffeescript/daily/index.xml +++ b/coffeescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub CoffeeScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:37Z + 2024-08-03T01:29:00Z Daily Trending of CoffeeScript in GitHub \ No newline at end of file diff --git a/coldfusion-cfc/daily/index.xml b/coldfusion-cfc/daily/index.xml index 5906c355f53..1839025b8cc 100644 --- a/coldfusion-cfc/daily/index.xml +++ b/coldfusion-cfc/daily/index.xml @@ -1,7 +1,7 @@ GitHub ColdFusion CFC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:38Z + 2024-08-03T01:29:01Z Daily Trending of ColdFusion CFC in GitHub \ No newline at end of file diff --git a/coldfusion/daily/index.xml b/coldfusion/daily/index.xml index 3b6a2a5de75..dcd8c505612 100644 --- a/coldfusion/daily/index.xml +++ b/coldfusion/daily/index.xml @@ -1,7 +1,7 @@ GitHub ColdFusion Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:38Z + 2024-08-03T01:29:00Z Daily Trending of ColdFusion in GitHub \ No newline at end of file diff --git a/collada/daily/index.xml b/collada/daily/index.xml index 4d106fd7fd8..a3ecc7a00ba 100644 --- a/collada/daily/index.xml +++ b/collada/daily/index.xml @@ -1,7 +1,7 @@ GitHub COLLADA Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:38Z + 2024-08-03T01:29:01Z Daily Trending of COLLADA in GitHub \ No newline at end of file diff --git a/common-lisp/daily/index.xml b/common-lisp/daily/index.xml index 78820df8507..de1386b0d77 100644 --- a/common-lisp/daily/index.xml +++ b/common-lisp/daily/index.xml @@ -1,7 +1,7 @@ GitHub Common Lisp Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:39Z + 2024-08-03T01:29:01Z Daily Trending of Common Lisp in GitHub \ No newline at end of file diff --git a/common-workflow-language/daily/index.xml b/common-workflow-language/daily/index.xml index 2f267f05c1e..27b0f67aafc 100644 --- a/common-workflow-language/daily/index.xml +++ b/common-workflow-language/daily/index.xml @@ -1,7 +1,7 @@ GitHub Common Workflow Language Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:41Z + 2024-08-03T01:29:03Z Daily Trending of Common Workflow Language in GitHub \ No newline at end of file diff --git a/component-pascal/daily/index.xml b/component-pascal/daily/index.xml index b5574a911de..4d673443c3a 100644 --- a/component-pascal/daily/index.xml +++ b/component-pascal/daily/index.xml @@ -1,7 +1,7 @@ GitHub Component Pascal Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:40Z + 2024-08-03T01:29:03Z Daily Trending of Component Pascal in GitHub \ No newline at end of file diff --git a/conll-u/daily/index.xml b/conll-u/daily/index.xml index 155291ca0b4..baa255e404e 100644 --- a/conll-u/daily/index.xml +++ b/conll-u/daily/index.xml @@ -1,7 +1,7 @@ GitHub CoNLL-U Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:40Z + 2024-08-03T01:29:03Z Daily Trending of CoNLL-U in GitHub \ No newline at end of file diff --git a/cool/daily/index.xml b/cool/daily/index.xml index 764d5e560a6..b4d6eec5e5a 100644 --- a/cool/daily/index.xml +++ b/cool/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cool Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:41Z + 2024-08-03T01:29:03Z Daily Trending of Cool in GitHub \ No newline at end of file diff --git a/coq/daily/index.xml b/coq/daily/index.xml index c171092205c..c8d11a3dd4e 100644 --- a/coq/daily/index.xml +++ b/coq/daily/index.xml @@ -1,7 +1,7 @@ GitHub Coq Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:42Z + 2024-08-03T01:29:04Z Daily Trending of Coq in GitHub \ No newline at end of file diff --git a/cpp-objdump/daily/index.xml b/cpp-objdump/daily/index.xml index 87aeea54169..9f48ddbb5d7 100644 --- a/cpp-objdump/daily/index.xml +++ b/cpp-objdump/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cpp-ObjDump Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:42Z + 2024-08-03T01:29:05Z Daily Trending of Cpp-ObjDump in GitHub \ No newline at end of file diff --git a/creole/daily/index.xml b/creole/daily/index.xml index 74f837b648e..ecdf7ac27c2 100644 --- a/creole/daily/index.xml +++ b/creole/daily/index.xml @@ -1,7 +1,7 @@ GitHub Creole Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:42Z + 2024-08-03T01:29:04Z Daily Trending of Creole in GitHub \ No newline at end of file diff --git a/crystal/daily/index.xml b/crystal/daily/index.xml index 5d86c1af91d..fee8b78ee49 100644 --- a/crystal/daily/index.xml +++ b/crystal/daily/index.xml @@ -1,7 +1,7 @@ GitHub Crystal Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:44Z + 2024-08-03T01:29:06Z Daily Trending of Crystal in GitHub \ No newline at end of file diff --git a/cson/daily/index.xml b/cson/daily/index.xml index ecee56839d4..73ad30f77b9 100644 --- a/cson/daily/index.xml +++ b/cson/daily/index.xml @@ -1,7 +1,7 @@ GitHub CSON Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:44Z + 2024-08-03T01:29:06Z Daily Trending of CSON in GitHub \ No newline at end of file diff --git a/csound-document/daily/index.xml b/csound-document/daily/index.xml index 25e24f1e54d..2f28961668f 100644 --- a/csound-document/daily/index.xml +++ b/csound-document/daily/index.xml @@ -1,7 +1,7 @@ GitHub Csound Document Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:43Z + 2024-08-03T01:29:06Z Daily Trending of Csound Document in GitHub \ No newline at end of file diff --git a/csound-score/daily/index.xml b/csound-score/daily/index.xml index 7267a2d8f71..c69ddfeae82 100644 --- a/csound-score/daily/index.xml +++ b/csound-score/daily/index.xml @@ -1,7 +1,7 @@ GitHub Csound Score Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:45Z + 2024-08-03T01:29:07Z Daily Trending of Csound Score in GitHub \ No newline at end of file diff --git a/csound/daily/index.xml b/csound/daily/index.xml index 403d9109daf..3f12b3ba04b 100644 --- a/csound/daily/index.xml +++ b/csound/daily/index.xml @@ -1,7 +1,7 @@ GitHub Csound Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:43Z + 2024-08-03T01:29:06Z Daily Trending of Csound in GitHub \ No newline at end of file diff --git a/css/daily/index.xml b/css/daily/index.xml index a70fc2239b8..6682d5a1692 100644 --- a/css/daily/index.xml +++ b/css/daily/index.xml @@ -1,7 +1,7 @@ GitHub CSS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:46Z + 2024-08-03T01:29:09Z Daily Trending of CSS in GitHub \ No newline at end of file diff --git a/csv/daily/index.xml b/csv/daily/index.xml index 18ef6aaa374..7ab950e1dfc 100644 --- a/csv/daily/index.xml +++ b/csv/daily/index.xml @@ -1,7 +1,7 @@ GitHub CSV Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:45Z + 2024-08-03T01:29:07Z Daily Trending of CSV in GitHub \ No newline at end of file diff --git a/cuda/daily/index.xml b/cuda/daily/index.xml index 1ad96aa08eb..e623f53b8a6 100644 --- a/cuda/daily/index.xml +++ b/cuda/daily/index.xml @@ -1,14 +1,7 @@ GitHub Cuda Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:46Z + 2024-08-03T01:29:08Z Daily Trending of Cuda in GitHub - - ThibaultGROUEIX/ChamferDistancePytorch - 2024-08-02T01:28:46Z - tag:github.com,2024-08-02:/ThibaultGROUEIX/ChamferDistancePytorch - - <p>Chamfer Distance in Pytorch with f-score</p><hr> - \ No newline at end of file diff --git a/cue/daily/index.xml b/cue/daily/index.xml index 66dd60bac03..650a2b91e8e 100644 --- a/cue/daily/index.xml +++ b/cue/daily/index.xml @@ -1,7 +1,7 @@ GitHub CUE Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:48Z + 2024-08-03T01:29:11Z Daily Trending of CUE in GitHub \ No newline at end of file diff --git a/curl-config/daily/index.xml b/curl-config/daily/index.xml index f383254d5c3..a59e11217cd 100644 --- a/curl-config/daily/index.xml +++ b/curl-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub cURL Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:48Z + 2024-08-03T01:29:10Z Daily Trending of cURL Config in GitHub \ No newline at end of file diff --git a/curry/daily/index.xml b/curry/daily/index.xml index fb820846bb7..b8fe1b2cbc5 100644 --- a/curry/daily/index.xml +++ b/curry/daily/index.xml @@ -1,7 +1,7 @@ GitHub Curry Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:49Z + 2024-08-03T01:29:11Z Daily Trending of Curry in GitHub \ No newline at end of file diff --git a/cweb/daily/index.xml b/cweb/daily/index.xml index fd7ecf09b65..9ad80829a63 100644 --- a/cweb/daily/index.xml +++ b/cweb/daily/index.xml @@ -1,7 +1,7 @@ GitHub CWeb Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:50Z + 2024-08-03T01:29:12Z Daily Trending of CWeb in GitHub \ No newline at end of file diff --git a/cycript/daily/index.xml b/cycript/daily/index.xml index be23fa33cc6..7183e3f1d16 100644 --- a/cycript/daily/index.xml +++ b/cycript/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cycript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:49Z + 2024-08-03T01:29:12Z Daily Trending of Cycript in GitHub \ No newline at end of file diff --git a/cython/daily/index.xml b/cython/daily/index.xml index f02a5e3fe16..53f927a5e83 100644 --- a/cython/daily/index.xml +++ b/cython/daily/index.xml @@ -1,7 +1,7 @@ GitHub Cython Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:50Z + 2024-08-03T01:29:13Z Daily Trending of Cython in GitHub \ No newline at end of file diff --git a/d-objdump/daily/index.xml b/d-objdump/daily/index.xml index 732645035c2..8c1664dddcb 100644 --- a/d-objdump/daily/index.xml +++ b/d-objdump/daily/index.xml @@ -1,7 +1,7 @@ GitHub D-ObjDump Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:52Z + 2024-08-03T01:29:14Z Daily Trending of D-ObjDump in GitHub \ No newline at end of file diff --git a/d/daily/index.xml b/d/daily/index.xml index fa9cd83987e..e6abc560b42 100644 --- a/d/daily/index.xml +++ b/d/daily/index.xml @@ -1,7 +1,7 @@ GitHub D Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:51Z + 2024-08-03T01:29:14Z Daily Trending of D in GitHub \ No newline at end of file diff --git a/dafny/daily/index.xml b/dafny/daily/index.xml index ab9df81de54..6e75356fd2e 100644 --- a/dafny/daily/index.xml +++ b/dafny/daily/index.xml @@ -1,7 +1,7 @@ GitHub Dafny Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:51Z + 2024-08-03T01:29:13Z Daily Trending of Dafny in GitHub \ No newline at end of file diff --git a/darcs-patch/daily/index.xml b/darcs-patch/daily/index.xml index ca9e415c9bc..f07a6f4375e 100644 --- a/darcs-patch/daily/index.xml +++ b/darcs-patch/daily/index.xml @@ -1,7 +1,7 @@ GitHub Darcs Patch Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:53Z + 2024-08-03T01:29:15Z Daily Trending of Darcs Patch in GitHub \ No newline at end of file diff --git a/dart/daily/index.xml b/dart/daily/index.xml index 5809fd7a7ef..3473ad1917b 100644 --- a/dart/daily/index.xml +++ b/dart/daily/index.xml @@ -1,7 +1,14 @@ GitHub Dart Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:54Z + 2024-08-03T01:29:17Z Daily Trending of Dart in GitHub + + llfbandit/record + 2024-08-03T01:29:17Z + tag:github.com,2024-08-03:/llfbandit/record + + <p>Audio recorder from microphone to a given file path. No external dependencies, MediaRecorder is used for Android an AVAudioRecorder for iOS.</p><hr><p>Audio recorder from microphone to a given file path or stream.</p> <p>No external dependencies:</p> <ul> <li>On Android, AudioRecord and MediaCodec or MediaRecorder.</li> <li>On iOS and macOS, AVFoundation.</li> <li>On Windows, MediaFoundation.</li> <li>On web, well... your browser! (and its underlying platform).</li> </ul> <p>External dependencies:</p> <ul> <li>On linux, encoding is provided by <a href="https://stsaz.github.io/fmedia/">fmedia</a>. It <strong>must</strong> be installed separately.</li> </ul> <h2>Platform feature parity matrix</h2> <table> <thead> <tr> <th>Feature</th> <th>Android</th> <th>iOS</th> <th>web</th> <th>Windows</th> <th>macOS</th> <th>linux</th> </tr> </thead> <tbody> <tr> <td>pause/resume</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> </tr> <tr> <td>amplitude(dBFS)</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td></td> </tr> <tr> <td>permission check</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td></td> <td>✔️</td> <td></td> </tr> <tr> <td>num of channels</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> </tr> <tr> <td>device selection</td> <td>✔️ 1 / 2</td> <td>(auto BT/mic)</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> </tr> <tr> <td>auto gain</td> <td>✔️ 2</td> <td>(always active?)</td> <td>✔️</td> <td></td> <td></td> <td></td> </tr> <tr> <td>echo cancel</td> <td>✔️ 2</td> <td></td> <td>✔️</td> <td></td> <td></td> <td></td> </tr> <tr> <td>noise suppresion</td> <td>✔️ 2</td> <td></td> <td>✔️</td> <td></td> <td></td> <td></td> </tr> </tbody> </table> <h2>File</h2> <table> <thead> <tr> <th>Encoder</th> <th>Android</th> <th>iOS</th> <th>web</th> <th>Windows</th> <th>macOS</th> <th>linux</th> </tr> </thead> <tbody> <tr> <td>aacLc</td> <td>✔️</td> <td>✔️</td> <td>?</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> </tr> <tr> <td>aacEld</td> <td>✔️</td> <td>✔️</td> <td>?</td> <td></td> <td>✔️</td> <td></td> </tr> <tr> <td>aacHe</td> <td>✔️</td> <td></td> <td>?</td> <td></td> <td></td> <td>✔️</td> </tr> <tr> <td>amrNb</td> <td>✔️</td> <td></td> <td>?</td> <td>✔️</td> <td></td> <td></td> </tr> <tr> <td>amrWb</td> <td>✔️</td> <td></td> <td>?</td> <td></td> <td></td> <td></td> </tr> <tr> <td>opus</td> <td>✔️</td> <td></td> <td>✔️ 3</td> <td></td> <td></td> <td>✔️</td> </tr> <tr> <td>wav</td> <td>✔️ 2</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> </tr> <tr> <td>flac</td> <td>✔️ 2</td> <td>✔️</td> <td>?</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> </tr> <tr> <td>pcm16bits</td> <td>✔️ 2</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td></td> </tr> </tbody> </table> <ul> <li>Question marks (?) in web column mean that the formats are supported by the plugin but are not available in current (and tested) browsers (Chrome / Firefox).</li> </ul> <h2>Stream</h2> <table> <thead> <tr> <th>Encoder</th> <th>Android</th> <th>iOS</th> <th>web</th> <th>Windows</th> <th>macOS</th> <th>linux</th> </tr> </thead> <tbody> <tr> <td>aacLc *</td> <td>✔️ 2</td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>aacEld *</td> <td>✔️ 2</td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>aacHe *</td> <td>✔️ 2</td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr> <td>pcm16bits</td> <td>✔️ 2</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td>✔️</td> <td></td> </tr> </tbody> </table> <p>* AAC is streamed with raw AAC with ADTS headers, so it's directly readable through a file!</p> <ol> <li>Bluetooth telephony device link (SCO) is automatically done but there's no phone call management.</li> <li>Unsupported on legacy Android recorder.</li> <li>Sample rate output is determined by your settings in OS. Bit depth is likely 32 bits.</li> </ol> <h2>Usage</h2> <pre><code class="language-dart">import 'package:record/record.dart'; final record = AudioRecorder(); // Check and request permission if needed if (await record.hasPermission()) { // Start recording to file await record.start(const RecordConfig(), path: 'aFullPath/myFile.m4a'); // ... or to stream final stream = await record.startStream(const RecordConfig(AudioEncoder.pcm16bits)); } // Stop recording... final path = await record.stop(); // ... or cancel it (and implicitly remove file/blob). await record.cancel(); record.dispose(); // As always, don't forget this one. </code></pre> <h2>Setup, permissions and others</h2> <h3>Android</h3> <p>Follow <a href="https://github.com/llfbandit/record/raw/master/record_android/README.md">Gradle setup</a> if needed.</p> <pre><code class="language-xml">&lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&gt; &lt;!-- Optional: Add this permission if you want to use bluetooth telephony device like headset/earbuds --&gt; &lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&gt; &lt;!-- Optional: Add this permission if you want to save your recordings in public folders --&gt; &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; </code></pre> <ul> <li>min SDK: 23 (amrNb/amrWb: 26, Opus: 29)</li> </ul> <ul> <li><a href="https://developer.android.com/guide/topics/media/media-formats#audio-formats">Audio formats sample rate hints</a></li> </ul> <h3>iOS</h3> <pre><code class="language-xml">&lt;key&gt;NSMicrophoneUsageDescription&lt;/key&gt; &lt;string&gt;Some message to describe why you need this permission&lt;/string&gt; </code></pre> <ul> <li>min SDK: 11.0</li> </ul> <h3>macOS</h3> <pre><code class="language-xml">&lt;key&gt;NSMicrophoneUsageDescription&lt;/key&gt; &lt;string&gt;Some message to describe why you need this permission&lt;/string&gt; </code></pre> <ul> <li>In capabilities, activate "Audio input" in debug AND release schemes.</li> <li>or directly in *.entitlements files</li> </ul> <pre><code class="language-xml">&lt;key&gt;com.apple.security.device.audio-input&lt;/key&gt; &lt;true/&gt; </code></pre> <ul> <li>min SDK: 10.15</li> </ul> <h3>Web</h3> <p>Web platform uses package web &gt;=0.5.1 which is shipped with Flutter &gt;=3.22.</p> <p>This platform is still available with previous Flutter versions but continuous work is done from this version only.</p> + \ No newline at end of file diff --git a/dataweave/daily/index.xml b/dataweave/daily/index.xml index 38d2387cd1f..6d0a728c1c9 100644 --- a/dataweave/daily/index.xml +++ b/dataweave/daily/index.xml @@ -1,7 +1,7 @@ GitHub DataWeave Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:53Z + 2024-08-03T01:29:15Z Daily Trending of DataWeave in GitHub \ No newline at end of file diff --git a/debian-package-control-file/daily/index.xml b/debian-package-control-file/daily/index.xml index 36d353a971f..bd0e573d5db 100644 --- a/debian-package-control-file/daily/index.xml +++ b/debian-package-control-file/daily/index.xml @@ -1,7 +1,7 @@ GitHub Debian Package Control File Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:53Z + 2024-08-03T01:29:15Z Daily Trending of Debian Package Control File in GitHub \ No newline at end of file diff --git a/denizenscript/daily/index.xml b/denizenscript/daily/index.xml index de4a83b66b7..85fd55a880b 100644 --- a/denizenscript/daily/index.xml +++ b/denizenscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub DenizenScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:59Z + 2024-08-03T01:29:22Z Daily Trending of DenizenScript in GitHub \ No newline at end of file diff --git a/desktop/daily/index.xml b/desktop/daily/index.xml index f8e717b6901..127e7bb9b79 100644 --- a/desktop/daily/index.xml +++ b/desktop/daily/index.xml @@ -1,7 +1,7 @@ GitHub desktop Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:59Z + 2024-08-03T01:29:23Z Daily Trending of desktop in GitHub \ No newline at end of file diff --git a/dhall/daily/index.xml b/dhall/daily/index.xml index e926df9bfb1..7d9bdfc1c26 100644 --- a/dhall/daily/index.xml +++ b/dhall/daily/index.xml @@ -1,7 +1,7 @@ GitHub Dhall Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:59Z + 2024-08-03T01:29:22Z Daily Trending of Dhall in GitHub \ No newline at end of file diff --git a/diff/daily/index.xml b/diff/daily/index.xml index 2996ee71604..cb6d2b8bef2 100644 --- a/diff/daily/index.xml +++ b/diff/daily/index.xml @@ -1,7 +1,7 @@ GitHub Diff Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:59Z + 2024-08-03T01:29:22Z Daily Trending of Diff in GitHub \ No newline at end of file diff --git a/digital-command-language/daily/index.xml b/digital-command-language/daily/index.xml index a6cdbc7c31d..cb16123cc5e 100644 --- a/digital-command-language/daily/index.xml +++ b/digital-command-language/daily/index.xml @@ -1,7 +1,7 @@ GitHub DIGITAL Command Language Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:01Z + 2024-08-03T01:29:24Z Daily Trending of DIGITAL Command Language in GitHub \ No newline at end of file diff --git a/dircolors/daily/index.xml b/dircolors/daily/index.xml index aeba1c72757..cb01c95bede 100644 --- a/dircolors/daily/index.xml +++ b/dircolors/daily/index.xml @@ -1,7 +1,7 @@ GitHub dircolors Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:00Z + 2024-08-03T01:29:23Z Daily Trending of dircolors in GitHub \ No newline at end of file diff --git a/directx-3d-file/daily/index.xml b/directx-3d-file/daily/index.xml index eb0ca58c4d7..0951a56c378 100644 --- a/directx-3d-file/daily/index.xml +++ b/directx-3d-file/daily/index.xml @@ -1,7 +1,7 @@ GitHub DirectX 3D File Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:00Z + 2024-08-03T01:29:23Z Daily Trending of DirectX 3D File in GitHub \ No newline at end of file diff --git a/dm/daily/index.xml b/dm/daily/index.xml index 0d338d5a3e9..2449a0b131d 100644 --- a/dm/daily/index.xml +++ b/dm/daily/index.xml @@ -1,7 +1,7 @@ GitHub DM Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:01Z + 2024-08-03T01:29:24Z Daily Trending of DM in GitHub \ No newline at end of file diff --git a/dns-zone/daily/index.xml b/dns-zone/daily/index.xml index 376b970b029..a8ba56f88a5 100644 --- a/dns-zone/daily/index.xml +++ b/dns-zone/daily/index.xml @@ -1,7 +1,7 @@ GitHub DNS Zone Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:02Z + 2024-08-03T01:29:25Z Daily Trending of DNS Zone in GitHub \ No newline at end of file diff --git a/dockerfile/daily/index.xml b/dockerfile/daily/index.xml index febf20e164e..da5ba6af022 100644 --- a/dockerfile/daily/index.xml +++ b/dockerfile/daily/index.xml @@ -1,7 +1,7 @@ GitHub Dockerfile Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:04Z + 2024-08-03T01:29:27Z Daily Trending of Dockerfile in GitHub \ No newline at end of file diff --git a/dogescript/daily/index.xml b/dogescript/daily/index.xml index 6fd018085c1..94a1e111b5b 100644 --- a/dogescript/daily/index.xml +++ b/dogescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub Dogescript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:02Z + 2024-08-03T01:29:25Z Daily Trending of Dogescript in GitHub \ No newline at end of file diff --git a/dtrace/daily/index.xml b/dtrace/daily/index.xml index 3d77fb0fdd9..9fd0bb8845e 100644 --- a/dtrace/daily/index.xml +++ b/dtrace/daily/index.xml @@ -1,7 +1,7 @@ GitHub DTrace Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:11Z + 2024-08-03T01:29:32Z Daily Trending of DTrace in GitHub \ No newline at end of file diff --git a/dylan/daily/index.xml b/dylan/daily/index.xml index c5c73448025..2f76b1f19eb 100644 --- a/dylan/daily/index.xml +++ b/dylan/daily/index.xml @@ -1,7 +1,7 @@ GitHub Dylan Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:10Z + 2024-08-03T01:29:32Z Daily Trending of Dylan in GitHub \ No newline at end of file diff --git a/e-mail/daily/index.xml b/e-mail/daily/index.xml index 80654f70e91..43b67ac3e0d 100644 --- a/e-mail/daily/index.xml +++ b/e-mail/daily/index.xml @@ -1,7 +1,7 @@ GitHub E-mail Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:10Z + 2024-08-03T01:29:32Z Daily Trending of E-mail in GitHub \ No newline at end of file diff --git a/e/daily/index.xml b/e/daily/index.xml index a3bfc80a817..41af80a0f44 100644 --- a/e/daily/index.xml +++ b/e/daily/index.xml @@ -1,7 +1,7 @@ GitHub E Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:10Z + 2024-08-03T01:29:33Z Daily Trending of E in GitHub \ No newline at end of file diff --git a/eagle/daily/index.xml b/eagle/daily/index.xml index 048f60e2940..e3adaba2544 100644 --- a/eagle/daily/index.xml +++ b/eagle/daily/index.xml @@ -1,7 +1,7 @@ GitHub Eagle Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:11Z + 2024-08-03T01:29:33Z Daily Trending of Eagle in GitHub \ No newline at end of file diff --git a/earthly/daily/index.xml b/earthly/daily/index.xml index d831f071352..1a866408b89 100644 --- a/earthly/daily/index.xml +++ b/earthly/daily/index.xml @@ -1,7 +1,7 @@ GitHub Earthly Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:12Z + 2024-08-03T01:29:34Z Daily Trending of Earthly in GitHub \ No newline at end of file diff --git a/easybuild/daily/index.xml b/easybuild/daily/index.xml index a6e916fafdd..8fe3959fc91 100644 --- a/easybuild/daily/index.xml +++ b/easybuild/daily/index.xml @@ -1,7 +1,7 @@ GitHub Easybuild Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:12Z + 2024-08-03T01:29:34Z Daily Trending of Easybuild in GitHub \ No newline at end of file diff --git a/ebnf/daily/index.xml b/ebnf/daily/index.xml index 8c1d2c2a89a..ff4cb4150dd 100644 --- a/ebnf/daily/index.xml +++ b/ebnf/daily/index.xml @@ -1,7 +1,7 @@ GitHub EBNF Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:11Z + 2024-08-03T01:29:34Z Daily Trending of EBNF in GitHub \ No newline at end of file diff --git a/ec/daily/index.xml b/ec/daily/index.xml index cb122fbb696..d64d7b3a69e 100644 --- a/ec/daily/index.xml +++ b/ec/daily/index.xml @@ -1,7 +1,7 @@ GitHub eC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:13Z + 2024-08-03T01:29:35Z Daily Trending of eC in GitHub \ No newline at end of file diff --git a/ecere-projects/daily/index.xml b/ecere-projects/daily/index.xml index 5a1e42ea232..17a9e459701 100644 --- a/ecere-projects/daily/index.xml +++ b/ecere-projects/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ecere Projects Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:13Z + 2024-08-03T01:29:36Z Daily Trending of Ecere Projects in GitHub \ No newline at end of file diff --git a/ecl/daily/index.xml b/ecl/daily/index.xml index 5cdef24027e..b608fe82e96 100644 --- a/ecl/daily/index.xml +++ b/ecl/daily/index.xml @@ -1,7 +1,7 @@ GitHub ECL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:13Z + 2024-08-03T01:29:35Z Daily Trending of ECL in GitHub \ No newline at end of file diff --git a/eclipse/daily/index.xml b/eclipse/daily/index.xml index 8a29ab417b7..20cba85e9cf 100644 --- a/eclipse/daily/index.xml +++ b/eclipse/daily/index.xml @@ -1,7 +1,7 @@ GitHub ECLiPSe Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:13Z + 2024-08-03T01:29:36Z Daily Trending of ECLiPSe in GitHub \ No newline at end of file diff --git a/editorconfig/daily/index.xml b/editorconfig/daily/index.xml index afad61cc403..8a3e64200f3 100644 --- a/editorconfig/daily/index.xml +++ b/editorconfig/daily/index.xml @@ -1,7 +1,7 @@ GitHub EditorConfig Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:15Z + 2024-08-03T01:29:36Z Daily Trending of EditorConfig in GitHub \ No newline at end of file diff --git a/edje-data-collection/daily/index.xml b/edje-data-collection/daily/index.xml index 9305e374252..3095c4ddff3 100644 --- a/edje-data-collection/daily/index.xml +++ b/edje-data-collection/daily/index.xml @@ -1,7 +1,7 @@ GitHub Edje Data Collection Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:16Z + 2024-08-03T01:29:38Z Daily Trending of Edje Data Collection in GitHub \ No newline at end of file diff --git a/edn/daily/index.xml b/edn/daily/index.xml index 9dae31e06f7..f618a525b9c 100644 --- a/edn/daily/index.xml +++ b/edn/daily/index.xml @@ -1,7 +1,7 @@ GitHub edn Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:16Z + 2024-08-03T01:29:39Z Daily Trending of edn in GitHub \ No newline at end of file diff --git a/eiffel/daily/index.xml b/eiffel/daily/index.xml index ed17e27a608..88b9ed6cc85 100644 --- a/eiffel/daily/index.xml +++ b/eiffel/daily/index.xml @@ -1,7 +1,7 @@ GitHub Eiffel Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:16Z + 2024-08-03T01:29:38Z Daily Trending of Eiffel in GitHub \ No newline at end of file diff --git a/ejs/daily/index.xml b/ejs/daily/index.xml index eec173769b9..d3f7e3ddf04 100644 --- a/ejs/daily/index.xml +++ b/ejs/daily/index.xml @@ -1,7 +1,7 @@ GitHub EJS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:16Z + 2024-08-03T01:29:39Z Daily Trending of EJS in GitHub \ No newline at end of file diff --git a/elixir/daily/index.xml b/elixir/daily/index.xml index 8745bf3c47c..c1018c329ab 100644 --- a/elixir/daily/index.xml +++ b/elixir/daily/index.xml @@ -1,7 +1,7 @@ GitHub Elixir Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:18Z + 2024-08-03T01:29:41Z Daily Trending of Elixir in GitHub \ No newline at end of file diff --git a/elm/daily/index.xml b/elm/daily/index.xml index add4b60f8e4..24ab1f88be8 100644 --- a/elm/daily/index.xml +++ b/elm/daily/index.xml @@ -1,7 +1,7 @@ GitHub Elm Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:18Z + 2024-08-03T01:29:40Z Daily Trending of Elm in GitHub \ No newline at end of file diff --git a/emacs-lisp/daily/index.xml b/emacs-lisp/daily/index.xml index a1e3b585e22..510531d640f 100644 --- a/emacs-lisp/daily/index.xml +++ b/emacs-lisp/daily/index.xml @@ -1,7 +1,7 @@ GitHub Emacs Lisp Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:21Z + 2024-08-03T01:29:42Z Daily Trending of Emacs Lisp in GitHub \ No newline at end of file diff --git a/emberscript/daily/index.xml b/emberscript/daily/index.xml index 75aad76a62c..d976f4b074d 100644 --- a/emberscript/daily/index.xml +++ b/emberscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub EmberScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:19Z + 2024-08-03T01:29:41Z Daily Trending of EmberScript in GitHub \ No newline at end of file diff --git a/eq/daily/index.xml b/eq/daily/index.xml index df803e7a066..e7d7ae7778a 100644 --- a/eq/daily/index.xml +++ b/eq/daily/index.xml @@ -1,7 +1,7 @@ GitHub EQ Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:19Z + 2024-08-03T01:29:42Z Daily Trending of EQ in GitHub \ No newline at end of file diff --git a/erlang/daily/index.xml b/erlang/daily/index.xml index a5b483aa7df..693ad55f683 100644 --- a/erlang/daily/index.xml +++ b/erlang/daily/index.xml @@ -1,7 +1,7 @@ GitHub Erlang Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:21Z + 2024-08-03T01:29:44Z Daily Trending of Erlang in GitHub \ No newline at end of file diff --git a/euphoria/daily/index.xml b/euphoria/daily/index.xml index b4cd5499575..ecefabe7311 100644 --- a/euphoria/daily/index.xml +++ b/euphoria/daily/index.xml @@ -1,7 +1,7 @@ GitHub Euphoria Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:23Z + 2024-08-03T01:29:45Z Daily Trending of Euphoria in GitHub \ No newline at end of file diff --git a/f%23/daily/index.xml b/f%23/daily/index.xml index efc92c58317..2d895b1dd84 100644 --- a/f%23/daily/index.xml +++ b/f%23/daily/index.xml @@ -1,7 +1,7 @@ GitHub F# Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:23Z + 2024-08-03T01:29:46Z Daily Trending of F# in GitHub \ No newline at end of file diff --git a/f*/daily/index.xml b/f*/daily/index.xml index eb2b055a5c3..114432e9867 100644 --- a/f*/daily/index.xml +++ b/f*/daily/index.xml @@ -1,7 +1,7 @@ GitHub F* Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:23Z + 2024-08-03T01:29:45Z Daily Trending of F* in GitHub \ No newline at end of file diff --git a/factor/daily/index.xml b/factor/daily/index.xml index 8c2f3608663..84e836b2e35 100644 --- a/factor/daily/index.xml +++ b/factor/daily/index.xml @@ -1,7 +1,7 @@ GitHub Factor Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:23Z + 2024-08-03T01:29:45Z Daily Trending of Factor in GitHub \ No newline at end of file diff --git a/fancy/daily/index.xml b/fancy/daily/index.xml index 91d162af604..498592f13c4 100644 --- a/fancy/daily/index.xml +++ b/fancy/daily/index.xml @@ -1,7 +1,7 @@ GitHub Fancy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:24Z + 2024-08-03T01:29:47Z Daily Trending of Fancy in GitHub \ No newline at end of file diff --git a/fantom/daily/index.xml b/fantom/daily/index.xml index 826cb0af661..ce902ae84a2 100644 --- a/fantom/daily/index.xml +++ b/fantom/daily/index.xml @@ -1,7 +1,7 @@ GitHub Fantom Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:25Z + 2024-08-03T01:29:48Z Daily Trending of Fantom in GitHub \ No newline at end of file diff --git a/faust/daily/index.xml b/faust/daily/index.xml index 17c1a7b3748..aa2df995074 100644 --- a/faust/daily/index.xml +++ b/faust/daily/index.xml @@ -1,7 +1,7 @@ GitHub Faust Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:24Z + 2024-08-03T01:29:47Z Daily Trending of Faust in GitHub \ No newline at end of file diff --git a/fennel/daily/index.xml b/fennel/daily/index.xml index 66443cfd8f3..4c16ae533cb 100644 --- a/fennel/daily/index.xml +++ b/fennel/daily/index.xml @@ -1,7 +1,7 @@ GitHub Fennel Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:25Z + 2024-08-03T01:29:47Z Daily Trending of Fennel in GitHub \ No newline at end of file diff --git a/figlet-font/daily/index.xml b/figlet-font/daily/index.xml index 986d2912cce..53a418a3daf 100644 --- a/figlet-font/daily/index.xml +++ b/figlet-font/daily/index.xml @@ -1,7 +1,7 @@ GitHub FIGlet Font Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:27Z + 2024-08-03T01:29:48Z Daily Trending of FIGlet Font in GitHub \ No newline at end of file diff --git a/filebench-wml/daily/index.xml b/filebench-wml/daily/index.xml index 290b677220d..f792205f2fa 100644 --- a/filebench-wml/daily/index.xml +++ b/filebench-wml/daily/index.xml @@ -1,7 +1,7 @@ GitHub Filebench WML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:26Z + 2024-08-03T01:29:48Z Daily Trending of Filebench WML in GitHub \ No newline at end of file diff --git a/filterscript/daily/index.xml b/filterscript/daily/index.xml index b86a3c12592..017ec360133 100644 --- a/filterscript/daily/index.xml +++ b/filterscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub Filterscript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:26Z + 2024-08-03T01:29:49Z Daily Trending of Filterscript in GitHub \ No newline at end of file diff --git a/fish/daily/index.xml b/fish/daily/index.xml index c5a6e3af55f..a9b70d31a52 100644 --- a/fish/daily/index.xml +++ b/fish/daily/index.xml @@ -1,7 +1,7 @@ GitHub fish Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:27Z + 2024-08-03T01:29:50Z Daily Trending of fish in GitHub \ No newline at end of file diff --git a/fluent/daily/index.xml b/fluent/daily/index.xml index ce5d271db74..affba85d328 100644 --- a/fluent/daily/index.xml +++ b/fluent/daily/index.xml @@ -1,7 +1,7 @@ GitHub Fluent Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:28Z + 2024-08-03T01:29:51Z Daily Trending of Fluent in GitHub \ No newline at end of file diff --git a/flux/daily/index.xml b/flux/daily/index.xml index 04f6a2bdb56..98daa691c3f 100644 --- a/flux/daily/index.xml +++ b/flux/daily/index.xml @@ -1,7 +1,7 @@ GitHub FLUX Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:28Z + 2024-08-03T01:29:50Z Daily Trending of FLUX in GitHub \ No newline at end of file diff --git a/formatted/daily/index.xml b/formatted/daily/index.xml index 345873ebb34..9d87142849e 100644 --- a/formatted/daily/index.xml +++ b/formatted/daily/index.xml @@ -1,7 +1,7 @@ GitHub Formatted Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:27Z + 2024-08-03T01:29:50Z Daily Trending of Formatted in GitHub \ No newline at end of file diff --git a/forth/daily/index.xml b/forth/daily/index.xml index 1c242896eba..0bc5847155d 100644 --- a/forth/daily/index.xml +++ b/forth/daily/index.xml @@ -1,7 +1,7 @@ GitHub Forth Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:29Z + 2024-08-03T01:29:52Z Daily Trending of Forth in GitHub \ No newline at end of file diff --git a/fortran-free-form/daily/index.xml b/fortran-free-form/daily/index.xml index 7c435cf99d4..4d9eb7c4bca 100644 --- a/fortran-free-form/daily/index.xml +++ b/fortran-free-form/daily/index.xml @@ -1,7 +1,7 @@ GitHub Fortran Free Form Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:29Z + 2024-08-03T01:29:52Z Daily Trending of Fortran Free Form in GitHub \ No newline at end of file diff --git a/fortran/daily/index.xml b/fortran/daily/index.xml index b55ccf46f57..fdb36f61b9d 100644 --- a/fortran/daily/index.xml +++ b/fortran/daily/index.xml @@ -1,7 +1,7 @@ GitHub Fortran Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:30Z + 2024-08-03T01:29:52Z Daily Trending of Fortran in GitHub \ No newline at end of file diff --git a/freebasic/daily/index.xml b/freebasic/daily/index.xml index 27c1809378c..19c9a7f5070 100644 --- a/freebasic/daily/index.xml +++ b/freebasic/daily/index.xml @@ -1,7 +1,7 @@ GitHub FreeBasic Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:29Z + 2024-08-03T01:29:51Z Daily Trending of FreeBasic in GitHub \ No newline at end of file diff --git a/freemarker/daily/index.xml b/freemarker/daily/index.xml index ca50cd78b66..31e2a5a068a 100644 --- a/freemarker/daily/index.xml +++ b/freemarker/daily/index.xml @@ -1,7 +1,7 @@ GitHub FreeMarker Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:31Z + 2024-08-03T01:29:54Z Daily Trending of FreeMarker in GitHub \ No newline at end of file diff --git a/frege/daily/index.xml b/frege/daily/index.xml index 713e05d70cf..6afc032e49e 100644 --- a/frege/daily/index.xml +++ b/frege/daily/index.xml @@ -1,7 +1,7 @@ GitHub Frege Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:31Z + 2024-08-03T01:29:53Z Daily Trending of Frege in GitHub \ No newline at end of file diff --git a/futhark/daily/index.xml b/futhark/daily/index.xml index be8d8f824bc..86dce593181 100644 --- a/futhark/daily/index.xml +++ b/futhark/daily/index.xml @@ -1,7 +1,7 @@ GitHub Futhark Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:30Z + 2024-08-03T01:29:54Z Daily Trending of Futhark in GitHub \ No newline at end of file diff --git a/g-code/daily/index.xml b/g-code/daily/index.xml index 73867357c37..63a22774729 100644 --- a/g-code/daily/index.xml +++ b/g-code/daily/index.xml @@ -1,7 +1,7 @@ GitHub G-code Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:31Z + 2024-08-03T01:29:53Z Daily Trending of G-code in GitHub \ No newline at end of file diff --git a/game-maker-language/daily/index.xml b/game-maker-language/daily/index.xml index c1bba440961..6e98fdfe968 100644 --- a/game-maker-language/daily/index.xml +++ b/game-maker-language/daily/index.xml @@ -1,7 +1,7 @@ GitHub Game Maker Language Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:32Z + 2024-08-03T01:29:54Z Daily Trending of Game Maker Language in GitHub \ No newline at end of file diff --git a/gaml/daily/index.xml b/gaml/daily/index.xml index 9216b9293b1..6a8a32a6833 100644 --- a/gaml/daily/index.xml +++ b/gaml/daily/index.xml @@ -1,7 +1,7 @@ GitHub GAML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:32Z + 2024-08-03T01:29:55Z Daily Trending of GAML in GitHub \ No newline at end of file diff --git a/gams/daily/index.xml b/gams/daily/index.xml index 86833966412..8b03812cb43 100644 --- a/gams/daily/index.xml +++ b/gams/daily/index.xml @@ -1,7 +1,7 @@ GitHub GAMS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:33Z + 2024-08-03T01:29:55Z Daily Trending of GAMS in GitHub \ No newline at end of file diff --git a/gap/daily/index.xml b/gap/daily/index.xml index bc9e28159b2..35fa262b2af 100644 --- a/gap/daily/index.xml +++ b/gap/daily/index.xml @@ -1,7 +1,7 @@ GitHub GAP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:32Z + 2024-08-03T01:29:55Z Daily Trending of GAP in GitHub \ No newline at end of file diff --git a/gcc-machine-description/daily/index.xml b/gcc-machine-description/daily/index.xml index b370be44e96..fa139c6316b 100644 --- a/gcc-machine-description/daily/index.xml +++ b/gcc-machine-description/daily/index.xml @@ -1,7 +1,7 @@ GitHub GCC Machine Description Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:34Z + 2024-08-03T01:29:57Z Daily Trending of GCC Machine Description in GitHub \ No newline at end of file diff --git a/gdb/daily/index.xml b/gdb/daily/index.xml index c9c70cc4b27..479ba52ee8a 100644 --- a/gdb/daily/index.xml +++ b/gdb/daily/index.xml @@ -1,7 +1,7 @@ GitHub GDB Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:33Z + 2024-08-03T01:29:56Z Daily Trending of GDB in GitHub \ No newline at end of file diff --git a/gdscript/daily/index.xml b/gdscript/daily/index.xml index 4748ac04c42..879a77acd27 100644 --- a/gdscript/daily/index.xml +++ b/gdscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub GDScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:34Z + 2024-08-03T01:29:57Z Daily Trending of GDScript in GitHub \ No newline at end of file diff --git a/gedcom/daily/index.xml b/gedcom/daily/index.xml index af5ff873d2c..48273b32de5 100644 --- a/gedcom/daily/index.xml +++ b/gedcom/daily/index.xml @@ -1,7 +1,7 @@ GitHub GEDCOM Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:34Z + 2024-08-03T01:29:56Z Daily Trending of GEDCOM in GitHub \ No newline at end of file diff --git a/gemfile.lock/daily/index.xml b/gemfile.lock/daily/index.xml index 64779f10f1d..3490dfc311b 100644 --- a/gemfile.lock/daily/index.xml +++ b/gemfile.lock/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gemfile.lock Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:35Z + 2024-08-03T01:29:58Z Daily Trending of Gemfile.lock in GitHub \ No newline at end of file diff --git a/genie/daily/index.xml b/genie/daily/index.xml index 07975d0940a..940a6c4a822 100644 --- a/genie/daily/index.xml +++ b/genie/daily/index.xml @@ -1,7 +1,7 @@ GitHub Genie Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:36Z + 2024-08-03T01:30:00Z Daily Trending of Genie in GitHub \ No newline at end of file diff --git a/genshi/daily/index.xml b/genshi/daily/index.xml index 781872293d4..6ac9b6e6dfe 100644 --- a/genshi/daily/index.xml +++ b/genshi/daily/index.xml @@ -1,7 +1,7 @@ GitHub Genshi Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:37Z + 2024-08-03T01:29:59Z Daily Trending of Genshi in GitHub \ No newline at end of file diff --git a/gentoo-ebuild/daily/index.xml b/gentoo-ebuild/daily/index.xml index 96dc828053c..fb6e04303e2 100644 --- a/gentoo-ebuild/daily/index.xml +++ b/gentoo-ebuild/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gentoo Ebuild Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:37Z + 2024-08-03T01:30:00Z Daily Trending of Gentoo Ebuild in GitHub \ No newline at end of file diff --git a/gentoo-eclass/daily/index.xml b/gentoo-eclass/daily/index.xml index 51465773e8a..3a60710cfdc 100644 --- a/gentoo-eclass/daily/index.xml +++ b/gentoo-eclass/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gentoo Eclass Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:37Z + 2024-08-03T01:30:00Z Daily Trending of Gentoo Eclass in GitHub \ No newline at end of file diff --git a/gerber-image/daily/index.xml b/gerber-image/daily/index.xml index 2a37dcf28dc..5b5d239924c 100644 --- a/gerber-image/daily/index.xml +++ b/gerber-image/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gerber Image Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:38Z + 2024-08-03T01:30:02Z Daily Trending of Gerber Image in GitHub \ No newline at end of file diff --git a/gettext-catalog/daily/index.xml b/gettext-catalog/daily/index.xml index 3ee401cabb3..f4b3ae2e9a0 100644 --- a/gettext-catalog/daily/index.xml +++ b/gettext-catalog/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gettext Catalog Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:38Z + 2024-08-03T01:30:01Z Daily Trending of Gettext Catalog in GitHub \ No newline at end of file diff --git a/gherkin/daily/index.xml b/gherkin/daily/index.xml index aa12b4311f8..af9bd9c1460 100644 --- a/gherkin/daily/index.xml +++ b/gherkin/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gherkin Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:38Z + 2024-08-03T01:30:01Z Daily Trending of Gherkin in GitHub \ No newline at end of file diff --git a/git-attributes/daily/index.xml b/git-attributes/daily/index.xml index 66f96a1ab58..e06d833fd37 100644 --- a/git-attributes/daily/index.xml +++ b/git-attributes/daily/index.xml @@ -1,7 +1,7 @@ GitHub Git Attributes Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:39Z + 2024-08-03T01:30:01Z Daily Trending of Git Attributes in GitHub \ No newline at end of file diff --git a/git-config/daily/index.xml b/git-config/daily/index.xml index 29da4037793..3742732d1c4 100644 --- a/git-config/daily/index.xml +++ b/git-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub Git Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:40Z + 2024-08-03T01:30:03Z Daily Trending of Git Config in GitHub \ No newline at end of file diff --git a/gleam/daily/index.xml b/gleam/daily/index.xml index f362e27543f..2449a71c592 100644 --- a/gleam/daily/index.xml +++ b/gleam/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gleam Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:40Z + 2024-08-03T01:30:03Z Daily Trending of Gleam in GitHub \ No newline at end of file diff --git a/glsl/daily/index.xml b/glsl/daily/index.xml index 55324082cf5..0282539c7f4 100644 --- a/glsl/daily/index.xml +++ b/glsl/daily/index.xml @@ -1,14 +1,7 @@ GitHub GLSL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:42Z + 2024-08-03T01:30:05Z Daily Trending of GLSL in GitHub - - Eldeston/Super-Duper-Vanilla - 2024-08-02T01:29:42Z - tag:github.com,2024-08-02:/Eldeston/Super-Duper-Vanilla - - <p>A shader pack created to convey the style of the cancelled Super Duper Graphics Pack and other popular Minecraft titles.</p><hr> - \ No newline at end of file diff --git a/glyph-bitmap-distribution-format/daily/index.xml b/glyph-bitmap-distribution-format/daily/index.xml index efa02d8ad0a..30712da0214 100644 --- a/glyph-bitmap-distribution-format/daily/index.xml +++ b/glyph-bitmap-distribution-format/daily/index.xml @@ -1,7 +1,7 @@ GitHub Glyph Bitmap Distribution Format Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:41Z + 2024-08-03T01:30:04Z Daily Trending of Glyph Bitmap Distribution Format in GitHub \ No newline at end of file diff --git a/glyph/daily/index.xml b/glyph/daily/index.xml index 006d75a2695..866822d3236 100644 --- a/glyph/daily/index.xml +++ b/glyph/daily/index.xml @@ -1,7 +1,7 @@ GitHub Glyph Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:41Z + 2024-08-03T01:30:04Z Daily Trending of Glyph in GitHub \ No newline at end of file diff --git a/gn/daily/index.xml b/gn/daily/index.xml index c49549f1108..622ae455071 100644 --- a/gn/daily/index.xml +++ b/gn/daily/index.xml @@ -1,7 +1,7 @@ GitHub GN Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:41Z + 2024-08-03T01:30:04Z Daily Trending of GN in GitHub \ No newline at end of file diff --git a/gnuplot/daily/index.xml b/gnuplot/daily/index.xml index 032ebd380cf..7f4fe5fe507 100644 --- a/gnuplot/daily/index.xml +++ b/gnuplot/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gnuplot Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:43Z + 2024-08-03T01:30:05Z Daily Trending of Gnuplot in GitHub \ No newline at end of file diff --git a/go-checksums/daily/index.xml b/go-checksums/daily/index.xml index 8a3700bdacd..ceb519e9cbf 100644 --- a/go-checksums/daily/index.xml +++ b/go-checksums/daily/index.xml @@ -1,7 +1,7 @@ GitHub Go Checksums Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:42Z + 2024-08-03T01:30:06Z Daily Trending of Go Checksums in GitHub \ No newline at end of file diff --git a/go-module/daily/index.xml b/go-module/daily/index.xml index 4a5a53cdf25..409eaf91d1e 100644 --- a/go-module/daily/index.xml +++ b/go-module/daily/index.xml @@ -1,7 +1,7 @@ GitHub Go Module Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:43Z + 2024-08-03T01:30:06Z Daily Trending of Go Module in GitHub \ No newline at end of file diff --git a/go/daily/index.xml b/go/daily/index.xml index d65971a5ee9..aaa63e20308 100644 --- a/go/daily/index.xml +++ b/go/daily/index.xml @@ -1,14 +1,7 @@ GitHub Go Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:44Z + 2024-08-03T01:30:07Z Daily Trending of Go in GitHub - - KindlingProject/kindling - 2024-08-02T01:29:44Z - tag:github.com,2024-08-02:/KindlingProject/kindling - - <p>eBPF-based Cloud Native Monitoring Tool</p><hr><h1>Kindling</h1> <p><a href="https://github.com/KindlingProject/kindling/raw/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache2.0-blue.svg?sanitize=true" alt="License"></a> <a href="http://kindling.harmonycloud.cn/docs/overview-and-concepts/overview/"><img src="https://img.shields.io/badge/docs-latest-green.svg?sanitize=true" alt="Doc"></a> <a href="https://goreportcard.com/report/github.com/KindlingProject/kindling/collector"><img src="https://goreportcard.com/badge/github.com/KindlingProject/kindling/collector" alt="Go Report Card"></a></p> <p>Visit our <a href="http://kindling.harmonycloud.cn/">Kindling website</a> for more information.</p> <h2>What is Kindling</h2> <p>Kindling is an eBPF-based cloud native monitoring tool, which aims to help users understand the app behavior from kernel to code stack. With <strong>trace profiling</strong>, we hope the user can understand the application's behavior easily and find the root cause in seconds. Besides trace profiling, Kindling provides an easy way to get an overview of network flows in the Kubernetes environment, and many built-in network monitor dashboards like TCP retransmit, DNS, throughput, and TPS. Not only as a network monitor, but Kindling is also trying to analyze one detail RPC call and get the following information, which can be found in network explore in chrome. And the usage is the same as network exploration in chrome, with which users can tell which part to dig into to find the root cause of the problem in the production environment.</p> <p><img src="https://cdn.nlark.com/yuque/0/2021/png/749988/1633767195234-af2913c4-75d7-447d-99bb-bd1d815883ae.png" alt="img"></p> <h2>What is Kindling Trace-profiling</h2> <p>With traces, metrics, and logs, many issues still can’t be understood easily. Trace-profiling is trying to integrate the OnCPU and OffCPU events within the traces and collect the logs output during the trace execution timeframe.</p> <p>OnCPU events are just like the flame graph, but the code has been collected at the thread level instead of the process level. And the trace was executed by one thread, so users can understand how the trace was executing on the CPU.</p> <p>OffCPU events are the opposite of OnCPU events. As for the trace analysis, most traces spend a lifetime waiting for the locks, database query, remote process call, file reading, or file writing. All of these events cause the thread in waiting status, and they are considered as OffCPU events.</p> <p>So for trace profiling, how all threads were executed is recorded and can be replayed.</p> <ul> <li>The exact thread which executed the trace span is highlighted.</li> <li>The logs printed by each thread are collected and correlated to the relative thread with its timestamp.</li> <li>The code execution flame graph is correlated to the time series where the CPU is busy.</li> <li>The network-related metrics are correlated to the time series where the network syscalls are executing.</li> <li>The file-related metrics are correlated to the time series where the file syscalls are executing.</li> </ul> <h2>Architecture</h2> <p>From a high-level view, the agent runs as DeamonSet in Kubernetes. It collects all syscalls and some other tracepoints. We use different exporters for different distributions. For example, we build a Prometheus exporter to export the data which can be stored in Prometheus and displayed in Grafana Plugin. But for the trace profiling module, the UI is different, that's a standalone module.</p> <p><img src="https://raw.githubusercontent.com/KindlingProject/kindling/main/docs/imgs/architecture.png" alt="image.png"></p> <h2>Linux kernel version support</h2> <p>The Kindling eBPF module depends on the kernel version which is newer than 4.14. But for trace-profiling, the kernel version has to be newer than 4.17, hoping with more work, the trace-profiling can work on older kernel versions. As an eBPF constraint, the eBPF module can't work for older kernel versions. But for the users who want to try the functionality with the old kernel, we use the kernel module from Sysdig open-source project with enhancement and verification. Basically, the idea is to use a kernel module for tracking the kernel tracepoints. Thanks to Sysdig open-source project, it provides a tracepoint instrument framework for older kernel versions.</p> <p>For now, the kernel module works as expected as the eBPF module during our test except for trace-profiling, but it is recommended to use the eBPF module in the production environment as it is safer than the kernel module. In order to help the older kernel version user experience the eBPF magic, we also support the kernel model. And you are welcome to report issues with the kernel module. For functionality, the kernel module and eBPF module capture the same data and behave exactly the same.</p> <h2>Why do we build Kindling?</h2> <p>When we talk about observability, we already have plenty of tools to use, like Skywalking for tracing, ELK for logging, and Prometheus for metrics. Why do we need to build an eBPF-based monitoring tool?</p> <p>The majority issue for user adoption of k8s is the complexity. For the applications on Kubernetes, we don't know the network flows between the services until we can instrument the apps. We can't tell which part to blame when there is a product issue arise. Do we configure Kubernetes correctly? Are there any bugs in the virtual network like Calico or Flannel that caused this problem? Does the application code cause this issue?</p> <p>We are a company based in Hangzhou, China, and used to provide Kubernetes distribution for our customers. Our customers used to have those questions, and we don't have proper solutions to answer those questions.</p> <p>APM(Application Performance Monitoring) is good for those applications in Java which can be instrumented automatically, while for the Go programs, the code has to be rewritten for instrumenting. And even if we adopt the APM solution, we still can't tell whether an issue is caused by network problems, and many issues can’t be pinpoint the root cause easily.</p> <p>We found it may be helpful that we triage the issue first by checking the issue from the network view to identify issues roughly like "oh, it's a network problem, the code works fine, and we should dig into the configuration of calico" or "the infrastructure works fine, so the app code should be blamed, let's dig into the logs or the APM dashboard for further information".</p> <p>After we triage the issue, we need to pinpoint the root cause of the issue. That's why we need the trace-profiling module.</p> <h3>Why eBPF?</h3> <p>The libpcap way of analyzing the flows in the Kubernetes environment is too expensive for the CPU and network. The eBPF way of data capture cost much less than libpcap. eBPF is the most popular technology to track the Linux kernel where the virtual network, built by veth-pair and iptables, works. So eBPF is a proper technique to be used for tracking how the kernel responds to application requests.</p> <h2>Core Features</h2> <p>With the trace-profiling module, we can understand how ElasticSearch works easily. The following image shows how ElasticSearch is executing the <code>bulk insert</code> operation.</p> <p><img src="https://raw.githubusercontent.com/KindlingProject/kindling/main/docs/imgs/traceprofiling.png" alt="trace-profiling"></p> <p>The next image shows a dependency map in Kubernetes.</p> <p><img src="https://cdn.nlark.com/yuque/0/2022/png/749988/1642572876088-c26396ac-e7bb-44e7-ae0c-cc96f3344cd8.png" alt="img"></p> <p>Kindling can be easily integrated with Prometheus, and we uses PromQL to query the data in the frontend, so it should be adopted easily. But due to the cardinality constraint of Prometheus, we group the detailed data into buckets which throw away the detailed information.</p> <h2>Get started</h2> <p>You can deploy Kindling easily, check out the <a href="http://kindling.harmonycloud.cn/docs/installation/kindling-agent/requirements/">Installation Guide</a> for details.</p> <h2>Documentation</h2> <p>The Kindling documentation is available on our <a href="http://kindling.harmonycloud.cn/docs/overview-and-concepts/overview/">Kindling website</a></p> <h2>Contributing</h2> <p>Contributions are welcome, you can contribute in many ways: report issues, help us reproduce issues, fix bugs, add features, give us advice on GitHub discussion, and so on. If you are interested in joining us to unveil the eBPF in the Kubernetes area, you can start by reading the <a href="https://github.com/KindlingProject/kindling/raw/main/CONTRIBUTING.md">Contributing Guide</a>.</p> <h2>Contact</h2> <p>If you have questions or ideas, please feel free to reach out to us in the following ways:</p> <ul> <li>Check out the <a href="https://github.com/KindlingProject/kindling/discussions">discussions</a></li> <li>Join the Kindling <a href="https://join.slack.com/t/kindling-world/shared_invite/zt-1rmki34l0-JiFpWFR7YhqlXG~mSQQAtg">Slack channel</a></li> <li>Join the WeChat Group (in Chinese)</li> </ul> <p><img src="https://raw.githubusercontent.com/KindlingProject/kindling/main/docs/imgs/wechat-code.png" alt="img"></p> <h2>License</h2> <p>Kindling is distributed under <a href="https://github.com/KindlingProject/kindling/raw/main/LICENSE">Apache License, Version2.0</a>.</p> - \ No newline at end of file diff --git a/golo/daily/index.xml b/golo/daily/index.xml index d6eb4032dc4..92f1b4a009c 100644 --- a/golo/daily/index.xml +++ b/golo/daily/index.xml @@ -1,7 +1,7 @@ GitHub Golo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:50Z + 2024-08-03T01:30:11Z Daily Trending of Golo in GitHub \ No newline at end of file diff --git a/gosu/daily/index.xml b/gosu/daily/index.xml index d9d3f60ff81..5ed6f9015d4 100644 --- a/gosu/daily/index.xml +++ b/gosu/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gosu Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:49Z + 2024-08-03T01:30:11Z Daily Trending of Gosu in GitHub \ No newline at end of file diff --git a/grace/daily/index.xml b/grace/daily/index.xml index 02c56c6aa67..aefa96b56a7 100644 --- a/grace/daily/index.xml +++ b/grace/daily/index.xml @@ -1,7 +1,7 @@ GitHub Grace Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:51Z + 2024-08-03T01:30:12Z Daily Trending of Grace in GitHub \ No newline at end of file diff --git a/gradle/daily/index.xml b/gradle/daily/index.xml index 7fcf60086b6..0a6c4abb4be 100644 --- a/gradle/daily/index.xml +++ b/gradle/daily/index.xml @@ -1,7 +1,7 @@ GitHub Gradle Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:51Z + 2024-08-03T01:30:13Z Daily Trending of Gradle in GitHub \ No newline at end of file diff --git a/grammatical-framework/daily/index.xml b/grammatical-framework/daily/index.xml index a2d7164cdd7..8feeb77fd50 100644 --- a/grammatical-framework/daily/index.xml +++ b/grammatical-framework/daily/index.xml @@ -1,7 +1,7 @@ GitHub Grammatical Framework Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:51Z + 2024-08-03T01:30:12Z Daily Trending of Grammatical Framework in GitHub \ No newline at end of file diff --git a/graph-modeling-language/daily/index.xml b/graph-modeling-language/daily/index.xml index 9d8f0cfb810..2c682e4e55b 100644 --- a/graph-modeling-language/daily/index.xml +++ b/graph-modeling-language/daily/index.xml @@ -1,7 +1,7 @@ GitHub Graph Modeling Language Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:52Z + 2024-08-03T01:30:14Z Daily Trending of Graph Modeling Language in GitHub \ No newline at end of file diff --git a/graphql/daily/index.xml b/graphql/daily/index.xml index f664e8b1d7b..9f4bb579be4 100644 --- a/graphql/daily/index.xml +++ b/graphql/daily/index.xml @@ -1,7 +1,7 @@ GitHub GraphQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:52Z + 2024-08-03T01:30:14Z Daily Trending of GraphQL in GitHub \ No newline at end of file diff --git a/graphviz-(dot)/daily/index.xml b/graphviz-(dot)/daily/index.xml index ad08e67ca80..1a5ceb69d17 100644 --- a/graphviz-(dot)/daily/index.xml +++ b/graphviz-(dot)/daily/index.xml @@ -1,7 +1,7 @@ GitHub Graphviz (DOT) Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:53Z + 2024-08-03T01:30:13Z Daily Trending of Graphviz (DOT) in GitHub \ No newline at end of file diff --git a/groovy-server-pages/daily/index.xml b/groovy-server-pages/daily/index.xml index 2469e958525..96c12f9ba99 100644 --- a/groovy-server-pages/daily/index.xml +++ b/groovy-server-pages/daily/index.xml @@ -1,7 +1,7 @@ GitHub Groovy Server Pages Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:55Z + 2024-08-03T01:30:17Z Daily Trending of Groovy Server Pages in GitHub \ No newline at end of file diff --git a/groovy/daily/index.xml b/groovy/daily/index.xml index 302bf7bfc5e..d31a325509f 100644 --- a/groovy/daily/index.xml +++ b/groovy/daily/index.xml @@ -1,7 +1,7 @@ GitHub Groovy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:53Z + 2024-08-03T01:30:16Z Daily Trending of Groovy in GitHub \ No newline at end of file diff --git a/gsc/daily/index.xml b/gsc/daily/index.xml index f3b583799fb..3a3d79f6825 100644 --- a/gsc/daily/index.xml +++ b/gsc/daily/index.xml @@ -1,7 +1,7 @@ GitHub GSC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:54Z + 2024-08-03T01:30:17Z Daily Trending of GSC in GitHub \ No newline at end of file diff --git a/hack/daily/index.xml b/hack/daily/index.xml index a71ee0fd39d..a2d81cd178f 100644 --- a/hack/daily/index.xml +++ b/hack/daily/index.xml @@ -1,7 +1,7 @@ GitHub Hack Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:54Z + 2024-08-03T01:30:18Z Daily Trending of Hack in GitHub \ No newline at end of file diff --git a/haml/daily/index.xml b/haml/daily/index.xml index 7c9fee4d8ab..24b279b8466 100644 --- a/haml/daily/index.xml +++ b/haml/daily/index.xml @@ -1,7 +1,7 @@ GitHub Haml Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:54Z + 2024-08-03T01:30:17Z Daily Trending of Haml in GitHub \ No newline at end of file diff --git a/handlebars/daily/index.xml b/handlebars/daily/index.xml index d7ed1b3b8ca..162105fd6ad 100644 --- a/handlebars/daily/index.xml +++ b/handlebars/daily/index.xml @@ -1,7 +1,7 @@ GitHub Handlebars Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:56Z + 2024-08-03T01:30:19Z Daily Trending of Handlebars in GitHub \ No newline at end of file diff --git a/haproxy/daily/index.xml b/haproxy/daily/index.xml index 413c7f19e8e..e75c310b312 100644 --- a/haproxy/daily/index.xml +++ b/haproxy/daily/index.xml @@ -1,7 +1,7 @@ GitHub HAProxy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:55Z + 2024-08-03T01:30:18Z Daily Trending of HAProxy in GitHub \ No newline at end of file diff --git a/harbour/daily/index.xml b/harbour/daily/index.xml index 8ff37bef346..c72f97c9670 100644 --- a/harbour/daily/index.xml +++ b/harbour/daily/index.xml @@ -1,7 +1,7 @@ GitHub Harbour Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:55Z + 2024-08-03T01:30:18Z Daily Trending of Harbour in GitHub \ No newline at end of file diff --git a/haskell/daily/index.xml b/haskell/daily/index.xml index 7b4165325e4..71b7fb726af 100644 --- a/haskell/daily/index.xml +++ b/haskell/daily/index.xml @@ -1,7 +1,7 @@ GitHub Haskell Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:29:57Z + 2024-08-03T01:30:19Z Daily Trending of Haskell in GitHub \ No newline at end of file diff --git a/haxe/daily/index.xml b/haxe/daily/index.xml index 97518db8142..ca5a09855b0 100644 --- a/haxe/daily/index.xml +++ b/haxe/daily/index.xml @@ -1,7 +1,7 @@ GitHub Haxe Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:01Z + 2024-08-03T01:30:24Z Daily Trending of Haxe in GitHub \ No newline at end of file diff --git a/hcl/daily/index.xml b/hcl/daily/index.xml index 91d9f3b7f34..037b307e101 100644 --- a/hcl/daily/index.xml +++ b/hcl/daily/index.xml @@ -1,7 +1,7 @@ GitHub HCL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:01Z + 2024-08-03T01:30:24Z Daily Trending of HCL in GitHub \ No newline at end of file diff --git a/hiveql/daily/index.xml b/hiveql/daily/index.xml index 337ded98124..677b0dd8d19 100644 --- a/hiveql/daily/index.xml +++ b/hiveql/daily/index.xml @@ -1,7 +1,7 @@ GitHub HiveQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:00Z + 2024-08-03T01:30:22Z Daily Trending of HiveQL in GitHub \ No newline at end of file diff --git a/hlsl/daily/index.xml b/hlsl/daily/index.xml index 90673f307d9..27dfd810a71 100644 --- a/hlsl/daily/index.xml +++ b/hlsl/daily/index.xml @@ -1,7 +1,7 @@ GitHub HLSL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:00Z + 2024-08-03T01:30:22Z Daily Trending of HLSL in GitHub \ No newline at end of file diff --git a/holyc/daily/index.xml b/holyc/daily/index.xml index 75a4ebbffeb..ddd91b02672 100644 --- a/holyc/daily/index.xml +++ b/holyc/daily/index.xml @@ -1,7 +1,7 @@ GitHub HolyC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:02Z + 2024-08-03T01:30:25Z Daily Trending of HolyC in GitHub \ No newline at end of file diff --git a/hoon/daily/index.xml b/hoon/daily/index.xml index 666860a11c4..3127bd7ab87 100644 --- a/hoon/daily/index.xml +++ b/hoon/daily/index.xml @@ -1,7 +1,7 @@ GitHub hoon Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:02Z + 2024-08-03T01:30:24Z Daily Trending of hoon in GitHub \ No newline at end of file diff --git a/html+ecr/daily/index.xml b/html+ecr/daily/index.xml index d3282b922ee..031b8944e70 100644 --- a/html+ecr/daily/index.xml +++ b/html+ecr/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTML+ECR Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:04Z + 2024-08-03T01:30:26Z Daily Trending of HTML+ECR in GitHub \ No newline at end of file diff --git a/html+eex/daily/index.xml b/html+eex/daily/index.xml index fd6b146941a..ea876186e7d 100644 --- a/html+eex/daily/index.xml +++ b/html+eex/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTML+EEX Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:04Z + 2024-08-03T01:30:26Z Daily Trending of HTML+EEX in GitHub \ No newline at end of file diff --git a/html+erb/daily/index.xml b/html+erb/daily/index.xml index 68b45f9ab60..970056544e8 100644 --- a/html+erb/daily/index.xml +++ b/html+erb/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTML+ERB Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:10Z + 2024-08-03T01:30:32Z Daily Trending of HTML+ERB in GitHub \ No newline at end of file diff --git a/html+php/daily/index.xml b/html+php/daily/index.xml index 91359da4899..692f1dd4621 100644 --- a/html+php/daily/index.xml +++ b/html+php/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTML+PHP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:09Z + 2024-08-03T01:30:32Z Daily Trending of HTML+PHP in GitHub \ No newline at end of file diff --git a/html+razor/daily/index.xml b/html+razor/daily/index.xml index d108d5c5169..cad0ca45f67 100644 --- a/html+razor/daily/index.xml +++ b/html+razor/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTML+Razor Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:09Z + 2024-08-03T01:30:31Z Daily Trending of HTML+Razor in GitHub \ No newline at end of file diff --git a/html/daily/index.xml b/html/daily/index.xml index 88797ed4a72..ab586145900 100644 --- a/html/daily/index.xml +++ b/html/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:07Z + 2024-08-03T01:30:28Z Daily Trending of HTML in GitHub \ No newline at end of file diff --git a/http/daily/index.xml b/http/daily/index.xml index 9c76be1a704..178c7a5faa8 100644 --- a/http/daily/index.xml +++ b/http/daily/index.xml @@ -1,7 +1,7 @@ GitHub HTTP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:10Z + 2024-08-03T01:30:31Z Daily Trending of HTTP in GitHub \ No newline at end of file diff --git a/hxml/daily/index.xml b/hxml/daily/index.xml index 4e5359b9d4d..3295caeaaf3 100644 --- a/hxml/daily/index.xml +++ b/hxml/daily/index.xml @@ -1,7 +1,7 @@ GitHub HXML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:11Z + 2024-08-03T01:30:32Z Daily Trending of HXML in GitHub \ No newline at end of file diff --git a/hy/daily/index.xml b/hy/daily/index.xml index 166ebf9cdfd..328ea874d4a 100644 --- a/hy/daily/index.xml +++ b/hy/daily/index.xml @@ -1,7 +1,7 @@ GitHub Hy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:11Z + 2024-08-03T01:30:33Z Daily Trending of Hy in GitHub \ No newline at end of file diff --git a/hyphy/daily/index.xml b/hyphy/daily/index.xml index 8a713a69d2c..0fdec8e649e 100644 --- a/hyphy/daily/index.xml +++ b/hyphy/daily/index.xml @@ -1,7 +1,7 @@ GitHub HyPhy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:11Z + 2024-08-03T01:30:33Z Daily Trending of HyPhy in GitHub \ No newline at end of file diff --git a/idl/daily/index.xml b/idl/daily/index.xml index 9727736395b..58fad9dd233 100644 --- a/idl/daily/index.xml +++ b/idl/daily/index.xml @@ -1,7 +1,7 @@ GitHub IDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:11Z + 2024-08-03T01:30:33Z Daily Trending of IDL in GitHub \ No newline at end of file diff --git a/idris/daily/index.xml b/idris/daily/index.xml index 23e69f7b467..28eb6d584ec 100644 --- a/idris/daily/index.xml +++ b/idris/daily/index.xml @@ -1,7 +1,7 @@ GitHub Idris Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:12Z + 2024-08-03T01:30:35Z Daily Trending of Idris in GitHub \ No newline at end of file diff --git a/ignore-list/daily/index.xml b/ignore-list/daily/index.xml index d856242e98e..037d5515552 100644 --- a/ignore-list/daily/index.xml +++ b/ignore-list/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ignore List Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:12Z + 2024-08-03T01:30:34Z Daily Trending of Ignore List in GitHub \ No newline at end of file diff --git a/igor-pro/daily/index.xml b/igor-pro/daily/index.xml index 46c7c1f1bc5..a0c41511b1d 100644 --- a/igor-pro/daily/index.xml +++ b/igor-pro/daily/index.xml @@ -1,7 +1,7 @@ GitHub IGOR Pro Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:13Z + 2024-08-03T01:30:34Z Daily Trending of IGOR Pro in GitHub \ No newline at end of file diff --git a/imagej-macro/daily/index.xml b/imagej-macro/daily/index.xml index d5df3ae87e2..87aa6a33bbb 100644 --- a/imagej-macro/daily/index.xml +++ b/imagej-macro/daily/index.xml @@ -1,7 +1,7 @@ GitHub ImageJ Macro Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:13Z + 2024-08-03T01:30:34Z Daily Trending of ImageJ Macro in GitHub \ No newline at end of file diff --git a/inform-7/daily/index.xml b/inform-7/daily/index.xml index 08eef72590f..0dc3c793c2f 100644 --- a/inform-7/daily/index.xml +++ b/inform-7/daily/index.xml @@ -1,7 +1,7 @@ GitHub Inform 7 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:13Z + 2024-08-03T01:30:36Z Daily Trending of Inform 7 in GitHub \ No newline at end of file diff --git a/ini/daily/index.xml b/ini/daily/index.xml index 0aa5ea87149..a2a801b2da1 100644 --- a/ini/daily/index.xml +++ b/ini/daily/index.xml @@ -1,7 +1,7 @@ GitHub INI Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:14Z + 2024-08-03T01:30:35Z Daily Trending of INI in GitHub \ No newline at end of file diff --git a/inno-setup/daily/index.xml b/inno-setup/daily/index.xml index fb14a971cc4..25e23f24156 100644 --- a/inno-setup/daily/index.xml +++ b/inno-setup/daily/index.xml @@ -1,7 +1,7 @@ GitHub Inno Setup Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:16Z + 2024-08-03T01:30:38Z Daily Trending of Inno Setup in GitHub \ No newline at end of file diff --git a/io/daily/index.xml b/io/daily/index.xml index 143e92ea1e4..e02ea7c9504 100644 --- a/io/daily/index.xml +++ b/io/daily/index.xml @@ -1,7 +1,7 @@ GitHub Io Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:15Z + 2024-08-03T01:30:37Z Daily Trending of Io in GitHub \ No newline at end of file diff --git a/ioke/daily/index.xml b/ioke/daily/index.xml index 35c91edcd29..10e18a41bb7 100644 --- a/ioke/daily/index.xml +++ b/ioke/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ioke Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:15Z + 2024-08-03T01:30:37Z Daily Trending of Ioke in GitHub \ No newline at end of file diff --git a/irc-log/daily/index.xml b/irc-log/daily/index.xml index 18607bb2770..b09376604fd 100644 --- a/irc-log/daily/index.xml +++ b/irc-log/daily/index.xml @@ -1,7 +1,7 @@ GitHub IRC log Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:16Z + 2024-08-03T01:30:37Z Daily Trending of IRC log in GitHub \ No newline at end of file diff --git a/isabelle-root/daily/index.xml b/isabelle-root/daily/index.xml index 36162251bdc..bc64914b141 100644 --- a/isabelle-root/daily/index.xml +++ b/isabelle-root/daily/index.xml @@ -1,7 +1,7 @@ GitHub Isabelle ROOT Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:17Z + 2024-08-03T01:30:38Z Daily Trending of Isabelle ROOT in GitHub \ No newline at end of file diff --git a/isabelle/daily/index.xml b/isabelle/daily/index.xml index 5a72eebad6d..c0a477ac2e1 100644 --- a/isabelle/daily/index.xml +++ b/isabelle/daily/index.xml @@ -1,7 +1,7 @@ GitHub Isabelle Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:17Z + 2024-08-03T01:30:39Z Daily Trending of Isabelle in GitHub \ No newline at end of file diff --git a/j/daily/index.xml b/j/daily/index.xml index b6509ece4e7..df3be0dc4ae 100644 --- a/j/daily/index.xml +++ b/j/daily/index.xml @@ -1,7 +1,7 @@ GitHub J Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:16Z + 2024-08-03T01:30:39Z Daily Trending of J in GitHub \ No newline at end of file diff --git a/janet/daily/index.xml b/janet/daily/index.xml index a3566900987..14e35e58f47 100644 --- a/janet/daily/index.xml +++ b/janet/daily/index.xml @@ -1,7 +1,7 @@ GitHub Janet Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:17Z + 2024-08-03T01:30:39Z Daily Trending of Janet in GitHub \ No newline at end of file diff --git a/jar-manifest/daily/index.xml b/jar-manifest/daily/index.xml index c80e21c812e..123b887bdae 100644 --- a/jar-manifest/daily/index.xml +++ b/jar-manifest/daily/index.xml @@ -1,7 +1,7 @@ GitHub JAR Manifest Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:19Z + 2024-08-03T01:30:40Z Daily Trending of JAR Manifest in GitHub \ No newline at end of file diff --git a/jasmin/daily/index.xml b/jasmin/daily/index.xml index 4aaed3114dc..e196e1d7e5e 100644 --- a/jasmin/daily/index.xml +++ b/jasmin/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jasmin Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:18Z + 2024-08-03T01:30:40Z Daily Trending of Jasmin in GitHub \ No newline at end of file diff --git a/java-properties/daily/index.xml b/java-properties/daily/index.xml index 5f096f9335d..94d777f86c3 100644 --- a/java-properties/daily/index.xml +++ b/java-properties/daily/index.xml @@ -1,7 +1,7 @@ GitHub Java Properties Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:18Z + 2024-08-03T01:30:40Z Daily Trending of Java Properties in GitHub \ No newline at end of file diff --git a/java-server-pages/daily/index.xml b/java-server-pages/daily/index.xml index 44c6b0d76a1..7766b417159 100644 --- a/java-server-pages/daily/index.xml +++ b/java-server-pages/daily/index.xml @@ -1,7 +1,7 @@ GitHub Java Server Pages Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:26Z + 2024-08-03T01:30:49Z Daily Trending of Java Server Pages in GitHub \ No newline at end of file diff --git a/java/daily/index.xml b/java/daily/index.xml index 5721ceef144..412d0f0af45 100644 --- a/java/daily/index.xml +++ b/java/daily/index.xml @@ -1,14 +1,14 @@ GitHub Java Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:20Z + 2024-08-03T01:30:42Z Daily Trending of Java in GitHub - java-native-access/jna - 2024-08-02T01:30:20Z - tag:github.com,2024-08-02:/java-native-access/jna - - <p>Java Native Access</p><hr><p><img src="https://github.com/java-native-access/jna/raw/master/www/images/jnalogo.jpg" alt="Java Native Access - JNA" title="Java Native Access - JNA"></p> <p><a href="https://github.com/java-native-access/jna/actions?query=workflow%3A%22Java+CI%22"><img src="https://github.com/java-native-access/jna/workflows/Java%20CI/badge.svg?sanitize=true" alt="Github Actions Build Status"></a> <a href="https://travis-ci.com/github/java-native-access/jna"><img src="https://api.travis-ci.com/java-native-access/jna.svg?branch=master" alt="Travis Build Status"></a> <a href="https://ci.appveyor.com/project/dblock/jna-gsxuq/branch/master"><img src="https://ci.appveyor.com/api/projects/status/j6vmpjrw5iktb8iu/branch/master?svg=true" alt="Appveyor Build Status"></a></p> <h1>Java Native Access (JNA)</h1> <p>The definitive JNA reference (including an overview and usage details) is in the <a href="http://java-native-access.github.io/jna/5.14.0/javadoc/">JavaDoc</a>. Please read the <a href="http://java-native-access.github.io/jna/5.14.0/javadoc/overview-summary.html#overview_description">overview</a>. Questions, comments, or exploratory conversations should begin on the <a href="http://groups.google.com/group/jna-users">mailing list</a>, although you may find it easier to find answers to already-solved problems on <a href="http://stackoverflow.com/questions/tagged/jna">StackOverflow</a>.</p> <p>JNA provides Java programs easy access to native shared libraries without writing anything but Java code - no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes.</p> <p>JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like the call does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.</p> <p>JNA uses a small JNI library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms. Read this <a href="https://github.com/java-native-access/jna/raw/master/www/FunctionalDescription.md">more in-depth description</a>.</p> <p>While significant attention has been paid to performance, correctness and ease of use take priority.</p> <p>In addition, JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access.</p> <h1>Projects Using JNA</h1> <p>JNA is a mature library with dozens of contributors and hundreds of commercial and non-commercial projects that use it. If you're using JNA, feel free to <a href="http://groups.google.com/group/jna-users">tell us about it</a>. Include some details about your company, project name, purpose and size and tell us how you use the library.</p> <ul> <li><a href="http://cassandra.apache.org">Apache Cassandra</a>: Large-scale NoSQL data store.</li> <li><a href="https://github.com/iterate-ch/rococoa">Rococoa</a>: Java bindings to the Mac OS X Cocoa framework, by Duncan McGregor.</li> <li><a href="https://github.com/jenkinsci/jna-posix">jna-posix</a>: Common POSIX Functions for Java.</li> <li><a href="https://github.com/nativelibs4java/JNAerator">JNAerator</a>: Pronounced "generator", auto-generates JNA mappings from C headers, by Olivier Chafik.</li> <li><a href="https://github.com/jitsi/fmj">Freedom for Media in Java</a> by Ken Larson/Dieter Krachtus.</li> <li><a href="https://github.com/gstreamer-java/">GStreamer-Java</a>: Java bindings and utilities for <a href="https://gstreamer.freedesktop.org/">GStreamer 1.x</a>.</li> <li><a href="https://github.com/caprica/vlcj">VLCJ</a>: Java bindings for libVLC.</li> <li><a href="http://svnkit.com">SVNKit</a>: Pure Java Subversion client library.</li> <li><a href="https://omegat.org/">OmegaT Computer-Aided Translation</a>.</li> <li><a href="https://www.jetbrains.com/idea">IntelliJ IDEA</a> by JetBrains.</li> <li><a href="https://www.jetbrains.com/toolbox-app/">Jetbrains Toolbox</a> by JetBrains.</li> <li><a href="https://netbeans.apache.org/">Apache NetBeans IDE</a> by Apache Software Foundation.</li> <li><a href="http://www.filebot.net">FileBot Media Renamer</a> by Reinhard Pointner.</li> <li><a href="https://launchpad.net/libusb4j">USB for Java</a> by Mario Boikov.</li> <li><a href="https://github.com/dblock/waffle">Waffle</a>: Enables SSO on Windows in Java applications, by Daniel Doubrovkine.</li> <li><a href="https://github.com/protonail/leveldb-jna">leveldb-jna</a>: Cross-platform JNA based adapter for <a href="https://github.com/google/leveldb">LevelDB</a>.</li> <li><a href="https://github.com/protonail/bolt-jna">bolt-jna</a>: Cross-platform JNA based adapter for <a href="https://github.com/boltdb/bolt">Bolt</a>. It is to show how to use JNA for binding to Go library.</li> <li><a href="https://github.com/kotlin-graphics/openvr">JVM OpenVR Bindings</a>.</li> <li><a href="https://ignite.apache.org/">Apache Ignite</a>: Direct IO plugin</li> <li><a href="https://github.com/klehmann/domino-jna">Domino JNA</a>: Cross-platform access to HCL Notes/Domino C API methods from Java</li> <li><a href="https://github.com/oshi/oshi">OSHI</a>: Cross-platform Operating System and Hardware Information library for Java</li> <li><a href="https://jalbum.net">jAlbum</a>: Desktop based web gallery software for any web site.</li> <li><a href="https://github.com/joelhockey/jacknji11">jacknji11</a>: Provides a Java PKCS#11 interface.</li> <li><a href="https://github.com/jaudiolibs/jnajack">JNAJack</a>: Java bindings for <a href="https://jackaudio.org/">JACK Audio Connection Kit</a>.</li> <li><a href="https://www.elastic.co/elasticsearch/">Elasticsearch</a>: Large-scale distributed search and analytics engine.</li> <li><a href="https://github.com/letmeNo1/Aki">Aki</a>: Automated Testing on desktop</li> </ul> <p><em>Interesting Investigations/Experiments</em></p> <ul> <li><a href="http://epirsch.blogspot.com/2008/02/jna-love-nxt.html">Drive Lego Mindstorm NXT</a> by Emmanuel Pirsch.</li> <li><a href="http://ochafik.free.fr/blog/?p=98">Detect User Inactivity</a> by Olivier Chafik.</li> </ul> <p>There are also a number of examples and projects within the <code>contrib</code> directory of the JNA project itself.</p> <h1>Supported Platforms</h1> <p>JNA will build on most linux-like platforms with a reasonable set of GNU tools and a JDK. See the native <a href="https://raw.githubusercontent.com/java-native-access/jna/master/native/Makefile">Makefile</a> for native configurations that have been built and tested. If your platform is supported by <a href="http://en.wikipedia.org/wiki/Libffi">libffi</a>, then chances are you can build JNA for it.</p> <p>Pre-built platform support may be found <a href="https://github.com/java-native-access/jna/tree/master/lib/native">here</a>.</p> <h1>Download</h1> <p>Version 5.14.0</p> <h2>JNA</h2> <p><a href="https://search.maven.org/artifact/net.java.dev.jna/jna/5.14.0/jar"><img src="https://img.shields.io/maven-central/v/net.java.dev.jna/jna.svg?label=Maven%20Central" alt="Maven Central"></a>&nbsp;<a href="https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar">jna-5.14.0.jar</a>&nbsp;<a href="https://repo1.maven.org/maven2/net/java/dev/jna/jna-jpms/5.14.0/jna-jpms-5.14.0.jar">jna-jpms-5.14.0.jar</a></p> <p>This is the core artifact of JNA and contains only the binding library and the core helper classes.</p> <h2>JNA Platform</h2> <p><a href="https://search.maven.org/artifact/net.java.dev.jna/jna-platform/5.14.0/jar"><img src="https://img.shields.io/maven-central/v/net.java.dev.jna/jna-platform.svg?label=Maven%20Central" alt="Maven Central"></a>&nbsp;<a href="https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/5.14.0/jna-platform-5.14.0.jar">jna-platform-5.14.0.jar</a>&nbsp;<a href="https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform-jpms/5.14.0/jna-platform-jpms-5.14.0.jar">jna-platform-jpms-5.14.0.jar</a></p> <p>This artifact holds cross-platform mappings and mappings for a number of commonly used platform functions, including a large number of Win32 mappings as well as a set of utility classes that simplify native access. The code is tested and the utility interfaces ensure that native memory management is taken care of correctly.</p> <p>See <a href="https://github.com/java-native-access/jna/raw/master/www/PlatformLibrary.md">PlatformLibrary.md</a> for details.</p> <h1>Features</h1> <ul> <li>Automatic mapping from Java to native functions, with simple mappings for all primitive data types</li> <li>Runs on most platforms which support Java</li> <li>Automatic conversion between C and Java strings, with customizable encoding/decoding</li> <li>Structure and Union arguments/return values, by reference and by value</li> <li>Function Pointers, (callbacks from native code to Java) as arguments and/or members of a struct</li> <li>Auto-generated Java proxies for native function pointers</li> <li>By-reference (pointer-to-type) arguments</li> <li>Java array and NIO Buffer arguments (primitive types and pointers) as pointer-to-buffer</li> <li>Nested structures and arrays</li> <li>Wide (wchar_t-based) strings</li> <li>Native long support (32- or 64-bit as appropriate)</li> <li><a href="https://github.com/java-native-access/jna/tree/master/contrib">Demo applications/examples</a></li> <li>Supported on 1.4 or later JVMs, including JavaME (earlier VMs may work with stubbed NIO support)</li> <li>Customizable marshalling/unmarshalling (argument and return value conversions)</li> <li>Customizable mapping from Java method to native function name, and customizable invocation to simulate C preprocessor function macros</li> <li>Support for automatic Windows ASCII/UNICODE function mappings</li> <li>Varargs support</li> <li>Type-safety for native pointers</li> <li>VM crash protection (optional)</li> <li>Optimized direct mapping for high-performance applications.</li> <li>COM support for early and late binding.</li> <li>COM/Typelib java code generator.</li> </ul> <h1>Community and Support</h1> <p>All questions should be posted to the <a href="http://groups.google.com/group/jna-users">jna-users Google group</a>. Issues can be submitted <a href="https://github.com/java-native-access/jna/issues">here on Github</a>.</p> <p>When posting to the mailing list, please include the following:</p> <ul> <li>What OS/CPU/architecture you're using (e.g. Windows 7 64-bit)</li> <li>Reference to your native interface definitions (i.e. C headers), if available</li> <li>The JNA mapping you're trying to use</li> <li>VM crash logs, if any</li> <li>Example native usage, and your attempted Java usage</li> </ul> <p>It's nearly impossible to indicate proper Java usage when there's no native reference to work from.</p> <p>For commercial support, please contact twalljava [at] java [dot] net.</p> <h1>Using the Library</h1> <ul> <li><a href="https://github.com/java-native-access/jna/raw/master/www/GettingStarted.md">Getting Started</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/FunctionalDescription.md">Functional Description</a>.</li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/Mappings.md">Mapping between Java and Native</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/PointersAndArrays.md">Using Pointers and Arrays</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/StructuresAndUnions.md">Using Structures and Unions</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/ByRefArguments.md">Using By-Reference Arguments</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/CustomMappings.md">Customization of Type Mapping</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/CallbacksAndClosures.md">Callbacks/Function Pointers/Closures</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/DynamicallyTypedLanguages.md">Dynamically Typed Languages (JRuby/Jython)</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/PlatformLibrary.md">Platform Library</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/DirectMapping.md">Direct Method Mapping</a> (Optimization)</li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/FrequentlyAskedQuestions.md">Frequently Asked Questions (FAQ)</a></li> <li><a href="http://java-native-access.github.io/jna/5.14.0/javadoc/overview-summary.html#crash-protection">Avoiding Crashes</a></li> </ul> <h1>Primary Documentation (JavaDoc)</h1> <p>The definitive JNA reference is in the <a href="http://java-native-access.github.io/jna/5.14.0/javadoc/">JavaDoc</a>.</p> <h1>Developers</h1> <ul> <li><a href="https://github.com/java-native-access/jna/raw/master/www/Contributing.md">Contributing to JNA</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/WindowsDevelopmentEnvironment.md">Setting up a Windows Development Environment</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/AndroidDevelopmentEnvironment.md">Setting up an Android Development Environment</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/RaspberryPiDevelopmentEnvironment.md">Setting up a RaspberryPi Development Environment</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/MacDevelopmentEnvironment.md">Setting up a Mac Development Environment</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/ReleasingJNA.md">Releasing JNA</a></li> <li><a href="https://github.com/java-native-access/jna/raw/master/www/PublishingToMavenCentral.md">Publishing to Maven Central</a></li> </ul> <h1>Contributing</h1> <p>You're encouraged to contribute to JNA. Fork the code from <a href="https://github.com/java-native-access/jna">https://github.com/java-native-access/jna</a> and submit pull requests.</p> <p>For more information on setting up a development environment see <a href="https://github.com/java-native-access/jna/raw/master/www/Contributing.md">Contributing to JNA</a>.</p> <p>If you are interested in paid support, feel free to say so on the <a href="http://groups.google.com/group/jna-users">jna-users mailing list</a>. Most simple questions will be answered on the list, but more complicated work, new features or target platforms can be negotiated with any of the JNA developers (this is how several of JNA's features came into being). You may even encounter other users with the same need and be able to cost share the new development.</p> <h1>License</h1> <p>This library is licensed under the LGPL, version 2.1 or later, or (from version 4.0 onward) the Apache License, version 2.0. Commercial support may be available, please e-mail twall[at]users[dot]sf[dot]net. See <a href="https://raw.githubusercontent.com/java-native-access/jna/master/LICENSE">LICENSE</a> for more information.</p> <p><em>NOTE: Oracle is not sponsoring this project, even though the package name (com.sun.jna) might imply otherwise.</em></p> + mcastillof/FakeTraveler + 2024-08-03T01:30:42Z + tag:github.com,2024-08-03:/mcastillof/FakeTraveler + + <p>Fake where your phone is located (Mock location for Android).</p><hr><h1>FakeTraveler</h1> <img alt="Logo" src="https://raw.githubusercontent.com/mcastillof/FakeTraveler/master/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png" width="80"> <p>Fake where your phone is located (Mock location for Android).</p> <p>Sometimes you need to fake the location of your device (for privacy or to test an app). Fake Traveler provides you a map to select the location where you want your phone to be.</p> <p><a href="https://f-droid.org/app/cl.coders.faketraveler"><img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="100"></a></p> <h2>How does it work?</h2> <p>Long press in the map where you want to be located or type the latitude and longitude, and tap the Apply button. Tapping the "..." button you will be shown two settings to mock the location over a period of time.</p> <div style="display:flex;"> <img alt="App image" src="https://raw.githubusercontent.com/mcastillof/FakeTraveler/master/screenshots/Screenshot_Fake_Traveler_20180722-192131.png" width="30%"> <img alt="App image" src="https://raw.githubusercontent.com/mcastillof/FakeTraveler/master/screenshots/Screenshot_Fake_Traveler_20180722-192305.png" width="30%"> </div> <h2>Requirements?</h2> <p>In order to work, you need to allow Fake Traveler to mock locations. You have to <a href="https://developer.android.com/studio/debug/dev-options?hl=en-419">enable Developer options</a> and select this app in "Settings/System/Developer options/Select mock location app" option.</p> <img alt="App image" src="https://raw.githubusercontent.com/mcastillof/FakeTraveler/master/screenshots/Screenshot_Settings_20180722-192328.png" width="30%"> <h2>Changelogs</h2> <p>See fastlane/metadata/android/en-US/changelogs/</p> <h2>License</h2> <p>Copyright © 2018 Matías Castillo Felmer</p> <blockquote> <p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p> <p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.</p> <p>You should have received a copy of the GNU General Public License along with this program. If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p> </blockquote> <p>The icon launcher is derivative of <a href="https://www.iconfinder.com/icons/2135924/location_map_navigation_pointer_icon">"Location, map, navigation, pointer icon"</a> by First Styles, used under CC 3.0 BY. The icon Launcher was created using <a href="https://jgilfelt.github.io/AndroidAssetStudio/icons-launcher.html">Android Asset Studio</a>, and is licensed under CC 3.0 BY, by Matías Castillo Felmer.</p> \ No newline at end of file diff --git a/javascript+erb/daily/index.xml b/javascript+erb/daily/index.xml index bff5801130c..fc44fe500ee 100644 --- a/javascript+erb/daily/index.xml +++ b/javascript+erb/daily/index.xml @@ -1,7 +1,7 @@ GitHub JavaScript+ERB Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:26Z + 2024-08-03T01:30:49Z Daily Trending of JavaScript+ERB in GitHub \ No newline at end of file diff --git a/javascript/daily/index.xml b/javascript/daily/index.xml index 839fb7891bd..5dfeafa6fa9 100644 --- a/javascript/daily/index.xml +++ b/javascript/daily/index.xml @@ -1,14 +1,14 @@ GitHub JavaScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:27Z + 2024-08-03T01:30:50Z Daily Trending of JavaScript in GitHub - tailwindlabs/tailwindcss-typography - 2024-08-02T01:30:27Z - tag:github.com,2024-08-02:/tailwindlabs/tailwindcss-typography - - <p>Beautiful typographic defaults for HTML you don't control.</p><hr><p> <a href="https://tailwindcss.com/docs/typography-plugin" target="_blank"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/tailwindlabs/tailwindcss-typography/HEAD/.github/logo-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/tailwindlabs/tailwindcss-typography/HEAD/.github/logo-light.svg"> <img alt="Tailwind CSS Typography" src="https://raw.githubusercontent.com/tailwindlabs/tailwindcss-typography/HEAD/.github/logo-light.svg?sanitize=true" width="450" height="70" style="max-width: 100%;"> </picture> </a> </p> <p>The official Tailwind CSS Typography plugin provides a set of <code>prose</code> classes you can use to add beautiful typographic defaults to any vanilla HTML you don’t control, like HTML rendered from Markdown, or pulled from a CMS.</p> <pre><code class="language-html">&lt;article class="prose lg:prose-xl"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>To see what it looks like in action, check out our <a href="https://play.tailwindcss.com/uj1vGACRJA?layout=preview">live demo</a> on Tailwind Play.</p> <hr> <h2>Installation</h2> <p>Install the plugin from npm:</p> <pre><code class="language-shell">npm install -D @tailwindcss/typography </code></pre> <p>Then add the plugin to your <code>tailwind.config.js</code> file:</p> <pre><code class="language-js">/** @type {import('tailwindcss').Config} */ module.exports = { theme: { // ... }, plugins: [ require('@tailwindcss/typography'), // ... ], } </code></pre> <hr> <h2>Basic usage</h2> <p>Now you can use the <code>prose</code> classes to add sensible typography styles to any vanilla HTML:</p> <pre><code class="language-html">&lt;article class="prose lg:prose-xl"&gt; &lt;h1&gt;Garlic bread with cheese: What the science tells us&lt;/h1&gt; &lt;p&gt; For years parents have espoused the health benefits of eating garlic bread with cheese to their children, with the food earning such an iconic status in our culture that kids will often dress up as warm, cheesy loaf for Halloween. &lt;/p&gt; &lt;p&gt; But a recent study shows that the celebrated appetizer may be linked to a series of rabies cases springing up around the country. &lt;/p&gt; &lt;!-- ... --&gt; &lt;/article&gt; </code></pre> <h3>Choosing a gray scale</h3> <p>This plugin includes a modifier class for each of the five gray scales Tailwind includes by default so you can easily style your content to match the grays you're using in your project.</p> <pre><code class="language-html">&lt;article class="prose prose-slate"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>Here are the classes that are generated using a totally default Tailwind CSS v2.0 build:</p> <table> <thead> <tr> <th>Class</th> <th>Gray scale</th> </tr> </thead> <tbody> <tr> <td><code>prose-gray</code> <em>(default)</em></td> <td>Gray</td> </tr> <tr> <td><code>prose-slate</code></td> <td>Slate</td> </tr> <tr> <td><code>prose-zinc</code></td> <td>Zinc</td> </tr> <tr> <td><code>prose-neutral</code></td> <td>Neutral</td> </tr> <tr> <td><code>prose-stone</code></td> <td>Stone</td> </tr> </tbody> </table> <p>Modifier classes are designed to be used with the <a href="http://nicolasgallagher.com/about-html-semantics-front-end-architecture/#component-modifiers">multi-class modifier pattern</a> and must be used in conjunction with the base <code>prose</code> class.</p> <blockquote> <p>[!NOTE] Always include the <code>prose</code> class when adding a gray scale modifier</p> </blockquote> <pre><code class="language-html">&lt;article class="prose prose-stone"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>To learn about creating your own color themes, read the <a href="https://raw.githubusercontent.com/tailwindlabs/tailwindcss-typography/master/#adding-custom-color-themes">adding custom color themes</a> documentation.</p> <h3>Applying a type scale</h3> <p>Size modifiers allow you to adjust the overall size of your typography for different contexts.</p> <pre><code class="language-html">&lt;article class="prose prose-xl"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>Five different typography sizes are included out of the box:</p> <table> <thead> <tr> <th>Class</th> <th>Body font size</th> </tr> </thead> <tbody> <tr> <td><code>prose-sm</code></td> <td>0.875rem <em>(14px)</em></td> </tr> <tr> <td><code>prose-base</code> <em>(default)</em></td> <td>1rem <em>(16px)</em></td> </tr> <tr> <td><code>prose-lg</code></td> <td>1.125rem <em>(18px)</em></td> </tr> <tr> <td><code>prose-xl</code></td> <td>1.25rem <em>(20px)</em></td> </tr> <tr> <td><code>prose-2xl</code></td> <td>1.5rem <em>(24px)</em></td> </tr> </tbody> </table> <p>These can be used in combination with Tailwind's <a href="https://tailwindcss.com/docs/responsive-design">breakpoint modifiers</a> to change the overall font size of a piece of content at different viewport sizes:</p> <pre><code class="language-html">&lt;article class="prose md:prose-lg lg:prose-xl"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>Everything about the provided size modifiers has been hand-tuned by professional designers to look as beautiful as possible, including the relationships between font sizes, heading spacing, code block padding, and more.</p> <p>Size modifiers are designed to be used with the <a href="http://nicolasgallagher.com/about-html-semantics-front-end-architecture/#component-modifiers">multi-class modifier pattern</a> and must be used in conjunction with the base <code>prose</code> class.</p> <blockquote> <p>[!NOTE] Always include the <code>prose</code> class when adding a size modifier</p> </blockquote> <pre><code class="language-html">&lt;article class="prose prose-lg"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>To learn about customizing the included type scales, read the documentation on <a href="https://raw.githubusercontent.com/tailwindlabs/tailwindcss-typography/master/#customizing-the-css">customizing the CSS</a>.</p> <h3>Adapting to dark mode</h3> <p>Each default color theme includes a hand-designed dark mode version that you can trigger by adding the <code>prose-invert</code> class:</p> <pre><code class="language-html">&lt;article class="prose dark:prose-invert"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>To learn about creating your own color themes, read the <a href="https://raw.githubusercontent.com/tailwindlabs/tailwindcss-typography/master/#adding-custom-color-themes">adding custom color themes</a> documentation.</p> <h3>Element modifiers</h3> <p>Use element modifiers to customize the style of individual elements in your content directly in your HTML:</p> <pre><code class="language-html">&lt;article class="prose prose-img:rounded-xl prose-headings:underline prose-a:text-blue-600"&gt; {{ markdown }} &lt;/article&gt; </code></pre> <p>This makes it easy to do things like style links to match your brand, add a border radius to images, and tons more.</p> <p>Here's a complete list of available element modifiers:</p> <table> <thead> <tr> <th>Modifier</th> <th>Target</th> </tr> </thead> <tbody> <tr> <td><code>prose-headings:{utility}</code></td> <td><code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>th</code></td> </tr> <tr> <td><code>prose-lead:{utility}</code></td> <td><code>[class~="lead"]</code></td> </tr> <tr> <td><code>prose-h1:{utility}</code></td> <td><code>h1</code></td> </tr> <tr> <td><code>prose-h2:{utility}</code></td> <td><code>h2</code></td> </tr> <tr> <td><code>prose-h3:{utility}</code></td> <td><code>h3</code></td> </tr> <tr> <td><code>prose-h4:{utility}</code></td> <td><code>h4</code></td> </tr> <tr> <td><code>prose-p:{utility}</code></td> <td><code>p</code></td> </tr> <tr> <td><code>prose-a:{utility}</code></td> <td><code>a</code></td> </tr> <tr> <td><code>prose-blockquote:{utility}</code></td> <td><code>blockquote</code></td> </tr> <tr> <td><code>prose-figure:{utility}</code></td> <td><code>figure</code></td> </tr> <tr> <td><code>prose-figcaption:{utility}</code></td> <td><code>figcaption</code></td> </tr> <tr> <td><code>prose-strong:{utility}</code></td> <td><code>strong</code></td> </tr> <tr> <td><code>prose-em:{utility}</code></td> <td><code>em</code></td> </tr> <tr> <td><code>prose-kbd:{utility}</code></td> <td><code>kbd</code></td> </tr> <tr> <td><code>prose-code:{utility}</code></td> <td><code>code</code></td> </tr> <tr> <td><code>prose-pre:{utility}</code></td> <td><code>pre</code></td> </tr> <tr> <td><code>prose-ol:{utility}</code></td> <td><code>ol</code></td> </tr> <tr> <td><code>prose-ul:{utility}</code></td> <td><code>ul</code></td> </tr> <tr> <td><code>prose-li:{utility}</code></td> <td><code>li</code></td> </tr> <tr> <td><code>prose-table:{utility}</code></td> <td><code>table</code></td> </tr> <tr> <td><code>prose-thead:{utility}</code></td> <td><code>thead</code></td> </tr> <tr> <td><code>prose-tr:{utility}</code></td> <td><code>tr</code></td> </tr> <tr> <td><code>prose-th:{utility}</code></td> <td><code>th</code></td> </tr> <tr> <td><code>prose-td:{utility}</code></td> <td><code>td</code></td> </tr> <tr> <td><code>prose-img:{utility}</code></td> <td><code>img</code></td> </tr> <tr> <td><code>prose-video:{utility}</code></td> <td><code>video</code></td> </tr> <tr> <td><code>prose-hr:{utility}</code></td> <td><code>hr</code></td> </tr> </tbody> </table> <p>When stacking these modifiers with other modifiers like <code>hover</code>, you most likely want the other modifier to come first:</p> <pre><code class="language-html">&lt;article class="prose prose-a:text-blue-600 hover:prose-a:text-blue-500"&gt;{{ markdown }}&lt;/article&gt; </code></pre> <p>Read the Tailwind CSS documentation on <a href="https://tailwindcss.com/docs/hover-focus-and-other-states#ordering-stacked-modifiers">ordering stacked modifiers</a> to learn more.</p> <h3>Overriding max-width</h3> <p>Each size modifier comes with a baked in <code>max-width</code> designed to keep the content as readable as possible. This isn't always what you want though, and sometimes you'll want the content to just fill the width of its container.</p> <p>In those cases, all you need to do is add <code>max-w-none</code> to your content to override the embedded max-width:</p> <pre><code class="language-html">&lt;div class="grid grid-cols-4"&gt; &lt;div class="col-span-1"&gt; &lt;!-- ... --&gt; &lt;/div&gt; &lt;div class="col-span-3"&gt; &lt;article class="prose max-w-none"&gt;{{ markdown }}&lt;/article&gt; &lt;/div&gt; &lt;/div&gt; </code></pre> <hr> <h2>Advanced topics</h2> <h3>Undoing typography styles</h3> <p>If you have a block of markup embedded in some content that shouldn't inherit the <code>prose</code> styles, use the <code>not-prose</code> class to sandbox it:</p> <pre><code class="language-html">&lt;article class="prose"&gt; &lt;h1&gt;My Heading&lt;/h1&gt; &lt;p&gt;...&lt;/p&gt; &lt;div class="not-prose"&gt; &lt;!-- Some example or demo that needs to be prose-free --&gt; &lt;/div&gt; &lt;p&gt;...&lt;/p&gt; &lt;!-- ... --&gt; &lt;/article&gt; </code></pre> <p>Note that you can't nest new <code>prose</code> instances within a <code>not-prose</code> block at this time.</p> <h3>Adding custom color themes</h3> <p>You can create your own color theme by adding a new key in the <code>typography</code> section of your <code>tailwind.config.js</code> file and providing your colors under the <code>css</code> key:</p> <pre><code class="language-js">/** @type {import('tailwindcss').Config} */ module.exports = { theme: { extend: { typography: ({ theme }) =&gt; ({ pink: { css: { '--tw-prose-body': theme('colors.pink[800]'), '--tw-prose-headings': theme('colors.pink[900]'), '--tw-prose-lead': theme('colors.pink[700]'), '--tw-prose-links': theme('colors.pink[900]'), '--tw-prose-bold': theme('colors.pink[900]'), '--tw-prose-counters': theme('colors.pink[600]'), '--tw-prose-bullets': theme('colors.pink[400]'), '--tw-prose-hr': theme('colors.pink[300]'), '--tw-prose-quotes': theme('colors.pink[900]'), '--tw-prose-quote-borders': theme('colors.pink[300]'), '--tw-prose-captions': theme('colors.pink[700]'), '--tw-prose-code': theme('colors.pink[900]'), '--tw-prose-pre-code': theme('colors.pink[100]'), '--tw-prose-pre-bg': theme('colors.pink[900]'), '--tw-prose-th-borders': theme('colors.pink[300]'), '--tw-prose-td-borders': theme('colors.pink[200]'), '--tw-prose-invert-body': theme('colors.pink[200]'), '--tw-prose-invert-headings': theme('colors.white'), '--tw-prose-invert-lead': theme('colors.pink[300]'), '--tw-prose-invert-links': theme('colors.white'), '--tw-prose-invert-bold': theme('colors.white'), '--tw-prose-invert-counters': theme('colors.pink[400]'), '--tw-prose-invert-bullets': theme('colors.pink[600]'), '--tw-prose-invert-hr': theme('colors.pink[700]'), '--tw-prose-invert-quotes': theme('colors.pink[100]'), '--tw-prose-invert-quote-borders': theme('colors.pink[700]'), '--tw-prose-invert-captions': theme('colors.pink[400]'), '--tw-prose-invert-code': theme('colors.white'), '--tw-prose-invert-pre-code': theme('colors.pink[300]'), '--tw-prose-invert-pre-bg': 'rgb(0 0 0 / 50%)', '--tw-prose-invert-th-borders': theme('colors.pink[600]'), '--tw-prose-invert-td-borders': theme('colors.pink[700]'), }, }, }), }, }, plugins: [ require('@tailwindcss/typography'), // ... ], } </code></pre> <p>See our internal <a href="https://github.com/tailwindlabs/tailwindcss-typography/raw/master/src/styles.js">style definitions</a> for some more examples.</p> <h3>Changing the default class name</h3> <p>If you need to use a class name other than <code>prose</code> for any reason, you can do so using the <code>className</code> option when registering the plugin:</p> <pre><code class="language-js">/** @type {import('tailwindcss').Config} */ module.exports = { theme: { // ... }, plugins: [ require('@tailwindcss/typography')({ className: 'wysiwyg', }), ] ... } </code></pre> <p>Now every instance of <code>prose</code> in the default class names will be replaced by your custom class name:</p> <pre><code class="language-html">&lt;article class="wysiwyg wysiwyg-slate lg:wysiwyg-xl"&gt; &lt;h1&gt;My Heading&lt;/h1&gt; &lt;p&gt;...&lt;/p&gt; &lt;div class="not-wysiwyg"&gt; &lt;!-- Some example or demo that needs to be prose-free --&gt; &lt;/div&gt; &lt;p&gt;...&lt;/p&gt; &lt;!-- ... --&gt; &lt;/article&gt; </code></pre> <h3>Customizing the CSS</h3> <p>If you want to customize the raw CSS generated by this plugin, add your overrides under the <code>typography</code> key in the <code>theme</code> section of your <code>tailwind.config.js</code> file:</p> <pre><code class="language-js">/** @type {import('tailwindcss').Config} */ module.exports = { theme: { extend: { typography: { DEFAULT: { css: { color: '#333', a: { color: '#3182ce', '&amp;:hover': { color: '#2c5282', }, }, }, }, }, }, }, plugins: [ require('@tailwindcss/typography'), // ... ], } </code></pre> <p>Like with all theme customizations in Tailwind, you can also define the <code>typography</code> key as a function if you need access to the <code>theme</code> helper:</p> <pre><code class="language-js">/** @type {import('tailwindcss').Config} */ module.exports = { theme: { extend: { typography: (theme) =&gt; ({ DEFAULT: { css: { color: theme('colors.gray.800'), // ... }, }, }), }, }, plugins: [ require('@tailwindcss/typography'), // ... ], } </code></pre> <p>Customizations should be applied to a specific modifier like <code>DEFAULT</code> or <code>xl</code>, and must be added under the <code>css</code> property. Customizations are authored in the same <a href="https://tailwindcss.com/docs/plugins#css-in-js-syntax">CSS-in-JS syntax</a> used to write Tailwind plugins.</p> <p>See <a href="https://github.com/tailwindlabs/tailwindcss-typography/raw/master/src/styles.js">the default styles</a> for this plugin for more in-depth examples of configuring each modifier.</p> <hr> <h2>Community</h2> <p>For help, discussion about best practices, or any other conversation that would benefit from being searchable:</p> <p><a href="https://github.com/tailwindlabs/tailwindcss/discussions">Discuss the Tailwind CSS Typography plugin on GitHub</a></p> <p>For casual chit-chat with others using the framework:</p> <p><a href="https://tailwindcss.com/discord">Join the Tailwind CSS Discord Server</a></p> + CanadaHonk/porffor + 2024-08-03T01:30:50Z + tag:github.com,2024-08-03:/CanadaHonk/porffor + + <p>A from-scratch experimental AOT JS engine, written in JS</p><hr><h1>Porffor &nbsp;<sup><sub>/ˈpɔrfɔr/ &nbsp;<em>(poor-for)</em></sub></sup></h1> <p>A from-scratch experimental <strong>AOT</strong> optimizing JS/TS -&gt; Wasm/C engine/compiler/runtime in JS. Research project, not yet intended for serious use.<br></p> <img src="https://github.com/CanadaHonk/porffor/assets/19228318/de8ad753-8ce3-4dcd-838e-f4d49452f8f8" alt="Screenshot of terminal showing Porffor running and compiling a hello world" width="60%"> <h2>Design</h2> <p>Porffor is a very unique JS engine, due many wildly different approaches. It is seriously limited, but what it can do, it does pretty well. Key differences:</p> <ul> <li>100% AOT compiled (no JIT)</li> <li>No constant runtime/preluded code</li> <li>Least Wasm imports possible (only I/O)</li> </ul> <p>Porffor is primarily built from scratch, the only thing that is not is the parser (using <a href="https://github.com/acornjs/acorn">Acorn</a>). Binaryen/etc is not used, we make final wasm binaries ourself. You could imagine it as compiling a language which is a sub (some things unsupported) and super (new/custom apis) set of javascript. Not based on any particular spec version.</p> <h2>Usage</h2> <p>Expect nothing to work! Only very limited JS is currently supported. See files in <code>bench</code> for examples.</p> <h3>Install</h3> <p><strong><code>npm install -g porffor@latest</code></strong>. It's that easy (hopefully) :)</p> <h3>Trying a REPL</h3> <p><strong><code>porf</code></strong>. Just run it with no script file argument.</p> <h3>Running a JS file</h3> <p><strong><code>porf path/to/script.js</code></strong></p> <h3>Compiling to Wasm</h3> <p><strong><code>porf wasm path/to/script.js out.wasm</code></strong>. Currently it does not use an import standard like WASI, so it is mostly unusable on its own.</p> <h3>Compiling to native binaries</h3> <blockquote> <p>[!WARNING] Compiling to native binaries uses <a href="https://raw.githubusercontent.com/CanadaHonk/porffor/main/#2c">2c</a>, Porffor's own Wasm -&gt; C compiler, which is experimental.</p> </blockquote> <p><strong><code>porf native path/to/script.js out(.exe)</code></strong>. You can specify the compiler with <code>--compiler=clang|gcc|zig</code> (<code>clang</code> by default), and which optimization level to use with <code>--cO=Ofast|O3|O2|O1|O0</code> (<code>Ofast</code> by default). Output binaries are also stripped by default.</p> <h3>Compiling to C</h3> <blockquote> <p>[!WARNING] Compiling to C uses <a href="https://raw.githubusercontent.com/CanadaHonk/porffor/main/#2c">2c</a>, Porffor's own Wasm -&gt; C compiler, which is experimental.</p> </blockquote> <p><strong><code>porf c path/to/script.js (out.c)</code></strong>. When not including an output file, it will be printed to stdout instead.</p> <h3>Profiling a JS file</h3> <blockquote> <p>[!WARNING] Very experimental WIP feature!</p> </blockquote> <p><strong><code>porf profile path/to/script.js</code></strong></p> <h3>Debugging a JS file</h3> <blockquote> <p>[!WARNING] Very experimental WIP feature!</p> </blockquote> <p><strong><code>porf debug path/to/script.js</code></strong></p> <h3>Debugging the compiled Wasm of a JS file</h3> <blockquote> <p>[!WARNING] Very experimental WIP feature!</p> </blockquote> <p><strong><code>porf debug-wasm path/to/script.js</code></strong></p> <h3>Options</h3> <ul> <li><code>--parser=acorn|@babel/parser|meriyah|hermes-parser</code> (default: <code>acorn</code>) to set which parser to use</li> <li><code>--parse-types</code> to enable parsing type annotations/typescript. if <code>-parser</code> is unset, changes default to <code>@babel/parser</code>. does not type check</li> <li><code>--opt-types</code> to perform optimizations using type annotations as compiler hints. does not type check</li> <li><code>--valtype=i32|i64|f64</code> (default: <code>f64</code>) to set valtype</li> <li><code>-O0</code> to disable opt</li> <li><code>-O1</code> (default) to enable basic opt (simplify insts, treeshake wasm imports)</li> <li><code>-O2</code> to enable advanced opt (inlining). unstable!</li> <li><code>-O3</code> to enable advanceder opt (precompute const math). unstable!</li> </ul> <h2>Current limitations</h2> <ul> <li>Limited async support</li> <li>No variables between scopes (except args and globals)</li> <li>No <code>eval()</code>/<code>Function()</code> etc (since it is AOT)</li> </ul> <h2>Sub-engines</h2> <h3>Asur</h3> <p>Asur is Porffor's own Wasm engine; it is an intentionally simple interpreter written in JS. It is very WIP. See <a href="https://raw.githubusercontent.com/CanadaHonk/porffor/main/asur/README.md">its readme</a> for more details.</p> <h3>Rhemyn</h3> <p>Rhemyn is Porffor's own regex engine; it compiles literal regex to Wasm bytecode AOT (remind you of anything?). It is quite basic and WIP. See <a href="https://raw.githubusercontent.com/CanadaHonk/porffor/main/rhemyn/README.md">its readme</a> for more details.</p> <h3>2c</h3> <p>2c is Porffor's own Wasm -&gt; C compiler, using generated Wasm bytecode and internal info to generate specific and efficient/fast C code. Little boilerplate/preluded code or required external files, just for CLI binaries (not like wasm2c very much).</p> <h2>Supported</h2> <p>See <a href="https://raw.githubusercontent.com/CanadaHonk/porffor/main/#optimizations">optimizations</a> for opts implemented/supported.</p> <h3>Proposals</h3> <p>These include some early (stage 1/0) and/or dead (last commit years ago) proposals but <em>I</em> think they are pretty neat, so.</p> <h4><code>Math</code> proposals (stage 1/0)</h4> <ul> <li><a href="https://github.com/Richienb/proposal-math-clamp"><code>Math.clamp</code> Proposal</a>: <code>Math.clamp</code> (stage 0 - last commit april 2023)</li> <li><a href="https://github.com/rwaldron/proposal-math-extensions"><code>Math</code> Extensions Proposal</a>: <code>Math.scale</code>, <code>Math.radians</code>, <code>Math.degrees</code>, <code>Math.RAD_PER_DEG</code>, <code>Math.DEG_PER_RAD</code> (stage 1 - last commit september 2020)</li> <li><a href="https://github.com/tc39/proposal-Math.signbit"><code>Math.signbit</code> Proposal</a>: <code>Math.signbit</code> (stage 1 - last commit february 2020)</li> </ul> <h3>Language</h3> <ul> <li>Number literals</li> <li>Declaring functions</li> <li>Calling functions</li> <li><code>return</code></li> <li>Basic declarations (<code>let</code>/<code>const</code>/<code>var</code>)</li> <li>Some basic integer operators (<code>+-/*%</code>)</li> <li>Some basic integer bitwise operators (<code>&amp;|</code>)</li> <li>Equality operators (<code>==</code>, <code>!=</code>, etc)</li> <li>GT/LT operators (<code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, etc)</li> <li>Some unary operators (<code>!</code>, <code>+</code>, <code>-</code>)</li> <li>Logical operators (<code>&amp;&amp;</code>, <code>||</code>)</li> <li>Declaring multiple variables in one (<code>let a, b = 0</code>)</li> <li>Array destructuring (<code>let [a, ...b] = foo</code>)</li> <li>Global variables (<code>var</code>/none in top scope)</li> <li>Booleans</li> <li><code>if</code> and <code>if ... else</code></li> <li>Anonymous functions</li> <li>Setting functions using vars (<code>const foo = function() { ... }</code>)</li> <li>Arrow functions</li> <li><code>undefined</code>/<code>null</code></li> <li>Update expressions (<code>a++</code>, <code>++b</code>, <code>c--</code>, etc)</li> <li><code>for</code> loops (<code>for (let i = 0; i &lt; N; i++)</code>, etc)</li> <li>Basic objects (no prototypes)</li> <li><code>console.log</code></li> <li><code>while</code> loops</li> <li><code>break</code> and <code>continue</code></li> <li>Named export funcs</li> <li>IIFE support</li> <li>Assignment operators (<code>+=</code>, <code>-=</code>, <code>&gt;&gt;=</code>, <code>&amp;&amp;=</code>, etc)</li> <li>Conditional/ternary operator (<code>cond ? a : b</code>)</li> <li>Recursive functions</li> <li>Bare returns (<code>return</code>)</li> <li><code>throw</code> (literals only, hack for <code>new Error</code>)</li> <li>Basic <code>try { ... } catch { ... }</code> (no error given)</li> <li>Calling functions with non-matching arguments (eg <code>f(a, b); f(0); f(1, 2, 3);</code>)</li> <li><code>typeof</code></li> <li>Runtime errors for undeclared variables (<code>ReferenceError</code>), not functions (<code>TypeError</code>)</li> <li>Array creation via <code>[]</code> (eg <code>let arr = [ 1, 2, 3 ]</code>)</li> <li>Array member access via <code>arr[ind]</code> (eg <code>arr[0]</code>)</li> <li>String literals (<code>'hello world'</code>)</li> <li>String member (char) access via <code>str[ind]</code> (eg <code>str[0]</code>)</li> <li>String concat (<code>+</code>) (eg <code>'a' + 'b'</code>)</li> <li>Truthy/falsy (eg <code>!'' == true</code>)</li> <li>String comparison (eg <code>'a' == 'a'</code>, <code>'a' != 'b'</code>)</li> <li>Nullish coalescing operator (<code>??</code>)</li> <li><code>for...of</code> (arrays and strings)</li> <li><code>for...in</code></li> <li>Array member setting (<code>arr[0] = 2</code>, <code>arr[0] += 2</code>, etc)</li> <li>Array constructor (<code>Array(5)</code>, <code>new Array(1, 2, 3)</code>)</li> <li>Labelled statements (<code>foo: while (...)</code>)</li> <li><code>do...while</code> loops</li> <li>Optional parameters (<code>(foo = 'bar') =&gt; { ... }</code>)</li> <li>Rest parameters (<code>(...foo) =&gt; { ... }</code>)</li> <li><code>this</code></li> <li>Constructors (<code>new Foo</code>)</li> <li>Classes (<code>class A {}</code>)</li> <li>Await (<code>await promise</code>)</li> </ul> <h3>Built-ins</h3> <ul> <li><code>NaN</code> and <code>Infinity</code></li> <li><code>isNaN()</code> and <code>isFinite()</code></li> <li>Most of <code>Number</code> (<code>MAX_VALUE</code>, <code>MIN_VALUE</code>, <code>MAX_SAFE_INTEGER</code>, <code>MIN_SAFE_INTEGER</code>, <code>POSITIVE_INFINITY</code>, <code>NEGATIVE_INFINITY</code>, <code>EPSILON</code>, <code>NaN</code>, <code>isNaN</code>, <code>isFinite</code>, <code>isInteger</code>, <code>isSafeInteger</code>)</li> <li>Most <code>Math</code> funcs (<code>sqrt</code>, <code>abs</code>, <code>floor</code>, <code>sign</code>, <code>round</code>, <code>trunc</code>, <code>clz32</code>, <code>fround</code>, <code>random</code>, <code>exp</code>, <code>log</code>, <code>log2</code>, <code>log10</code>, <code>pow</code>, <code>expm1</code>, <code>log1p</code>, <code>sqrt</code>, <code>cbrt</code>, <code>hypot</code>, <code>sin</code>, <code>cos</code>, <code>tan</code>, <code>sinh</code>, <code>cosh</code>, <code>tanh</code>, <code>asinh</code>, <code>acosh</code>, <code>atanh</code>, <code>asin</code>, <code>acos</code>, <code>atan</code>, <code>atan2</code>)</li> <li>Basic <code>globalThis</code> support</li> <li>Basic <code>Boolean</code> and <code>Number</code></li> <li>Basic <code>eval</code> for literals</li> <li><code>Math.random()</code> using self-made xorshift128+ PRNG</li> <li>Some of <code>performance</code> (<code>now()</code>, <code>timeOrigin</code>)</li> <li>Most of <code>Array.prototype</code> (<code>at</code>, <code>push</code>, <code>pop</code>, <code>shift</code>, <code>fill</code>, <code>slice</code>, <code>indexOf</code>, <code>lastIndexOf</code>, <code>includes</code>, <code>with</code>, <code>reverse</code>, <code>toReversed</code>, <code>forEach</code>, <code>filter</code>, <code>map</code>, <code>find</code>, <code>findLast</code>, <code>findIndex</code>, <code>findLastIndex</code>, <code>every</code>, <code>some</code>, <code>reduce</code>, <code>reduceRight</code>, <code>join</code>, <code>toString</code>)</li> <li>Most of <code>Array</code> (<code>of</code>, <code>isArray</code>)</li> <li>Most of <code>String.prototype</code> (<code>at</code>, <code>charAt</code>, <code>charCodeAt</code>, <code>toUpperCase</code>, <code>toLowerCase</code>, <code>startsWith</code>, <code>endsWith</code>, <code>indexOf</code>, <code>lastIndexOf</code>, <code>includes</code>, <code>padStart</code>, <code>padEnd</code>, <code>substring</code>, <code>substr</code>, <code>slice</code>, <code>trimStart</code>, <code>trimEnd</code>, <code>trim</code>, <code>toString</code>, <code>big</code>, <code>blink</code>, <code>bold</code>, <code>fixed</code>, <code>italics</code>, <code>small</code>, <code>strike</code>, <code>sub</code>, <code>sup</code>, <code>trimLeft</code>, <code>trimRight</code>, <code>trim</code>)</li> <li>Some of <code>crypto</code> (<code>randomUUID</code>)</li> <li><code>escape</code></li> <li><code>btoa</code></li> <li>Most of <code>Number.prototype</code> (<code>toString</code>, <code>toFixed</code>, <code>toExponential</code>)</li> <li><code>parseInt</code></li> <li>Spec-compliant <code>Date</code></li> <li>WIP typed arrays (<code>Uint8Array</code>, <code>Int32Array</code>, etc)</li> <li>Synchronous <code>Promise</code></li> </ul> <h3>Custom</h3> <ul> <li>Supports i32, i64, and f64 for valtypes</li> <li>Intrinsic functions (see below)</li> <li>Inlining wasm via <code>asm`...</code>` "macro"</li> </ul> <h2>Versioning</h2> <p>Porffor uses a unique versioning system, here's an example: <code>0.18.2+2aa3f0589</code>. Let's break it down:</p> <ol> <li><code>0</code> - major, always <code>0</code> as Porffor is not ready yet</li> <li><code>18</code> - minor, total Test262 pass percentage (floored to nearest int)</li> <li><code>2</code> - micro, build number for that minor (incremented each publish/git push)</li> <li><code>2aa3f0589</code> - commit hash</li> </ol> <h2>Performance</h2> <p><em>For the features it supports most of the time</em>, Porffor is <em>blazingly fast</em> compared to most interpreters and common engines running without JIT. For those with JIT, it is usually slower by default, but can catch up with compiler arguments and typed input, even more so when compiling to native binaries.</p> <h2>Optimizations</h2> <p>Mostly for reducing size. I do not really care about compiler perf/time as long as it is reasonable. We do not use/rely on external opt tools (<code>wasm-opt</code>, etc), instead doing optimization inside the compiler itself creating even smaller code sizes than <code>wasm-opt</code> itself can produce as we have more internal information.</p> <h3>Traditional opts</h3> <ul> <li>Inlining functions (WIP, limited)</li> <li>Inline const math ops</li> <li>Tail calls (behind flag <code>--tail-call</code>)</li> </ul> <h3>Wasm transforms</h3> <ul> <li><code>local.set</code>, <code>local.get</code> -&gt; <code>local.tee</code></li> <li><code>i32.const 0</code>, <code>i32.eq</code> -&gt; <code>i32.eqz</code></li> <li><code>i64.extend_i32_s</code>, <code>i32.wrap_i64</code> -&gt; ``</li> <li><code>f64.convert_i32_u</code>, <code>i32.trunc_sat_f64_s</code> -&gt; ``</li> <li><code>return</code>, <code>end</code> -&gt; <code>end</code></li> <li>Change const, convert to const of converted valtype (eg <code>f64.const</code>, <code>i32.trunc_sat_f64_s -&gt; </code>i32.const`)</li> <li>Remove some redundant sets/gets</li> <li>Remove unneeded single just used vars</li> <li>Remove unneeded blocks (no <code>br</code>s inside)</li> <li>Remove unused imports</li> <li>Use data segments for initing arrays/strings</li> <li>(Likely more not documented yet, todo)</li> </ul> <h3>Wasm module</h3> <ul> <li>Type cache/index (no repeated types)</li> <li>No main func if empty (and other exports)</li> <li>No tags if unused/optimized out</li> </ul> <h2>Test262</h2> <p>Porffor can run Test262 via some hacks/transforms which remove unsupported features whilst still doing the same asserts (eg simpler error messages using literals only). It currently passes &gt;14% (see latest commit desc for latest and details). Use <code>node test262</code> to test, it will also show a difference of overall results between the last commit and current results.</p> <p><img src="https://github.com/CanadaHonk/porffor/assets/19228318/5320da7d-e945-4d16-857b-499f3a6c1180" alt="image"></p> <h2>Codebase</h2> <ul> <li> <p><code>compiler</code>: contains the compiler itself</p> <ul> <li><code>2c.js</code>: porffor's custom wasm-to-c engine</li> <li><code>allocators.js</code>: static and dynamic allocators to power various language features</li> <li><code>assemble.js</code>: assembles wasm ops and metadata into a wasm module/file</li> <li><code>builtins.js</code>: all manually written built-ins of the engine (spec, custom. vars, funcs)</li> <li><code>builtins_object.js</code>: all the various built-in objects (think <code>String</code>, <code>globalThis</code>, etc.)</li> <li><code>builtins_precompiled.js</code>: dynamically generated builtins from the <code>builtins/</code> folder</li> <li><code>codegen.js</code>: code (wasm) generation, ast -&gt; wasm. The bulk of the effort</li> <li><code>cyclone.js</code>: wasm partial constant evaluator (it is fast and dangerous hence "cyclone")</li> <li><code>decompile.js</code>: basic wasm decompiler for debug info</li> <li><code>diagram.js</code>: produces <a href="https://mermaid.js.org">Mermaid</a> graphs</li> <li><code>embedding.js</code>: utils for embedding consts</li> <li><code>encoding.js</code>: utils for encoding things as bytes as wasm expects</li> <li><code>expression.js</code>: mapping most operators to an opcode (advanced are as built-ins eg <code>f64_%</code>)</li> <li><code>havoc.js</code>: wasm rewrite library (it wreaks havoc upon wasm bytecode hence "havoc")</li> <li><code>index.js</code>: doing all the compiler steps, takes code in, wasm out</li> <li><code>opt.js</code>: self-made wasm bytecode optimizer</li> <li><code>parse.js</code>: parser simply wrapping acorn</li> <li><code>pgo.js</code>: a profile guided optimizer</li> <li><code>precompile.js</code>: the tool to generate <code>builtins_precompied.js</code></li> <li><code>prefs.js</code>: a utility to read command line arguments</li> <li><code>prototype.js</code>: some builtin prototype functions</li> <li><code>types.js</code>: definitions for each of the builtin types</li> <li><code>wasmSpec.js</code>: "enums"/info from wasm spec</li> <li><code>wrap.js</code>: wrapper for compiler which instantiates and produces nice exports</li> </ul> </li> <li> <p><code>runner</code>: contains utils for running JS with the compiler</p> <ul> <li><code>index.js</code>: the main file, you probably want to use this</li> <li><code>info.js</code>: runs with extra info printed</li> <li><code>repl.js</code>: basic repl (uses <code>node:repl</code>)</li> </ul> </li> <li> <p><code>rhemyn</code>: contains <a href="https://raw.githubusercontent.com/CanadaHonk/porffor/main/#rhemyn">Rhemyn</a> - our regex engine (used by Porffor)</p> <ul> <li><code>compile.js</code>: compiles regex ast into wasm bytecode</li> <li><code>parse.js</code>: own regex parser</li> </ul> </li> <li> <p><code>test</code>: contains many test files for majority of supported features</p> </li> <li> <p><code>test262</code>: test262 runner and utils</p> </li> </ul> <h2>Usecases</h2> <p>Currently, Porffor is seriously limited in features and functionality, however it has some key benefits:</p> <ul> <li>Safety. As Porffor is written in JS, a memory-safe language*, and compiles JS to Wasm, a fully sandboxed environment*, it is quite safe. (* These rely on the underlying implementations being secure. You could also run Wasm, or even Porffor itself, with an interpreter instead of a JIT for bonus security points too.)</li> <li>Compiling JS to native binaries. This is still very early!</li> <li>Inline Wasm for when you want to beat the compiler in performance, or just want fine grained functionality.</li> <li>Potential for SIMD operations and other lower level concepts.</li> <li>More in future probably?</li> </ul> <h2>Todo</h2> <p>No particular order and no guarentees, just what could happen soon™</p> <ul> <li>Asur <ul> <li>Support memory</li> <li>Support exceptions</li> </ul> </li> <li>Exceptions <ul> <li>Rethrowing inside catch</li> </ul> </li> <li>Optimizations <ul> <li>Rewrite local indexes per func for smallest local header and remove unused idxs</li> <li>Smarter inline selection (snapshots?)</li> <li>Memory alignment</li> </ul> </li> <li>Runtime <ul> <li>WASI target</li> <li>Run precompiled Wasm file if given</li> </ul> </li> <li>Cool proposals <ul> <li><a href="https://github.com/tc39/proposal-optional-chaining-assignment">Optional Chaining Assignment</a></li> <li><a href="https://github.com/tc39/proposal-integer-and-modulus-math">Modulus and Additional Integer Math</a></li> <li><a href="https://github.com/tc39/proposal-array-equality">Array Equality</a></li> <li><a href="https://github.com/tc39/proposal-Declarations-in-Conditionals">Declarations in Conditionals</a></li> <li><a href="https://github.com/tc39/proposal-seeded-random">Seeded Pseudo-Random Numbers</a></li> <li><a href="https://github.com/tc39/proposal-do-expressions"><code>do</code> expressions</a></li> <li><a href="https://github.com/Kingwl/proposal-string-trim-characters">String Trim Characters</a></li> </ul> </li> <li>Posts <ul> <li>Inlining investigation</li> <li>JS -&gt; Native</li> <li>Precompiled TS built-ins</li> <li>Asur</li> <li><code>escape()</code> optimization</li> <li>PGO</li> </ul> </li> <li>Self hosted testing?</li> </ul> <h2>VSCode extension</h2> <p>There is a vscode extension in <code>vscode-ext</code> which tweaks JS syntax highlighting to be nicer with porffor features (eg highlighting wasm inside of inline asm).</p> <h2>Wasm proposals used</h2> <p>Porffor intentionally does not use Wasm proposals which are not commonly implemented yet (eg GC) so it can be used in as many places as possible.</p> <ul> <li>Multi-value <strong>(required)</strong></li> <li>Non-trapping float-to-int conversions <strong>(required)</strong></li> <li>Bulk memory operations (optional, can get away without sometimes)</li> <li>Exception handling (optional, only for errors)</li> <li>Tail calls (opt-in, off by default)</li> </ul> <h2>FAQ</h2> <h3>1. Why the name?</h3> <p><code>purple</code> in Welsh is <code>porffor</code>. Why purple?</p> <ul> <li>No other JS engine is purple colored</li> <li>Purple is pretty cool</li> <li>Purple apparently represents "ambition", which is one word to describe this project</li> </ul> <h3>2. Why at all?</h3> <p>Yes!</p> <h2>3. Isn't this the same as AssemblyScript/other Wasm langs?</h2> <p>No. they are not alike at all internally and have very different goals/ideals:</p> <ul> <li>Porffor is made as a generic JS engine, not for Wasm stuff specifically</li> <li>Porffor primarily consumes JS</li> <li>Porffor is written in pure JS and compiles itself, not using Binaryen/etc</li> <li>(Also I didn't know it existed when I started this, lol)</li> </ul> \ No newline at end of file diff --git a/jest-snapshot/daily/index.xml b/jest-snapshot/daily/index.xml index 78021f6949f..c5e2f2510ba 100644 --- a/jest-snapshot/daily/index.xml +++ b/jest-snapshot/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jest Snapshot Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:30Z + 2024-08-03T01:30:59Z Daily Trending of Jest Snapshot in GitHub \ No newline at end of file diff --git a/jflex/daily/index.xml b/jflex/daily/index.xml index 67a12e3161e..5ade59af5f1 100644 --- a/jflex/daily/index.xml +++ b/jflex/daily/index.xml @@ -1,7 +1,7 @@ GitHub JFlex Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:30Z + 2024-08-03T01:30:59Z Daily Trending of JFlex in GitHub \ No newline at end of file diff --git a/jinja/daily/index.xml b/jinja/daily/index.xml index 0108ef79d9d..3b3a240caba 100644 --- a/jinja/daily/index.xml +++ b/jinja/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jinja Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:04Z + 2024-08-03T01:30:26Z Daily Trending of Jinja in GitHub \ No newline at end of file diff --git a/jison-lex/daily/index.xml b/jison-lex/daily/index.xml index 3bf66737e18..b4f187681f3 100644 --- a/jison-lex/daily/index.xml +++ b/jison-lex/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jison Lex Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:32Z + 2024-08-03T01:31:01Z Daily Trending of Jison Lex in GitHub \ No newline at end of file diff --git a/jison/daily/index.xml b/jison/daily/index.xml index cbe17b02cf0..5fb97fcb784 100644 --- a/jison/daily/index.xml +++ b/jison/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jison Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:31Z + 2024-08-03T01:31:00Z Daily Trending of Jison in GitHub \ No newline at end of file diff --git a/jolie/daily/index.xml b/jolie/daily/index.xml index 8877bc4ca36..e6b36095d33 100644 --- a/jolie/daily/index.xml +++ b/jolie/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jolie Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:32Z + 2024-08-03T01:31:01Z Daily Trending of Jolie in GitHub \ No newline at end of file diff --git a/jq/daily/index.xml b/jq/daily/index.xml index 3bbd2fa1089..1bcf0dedf00 100644 --- a/jq/daily/index.xml +++ b/jq/daily/index.xml @@ -1,7 +1,7 @@ GitHub jq Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:32Z + 2024-08-03T01:31:01Z Daily Trending of jq in GitHub \ No newline at end of file diff --git a/json-with-comments/daily/index.xml b/json-with-comments/daily/index.xml index c449319281a..77b58f0db9c 100644 --- a/json-with-comments/daily/index.xml +++ b/json-with-comments/daily/index.xml @@ -1,7 +1,7 @@ GitHub JSON with Comments Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:33Z + 2024-08-03T01:31:02Z Daily Trending of JSON with Comments in GitHub \ No newline at end of file diff --git a/json/daily/index.xml b/json/daily/index.xml index 61a4595a701..6bc8de409e1 100644 --- a/json/daily/index.xml +++ b/json/daily/index.xml @@ -1,7 +1,7 @@ GitHub JSON Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:33Z + 2024-08-03T01:31:02Z Daily Trending of JSON in GitHub \ No newline at end of file diff --git a/json5/daily/index.xml b/json5/daily/index.xml index 32c551d9d79..520ffebf7be 100644 --- a/json5/daily/index.xml +++ b/json5/daily/index.xml @@ -1,7 +1,7 @@ GitHub JSON5 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:34Z + 2024-08-03T01:31:02Z Daily Trending of JSON5 in GitHub \ No newline at end of file diff --git a/jsoniq/daily/index.xml b/jsoniq/daily/index.xml index 4f6ed8017ea..2cbbb7d7946 100644 --- a/jsoniq/daily/index.xml +++ b/jsoniq/daily/index.xml @@ -1,7 +1,7 @@ GitHub JSONiq Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:34Z + 2024-08-03T01:31:03Z Daily Trending of JSONiq in GitHub \ No newline at end of file diff --git a/jsonld/daily/index.xml b/jsonld/daily/index.xml index 708611ee796..14a711a651d 100644 --- a/jsonld/daily/index.xml +++ b/jsonld/daily/index.xml @@ -1,7 +1,7 @@ GitHub JSONLD Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:33Z + 2024-08-03T01:31:03Z Daily Trending of JSONLD in GitHub \ No newline at end of file diff --git a/jsonnet/daily/index.xml b/jsonnet/daily/index.xml index 919a88de29c..f9058613878 100644 --- a/jsonnet/daily/index.xml +++ b/jsonnet/daily/index.xml @@ -1,7 +1,7 @@ GitHub Jsonnet Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:35Z + 2024-08-03T01:31:04Z Daily Trending of Jsonnet in GitHub \ No newline at end of file diff --git a/julia/daily/index.xml b/julia/daily/index.xml index 067baff9223..82bd1ad5b2c 100644 --- a/julia/daily/index.xml +++ b/julia/daily/index.xml @@ -1,21 +1,7 @@ GitHub Julia Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:36Z + 2024-08-03T01:31:04Z Daily Trending of Julia in GitHub - - adambom/dictionary - 2024-08-02T01:30:36Z - tag:github.com,2024-08-02:/adambom/dictionary - - <p>A JSON representation of Webster's Unabridged Dictionary</p><hr> - - - SciML/DiffEqParamEstim.jl - 2024-08-02T01:30:36Z - tag:github.com,2024-08-02:/SciML/DiffEqParamEstim.jl - - <p>Easy scientific machine learning (SciML) parameter estimation with pre-built loss functions</p><hr> - \ No newline at end of file diff --git a/rich-text-format/daily/index.xml b/jupyter-notebook/daily/index.xml similarity index 57% rename from rich-text-format/daily/index.xml rename to jupyter-notebook/daily/index.xml index fe9cb00d655..622d350635f 100644 --- a/rich-text-format/daily/index.xml +++ b/jupyter-notebook/daily/index.xml @@ -1,7 +1,7 @@ - GitHub Rich Text Format Daily Trending + GitHub Jupyter Notebook Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:15Z - Daily Trending of Rich Text Format in GitHub + 2024-08-03T01:31:06Z + Daily Trending of Jupyter Notebook in GitHub \ No newline at end of file diff --git a/kaitai-struct/daily/index.xml b/kaitai-struct/daily/index.xml index d10b009f785..3525d9484c7 100644 --- a/kaitai-struct/daily/index.xml +++ b/kaitai-struct/daily/index.xml @@ -1,7 +1,7 @@ GitHub Kaitai Struct Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:46Z + 2024-08-03T01:31:09Z Daily Trending of Kaitai Struct in GitHub \ No newline at end of file diff --git a/kakounescript/daily/index.xml b/kakounescript/daily/index.xml index 1c12e5c29ec..6b61ad2a4be 100644 --- a/kakounescript/daily/index.xml +++ b/kakounescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub KakouneScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:46Z + 2024-08-03T01:31:10Z Daily Trending of KakouneScript in GitHub \ No newline at end of file diff --git a/kicad-layout/daily/index.xml b/kicad-layout/daily/index.xml index 6f915a18d03..9a4dcdb337e 100644 --- a/kicad-layout/daily/index.xml +++ b/kicad-layout/daily/index.xml @@ -1,7 +1,7 @@ GitHub KiCad Layout Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:46Z + 2024-08-03T01:31:10Z Daily Trending of KiCad Layout in GitHub \ No newline at end of file diff --git a/kicad-legacy-layout/daily/index.xml b/kicad-legacy-layout/daily/index.xml index 7d64bae41e8..8670d3fc3d0 100644 --- a/kicad-legacy-layout/daily/index.xml +++ b/kicad-legacy-layout/daily/index.xml @@ -1,7 +1,7 @@ GitHub KiCad Legacy Layout Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:48Z + 2024-08-03T01:31:12Z Daily Trending of KiCad Legacy Layout in GitHub \ No newline at end of file diff --git a/kicad-schematic/daily/index.xml b/kicad-schematic/daily/index.xml index 1230d722989..dcc7e5a225d 100644 --- a/kicad-schematic/daily/index.xml +++ b/kicad-schematic/daily/index.xml @@ -1,7 +1,7 @@ GitHub KiCad Schematic Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:47Z + 2024-08-03T01:31:11Z Daily Trending of KiCad Schematic in GitHub \ No newline at end of file diff --git a/kit/daily/index.xml b/kit/daily/index.xml index 897d41be17b..1aa0a19c1ad 100644 --- a/kit/daily/index.xml +++ b/kit/daily/index.xml @@ -1,7 +1,7 @@ GitHub Kit Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:48Z + 2024-08-03T01:31:11Z Daily Trending of Kit in GitHub \ No newline at end of file diff --git a/kotlin/daily/index.xml b/kotlin/daily/index.xml index 6b8a69d311f..dd708c8ea8e 100644 --- a/kotlin/daily/index.xml +++ b/kotlin/daily/index.xml @@ -1,7 +1,7 @@ GitHub Kotlin Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:53Z + 2024-08-03T01:31:14Z Daily Trending of Kotlin in GitHub \ No newline at end of file diff --git a/krl/daily/index.xml b/krl/daily/index.xml index 1840964d135..ccc931bd7df 100644 --- a/krl/daily/index.xml +++ b/krl/daily/index.xml @@ -1,7 +1,7 @@ GitHub KRL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:49Z + 2024-08-03T01:31:13Z Daily Trending of KRL in GitHub \ No newline at end of file diff --git a/kusto/daily/index.xml b/kusto/daily/index.xml index f8ceeb74d78..702d2ec7815 100644 --- a/kusto/daily/index.xml +++ b/kusto/daily/index.xml @@ -1,7 +1,7 @@ GitHub Kusto Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:49Z + 2024-08-03T01:31:13Z Daily Trending of Kusto in GitHub \ No newline at end of file diff --git a/kvlang/daily/index.xml b/kvlang/daily/index.xml index 364d18db71a..49ab0e79cec 100644 --- a/kvlang/daily/index.xml +++ b/kvlang/daily/index.xml @@ -1,7 +1,7 @@ GitHub kvlang Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:49Z + 2024-08-03T01:31:12Z Daily Trending of kvlang in GitHub \ No newline at end of file diff --git a/labview/daily/index.xml b/labview/daily/index.xml index 48bf56d52a6..76b0f9c2492 100644 --- a/labview/daily/index.xml +++ b/labview/daily/index.xml @@ -1,7 +1,7 @@ GitHub LabVIEW Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:55Z + 2024-08-03T01:31:17Z Daily Trending of LabVIEW in GitHub \ No newline at end of file diff --git a/lark/daily/index.xml b/lark/daily/index.xml index 3d5e237fade..f4555da5aa7 100644 --- a/lark/daily/index.xml +++ b/lark/daily/index.xml @@ -1,7 +1,7 @@ GitHub Lark Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:56Z + 2024-08-03T01:31:17Z Daily Trending of Lark in GitHub \ No newline at end of file diff --git a/lasso/daily/index.xml b/lasso/daily/index.xml index 9f21dae11a8..4d8587a35b2 100644 --- a/lasso/daily/index.xml +++ b/lasso/daily/index.xml @@ -1,7 +1,7 @@ GitHub Lasso Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:55Z + 2024-08-03T01:31:17Z Daily Trending of Lasso in GitHub \ No newline at end of file diff --git a/latte/daily/index.xml b/latte/daily/index.xml index aa6add444de..1dc5bdc618a 100644 --- a/latte/daily/index.xml +++ b/latte/daily/index.xml @@ -1,7 +1,7 @@ GitHub Latte Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:56Z + 2024-08-03T01:31:18Z Daily Trending of Latte in GitHub \ No newline at end of file diff --git a/lean/daily/index.xml b/lean/daily/index.xml index b3d7d028d86..35ab16ae279 100644 --- a/lean/daily/index.xml +++ b/lean/daily/index.xml @@ -1,7 +1,7 @@ GitHub Lean Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:58Z + 2024-08-03T01:31:19Z Daily Trending of Lean in GitHub \ No newline at end of file diff --git a/less/daily/index.xml b/less/daily/index.xml index ad0192f20d8..2e208198800 100644 --- a/less/daily/index.xml +++ b/less/daily/index.xml @@ -1,7 +1,7 @@ GitHub Less Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:57Z + 2024-08-03T01:31:19Z Daily Trending of Less in GitHub \ No newline at end of file diff --git a/lex/daily/index.xml b/lex/daily/index.xml index e85a00f6add..98d74c6b99f 100644 --- a/lex/daily/index.xml +++ b/lex/daily/index.xml @@ -1,7 +1,7 @@ GitHub Lex Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:56Z + 2024-08-03T01:31:18Z Daily Trending of Lex in GitHub \ No newline at end of file diff --git a/lfe/daily/index.xml b/lfe/daily/index.xml index cf4004026da..465ababb1a0 100644 --- a/lfe/daily/index.xml +++ b/lfe/daily/index.xml @@ -1,7 +1,7 @@ GitHub LFE Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:59Z + 2024-08-03T01:31:21Z Daily Trending of LFE in GitHub \ No newline at end of file diff --git a/ligolang/daily/index.xml b/ligolang/daily/index.xml index e49379b1eb8..14b232d4bb2 100644 --- a/ligolang/daily/index.xml +++ b/ligolang/daily/index.xml @@ -1,7 +1,7 @@ GitHub LigoLANG Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:59Z + 2024-08-03T01:31:20Z Daily Trending of LigoLANG in GitHub \ No newline at end of file diff --git a/lilypond/daily/index.xml b/lilypond/daily/index.xml index 4772bec3ed6..33a295d1b35 100644 --- a/lilypond/daily/index.xml +++ b/lilypond/daily/index.xml @@ -1,7 +1,7 @@ GitHub LilyPond Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:59Z + 2024-08-03T01:31:20Z Daily Trending of LilyPond in GitHub \ No newline at end of file diff --git a/limbo/daily/index.xml b/limbo/daily/index.xml index f3a54ac5a09..c13fefc3f19 100644 --- a/limbo/daily/index.xml +++ b/limbo/daily/index.xml @@ -1,7 +1,7 @@ GitHub Limbo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:30:58Z + 2024-08-03T01:31:20Z Daily Trending of Limbo in GitHub \ No newline at end of file diff --git a/linker-script/daily/index.xml b/linker-script/daily/index.xml index 11e65b1b0cc..7b6fa692fef 100644 --- a/linker-script/daily/index.xml +++ b/linker-script/daily/index.xml @@ -1,7 +1,7 @@ GitHub Linker Script Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:00Z + 2024-08-03T01:31:22Z Daily Trending of Linker Script in GitHub \ No newline at end of file diff --git a/linux-kernel-module/daily/index.xml b/linux-kernel-module/daily/index.xml index 69efc93d936..58cf65415d9 100644 --- a/linux-kernel-module/daily/index.xml +++ b/linux-kernel-module/daily/index.xml @@ -1,7 +1,7 @@ GitHub Linux Kernel Module Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:00Z + 2024-08-03T01:31:22Z Daily Trending of Linux Kernel Module in GitHub \ No newline at end of file diff --git a/liquid/daily/index.xml b/liquid/daily/index.xml index aa25315f057..bdb0cdebb05 100644 --- a/liquid/daily/index.xml +++ b/liquid/daily/index.xml @@ -1,7 +1,7 @@ GitHub Liquid Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:01Z + 2024-08-03T01:31:22Z Daily Trending of Liquid in GitHub \ No newline at end of file diff --git a/literate-agda/daily/index.xml b/literate-agda/daily/index.xml index efac2696d3d..818109fbfc7 100644 --- a/literate-agda/daily/index.xml +++ b/literate-agda/daily/index.xml @@ -1,7 +1,7 @@ GitHub Literate Agda Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:00Z + 2024-08-03T01:31:21Z Daily Trending of Literate Agda in GitHub \ No newline at end of file diff --git a/literate-coffeescript/daily/index.xml b/literate-coffeescript/daily/index.xml index 79b14260a91..d575708d986 100644 --- a/literate-coffeescript/daily/index.xml +++ b/literate-coffeescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub Literate CoffeeScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:01Z + 2024-08-03T01:31:23Z Daily Trending of Literate CoffeeScript in GitHub \ No newline at end of file diff --git a/literate-haskell/daily/index.xml b/literate-haskell/daily/index.xml index 6d4ab8d57ed..35a0a4c79d3 100644 --- a/literate-haskell/daily/index.xml +++ b/literate-haskell/daily/index.xml @@ -1,7 +1,7 @@ GitHub Literate Haskell Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:01Z + 2024-08-03T01:31:23Z Daily Trending of Literate Haskell in GitHub \ No newline at end of file diff --git a/livescript/daily/index.xml b/livescript/daily/index.xml index 7ae6d056053..ebc41ebd895 100644 --- a/livescript/daily/index.xml +++ b/livescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub LiveScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:31:02Z + 2024-08-03T01:31:23Z Daily Trending of LiveScript in GitHub \ No newline at end of file diff --git a/llvm/daily/index.xml b/llvm/daily/index.xml index e82d86ce308..eb244cd3d78 100644 --- a/llvm/daily/index.xml +++ b/llvm/daily/index.xml @@ -1,7 +1,7 @@ GitHub LLVM Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:25Z + 2024-08-03T01:31:25Z Daily Trending of LLVM in GitHub \ No newline at end of file diff --git a/logos/daily/index.xml b/logos/daily/index.xml index 38699a8abd4..ef8ed5b4b72 100644 --- a/logos/daily/index.xml +++ b/logos/daily/index.xml @@ -1,7 +1,7 @@ GitHub Logos Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:26Z + 2024-08-03T01:31:26Z Daily Trending of Logos in GitHub \ No newline at end of file diff --git a/logtalk/daily/index.xml b/logtalk/daily/index.xml index fbe4a48a26d..fba877f0d22 100644 --- a/logtalk/daily/index.xml +++ b/logtalk/daily/index.xml @@ -1,7 +1,7 @@ GitHub Logtalk Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:27Z + 2024-08-03T01:31:25Z Daily Trending of Logtalk in GitHub \ No newline at end of file diff --git a/lolcode/daily/index.xml b/lolcode/daily/index.xml index 6acb99510b6..2c4eb63d216 100644 --- a/lolcode/daily/index.xml +++ b/lolcode/daily/index.xml @@ -1,7 +1,7 @@ GitHub LOLCODE Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:26Z + 2024-08-03T01:31:25Z Daily Trending of LOLCODE in GitHub \ No newline at end of file diff --git a/lookml/daily/index.xml b/lookml/daily/index.xml index 2c9c5a2c222..f436a2bca51 100644 --- a/lookml/daily/index.xml +++ b/lookml/daily/index.xml @@ -1,7 +1,7 @@ GitHub LookML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:27Z + 2024-08-03T01:31:26Z Daily Trending of LookML in GitHub \ No newline at end of file diff --git a/loomscript/daily/index.xml b/loomscript/daily/index.xml index 6c94d757dad..97d468861e2 100644 --- a/loomscript/daily/index.xml +++ b/loomscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub LoomScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:28Z + 2024-08-03T01:31:27Z Daily Trending of LoomScript in GitHub \ No newline at end of file diff --git a/lsl/daily/index.xml b/lsl/daily/index.xml index 00641109ce2..4928f6dc33e 100644 --- a/lsl/daily/index.xml +++ b/lsl/daily/index.xml @@ -1,7 +1,7 @@ GitHub LSL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:27Z + 2024-08-03T01:31:27Z Daily Trending of LSL in GitHub \ No newline at end of file diff --git a/ltspice-symbol/daily/index.xml b/ltspice-symbol/daily/index.xml index eb2239b62f4..97d029b7713 100644 --- a/ltspice-symbol/daily/index.xml +++ b/ltspice-symbol/daily/index.xml @@ -1,7 +1,7 @@ GitHub LTspice Symbol Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:28Z + 2024-08-03T01:31:27Z Daily Trending of LTspice Symbol in GitHub \ No newline at end of file diff --git a/lua/daily/index.xml b/lua/daily/index.xml index c616cbb8386..63bc305c1c7 100644 --- a/lua/daily/index.xml +++ b/lua/daily/index.xml @@ -1,14 +1,7 @@ GitHub Lua Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:29Z + 2024-08-03T01:31:28Z Daily Trending of Lua in GitHub - - tiagovla/scope.nvim - 2024-08-02T01:33:29Z - tag:github.com,2024-08-02:/tiagovla/scope.nvim - - <p>Revolutionize Your Neovim Tab Workflow: Introducing Enhanced Tab Scoping!</p><hr><h1>Scope.nvim</h1> <h2><span>🔖</span> About</h2> <p><strong>Revolutionize Your Neovim Tab Workflow: Introducing Enhanced Tab Scoping!</strong></p> <p>Elevate your Neovim tab game with our cutting-edge plugin. Bye-bye cluttered tabs, hello streamlined efficiency!</p> <p>This plugin revolutionizes tab management by introducing scoped buffers. Seamlessly navigate through buffers within each tab using commands like <code>:bnext</code> and <code>:bprev</code>. No more buffer chaos!</p> <p>Experience the power of scoped buffers, boost productivity, and reclaim your editing flow.</p> <p><img src="https://user-images.githubusercontent.com/30515389/156297097-08208d0f-9715-4fc4-8aa0-f5980c21173d.gif" alt="scope"></p> <h2>📦 Installation</h2> <p><strong>Upgrade your Neovim tabs now with your favorite package manager!</strong></p> <p><a href="https://github.com/folke/lazy.nvim">Lazy</a></p> <pre><code class="language-lua">{ "tiagovla/scope.nvim" } </code></pre> <p><a href="https://github.com/wbthomason/packer.nvim">packer</a></p> <pre><code class="language-lua">use("tiagovla/scope.nvim") </code></pre> <p><a href="https://github.com/junegunn/vim-plug">vim-plug</a></p> <pre><code class="language-vim">Plug "tiagovla/scope.nvim" </code></pre> <h2>⚙️ Configuration</h2> <pre><code class="language-lua">-- init.lua require("scope").setup({}) </code></pre> <h3>Hooks</h3> <p>You can customize the behavior of Scope.nvim using the provided hooks in your configuration. Here's an example of how to set up the <code>pre_tab_enter</code> hook:</p> <pre><code class="language-lua">-- init.lua require("scope").setup({ hooks = { pre_tab_enter = function() -- Your custom logic to run before entering a tab end, }, }) </code></pre> <p>The pre_tab_enter hook allows you to define custom actions to run before entering a tab. This function is just one of several hooks you can use to further customize your experience with Scope.nvim.</p> <p>Here's an overview of the available hooks:</p> <ul> <li><code>pre_tab_enter</code>: Run custom logic before entering a tab.</li> <li><code>post_tab_enter</code>: Run custom logic after entering a tab.</li> <li><code>pre_tab_leave</code>: Run custom logic before leaving a tab.</li> <li><code>post_tab_leave</code>: Run custom logic after leaving a tab.</li> <li><code>pre_tab_close</code>: Run custom logic before closing a tab.</li> <li><code>post_tab_close</code>: Run custom logic after closing a tab.</li> </ul> <h2>⚙️ Commands</h2> <table> <thead> <tr> <th> <div style="width:200px"> Command </div></th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>:ScopeMoveBuf &lt;tab_nr&gt;</code></td> <td>Move current buffer to the specified tab. <br> If tab_nr is omitted/invalid, <code>scope.nvim</code> will prompt for a tab number. <br> If current buf is the only buf in current tab, it will be "copied" to target to retain the layout, otherwise, it will be "moved"</td> </tr> </tbody> </table> <h2>🚀 Extensions</h2> <h3>🔭 Telescope</h3> <p>Extension to show all buffers from all tabs.</p> <h4><span>🔌</span> Setup</h4> <pre><code class="language-lua">-- init.lua require("telescope").load_extension("scope") </code></pre> <h4>📢 Commands</h4> <pre><code>:Telescope scope buffers </code></pre> <h3><span>💾</span> Session Support (Experimental)</h3> <p>Extension to allow the usage of the plugin with session managers.</p> <h4><span>🔌</span> Setup</h4> <pre><code class="language-lua">-- init.lua vim.opt.sessionoptions = { -- required "buffers", "tabpages", "globals", } require("scope").setup({}) </code></pre> <h4>⚙ Session Manager Configurations</h4> <details> <summary>📌 Nvim-Possession</summary> <p></p> <pre><code class="language-lua">{ "gennaro-tedesco/nvim-possession", lazy = false, dependencies = { { "tiagovla/scope.nvim", lazy = false, config = true, }, }, config = function() require("nvim-possession").setup({ autoload = true, autoswitch = { enable = true, }, save_hook = function() vim.cmd([[ScopeSaveState]]) -- Scope.nvim saving end, post_hook = function() vim.cmd([[ScopeLoadState]]) -- Scope.nvim loading end, }) end, }, </code></pre> </details> <h4>📢 Commands</h4> <table> <thead> <tr> <th>Commands</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>:ScopeLoadState</code></td> <td>load the plugin's state as a global variable from a session file</td> </tr> <tr> <td><code>:ScopeSaveState</code></td> <td>save the plugin's state as a global variable in a session file</td> </tr> </tbody> </table> <p>Additionally, the API endpoints <code>require("scope.session").serialize_state()</code> and <code>require("scope.session").deserialize_state(state)</code> are available in case the user prefers to handle the state manually.</p> <h3><span>💾</span> <strong>Resession.nvim</strong> Session Support (without <code>:mksession</code> underhood)</h3> <p>Extension allows the usage of any supported plugin which wants to store/restore its data.</p> <h4>⚙ Session Manager Configurations</h4> <details> <summary>Resession.nvim</summary> <p></p> <pre><code class="language-lua">{ "stevearc/resession.nvim", lazy = false, dependencies = { { "tiagovla/scope.nvim", lazy = false, config = true, }, }, opts = { -- override default filter buf_filter = function(bufnr) local buftype = vim.bo[bufnr].buftype if buftype == 'help' then return true end if buftype ~= "" and buftype ~= "acwrite" then return false end if vim.api.nvim_buf_get_name(bufnr) == "" then return false end -- this is required, since the default filter skips nobuflisted buffers return true end, extensions = { scope = {} }, -- add scope.nvim extension } }, </code></pre> </details> <h2><span>🔥</span> Contributing</h2> <p>Pull requests from contributors are warmly welcome. To ensure the highest quality, please remember to carefully review the formatting using <code>stylua</code>.</p> - \ No newline at end of file diff --git a/m/daily/index.xml b/m/daily/index.xml index 73530f6bd46..4127d4dde26 100644 --- a/m/daily/index.xml +++ b/m/daily/index.xml @@ -1,7 +1,7 @@ GitHub M Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:33Z + 2024-08-03T01:31:32Z Daily Trending of M in GitHub \ No newline at end of file diff --git a/m4/daily/index.xml b/m4/daily/index.xml index 5344eb4748f..6b6600bf502 100644 --- a/m4/daily/index.xml +++ b/m4/daily/index.xml @@ -1,7 +1,7 @@ GitHub M4 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:32Z + 2024-08-03T01:31:32Z Daily Trending of M4 in GitHub \ No newline at end of file diff --git a/m4sugar/daily/index.xml b/m4sugar/daily/index.xml index 675c1a37380..0b652aaafa5 100644 --- a/m4sugar/daily/index.xml +++ b/m4sugar/daily/index.xml @@ -1,7 +1,7 @@ GitHub M4Sugar Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:32Z + 2024-08-03T01:31:31Z Daily Trending of M4Sugar in GitHub \ No newline at end of file diff --git a/macaulay2/daily/index.xml b/macaulay2/daily/index.xml index 4f721af4a97..b82f720f4a1 100644 --- a/macaulay2/daily/index.xml +++ b/macaulay2/daily/index.xml @@ -1,7 +1,7 @@ GitHub Macaulay2 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:34Z + 2024-08-03T01:31:33Z Daily Trending of Macaulay2 in GitHub \ No newline at end of file diff --git a/makefile/daily/index.xml b/makefile/daily/index.xml index 77ce4d8fe4b..64647bbdfe2 100644 --- a/makefile/daily/index.xml +++ b/makefile/daily/index.xml @@ -1,7 +1,7 @@ GitHub Makefile Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:43Z + 2024-08-03T01:31:34Z Daily Trending of Makefile in GitHub \ No newline at end of file diff --git a/mako/daily/index.xml b/mako/daily/index.xml index 35efa360580..8a19f3b9390 100644 --- a/mako/daily/index.xml +++ b/mako/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mako Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:33Z + 2024-08-03T01:31:33Z Daily Trending of Mako in GitHub \ No newline at end of file diff --git a/markdown/daily/index.xml b/markdown/daily/index.xml index 6e9c754946b..dda05df58a0 100644 --- a/markdown/daily/index.xml +++ b/markdown/daily/index.xml @@ -1,7 +1,7 @@ GitHub Markdown Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:34Z + 2024-08-03T01:34:05Z Daily Trending of Markdown in GitHub \ No newline at end of file diff --git a/marko/daily/index.xml b/marko/daily/index.xml index ef8cb278c7e..b56d1d1e69d 100644 --- a/marko/daily/index.xml +++ b/marko/daily/index.xml @@ -1,7 +1,7 @@ GitHub Marko Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:44Z + 2024-08-03T01:34:06Z Daily Trending of Marko in GitHub \ No newline at end of file diff --git a/mask/daily/index.xml b/mask/daily/index.xml index 30ab457b137..c88ba197f4a 100644 --- a/mask/daily/index.xml +++ b/mask/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mask Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:43Z + 2024-08-03T01:34:05Z Daily Trending of Mask in GitHub \ No newline at end of file diff --git a/mathematica/daily/index.xml b/mathematica/daily/index.xml index e928c6ba6e1..43c15ec30a8 100644 --- a/mathematica/daily/index.xml +++ b/mathematica/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mathematica Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:44Z + 2024-08-03T01:34:06Z Daily Trending of Mathematica in GitHub \ No newline at end of file diff --git a/matlab/daily/index.xml b/matlab/daily/index.xml index bd81a71cb6b..86317c352f6 100644 --- a/matlab/daily/index.xml +++ b/matlab/daily/index.xml @@ -1,7 +1,7 @@ GitHub MATLAB Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:44Z + 2024-08-03T01:34:06Z Daily Trending of MATLAB in GitHub \ No newline at end of file diff --git a/maven-pom/daily/index.xml b/maven-pom/daily/index.xml index d60109efbe6..3631ec38ec2 100644 --- a/maven-pom/daily/index.xml +++ b/maven-pom/daily/index.xml @@ -1,7 +1,7 @@ GitHub Maven POM Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:46Z + 2024-08-03T01:34:07Z Daily Trending of Maven POM in GitHub \ No newline at end of file diff --git a/max/daily/index.xml b/max/daily/index.xml index 8336fcb7e8f..01302e45c44 100644 --- a/max/daily/index.xml +++ b/max/daily/index.xml @@ -1,7 +1,7 @@ GitHub Max Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:45Z + 2024-08-03T01:34:07Z Daily Trending of Max in GitHub \ No newline at end of file diff --git a/maxscript/daily/index.xml b/maxscript/daily/index.xml index cc017b920a0..b5207824888 100644 --- a/maxscript/daily/index.xml +++ b/maxscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub MAXScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:45Z + 2024-08-03T01:34:08Z Daily Trending of MAXScript in GitHub \ No newline at end of file diff --git a/mcfunction/daily/index.xml b/mcfunction/daily/index.xml index 1c87586d2b9..0ca43dd0018 100644 --- a/mcfunction/daily/index.xml +++ b/mcfunction/daily/index.xml @@ -1,7 +1,7 @@ GitHub mcfunction Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:46Z + 2024-08-03T01:34:08Z Daily Trending of mcfunction in GitHub \ No newline at end of file diff --git a/mercury/daily/index.xml b/mercury/daily/index.xml index baebde083d4..523157e0b22 100644 --- a/mercury/daily/index.xml +++ b/mercury/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mercury Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:47Z + 2024-08-03T01:34:09Z Daily Trending of Mercury in GitHub \ No newline at end of file diff --git a/meson/daily/index.xml b/meson/daily/index.xml index 69e4a32ef09..74ac5d64b6f 100644 --- a/meson/daily/index.xml +++ b/meson/daily/index.xml @@ -1,7 +1,7 @@ GitHub Meson Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:50Z + 2024-08-03T01:34:13Z Daily Trending of Meson in GitHub \ No newline at end of file diff --git a/metal/daily/index.xml b/metal/daily/index.xml index 5d3a377a940..2bd8aaef02b 100644 --- a/metal/daily/index.xml +++ b/metal/daily/index.xml @@ -1,7 +1,7 @@ GitHub Metal Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:49Z + 2024-08-03T01:34:12Z Daily Trending of Metal in GitHub \ No newline at end of file diff --git a/microsoft-developer-studio-project/daily/index.xml b/microsoft-developer-studio-project/daily/index.xml index 3a0b1e53081..2e21bb12ec7 100644 --- a/microsoft-developer-studio-project/daily/index.xml +++ b/microsoft-developer-studio-project/daily/index.xml @@ -1,7 +1,7 @@ GitHub Microsoft Developer Studio Project Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:50Z + 2024-08-03T01:34:12Z Daily Trending of Microsoft Developer Studio Project in GitHub \ No newline at end of file diff --git a/microsoft-visual-studio-solution/daily/index.xml b/microsoft-visual-studio-solution/daily/index.xml index e1066c52fde..fd8f334c97b 100644 --- a/microsoft-visual-studio-solution/daily/index.xml +++ b/microsoft-visual-studio-solution/daily/index.xml @@ -1,7 +1,7 @@ GitHub Microsoft Visual Studio Solution Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:49Z + 2024-08-03T01:34:12Z Daily Trending of Microsoft Visual Studio Solution in GitHub \ No newline at end of file diff --git a/minid/daily/index.xml b/minid/daily/index.xml index 4245175e8f6..6335f3e9457 100644 --- a/minid/daily/index.xml +++ b/minid/daily/index.xml @@ -1,7 +1,7 @@ GitHub MiniD Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:50Z + 2024-08-03T01:34:14Z Daily Trending of MiniD in GitHub \ No newline at end of file diff --git a/mint/daily/index.xml b/mint/daily/index.xml index 0f868b67b1b..8cc7b450ddf 100644 --- a/mint/daily/index.xml +++ b/mint/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mint Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:51Z + 2024-08-03T01:34:13Z Daily Trending of Mint in GitHub \ No newline at end of file diff --git a/mirah/daily/index.xml b/mirah/daily/index.xml index aca40e9186b..0788740c7f5 100644 --- a/mirah/daily/index.xml +++ b/mirah/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mirah Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:51Z + 2024-08-03T01:34:13Z Daily Trending of Mirah in GitHub \ No newline at end of file diff --git a/mirc-script/daily/index.xml b/mirc-script/daily/index.xml index 6676711e12b..1e78323a3af 100644 --- a/mirc-script/daily/index.xml +++ b/mirc-script/daily/index.xml @@ -1,7 +1,7 @@ GitHub mIRC Script Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:52Z + 2024-08-03T01:34:15Z Daily Trending of mIRC Script in GitHub \ No newline at end of file diff --git a/mlir/daily/index.xml b/mlir/daily/index.xml index 240c892e836..986e72c0ac0 100644 --- a/mlir/daily/index.xml +++ b/mlir/daily/index.xml @@ -1,7 +1,7 @@ GitHub MLIR Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:53Z + 2024-08-03T01:34:15Z Daily Trending of MLIR in GitHub \ No newline at end of file diff --git a/modelica/daily/index.xml b/modelica/daily/index.xml index 603eef69a7b..a5225351c24 100644 --- a/modelica/daily/index.xml +++ b/modelica/daily/index.xml @@ -1,7 +1,7 @@ GitHub Modelica Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:52Z + 2024-08-03T01:34:15Z Daily Trending of Modelica in GitHub \ No newline at end of file diff --git a/modula-2/daily/index.xml b/modula-2/daily/index.xml index 27a92474efb..c7372433598 100644 --- a/modula-2/daily/index.xml +++ b/modula-2/daily/index.xml @@ -1,7 +1,7 @@ GitHub Modula-2 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:52Z + 2024-08-03T01:34:15Z Daily Trending of Modula-2 in GitHub \ No newline at end of file diff --git a/modula-3/daily/index.xml b/modula-3/daily/index.xml index e8f3b185669..65e56fa9e64 100644 --- a/modula-3/daily/index.xml +++ b/modula-3/daily/index.xml @@ -1,7 +1,7 @@ GitHub Modula-3 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:54Z + 2024-08-03T01:34:17Z Daily Trending of Modula-3 in GitHub \ No newline at end of file diff --git a/module-management-system/daily/index.xml b/module-management-system/daily/index.xml index 9e12897e53d..c2106f8e65a 100644 --- a/module-management-system/daily/index.xml +++ b/module-management-system/daily/index.xml @@ -1,7 +1,7 @@ GitHub Module Management System Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:53Z + 2024-08-03T01:34:16Z Daily Trending of Module Management System in GitHub \ No newline at end of file diff --git a/monkey-c/daily/index.xml b/monkey-c/daily/index.xml index 5f1839e19f1..8977ca68b8b 100644 --- a/monkey-c/daily/index.xml +++ b/monkey-c/daily/index.xml @@ -1,7 +1,7 @@ GitHub Monkey C Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:56Z + 2024-08-03T01:34:18Z Daily Trending of Monkey C in GitHub \ No newline at end of file diff --git a/monkey/daily/index.xml b/monkey/daily/index.xml index 2d32fb3dc73..98bd1b2ad0b 100644 --- a/monkey/daily/index.xml +++ b/monkey/daily/index.xml @@ -1,7 +1,7 @@ GitHub Monkey Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:54Z + 2024-08-03T01:34:16Z Daily Trending of Monkey in GitHub \ No newline at end of file diff --git a/moocode/daily/index.xml b/moocode/daily/index.xml index 0805dc54031..7d3260c1147 100644 --- a/moocode/daily/index.xml +++ b/moocode/daily/index.xml @@ -1,7 +1,7 @@ GitHub Moocode Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:55Z + 2024-08-03T01:34:18Z Daily Trending of Moocode in GitHub \ No newline at end of file diff --git a/moonscript/daily/index.xml b/moonscript/daily/index.xml index 5ff1c0d0a71..796f5df96a6 100644 --- a/moonscript/daily/index.xml +++ b/moonscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub MoonScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:55Z + 2024-08-03T01:34:18Z Daily Trending of MoonScript in GitHub \ No newline at end of file diff --git a/motoko/daily/index.xml b/motoko/daily/index.xml index a3bcb9e6dda..11ad8853adf 100644 --- a/motoko/daily/index.xml +++ b/motoko/daily/index.xml @@ -1,7 +1,7 @@ GitHub Motoko Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:55Z + 2024-08-03T01:34:18Z Daily Trending of Motoko in GitHub \ No newline at end of file diff --git a/motorola-68k-assembly/daily/index.xml b/motorola-68k-assembly/daily/index.xml index 5651ce1c41e..336d3edbc8c 100644 --- a/motorola-68k-assembly/daily/index.xml +++ b/motorola-68k-assembly/daily/index.xml @@ -1,7 +1,7 @@ GitHub Motorola 68K Assembly Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:57Z + 2024-08-03T01:34:20Z Daily Trending of Motorola 68K Assembly in GitHub \ No newline at end of file diff --git a/mql4/daily/index.xml b/mql4/daily/index.xml index b0aca84e9bd..26336274b06 100644 --- a/mql4/daily/index.xml +++ b/mql4/daily/index.xml @@ -1,7 +1,7 @@ GitHub MQL4 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:57Z + 2024-08-03T01:34:20Z Daily Trending of MQL4 in GitHub \ No newline at end of file diff --git a/mql5/daily/index.xml b/mql5/daily/index.xml index 8f61d22e7d6..10389f7d76d 100644 --- a/mql5/daily/index.xml +++ b/mql5/daily/index.xml @@ -1,7 +1,7 @@ GitHub MQL5 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:56Z + 2024-08-03T01:34:19Z Daily Trending of MQL5 in GitHub \ No newline at end of file diff --git a/mtml/daily/index.xml b/mtml/daily/index.xml index 55738475d8a..3c446417df0 100644 --- a/mtml/daily/index.xml +++ b/mtml/daily/index.xml @@ -1,7 +1,7 @@ GitHub MTML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:58Z + 2024-08-03T01:34:21Z Daily Trending of MTML in GitHub \ No newline at end of file diff --git a/muf/daily/index.xml b/muf/daily/index.xml index 5d18cfd5b7b..282584d5a0f 100644 --- a/muf/daily/index.xml +++ b/muf/daily/index.xml @@ -1,7 +1,7 @@ GitHub MUF Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:58Z + 2024-08-03T01:34:21Z Daily Trending of MUF in GitHub \ No newline at end of file diff --git a/mupad/daily/index.xml b/mupad/daily/index.xml index 7facb578a60..e7c3b633112 100644 --- a/mupad/daily/index.xml +++ b/mupad/daily/index.xml @@ -1,7 +1,7 @@ GitHub mupad Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:59Z + 2024-08-03T01:34:21Z Daily Trending of mupad in GitHub \ No newline at end of file diff --git a/muse/daily/index.xml b/muse/daily/index.xml index ad96115b5a9..295e48dc127 100644 --- a/muse/daily/index.xml +++ b/muse/daily/index.xml @@ -1,7 +1,7 @@ GitHub Muse Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:58Z + 2024-08-03T01:34:21Z Daily Trending of Muse in GitHub \ No newline at end of file diff --git a/mustache/daily/index.xml b/mustache/daily/index.xml index 41e3d18799b..11878242699 100644 --- a/mustache/daily/index.xml +++ b/mustache/daily/index.xml @@ -1,7 +1,7 @@ GitHub Mustache Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:01Z + 2024-08-03T01:34:24Z Daily Trending of Mustache in GitHub \ No newline at end of file diff --git a/myghty/daily/index.xml b/myghty/daily/index.xml index 3fb3a1f91ff..48838113033 100644 --- a/myghty/daily/index.xml +++ b/myghty/daily/index.xml @@ -1,7 +1,7 @@ GitHub Myghty Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:00Z + 2024-08-03T01:34:23Z Daily Trending of Myghty in GitHub \ No newline at end of file diff --git a/nanorc/daily/index.xml b/nanorc/daily/index.xml index a63a5231e6c..a7b587514c9 100644 --- a/nanorc/daily/index.xml +++ b/nanorc/daily/index.xml @@ -1,7 +1,7 @@ GitHub nanorc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:00Z + 2024-08-03T01:34:22Z Daily Trending of nanorc in GitHub \ No newline at end of file diff --git a/nasl/daily/index.xml b/nasl/daily/index.xml index 47969b0f9d9..cf8e9b36f81 100644 --- a/nasl/daily/index.xml +++ b/nasl/daily/index.xml @@ -1,7 +1,7 @@ GitHub NASL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:02Z + 2024-08-03T01:34:25Z Daily Trending of NASL in GitHub \ No newline at end of file diff --git a/ncl/daily/index.xml b/ncl/daily/index.xml index 0e1fad71c23..fdccf715683 100644 --- a/ncl/daily/index.xml +++ b/ncl/daily/index.xml @@ -1,7 +1,7 @@ GitHub NCL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:02Z + 2024-08-03T01:34:26Z Daily Trending of NCL in GitHub \ No newline at end of file diff --git a/nearley/daily/index.xml b/nearley/daily/index.xml index af8eec28779..5d4a8faed89 100644 --- a/nearley/daily/index.xml +++ b/nearley/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nearley Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:02Z + 2024-08-03T01:34:25Z Daily Trending of Nearley in GitHub \ No newline at end of file diff --git a/nemerle/daily/index.xml b/nemerle/daily/index.xml index 4922fa072da..82be4d46608 100644 --- a/nemerle/daily/index.xml +++ b/nemerle/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nemerle Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:02Z + 2024-08-03T01:34:25Z Daily Trending of Nemerle in GitHub \ No newline at end of file diff --git a/neon/daily/index.xml b/neon/daily/index.xml index 86b5def53f5..9587bcca52a 100644 --- a/neon/daily/index.xml +++ b/neon/daily/index.xml @@ -1,7 +1,7 @@ GitHub NEON Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:03Z + 2024-08-03T01:34:27Z Daily Trending of NEON in GitHub \ No newline at end of file diff --git a/nesc/daily/index.xml b/nesc/daily/index.xml index 5597879c90e..71a66a6ba0c 100644 --- a/nesc/daily/index.xml +++ b/nesc/daily/index.xml @@ -1,7 +1,7 @@ GitHub nesC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:04Z + 2024-08-03T01:34:26Z Daily Trending of nesC in GitHub \ No newline at end of file diff --git a/netlinx+erb/daily/index.xml b/netlinx+erb/daily/index.xml index 86ffe534652..481ee5d978e 100644 --- a/netlinx+erb/daily/index.xml +++ b/netlinx+erb/daily/index.xml @@ -1,7 +1,7 @@ GitHub NetLinx+ERB Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:03Z + 2024-08-03T01:34:27Z Daily Trending of NetLinx+ERB in GitHub \ No newline at end of file diff --git a/netlinx/daily/index.xml b/netlinx/daily/index.xml index d5b5086df8f..ff44e987936 100644 --- a/netlinx/daily/index.xml +++ b/netlinx/daily/index.xml @@ -1,7 +1,7 @@ GitHub NetLinx Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:04Z + 2024-08-03T01:34:27Z Daily Trending of NetLinx in GitHub \ No newline at end of file diff --git a/netlogo/daily/index.xml b/netlogo/daily/index.xml index a39b78a0490..093c713ce18 100644 --- a/netlogo/daily/index.xml +++ b/netlogo/daily/index.xml @@ -1,7 +1,7 @@ GitHub NetLogo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:05Z + 2024-08-03T01:34:28Z Daily Trending of NetLogo in GitHub \ No newline at end of file diff --git a/newlisp/daily/index.xml b/newlisp/daily/index.xml index dc16aef0597..76974e2ebcf 100644 --- a/newlisp/daily/index.xml +++ b/newlisp/daily/index.xml @@ -1,7 +1,7 @@ GitHub NewLisp Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:05Z + 2024-08-03T01:34:28Z Daily Trending of NewLisp in GitHub \ No newline at end of file diff --git a/nextflow/daily/index.xml b/nextflow/daily/index.xml index 233b7a487f0..7b9bbf380ba 100644 --- a/nextflow/daily/index.xml +++ b/nextflow/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nextflow Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:06Z + 2024-08-03T01:34:29Z Daily Trending of Nextflow in GitHub \ No newline at end of file diff --git a/nginx/daily/index.xml b/nginx/daily/index.xml index 5c02643e694..d5943419790 100644 --- a/nginx/daily/index.xml +++ b/nginx/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nginx Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:05Z + 2024-08-03T01:34:28Z Daily Trending of Nginx in GitHub \ No newline at end of file diff --git a/nim/daily/index.xml b/nim/daily/index.xml index 989365f8566..69a22687672 100644 --- a/nim/daily/index.xml +++ b/nim/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nim Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:07Z + 2024-08-03T01:34:30Z Daily Trending of Nim in GitHub \ No newline at end of file diff --git a/ninja/daily/index.xml b/ninja/daily/index.xml index 4eaff7da76b..cc5ed8feeb5 100644 --- a/ninja/daily/index.xml +++ b/ninja/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ninja Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:06Z + 2024-08-03T01:34:29Z Daily Trending of Ninja in GitHub \ No newline at end of file diff --git a/nit/daily/index.xml b/nit/daily/index.xml index 7b8c2729562..56d3962e95d 100644 --- a/nit/daily/index.xml +++ b/nit/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nit Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:06Z + 2024-08-03T01:34:30Z Daily Trending of Nit in GitHub \ No newline at end of file diff --git a/nix/daily/index.xml b/nix/daily/index.xml index 6f6b143e36a..3b3086d26b7 100644 --- a/nix/daily/index.xml +++ b/nix/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nix Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:08Z + 2024-08-03T01:34:33Z Daily Trending of Nix in GitHub \ No newline at end of file diff --git a/nl/daily/index.xml b/nl/daily/index.xml index d16acaed157..3b06b67dab9 100644 --- a/nl/daily/index.xml +++ b/nl/daily/index.xml @@ -1,7 +1,7 @@ GitHub NL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:09Z + 2024-08-03T01:34:34Z Daily Trending of NL in GitHub \ No newline at end of file diff --git a/npm-config/daily/index.xml b/npm-config/daily/index.xml index b8982342e3e..3a69c836c2b 100644 --- a/npm-config/daily/index.xml +++ b/npm-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub NPM Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:09Z + 2024-08-03T01:34:33Z Daily Trending of NPM Config in GitHub \ No newline at end of file diff --git a/nsis/daily/index.xml b/nsis/daily/index.xml index 16b99c041ae..bf1016abdc9 100644 --- a/nsis/daily/index.xml +++ b/nsis/daily/index.xml @@ -1,7 +1,7 @@ GitHub NSIS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:08Z + 2024-08-03T01:34:34Z Daily Trending of NSIS in GitHub \ No newline at end of file diff --git a/nu/daily/index.xml b/nu/daily/index.xml index 9f4d9fe9580..8b40f4418af 100644 --- a/nu/daily/index.xml +++ b/nu/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nu Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:10Z + 2024-08-03T01:34:35Z Daily Trending of Nu in GitHub \ No newline at end of file diff --git a/numpy/daily/index.xml b/numpy/daily/index.xml index 25836d8c291..f79c2404215 100644 --- a/numpy/daily/index.xml +++ b/numpy/daily/index.xml @@ -1,7 +1,7 @@ GitHub NumPy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:10Z + 2024-08-03T01:34:35Z Daily Trending of NumPy in GitHub \ No newline at end of file diff --git a/nunjucks/daily/index.xml b/nunjucks/daily/index.xml index 458f4d3af3a..b026d89ee21 100644 --- a/nunjucks/daily/index.xml +++ b/nunjucks/daily/index.xml @@ -1,7 +1,7 @@ GitHub Nunjucks Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:11Z + 2024-08-03T01:34:36Z Daily Trending of Nunjucks in GitHub \ No newline at end of file diff --git a/nwscript/daily/index.xml b/nwscript/daily/index.xml index e3b62e90394..d9921b3a889 100644 --- a/nwscript/daily/index.xml +++ b/nwscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub NWScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:11Z + 2024-08-03T01:34:37Z Daily Trending of NWScript in GitHub \ No newline at end of file diff --git a/objdump/daily/index.xml b/objdump/daily/index.xml index 5f47c2df540..d1dd732f091 100644 --- a/objdump/daily/index.xml +++ b/objdump/daily/index.xml @@ -1,7 +1,7 @@ GitHub ObjDump Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:13Z + 2024-08-03T01:34:38Z Daily Trending of ObjDump in GitHub \ No newline at end of file diff --git a/object-data-instance-notation/daily/index.xml b/object-data-instance-notation/daily/index.xml index 7fd5ee6f9e1..9770c512c77 100644 --- a/object-data-instance-notation/daily/index.xml +++ b/object-data-instance-notation/daily/index.xml @@ -1,7 +1,7 @@ GitHub Object Data Instance Notation Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:13Z + 2024-08-03T01:34:38Z Daily Trending of Object Data Instance Notation in GitHub \ No newline at end of file diff --git a/objective-c++/daily/index.xml b/objective-c++/daily/index.xml index ffaff7e3eb7..fc62b84bc50 100644 --- a/objective-c++/daily/index.xml +++ b/objective-c++/daily/index.xml @@ -1,7 +1,7 @@ GitHub Objective-C++ Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:15Z + 2024-08-03T01:34:41Z Daily Trending of Objective-C++ in GitHub \ No newline at end of file diff --git a/objective-c/daily/index.xml b/objective-c/daily/index.xml index c0b24d924d7..f44d78ea8ee 100644 --- a/objective-c/daily/index.xml +++ b/objective-c/daily/index.xml @@ -1,7 +1,7 @@ GitHub Objective-C Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:16Z + 2024-08-03T01:34:41Z Daily Trending of Objective-C in GitHub \ No newline at end of file diff --git a/objective-j/daily/index.xml b/objective-j/daily/index.xml index 4c4a4098eca..ae863f30ef9 100644 --- a/objective-j/daily/index.xml +++ b/objective-j/daily/index.xml @@ -1,7 +1,7 @@ GitHub Objective-J Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:14Z + 2024-08-03T01:34:40Z Daily Trending of Objective-J in GitHub \ No newline at end of file diff --git a/objectscript/daily/index.xml b/objectscript/daily/index.xml index 54f5bb25688..d48ce0118b6 100644 --- a/objectscript/daily/index.xml +++ b/objectscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub ObjectScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:14Z + 2024-08-03T01:34:39Z Daily Trending of ObjectScript in GitHub \ No newline at end of file diff --git a/ocaml/daily/index.xml b/ocaml/daily/index.xml index 9247d93810f..8cd7597ab0d 100644 --- a/ocaml/daily/index.xml +++ b/ocaml/daily/index.xml @@ -1,7 +1,7 @@ GitHub OCaml Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:21Z + 2024-08-03T01:34:44Z Daily Trending of OCaml in GitHub \ No newline at end of file diff --git a/odin/daily/index.xml b/odin/daily/index.xml index 4552035882e..6b6bf380466 100644 --- a/odin/daily/index.xml +++ b/odin/daily/index.xml @@ -1,7 +1,7 @@ GitHub Odin Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:19Z + 2024-08-03T01:34:43Z Daily Trending of Odin in GitHub \ No newline at end of file diff --git a/omgrofl/daily/index.xml b/omgrofl/daily/index.xml index 8bdf9fc2fdc..5c75693ba8c 100644 --- a/omgrofl/daily/index.xml +++ b/omgrofl/daily/index.xml @@ -1,7 +1,7 @@ GitHub Omgrofl Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:20Z + 2024-08-03T01:34:43Z Daily Trending of Omgrofl in GitHub \ No newline at end of file diff --git a/ooc/daily/index.xml b/ooc/daily/index.xml index 12cb782227e..e822101abec 100644 --- a/ooc/daily/index.xml +++ b/ooc/daily/index.xml @@ -1,7 +1,7 @@ GitHub ooc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:20Z + 2024-08-03T01:34:43Z Daily Trending of ooc in GitHub \ No newline at end of file diff --git a/opa/daily/index.xml b/opa/daily/index.xml index 6c8b8953a98..d8a5ff1b7af 100644 --- a/opa/daily/index.xml +++ b/opa/daily/index.xml @@ -1,7 +1,7 @@ GitHub Opa Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:21Z + 2024-08-03T01:34:45Z Daily Trending of Opa in GitHub \ No newline at end of file diff --git a/opal/daily/index.xml b/opal/daily/index.xml index a5670d447fe..a6d480bda37 100644 --- a/opal/daily/index.xml +++ b/opal/daily/index.xml @@ -1,7 +1,7 @@ GitHub Opal Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:21Z + 2024-08-03T01:34:45Z Daily Trending of Opal in GitHub \ No newline at end of file diff --git a/open-policy-agent/daily/index.xml b/open-policy-agent/daily/index.xml index bb0dea1da81..ce871b705f9 100644 --- a/open-policy-agent/daily/index.xml +++ b/open-policy-agent/daily/index.xml @@ -1,7 +1,7 @@ GitHub Open Policy Agent Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:22Z + 2024-08-03T01:34:44Z Daily Trending of Open Policy Agent in GitHub \ No newline at end of file diff --git a/opencl/daily/index.xml b/opencl/daily/index.xml index 1b0e1f470fd..28496f53517 100644 --- a/opencl/daily/index.xml +++ b/opencl/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenCL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:23Z + 2024-08-03T01:34:46Z Daily Trending of OpenCL in GitHub \ No newline at end of file diff --git a/openedge-abl/daily/index.xml b/openedge-abl/daily/index.xml index dea82cbcf78..724ba47b3ea 100644 --- a/openedge-abl/daily/index.xml +++ b/openedge-abl/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenEdge ABL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:23Z + 2024-08-03T01:34:47Z Daily Trending of OpenEdge ABL in GitHub \ No newline at end of file diff --git a/openqasm/daily/index.xml b/openqasm/daily/index.xml index 9c05d0717a3..2bddd38e675 100644 --- a/openqasm/daily/index.xml +++ b/openqasm/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenQASM Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:24Z + 2024-08-03T01:34:46Z Daily Trending of OpenQASM in GitHub \ No newline at end of file diff --git a/openrc-runscript/daily/index.xml b/openrc-runscript/daily/index.xml index cdb504e55eb..dd5d11471c0 100644 --- a/openrc-runscript/daily/index.xml +++ b/openrc-runscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenRC runscript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:25Z + 2024-08-03T01:34:48Z Daily Trending of OpenRC runscript in GitHub \ No newline at end of file diff --git a/openscad/daily/index.xml b/openscad/daily/index.xml index c0ce26da95d..89388fe8361 100644 --- a/openscad/daily/index.xml +++ b/openscad/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenSCAD Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:24Z + 2024-08-03T01:34:48Z Daily Trending of OpenSCAD in GitHub \ No newline at end of file diff --git a/openstep-property-list/daily/index.xml b/openstep-property-list/daily/index.xml index 0284050adcf..32ae76e2853 100644 --- a/openstep-property-list/daily/index.xml +++ b/openstep-property-list/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenStep Property List Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:24Z + 2024-08-03T01:34:47Z Daily Trending of OpenStep Property List in GitHub \ No newline at end of file diff --git a/opentype-feature-file/daily/index.xml b/opentype-feature-file/daily/index.xml index 3df76ad95a9..8253db0ab46 100644 --- a/opentype-feature-file/daily/index.xml +++ b/opentype-feature-file/daily/index.xml @@ -1,7 +1,7 @@ GitHub OpenType Feature File Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:25Z + 2024-08-03T01:34:48Z Daily Trending of OpenType Feature File in GitHub \ No newline at end of file diff --git a/org/daily/index.xml b/org/daily/index.xml index f9c9cba0644..fc86f06b31b 100644 --- a/org/daily/index.xml +++ b/org/daily/index.xml @@ -1,7 +1,7 @@ GitHub Org Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:27Z + 2024-08-03T01:34:50Z Daily Trending of Org in GitHub \ No newline at end of file diff --git a/ox/daily/index.xml b/ox/daily/index.xml index e250cf3dbc5..b4e3aba8386 100644 --- a/ox/daily/index.xml +++ b/ox/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ox Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:26Z + 2024-08-03T01:34:49Z Daily Trending of Ox in GitHub \ No newline at end of file diff --git a/oxygene/daily/index.xml b/oxygene/daily/index.xml index 3d1671d8598..065715b05cc 100644 --- a/oxygene/daily/index.xml +++ b/oxygene/daily/index.xml @@ -1,7 +1,7 @@ GitHub Oxygene Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:26Z + 2024-08-03T01:34:49Z Daily Trending of Oxygene in GitHub \ No newline at end of file diff --git a/oz/daily/index.xml b/oz/daily/index.xml index 07d62885f1d..f0acc613442 100644 --- a/oz/daily/index.xml +++ b/oz/daily/index.xml @@ -1,7 +1,7 @@ GitHub Oz Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:28Z + 2024-08-03T01:34:50Z Daily Trending of Oz in GitHub \ No newline at end of file diff --git a/p4/daily/index.xml b/p4/daily/index.xml index 4c9199e0f54..5e8788c3582 100644 --- a/p4/daily/index.xml +++ b/p4/daily/index.xml @@ -1,7 +1,7 @@ GitHub P4 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:28Z + 2024-08-03T01:34:51Z Daily Trending of P4 in GitHub \ No newline at end of file diff --git a/pan/daily/index.xml b/pan/daily/index.xml index 2df2971522d..aed7541f941 100644 --- a/pan/daily/index.xml +++ b/pan/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pan Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:27Z + 2024-08-03T01:34:51Z Daily Trending of Pan in GitHub \ No newline at end of file diff --git a/papyrus/daily/index.xml b/papyrus/daily/index.xml index b00ffb7d6aa..ecb0dc4c9bf 100644 --- a/papyrus/daily/index.xml +++ b/papyrus/daily/index.xml @@ -1,7 +1,7 @@ GitHub Papyrus Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:29Z + 2024-08-03T01:34:52Z Daily Trending of Papyrus in GitHub \ No newline at end of file diff --git a/parrot-assembly/daily/index.xml b/parrot-assembly/daily/index.xml index 7b683f935a0..cf3c786e694 100644 --- a/parrot-assembly/daily/index.xml +++ b/parrot-assembly/daily/index.xml @@ -1,7 +1,7 @@ GitHub Parrot Assembly Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:29Z + 2024-08-03T01:34:53Z Daily Trending of Parrot Assembly in GitHub \ No newline at end of file diff --git a/parrot-internal-representation/daily/index.xml b/parrot-internal-representation/daily/index.xml index b4785d7ea86..b400d71febc 100644 --- a/parrot-internal-representation/daily/index.xml +++ b/parrot-internal-representation/daily/index.xml @@ -1,7 +1,7 @@ GitHub Parrot Internal Representation Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:29Z + 2024-08-03T01:34:52Z Daily Trending of Parrot Internal Representation in GitHub \ No newline at end of file diff --git a/parrot/daily/index.xml b/parrot/daily/index.xml index 4a2328a8229..69b38388fb0 100644 --- a/parrot/daily/index.xml +++ b/parrot/daily/index.xml @@ -1,7 +1,7 @@ GitHub Parrot Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:29Z + 2024-08-03T01:34:52Z Daily Trending of Parrot in GitHub \ No newline at end of file diff --git a/pascal/daily/index.xml b/pascal/daily/index.xml index b003452eeac..77a45f72073 100644 --- a/pascal/daily/index.xml +++ b/pascal/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pascal Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:31Z + 2024-08-03T01:34:54Z Daily Trending of Pascal in GitHub \ No newline at end of file diff --git a/pawn/daily/index.xml b/pawn/daily/index.xml index cefced24022..cb566a7fbe5 100644 --- a/pawn/daily/index.xml +++ b/pawn/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pawn Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:30Z + 2024-08-03T01:34:53Z Daily Trending of Pawn in GitHub \ No newline at end of file diff --git a/peg.js/daily/index.xml b/peg.js/daily/index.xml index c962d601069..7fe9dd5533f 100644 --- a/peg.js/daily/index.xml +++ b/peg.js/daily/index.xml @@ -1,7 +1,7 @@ GitHub PEG.js Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:31Z + 2024-08-03T01:34:53Z Daily Trending of PEG.js in GitHub \ No newline at end of file diff --git a/pep8/daily/index.xml b/pep8/daily/index.xml index 5fb88b451d1..0ddadffc3cd 100644 --- a/pep8/daily/index.xml +++ b/pep8/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pep8 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:32Z + 2024-08-03T01:34:55Z Daily Trending of Pep8 in GitHub \ No newline at end of file diff --git a/perl/daily/index.xml b/perl/daily/index.xml index fac20ba215f..32ba0f9202e 100644 --- a/perl/daily/index.xml +++ b/perl/daily/index.xml @@ -1,7 +1,7 @@ GitHub Perl Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:34Z + 2024-08-03T01:35:00Z Daily Trending of Perl in GitHub \ No newline at end of file diff --git a/php/daily/index.xml b/php/daily/index.xml index 46ed2f0936e..8172c8b23b3 100644 --- a/php/daily/index.xml +++ b/php/daily/index.xml @@ -1,7 +1,7 @@ GitHub PHP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:38Z + 2024-08-03T01:34:56Z Daily Trending of PHP in GitHub \ No newline at end of file diff --git a/pic/daily/index.xml b/pic/daily/index.xml index 0ebe5da4845..29642f2e069 100644 --- a/pic/daily/index.xml +++ b/pic/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pic Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:32Z + 2024-08-03T01:34:55Z Daily Trending of Pic in GitHub \ No newline at end of file diff --git a/pickle/daily/index.xml b/pickle/daily/index.xml index 357979c827f..ceab30c6b6c 100644 --- a/pickle/daily/index.xml +++ b/pickle/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pickle Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:41Z + 2024-08-03T01:35:05Z Daily Trending of Pickle in GitHub \ No newline at end of file diff --git a/picolisp/daily/index.xml b/picolisp/daily/index.xml index 70d36768d31..2e78bae2821 100644 --- a/picolisp/daily/index.xml +++ b/picolisp/daily/index.xml @@ -1,7 +1,7 @@ GitHub PicoLisp Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:41Z + 2024-08-03T01:35:05Z Daily Trending of PicoLisp in GitHub \ No newline at end of file diff --git a/piglatin/daily/index.xml b/piglatin/daily/index.xml index b763066a16a..64bf22f63e6 100644 --- a/piglatin/daily/index.xml +++ b/piglatin/daily/index.xml @@ -1,7 +1,7 @@ GitHub PigLatin Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:41Z + 2024-08-03T01:35:06Z Daily Trending of PigLatin in GitHub \ No newline at end of file diff --git a/pike/daily/index.xml b/pike/daily/index.xml index 40c85f89483..06c86ea1c71 100644 --- a/pike/daily/index.xml +++ b/pike/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pike Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:41Z + 2024-08-03T01:35:05Z Daily Trending of Pike in GitHub \ No newline at end of file diff --git a/plantuml/daily/index.xml b/plantuml/daily/index.xml index a40077e0472..0003cdcde26 100644 --- a/plantuml/daily/index.xml +++ b/plantuml/daily/index.xml @@ -1,7 +1,7 @@ GitHub PlantUML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:43Z + 2024-08-03T01:35:06Z Daily Trending of PlantUML in GitHub \ No newline at end of file diff --git a/plpgsql/daily/index.xml b/plpgsql/daily/index.xml index ec9508bce88..c7737ef14cb 100644 --- a/plpgsql/daily/index.xml +++ b/plpgsql/daily/index.xml @@ -1,7 +1,7 @@ GitHub PLpgSQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:42Z + 2024-08-03T01:35:07Z Daily Trending of PLpgSQL in GitHub \ No newline at end of file diff --git a/plsql/daily/index.xml b/plsql/daily/index.xml index 84e5f67ee15..7c2820d0533 100644 --- a/plsql/daily/index.xml +++ b/plsql/daily/index.xml @@ -1,7 +1,7 @@ GitHub PLSQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:44Z + 2024-08-03T01:35:08Z Daily Trending of PLSQL in GitHub \ No newline at end of file diff --git a/pod-6/daily/index.xml b/pod-6/daily/index.xml index 3c52a1f19ee..91d3c125351 100644 --- a/pod-6/daily/index.xml +++ b/pod-6/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pod 6 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:44Z + 2024-08-03T01:35:08Z Daily Trending of Pod 6 in GitHub \ No newline at end of file diff --git a/pod/daily/index.xml b/pod/daily/index.xml index 24f1eeb5ed4..6ab34f4173c 100644 --- a/pod/daily/index.xml +++ b/pod/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pod Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:44Z + 2024-08-03T01:35:09Z Daily Trending of Pod in GitHub \ No newline at end of file diff --git a/pogoscript/daily/index.xml b/pogoscript/daily/index.xml index 03393b41295..23d5508b42f 100644 --- a/pogoscript/daily/index.xml +++ b/pogoscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub PogoScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:44Z + 2024-08-03T01:35:08Z Daily Trending of PogoScript in GitHub \ No newline at end of file diff --git a/pony/daily/index.xml b/pony/daily/index.xml index 7605e9cb4ad..b508ec6b20d 100644 --- a/pony/daily/index.xml +++ b/pony/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pony Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:46Z + 2024-08-03T01:35:09Z Daily Trending of Pony in GitHub \ No newline at end of file diff --git a/postcss/daily/index.xml b/postcss/daily/index.xml index 86d88b0d728..bd411d1bbcb 100644 --- a/postcss/daily/index.xml +++ b/postcss/daily/index.xml @@ -1,7 +1,7 @@ GitHub PostCSS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:45Z + 2024-08-03T01:35:09Z Daily Trending of PostCSS in GitHub \ No newline at end of file diff --git a/postscript/daily/index.xml b/postscript/daily/index.xml index 4fdbdbbb7f9..2bcb53f4a17 100644 --- a/postscript/daily/index.xml +++ b/postscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub PostScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:47Z + 2024-08-03T01:35:11Z Daily Trending of PostScript in GitHub \ No newline at end of file diff --git a/pov-ray-sdl/daily/index.xml b/pov-ray-sdl/daily/index.xml index a73cfda41b7..02486bb6010 100644 --- a/pov-ray-sdl/daily/index.xml +++ b/pov-ray-sdl/daily/index.xml @@ -1,7 +1,7 @@ GitHub POV-Ray SDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:47Z + 2024-08-03T01:35:11Z Daily Trending of POV-Ray SDL in GitHub \ No newline at end of file diff --git a/powerbuilder/daily/index.xml b/powerbuilder/daily/index.xml index b6a9cc770b4..0ef6f04491a 100644 --- a/powerbuilder/daily/index.xml +++ b/powerbuilder/daily/index.xml @@ -1,7 +1,7 @@ GitHub PowerBuilder Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:47Z + 2024-08-03T01:35:11Z Daily Trending of PowerBuilder in GitHub \ No newline at end of file diff --git a/powershell/daily/index.xml b/powershell/daily/index.xml index 66683accbce..bf45016f8da 100644 --- a/powershell/daily/index.xml +++ b/powershell/daily/index.xml @@ -1,7 +1,7 @@ GitHub PowerShell Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:48Z + 2024-08-03T01:35:12Z Daily Trending of PowerShell in GitHub \ No newline at end of file diff --git a/prisma/daily/index.xml b/prisma/daily/index.xml index b28ce7e8c3f..a120c08b57a 100644 --- a/prisma/daily/index.xml +++ b/prisma/daily/index.xml @@ -1,7 +1,7 @@ GitHub Prisma Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:50Z + 2024-08-03T01:35:14Z Daily Trending of Prisma in GitHub \ No newline at end of file diff --git a/processing/daily/index.xml b/processing/daily/index.xml index 5b675255269..1b222b0ad56 100644 --- a/processing/daily/index.xml +++ b/processing/daily/index.xml @@ -1,7 +1,7 @@ GitHub Processing Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:51Z + 2024-08-03T01:35:15Z Daily Trending of Processing in GitHub \ No newline at end of file diff --git a/procfile/daily/index.xml b/procfile/daily/index.xml index 92711cd2630..66e04039f54 100644 --- a/procfile/daily/index.xml +++ b/procfile/daily/index.xml @@ -1,7 +1,7 @@ GitHub Procfile Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:51Z + 2024-08-03T01:35:15Z Daily Trending of Procfile in GitHub \ No newline at end of file diff --git a/proguard/daily/index.xml b/proguard/daily/index.xml index 51fe6e4be9c..97a15a297c9 100644 --- a/proguard/daily/index.xml +++ b/proguard/daily/index.xml @@ -1,7 +1,7 @@ GitHub Proguard Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:52Z + 2024-08-03T01:35:16Z Daily Trending of Proguard in GitHub \ No newline at end of file diff --git a/prolog/daily/index.xml b/prolog/daily/index.xml index a4e339b8cfb..26ffdd31b50 100644 --- a/prolog/daily/index.xml +++ b/prolog/daily/index.xml @@ -1,7 +1,7 @@ GitHub Prolog Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:53Z + 2024-08-03T01:35:17Z Daily Trending of Prolog in GitHub \ No newline at end of file diff --git a/promela/daily/index.xml b/promela/daily/index.xml index 6e0a1164b87..b8245ff7ac0 100644 --- a/promela/daily/index.xml +++ b/promela/daily/index.xml @@ -1,7 +1,7 @@ GitHub Promela Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:52Z + 2024-08-03T01:35:17Z Daily Trending of Promela in GitHub \ No newline at end of file diff --git a/propeller-spin/daily/index.xml b/propeller-spin/daily/index.xml index 69b21becf56..893e43f8622 100644 --- a/propeller-spin/daily/index.xml +++ b/propeller-spin/daily/index.xml @@ -1,7 +1,7 @@ GitHub Propeller Spin Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:52Z + 2024-08-03T01:35:16Z Daily Trending of Propeller Spin in GitHub \ No newline at end of file diff --git a/protocol-buffer-text-format/daily/index.xml b/protocol-buffer-text-format/daily/index.xml index 26ec92f5292..1563ee9c036 100644 --- a/protocol-buffer-text-format/daily/index.xml +++ b/protocol-buffer-text-format/daily/index.xml @@ -1,7 +1,7 @@ GitHub Protocol Buffer Text Format Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:53Z + 2024-08-03T01:35:17Z Daily Trending of Protocol Buffer Text Format in GitHub \ No newline at end of file diff --git a/protocol-buffer/daily/index.xml b/protocol-buffer/daily/index.xml index d54b03e1037..c6bfa336363 100644 --- a/protocol-buffer/daily/index.xml +++ b/protocol-buffer/daily/index.xml @@ -1,7 +1,7 @@ GitHub Protocol Buffer Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:54Z + 2024-08-03T01:35:18Z Daily Trending of Protocol Buffer in GitHub \ No newline at end of file diff --git a/public-key/daily/index.xml b/public-key/daily/index.xml index 4305c00fcda..cf36e3bd629 100644 --- a/public-key/daily/index.xml +++ b/public-key/daily/index.xml @@ -1,7 +1,7 @@ GitHub Public Key Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:53Z + 2024-08-03T01:35:18Z Daily Trending of Public Key in GitHub \ No newline at end of file diff --git a/pug/daily/index.xml b/pug/daily/index.xml index df1e019479e..cd973e65ff0 100644 --- a/pug/daily/index.xml +++ b/pug/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pug Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:54Z + 2024-08-03T01:35:18Z Daily Trending of Pug in GitHub \ No newline at end of file diff --git a/puppet/daily/index.xml b/puppet/daily/index.xml index dd29c970595..7589d360a90 100644 --- a/puppet/daily/index.xml +++ b/puppet/daily/index.xml @@ -1,7 +1,7 @@ GitHub Puppet Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:55Z + 2024-08-03T01:35:20Z Daily Trending of Puppet in GitHub \ No newline at end of file diff --git a/pure-data/daily/index.xml b/pure-data/daily/index.xml index 7d28049de35..2b75bb7b14d 100644 --- a/pure-data/daily/index.xml +++ b/pure-data/daily/index.xml @@ -1,7 +1,7 @@ GitHub Pure Data Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:55Z + 2024-08-03T01:35:19Z Daily Trending of Pure Data in GitHub \ No newline at end of file diff --git a/purebasic/daily/index.xml b/purebasic/daily/index.xml index 893ef586203..f04f5d3e4b5 100644 --- a/purebasic/daily/index.xml +++ b/purebasic/daily/index.xml @@ -1,7 +1,7 @@ GitHub PureBasic Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:55Z + 2024-08-03T01:35:19Z Daily Trending of PureBasic in GitHub \ No newline at end of file diff --git a/purescript/daily/index.xml b/purescript/daily/index.xml index 805890309ab..6a3d418ffae 100644 --- a/purescript/daily/index.xml +++ b/purescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub PureScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:56Z + 2024-08-03T01:35:20Z Daily Trending of PureScript in GitHub \ No newline at end of file diff --git a/python-console/daily/index.xml b/python-console/daily/index.xml index c2c2f2d665f..4477d157d7e 100644 --- a/python-console/daily/index.xml +++ b/python-console/daily/index.xml @@ -1,7 +1,7 @@ GitHub Python console Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:57Z + 2024-08-03T01:35:20Z Daily Trending of Python console in GitHub \ No newline at end of file diff --git a/python-traceback/daily/index.xml b/python-traceback/daily/index.xml index 64ffa17d481..be2287117ef 100644 --- a/python-traceback/daily/index.xml +++ b/python-traceback/daily/index.xml @@ -1,7 +1,7 @@ GitHub Python traceback Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:56Z + 2024-08-03T01:35:21Z Daily Trending of Python traceback in GitHub \ No newline at end of file diff --git a/python/daily/index.xml b/python/daily/index.xml index 2778871959a..41c9de23a2f 100644 --- a/python/daily/index.xml +++ b/python/daily/index.xml @@ -1,28 +1,7 @@ GitHub Python Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:34:58Z + 2024-08-03T01:35:22Z Daily Trending of Python in GitHub - - lucidrains/x-transformers - 2024-08-02T01:34:58Z - tag:github.com,2024-08-02:/lucidrains/x-transformers - - <p>A simple but complete full-attention transformer with a set of promising experimental features from various papers</p><hr><h2>x-transformers</h2> <p><a href="https://badge.fury.io/py/x-transformers"><img src="https://badge.fury.io/py/x-transformers.svg?sanitize=true" alt="PyPI version"></a></p> <p>A concise but fully-featured transformer, complete with a set of promising e<strong>x</strong>perimental features from various papers.</p> <h2>Install</h2> <pre><code class="language-bash">$ pip install x-transformers </code></pre> <h2>Usage</h2> <p>Full encoder / decoder</p> <pre><code class="language-python">import torch from x_transformers import XTransformer model = XTransformer( dim = 512, enc_num_tokens = 256, enc_depth = 6, enc_heads = 8, enc_max_seq_len = 1024, dec_num_tokens = 256, dec_depth = 6, dec_heads = 8, dec_max_seq_len = 1024, tie_token_emb = True # tie embeddings of encoder and decoder ) src = torch.randint(0, 256, (1, 1024)) src_mask = torch.ones_like(src).bool() tgt = torch.randint(0, 256, (1, 1024)) loss = model(src, tgt, mask = src_mask) # (1, 1024, 512) loss.backward() </code></pre> <p>Decoder-only (GPT-like)</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8 ) ).cuda() x = torch.randint(0, 256, (1, 1024)).cuda() model(x) # (1, 1024, 20000) </code></pre> <p>GPT3 would be approximately the following (but you wouldn't be able to run it anyways)</p> <pre><code class="language-python"> gpt3 = TransformerWrapper( num_tokens = 50000, max_seq_len = 2048, attn_layers = Decoder( dim = 12288, depth = 96, heads = 96, attn_dim_head = 128 ) ).cuda() </code></pre> <p>Encoder-only (BERT-like)</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 12, heads = 8 ) ).cuda() x = torch.randint(0, 256, (1, 1024)).cuda() mask = torch.ones_like(x).bool() model(x, mask = mask) # (1, 1024, 20000) </code></pre> <p>State of the art image classification (<a href="https://arxiv.org/abs/2205.01580">SimpleViT</a>)</p> <pre><code class="language-python">import torch from x_transformers import ViTransformerWrapper, Encoder model = ViTransformerWrapper( image_size = 256, patch_size = 32, num_classes = 1000, attn_layers = Encoder( dim = 512, depth = 6, heads = 8, ) ) img = torch.randn(1, 3, 256, 256) model(img) # (1, 1000) </code></pre> <p>Image -&gt; caption</p> <pre><code class="language-python">import torch from x_transformers import ViTransformerWrapper, TransformerWrapper, Encoder, Decoder encoder = ViTransformerWrapper( image_size = 256, patch_size = 32, attn_layers = Encoder( dim = 512, depth = 6, heads = 8 ) ) decoder = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, cross_attend = True ) ) img = torch.randn(1, 3, 256, 256) caption = torch.randint(0, 20000, (1, 1024)) encoded = encoder(img, return_embeddings = True) decoder(caption, context = encoded) # (1, 1024, 20000) </code></pre> <p><a href="https://arxiv.org/abs/2209.06794">PaLI</a>, state of the art language-vision model</p> <pre><code class="language-python">import torch from x_transformers import ViTransformerWrapper, XTransformer, Encoder # PaLI composes of # 1. vision transformer (ViTransformerWrapper) + # 2. encoder-decoder transformer (XTransformer) vit = ViTransformerWrapper( image_size = 256, patch_size = 32, attn_layers = Encoder( dim = 512, depth = 6, heads = 8 ) ) pali = XTransformer( dim = 512, enc_num_tokens = 256, enc_depth = 6, enc_heads = 8, enc_max_seq_len = 1024, dec_num_tokens = 256, dec_depth = 6, dec_heads = 8, dec_max_seq_len = 1024 ) # training data img = torch.randn(1, 3, 256, 256) # images prompt = torch.randint(0, 256, (1, 1024)) # prompt prompt_mask = torch.ones(1, 1024).bool() # prompt text mask output_text = torch.randint(0, 256, (1, 1024)) # target output text # train img_embeds = vit( img, return_embeddings = True ) loss = pali( prompt, output_text, mask = prompt_mask, src_prepend_embeds = img_embeds # will preprend image embeddings to encoder text embeddings before attention ) loss.backward() # do the above for many steps on a 17B parameter model # attention is all you need </code></pre> <h2>Dropouts</h2> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, emb_dropout = 0.1, # dropout after embedding attn_layers = Decoder( dim = 512, depth = 6, heads = 8, layer_dropout = 0.1, # stochastic depth - dropout entire layer attn_dropout = 0.1, # dropout post-attention ff_dropout = 0.1 # feedforward dropout ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <h2>Features</h2> <h3>Flash Attention</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/flash-attention.png" width="500px"></p> <p>What originally started off as <a href="https://arxiv.org/abs/2112.05682">a short paper</a> from Markus Rabe culminated as a practical fused attention CUDA kernel, named <a href="https://arxiv.org/abs/2205.14135">Flash Attention</a> by <a href="https://tridao.me/">Tri Dao</a>.</p> <p>The technique processes the attention matrix in tiles, only keeping track of the running softmax and exponentiated weighted sums. By recomputing on the backwards pass in a tiled fashion, one is able to keep the memory linear with respect to sequence length. This allows a lot of recent models to be able to reach for longer context lengths without worrying about the memory bottleneck.</p> <p>Other engineering decisions made by Tri Dao led to its enormous success, namely minimizing HBM accesses so that both the forwards and backwards outperform naive attention. In other words, flash attention is not only more memory efficient, but faster as well, making it a necessity for training transformers.</p> <p>MetaAI has recently added the ability to use <a href="https://github.com/hazyresearch/flash-attention">Tri Dao's CUDA kernel</a> through the <a href="https://pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html">scaled_dot_product_attention</a> function in Pytorch 2.0. (They also have a <code>mem_efficient</code> attention, which is identical to flash attention design, just that the tiles are traversed differently)</p> <p><a href="https://ai.facebook.com/blog/large-language-model-llama-meta-ai/">Llama</a> was trained using Flash Attention. The only reason to avoid it is if you require operating on the attention matrix (dynamic positional bias, talking heads, residual attention).</p> <p>You can use it in this repository by setting <code>attn_flash</code> to <code>True</code> and enjoy the immediate memory savings and increase in speed.</p> <p>ex.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_flash = True # just set this to True if you have pytorch 2.0 installed ) ) </code></pre> <h3>Augmenting Self-attention with Persistent Memory</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/all-attention.png" width="500px"></p> <p><a href="https://arxiv.org/abs/1907.01470">https://arxiv.org/abs/1907.01470</a></p> <p>Proposes adding learned memory key / values prior to attention. They were able to remove feedforwards altogether and attain similar performance to the original transformers. I have found that keeping the feedforwards and adding the memory key / values leads to even better performance.</p> <pre><code class="language-python">from x_transformers import Decoder, Encoder enc = Encoder( dim = 512, depth = 6, heads = 8, attn_num_mem_kv = 16 # 16 memory key / values ) </code></pre> <h3>Memory Transformers</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/memory-transformer.png" width="500px"></p> <p><a href="https://arxiv.org/abs/2006.11527">https://arxiv.org/abs/2006.11527</a></p> <p>Proposes adding learned tokens, akin to CLS tokens, named memory tokens, that is passed through the attention layers alongside the input tokens. This setting is compatible with both encoder and decoder training.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, num_memory_tokens = 20, # 20 memory tokens attn_layers = Encoder( dim = 512, depth = 6, heads = 8 ) ) </code></pre> <p>Update: MetaAI researchers <a href="https://arxiv.org/abs/2309.16588">have found</a> that adding memory tokens (they call them register tokens), alleviates outliers (which is suspected now to be a pathology of attention networks unable to <a href="https://arxiv.org/abs/2306.12929">attend to nothing</a>).</p> <h3>Transformers Without Tears</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/scalenorm.png"></p> <p><a href="https://arxiv.org/abs/1910.05895">https://arxiv.org/abs/1910.05895</a></p> <p>They experiment with alternatives to Layer normalization and found one that is both effective and simpler. Researchers have shared with me this leads to faster convergence.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, use_scalenorm = True # set to True to use for all layers ) ) </code></pre> <p>You can also use the l2 normalized embeddings proposed as part of <code>fixnorm</code>. I have found it leads to improved convergence, when paired with small initialization (proposed by <a href="https://github.com/BlinkDL">BlinkDL</a>). The small initialization will be taken care of as long as <code>l2norm_embed</code> is set to <code>True</code></p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, l2norm_embed = True, # set this to True for l2 normalized embedding + small init attn_layers = Decoder( dim = 512, depth = 6, heads = 8 ) ) </code></pre> <p>Along the same lines of l2 normalized embeddings, Huggingface's <a href="https://huggingface.co/bigscience/bloom">175B parameter BLOOM</a> also places a layernorm right after the embeddings and just before the tokens enter the attention layers. This was corroborated by Yandex's <a href="https://github.com/yandex/YaLM-100B">100B parameter YaLM</a> to stabilize training.</p> <p>It is recommended you either have either <code>l2norm_embed</code> or <code>post_emb_norm</code> set to <code>True</code> but not both, as they probably serve the same purpose.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, post_emb_norm = True, # set this to True to layernorm summed token + pos embeddings attn_layers = Decoder( dim = 512, depth = 6, heads = 8 ) ) </code></pre> <h3>Root Mean Square Layer Normalization</h3> <p><a href="https://arxiv.org/abs/1910.07467">https://arxiv.org/abs/1910.07467</a></p> <p>The authors propose to replace layer normalization with a simpler alternative, without mean centering and the learned bias. An investigative paper found this to be the <a href="https://arxiv.org/abs/2102.11972">best performing normalization variant</a>. It was also used in Deepmind's latest large language models, <a href="https://deepmind.com/research/publications/2021/improving-language-models-by-retrieving-from-trillions-of-tokens">Retro</a> and <a href="https://arxiv.org/abs/2112.11446">Gopher</a>.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, use_rmsnorm = True # set to true to use for all layers ) ) </code></pre> <p><em>July 2023</em> <a href="https://arxiv.org/abs/2307.14995">A linear attention paper</a> has experiments to show that removing the learned multiplicative gamma led to no performance degradation. This simplifies the RMS normalization to a satisfying <code>l2norm(x) * sqrt(dim)</code>.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, use_simple_rmsnorm = True # set to true to use for all layers ) ) </code></pre> <h3>GLU Variants Improve Transformer</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/ffglu.png"></p> <p><a href="https://arxiv.org/abs/2002.05202">https://arxiv.org/abs/2002.05202</a></p> <p>Noam Shazeer paper that explores gating in the feedforward, finding that simple gating with GELU leads to significant improvements. This variant also showed up in the latest mT5 architecture. You should always turn this on (I may eventually turn it on by default).</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, ff_glu = True # set to true to use for all feedforwards ) ) </code></pre> <p>The <a href="https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html">PaLM</a> language model also chose to use the Swish GLU variant. You can turn this on by setting two flags</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, ff_swish = True, # set this to True ff_glu = True # set to true to use for all feedforwards ) ) </code></pre> <h3>No Bias in Feedforward</h3> <p>Starting with <a href="https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html">PaLM</a>, there begun a trend to remove biases from the transformer all together. <a href="https://github.com/borisdayma">Boris Dayma</a> has run a number of experiments that showed removing biases from feedforwards led to increased throughput without any loss of accuracy. This was corroborated by <a href="https://arxiv.org/abs/2212.14034">yet another paper</a> investigating transformer architecture variants.</p> <p>You can turn off the feedforward bias as follows</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, ff_no_bias = True # set this to True ) ) </code></pre> <h3>ReLU²</h3> <p><a href="https://arxiv.org/abs/2109.08668">https://arxiv.org/abs/2109.08668</a></p> <p>This paper used neural architecture search and found an activation, Relu Squared, that is both simpler and performs better than GELU, in the autoregressive language model setting. I have confirmed this in my independent experiments. However, if one were using the GLU variant from above, GELU still performs better. Pending further corroboration.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, ff_relu_squared = True ) ) </code></pre> <h3>Explicit Sparse Transformer: Concentrated Attention Through Explicit Selection</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/topk-attention.png" width="500px"></p> <p><a href="https://arxiv.org/abs/1912.11637">https://arxiv.org/abs/1912.11637</a></p> <p>This paper proposes an efficient way to sparsify attention by zeroing all dot-product query/key values not within the top k values. The show that this cheap method was as effective as other more expensive operations like sparsemax or entmax15. This technique comes with the cost of an extra hyperparameter (the top k values to keep). The paper recommends a value of <code>k = 8</code></p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_sparse_topk = 8 # keep only the top 8 values before attention (softmax) ) ) </code></pre> <h3>Talking-Heads Attention</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/talking-heads.png" width="500px"></p> <p><a href="https://arxiv.org/abs/2003.02436">https://arxiv.org/abs/2003.02436</a></p> <p>A Noam Shazeer paper that proposes mixing information between heads pre and post attention (softmax). This comes with the cost of extra memory and compute.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_talking_heads = True # turn on information exchange between attention heads ) ) </code></pre> <h3>One Write-Head Is All You Need</h3> <p><a href="https://arxiv.org/abs/1911.02150">https://arxiv.org/abs/1911.02150</a></p> <p>Yet another Noam Shazeer paper (he's a legend) that proposes to only have one head for the key / values, but multi-headed queries. This paper was largely ignored for a while, but recently validated at scale in <a href="https://arxiv.org/abs/2203.07814">AlphaCode</a> as well as <a href="https://arxiv.org/abs/2204.02311">PaLM</a>. It has the property of being memory efficient when decoding extremely large language models. You can use it with one keyword argument as shown below.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_one_kv_head = True ) ) </code></pre> <p>This has been further generalized in <a href="https://arxiv.org/abs/2305.13245">a recent paper</a> to allow for groups of query heads to attend to a single key / value head. You can use this by specifying the <code>attn_kv_heads</code></p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8, attn_kv_heads = 2 # say you want 4 query heads to attend to 1 key / value head ) ) </code></pre> <h3>Attention on Attention for Image Captioning</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/attention-on-attention.png"></p> <p><a href="https://arxiv.org/abs/1908.06954">https://arxiv.org/abs/1908.06954</a></p> <p>This paper proposes to add a gated linear unit at the end of the attention layer, further gated by the original queries. Although this is not widely used outside of visual question / answering, I suspect it should lead to improvements after seeing the success of the feedforward GLU variant.</p> <p>Update: After some experimentation, I found this variant actually performs worse, but if it were to be modified to not concatenate the queries before gating, it performs much better. That is what we will be using in this repository.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 6, heads = 8, attn_on_attn = True # gate output of attention layer, by queries ) ) </code></pre> <h3>Intra-attention Gating on Values</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/gate_values.png" width="400px"></p> <p><a href="https://github.com/deepmind/alphafold">Alphafold2</a> had a peculiar variant of attention where they gate the aggregated values with the input, presumably to have the block have more control over the update.</p> <p>A quick test shows a small but noticeable improvement, on about the same order as attention on attention.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 6, heads = 8, attn_gate_values = True # gate aggregated values with the input ) ) </code></pre> <h3>Improving Transformer Models by Reordering their Sublayers</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/sandwich.png"></p> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/sandwich-2.png"></p> <p><a href="https://arxiv.org/abs/1911.03864">https://arxiv.org/abs/1911.03864</a></p> <p>This paper proposes to break from the normal fixed pattern of alternating attention and feedforwards, but to have blocks of only attention at the beginning followed by blocks of feedforwards at the end. This was further corroborated by a paper by Nvidia that reduces the number of attention layers to be 1/3rd of the feedforwards without loss in performance.</p> <p>The amount of interleaving is controlled by a "sandwich coefficient", which they found to be optimal at a value of <code>6</code>.</p> <p>You can experiment with this feature as shown below</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 6, heads = 8, sandwich_coef = 6 # interleave attention and feedforwards with sandwich coefficient of 6 ) ) </code></pre> <h3>Weight-tied Layers</h3> <p>In the early days of the cambrian explosion of BERT, a paper explored weight tying all the layers, the model named <a href="https://arxiv.org/abs/1909.11942">ALBERT</a>. You can use it by setting <code>weight_tie_layers = True</code></p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 12, weight_tie_layers = True # set this to True to weight tie all the layers ) ) </code></pre> <p>If you wish to do something more sophisticated, say 3 layers, with each layer recurrent 4 times before onto the next (similar to <a href="https://arxiv.org/abs/2405.15071">this paper</a>), that is possible as well. Be aware the <code>layers_execute_order</code> is 0-indexed</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, custom_layers = ( 'a', 'f', # 3 sets of attention and feedforward 'a', 'f', 'a', 'f' ), layers_execute_order = ( *((0, 1) * 4), # each done 4 times before sequentially passed forward, but you can probably imagine some more interesting configurations... *((2, 3) * 4), *((4, 5) * 4), ) ) ) </code></pre> <h3>Understanding and Improving Transformer From a Multi-Particle Dynamic System Point of View</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/macaron-1.png"></p> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/macaron-2.png"></p> <p><a href="https://arxiv.org/abs/1906.02762">https://arxiv.org/abs/1906.02762</a></p> <p>The authors propose to view the success of transformers from a dynamical systems point of view, and then proposes an improvement based on mathematics of that POV. Specifically, they propose to place the attention layer in between two feedforward layers. This was adopted by a paper using transformers for speech recognition, the <a href="https://arxiv.org/abs/2005.08100">Conformer</a>.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 6, heads = 8, macaron = True # use macaron configuration ) ) </code></pre> <h3>T5's Simplified Relative Positional Encoding</h3> <p><a href="https://arxiv.org/abs/1910.10683">https://arxiv.org/abs/1910.10683</a></p> <p>T5 is one of the most successful encoder / decoder transformer architectures trained to date. They invented a new simplified relative positional encoding based on learned bias values that are added to the attention matrix pre-softmax. This bias is shared and injected into each attention layer. I have decided to include this because it offers a cheap way to have relative positional encoding (superior to absolute positional), and I have read papers that suggest having positional encoding added to each layer (vs only before the first) is beneficial.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, rel_pos_bias = True # adds relative positional bias to all attention layers, a la T5 ) ) </code></pre> <h3>Residual Attention</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/residual_attn.png" width="500px"></p> <p><a href="https://arxiv.org/abs/2012.11747">https://arxiv.org/abs/2012.11747</a></p> <p>This paper from Google proposes residualizing the pre-attention scores across all layers. At the cost of no extra parameters, they show improvement on top of regular attention networks. If you turn on this setting, be aware that the best results in the paper used post-normalization, in which case a learning warmup will be needed. The authors also reported that they could use a higher learning rate and get even better gains in the same amount of steps. (In the paper they use <code>2e-4</code> vs <code>1e-4</code> for vanilla transformer)</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Encoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 512, depth = 6, heads = 8, pre_norm = False, # in the paper, residual attention had best results with post-layernorm residual_attn = True # add residual attention ) ) </code></pre> <p>I also tried residualizing cross attention and may have noticed an improvement in convergence. You can try it by setting the <code>cross_residual_attn</code> keyword to <code>True</code></p> <pre><code class="language-python">import torch from x_transformers import XTransformer model = XTransformer( dim = 512, enc_num_tokens = 256, enc_depth = 6, enc_heads = 8, enc_max_seq_len = 1024, dec_num_tokens = 256, dec_depth = 6, dec_heads = 8, dec_max_seq_len = 1024, dec_cross_residual_attn = True # residualize cross attention ) </code></pre> <h3>Transformer-XL recurrence</h3> <p>You can also do Transformer-XL recurrence, by simply passing in a <code>max_mem_len</code> in the <code>TransformerWrapper</code> class, and then making sure your <code>Decoder</code> has <code>rel_pos_bias</code> (or <code>rotary_pos_emb</code>) set to <code>True</code>.</p> <p>Then, you can retrieve the memories at each step with the <code>return_mems</code> keyword and pass it to the next iteration.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model_xl = TransformerWrapper( num_tokens = 20000, max_seq_len = 512, max_mem_len = 2048, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, rel_pos_bias = True ) ) seg1 = torch.randint(0, 20000, (1, 512)) seg2 = torch.randint(0, 20000, (1, 512)) seg3 = torch.randint(0, 20000, (1, 512)) logits1, mems1 = model_xl(seg1, return_mems = True) logits2, mems2 = model_xl(seg2, mems = mems1, return_mems = True) logits3, mems3 = model_xl(seg3, mems = mems2, return_mems = True) </code></pre> <p>Setting up the logic for training and sampling from transformer xl can be a bit overwhelming. This repository offers a simple wrapper that should make this easy, with the <code>XLAutoregressiveWrapper</code>.</p> <pre><code class="language-python"># pass in the above model_xl xl_wrapper = XLAutoregressiveWrapper(model_xl) seg = torch.randint(0, 20000, (1, 4096)).cuda() # sequence exceeding max length, automatically segmented and memory managed loss = xl_wrapper(seg) loss.backward() # then, after much training prime = seg[:, :1024] # if prime exceeds max length, memory will be caught up before generating generated = xl_wrapper.generate(prime, 4096) # (1, 4096) </code></pre> <h3>Enhanced recurrence</h3> <img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/enhanced-recurrence.png" width="400px"> <p><a href="https://arxiv.org/abs/2012.15688">This paper</a> proposes a simple technique to enhance the range of Transformer-XL. They simply route the memory segment of a layer to the layer below it, for the next recurrent step. You can enable this by setting <code>shift_mem_down = 1</code>. You can also shift down arbitrary number of layers by setting this value to <code>&gt; 1</code>.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model_xl = TransformerWrapper( num_tokens = 20000, max_seq_len = 512, max_mem_len = 2048, shift_mem_down = 1, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, rotary_pos_emb = True ) ) seg1 = torch.randint(0, 20000, (1, 512)) seg2 = torch.randint(0, 20000, (1, 512)) seg3 = torch.randint(0, 20000, (1, 512)) logits1, mems1 = model_xl(seg1, return_mems = True) logits2, mems2 = model_xl(seg2, mems = mems1, return_mems = True) # mems1 of layer N are automatically routed to the layer N-1 </code></pre> <h3>Gated residual</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/gating.png" width="500px"></p> <p><a href="https://arxiv.org/abs/1910.06764">https://arxiv.org/abs/1910.06764</a></p> <p>The authors propose gating the residual connections in the transformer network and demonstrate increased stability and performance for Transformer-XL in a variety of reinforcement learning tasks.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, max_mem_len = 2048, attn_layers = Decoder( dim = 512, depth = 6, heads = 16, gate_residual = True ) ) </code></pre> <h3>Rotary Positional Embeddings</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/rotary.png" width="500px"></p> <p>Developed in Beijing, this new technique quickly gained interest in the NLP circles. In short, it allows you to endow the transformer with relative positional embeddings at the cost of no learned parameters. You apply a rotary operation to the queries and keys prior to their dot product in attention. The big idea is injecting positions through rotations.</p> <p>Highly recommend that you have this turned on whenever you are working on an ordered sequence.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, rotary_pos_emb = True # turns on rotary positional embeddings ) ) </code></pre> <p>Update (12/2022): Rotary embedding has since been hugely successful, widely adopted in many large language models, including the largest in the world, PaLM. However, it has been uncovered in the ALiBi paper that rotary embeddings cannot length extrapolate well. This was recently addressed in <a href="https://arxiv.org/abs/2212.10554v1">a Microsoft research paper</a>. They propose a way to unobtrusively add the same decay as in ALiBi, and found that this resolves the extrapolation problem. You can use it in this repository by setting <code>rotary_xpos = True</code>. Like ALiBi, it would enforce the attention to be local. You can set the receptive field with <code>rotary_xpos_scale_base</code> value, which defaults to <code>512</code></p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, rotary_xpos = True # modified rotary to extrapolate well beyond length at which it was trained ) ) </code></pre> <h3>Dynamic Positional Bias</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/dynamic-pos-bias.png" width="150px"></p> <p>This technique bears roots from the field of vision transformers, where researchers are trying to have relative positions generalize to larger resolutions (without having to retrain the entire network). It was used in two recent papers, <a href="https://arxiv.org/abs/2108.00154">CrossFormer</a>, as well as <a href="https://arxiv.org/abs/2111.09883">SwinV2</a>.</p> <p><a href="https://github.com/cfoster0">Charles Foster</a> first tried this for a language model, and found that it works. Later on <a href="https://github.com/bob80333">Eric Engelhart</a> produced experimental results that show the same type of extrapolation holds, even for 1d sequences.</p> <p>Eric trained at sequence lengths of 128, and showed that it generalized well to 1024. In addition, he showed that linear positions was better than log (used in SwinV2), for language.</p> <p>Linear distances</p> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/dynamic-pos-bias-linear.png" width="600px"></p> <p>Log distances</p> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/dynamic-pos-bias-log.png" width="600px"></p> <p>Negative control - Sinusoidal</p> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/dynamic-pos-bias-sinusoidal.png" width="600px"></p> <p>More of Eric's experimental results can be found <a href="https://github.com/bob80333/investigating_extrapolation">here</a></p> <p>You can use this type of relative position if you wish to train at smaller sequence lengths and have it generalize to longer ones, for both autoregressive and bidirectional models.</p> <p>Update: <a href="https://www.kaggle.com/competitions/stanford-ribonanza-rna-folding/discussion/460121">First place RNA folding using dynamic positional bias</a></p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 256, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, dynamic_pos_bias = True, # set this to True dynamic_pos_bias_log_distance = False # whether to use log distance, as in SwinV2 ) ) </code></pre> <h3>ALiBi Positional Embedding</h3> <p><a href="https://ofir.io/train_short_test_long.pdf">This paper</a> proposes to simply apply a static linear bias to the attention matrix. The authors show this is not only effective as a relative positional encoding, but also allows the attention net to extrapolate to greater sequences length than what it was trained on, for autoregressive language models.</p> <p>This repository also offers a bidirectional variant (nonsymmetric), proposed by the authors <a href="https://github.com/ofirpress/attention_with_linear_biases/issues/5">here</a>. However, this is untested. If you need bidirectional length extrapolation, the safest option would be Dynamic Position Bias</p> <p>Update: It may be that ALiBi enforces a strong local attention across the heads, and may hinder it from attending at distances greater than 1k. To avoid any issues with global message passing, I've decided to introduce another hyperparameter <code>alibi_num_heads</code>, so one can specify less heads for the ALiBi bias</p> <p>Update: There are reports that ALiBi outperform Rotary embeddings for pretraining and downstream fine-tuning.</p> <p>Update: <a href="https://arxiv.org/abs/2305.19466">New paper</a> shows that no positional embedding can length extrapolate even than explicit ones</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, alibi_pos_bias = True, # turns on ALiBi positional embedding alibi_num_heads = 4 # only use ALiBi for 4 out of the 8 heads, so other 4 heads can still attend far distances ) ) </code></pre> <h3>Shifted Tokens</h3> <p>An <a href="https://github.com/BlinkDL">independent researcher</a> has found that shifting a subset of the feature dimension along the sequence dimension by 1 token helps with convergence (<a href="https://zhuanlan.zhihu.com/p/191393788">Time-mixing</a>). I have tested this for the autoregressive case and can confirm that it leads to greatly improved convergence. This also lines up with <a href="https://arxiv.org/abs/2106.07477">the results</a> of some papers in the vision domain.</p> <p>To use it, simply set <code>shift_tokens = 1</code> (or to whatever number of shifts you desire). The feature dimension will be divided by <code>shift_tokens + 1</code> and then each chunk will be shifted <code>[0, shift_tokens]</code> respectively</p> <p>Update: new experiments by @sdtblck suggests this may only work for character-level training</p> <p>Update: after more experiments, it seems that in the context of BPE encoding, with rotary turned on, there is no benefit to shifting. for character-level training, shifting may still improve a tiny bit</p> <p>Update: When doing BPE encoded tokens, it seems that shift of 2 will bottleneck the dimensions (divided by 5). It is recommended you always do a shift of 1, unless if you are working with character level.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, shift_tokens = 1 ) ) </code></pre> <p>If you want finer control over how much is shifted per block (whether attention or feedforward), simply pass in a tuple of size that is equal to the number of layers.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, shift_tokens = (1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0) # 12 blocks, attention and feedforward alternating, with progressively less shifting ) ) </code></pre> <h3>Sandwich Norm</h3> <img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/sandwich_norm.png" width="400px"> <p>This technique first made an appearance in <a href="https://arxiv.org/abs/2105.13290">the CoqView paper</a>, a Chinese version of the famous text-to-image transformer DALL-E. They propose, when using pre-layernorm, to add an extra layernorm to all the branch outputs. I have found this to be very effective for a number of projects, when facing instability during training.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, sandwich_norm = True # set this to True ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <h3>ResiDual</h3> <img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/resi_dual.png" width="400px"> <p><a href="https://arxiv.org/abs/2304.14802">This Microsoft paper</a> proposes yet another normalization configuration, combining both pre and post layernorm. They claim this hybridization reduces representation collapse (known to be an issue with pre-layernorm with increasing depth), while maintaining stability and reducing vanishing gradients (issues with post-layernorm). Initial experiments on my end show it to work no worse than pre-layernorm or sandwich norm. More study needed by the public to see if this is actually a winning technique.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, resi_dual = True, # set this to True resi_dual_scale = 0.1 # in appendix, they said on fp16 the prenorm residual is prone to overflow. they claim by scaling it at each layer by a factor, it would prevent the overflow, and keep results the same (as layernorms are invariant to scaling of the input) ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <h3>Normformer</h3> <img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/normformer.png" width="400px"> <p>This <a href="https://openreview.net/forum?id=GMYWzWztDx5">paper</a> uncovers an issue with pre-norm transformers where gradients are mismatched between the early and later layers. They propose 4 changes, of which I will be offering 3.</p> <p>The first change is to offer per head scaling after aggregating the values in attention. My experiments show a slight improvement in convergence.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_head_scale = True # set this to True ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <p>The second change is an extra layernorm right after the activation in the feedforward. I have also verified a slight improvement, at the cost of extra compute.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, ff_post_act_ln = True # set this to True ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <p>For the residual scaling, you simply have to set <code>scale_residual = True</code>. I have noticed slight improvements, but occasional instability as well, so use with caution.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, scale_residual = True # set this to True ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <p>The last change is a layernorm right after the outwards projection in attention. This is actually identical to the sandwich norm proposed by the Coqview paper, so you can use this by simply setting <code>sandwich_norm = True</code>, although it would also add it to the feedforward layer.</p> <h3>Cosine Sim Attention</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/cosine-sim-attention.png" width="400px"></p> <p>This <a href="https://arxiv.org/abs/2010.04245">paper</a> proposes to l2 normalize the queries and keys along the head dimension before the dot product (cosine similarity), with the additional change of the scale being learned rather than static. The normalization prevents the attention operation from overflowing, and removes any need for numerical stability measures prior to softmax. Both are perennial problems when training transformers.</p> <p>This was validated at scale recently by the training of <a href="https://arxiv.org/abs/2111.09883">a 3B parameter vision transformer</a>. The SwinV2 paper also proposes to change the pre-layernorm to a post-layernorm for further stability.</p> <p>I have validated that this works just as well as dot product attention in an autoregressive setting, if one were to initialize the temperature as proposed in the QK-norm paper (as a function of the sequence length).</p> <p>This flavor of attention also has <a href="https://arxiv.org/abs/2111.05498">a connection</a> to sparse distributed memory. <a href="https://www.youtube.com/watch?v=THIIk7LR9_8">[youtube talk]</a></p> <p>Update: I have discovered a way to remove the learned temperature altogether, by grouping the feature dimension and doing l2-normalization on each group. This allows the queries and keys to have a similarity that is upper bounded by the number of groups. A group size of 8 or 16 was sufficient in my tests. Decided to name this technique "Grouped QK Normalization". The drawback is that I believe an attention head dimension 32 is too small to use this tactic (a dimension often used in vision)</p> <p>Update 2: Tero Karras has successfully used cosine sim attention in <a href="https://arxiv.org/abs/2312.02696">a new paper</a>.</p> <p>You can use it as follows</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_qk_norm = True, # set this to True attn_qk_norm_groups = 8 # number of groups in the feature dimension for l2norm, similarity scores will be bounded between [-group, group]. determines how sharp the attention can be ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <p>Another update: Simply scaling the cosine similarity (group of 1) with a fixed constant (10) may work too</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 6, heads = 8, attn_qk_norm = True, # set to True attn_qk_norm_scale = 10 # new scale on the similarity, with groups of 1 ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <h3>QK RMSNorm</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/qknorm-analysis.png" width="450px"></p> <p>Update: Google Brain has proven out something similar to cosine sim attention in <a href="https://arxiv.org/abs/2302.05442">a 22B parameter model</a>. In their papers, they have analysis showing that the normalization resulted in not only extra stability, but also better results in the end (due to less need to adjust learning rate when increasing parameter count).</p> <p>We are nearing the point of wiping out a source of transformer training instability with one simple intervention, in my opinion. The only slight difference in the paper is that they still have a learned scale across the feature dimension (per use of rmsnorm). Not sure how critical this is, but just to make sure we don't miss anything, I will include this here. You can use this by setting <code>qk_norm_dim_scale = True</code></p> <p>Update: <a href="https://twitter.com/Tim_Dettmers/status/1625531080513306627">Counterpoint from Tim Dettmers</a></p> <p>Update 2: <a href="https://arxiv.org/abs/2305.19268">Counter</a> to Tim's assertion that outliers are needed, and potentially even <a href="https://arxiv.org/abs/2306.12929">some solutions</a></p> <p>Update 3: Used by <a href="https://www.adept.ai/blog/persimmon-8b">8B parameter LLM</a> successfully</p> <p>Update 4: a MetaAI group found that they can <a href="https://arxiv.org/abs/2309.16588">alleviate outliers</a> by adding <code>register tokens</code>, also known as <code>memory tokens</code> from earlier literature (Burtsev et al). Perhaps what should be tried next is see if qk norm can be improved in the presence of memory tokens.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8, attn_qk_norm = True, attn_qk_norm_dim_scale = True # set this to True, in addition to `attn_qk_norm = True` ) ) x = torch.randint(0, 256, (1, 1024)) model(x) </code></pre> <h3>Turning off absolute positional embedding</h3> <p>A number of papers have hinted that causal transformers (<code>Decoder</code>) can learn absolute positions in the absence of added embeddings of any sort. This was recently thoroughly investigated <a href="https://arxiv.org/abs/2203.16634">here</a>. You can turn off the absolute positional embedding by setting <code>use_abs_pos_emb = False</code> in the <code>TransformerWrapper</code></p> <p>Given <a href="https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html">PaLM</a>, the trend going forward may be to forgo absolute positional embedding (again, for causal transformers only), and add relative positional embeddings with RoPE, ALiBi, etc.</p> <p>Update: <a href="https://arxiv.org/abs/2305.19466">This paper</a> shows that in the absence of any engineered absolute or relative positional embeddings, decoders can generate implicit positions, and even length generalize better than solutions of the past. They were unaware of dynamic positional bias, however.</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, use_abs_pos_emb = False, # set this to False attn_layers = Decoder( dim = 512, depth = 6, heads = 8, ) ) x = torch.randint(0, 20000, (1, 1024)) model(x) </code></pre> <h3>Forgetful Causal Mask</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/fcm.png" width="450px"></p> <p><a href="https://arxiv.org/abs/2210.13432">This paper</a> shows convincing results that one can combine masking (from masked language modeling) with autoregressive training, leading to significantly better results.</p> <p>You can use this by setting the <code>mask_prob</code> on the <code>AutoregressiveWrapper</code> class</p> <pre><code class="language-python">import torch from x_transformers import TransformerWrapper, Decoder, AutoregressiveWrapper model = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8 ) ) model = AutoregressiveWrapper( model, mask_prob = 0.15 # in paper, they use 15%, same as BERT ).cuda() # mock data x = torch.randint(0, 20000, (1, 1024)).cuda() # derive cross entropy loss, masking all taken care of loss = model(x) loss.backward() </code></pre> <h2>Miscellaneous</h2> <h3>Cross Attention</h3> <pre><code class="language-python">import torch from x_transformers import Encoder, CrossAttender enc = Encoder(dim = 512, depth = 6) model = CrossAttender(dim = 512, depth = 6) nodes = torch.randn(1, 1, 512) node_masks = torch.ones(1, 1).bool() neighbors = torch.randn(1, 5, 512) neighbor_masks = torch.ones(1, 5).bool() encoded_neighbors = enc(neighbors, mask = neighbor_masks) model(nodes, context = encoded_neighbors, mask = node_masks, context_mask = neighbor_masks) # (1, 1, 512) </code></pre> <h3>Continuous Embeddings</h3> <pre><code class="language-python">import torch from x_transformers import ContinuousTransformerWrapper, Decoder model = ContinuousTransformerWrapper( dim_in = 32, dim_out = 100, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8 ) ) x = torch.randn((1, 1024, 32)) mask = torch.ones(1, 1024).bool() model(x, mask = mask) # (1, 1024, 100) </code></pre> <p>You can also train a transformer that accepts continuous values autoregressively easily, in the same scheme as done successfully in <a href="https://arxiv.org/abs/2112.05329">this paper</a></p> <pre><code class="language-python">import torch from x_transformers import ContinuousTransformerWrapper, Decoder from x_transformers import ContinuousAutoregressiveWrapper model = ContinuousTransformerWrapper( dim_in = 777, dim_out = 777, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8 ) ) # wrap it with the continuous autoregressive wrapper model = ContinuousAutoregressiveWrapper(model) # mock data x = torch.randn((1, 1024, 777)) mask = torch.ones(1, 1024).bool() # train on a lot of data above loss = model(x, mask = mask) loss.backward # then generate start_emb = torch.randn(1, 777) generated = model.generate(start_emb, 17) # (17, 777) </code></pre> <h3>xVal - Continuous and Discrete</h3> <p><img src="https://raw.githubusercontent.com/lucidrains/x-transformers/main/images/xval.png" width="400px"></p> <p>This is promising work that resulted from the collaboration across many institutes (collectively known as Polymathic AI). They found that by offering a continuously scaled number token to the transformer, the transformer was able to generalize arithmetic and forecasting tasks better than the alternative encoding schemes.</p> <p>This is corroborated by some <a href="https://github.com/lucidrains/tab-transformer-pytorch#ft-transformer">prior work</a></p> <pre><code class="language-python">import torch from x_transformers import ( Decoder, XValTransformerWrapper, XValAutoregressiveWrapper ) model = XValTransformerWrapper( num_tokens = 4, numerical_token_id = 3, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8 ) ) # wrap it with the xval autoregressive wrapper model = XValAutoregressiveWrapper(model) # mock data ids = torch.randint(0, 4, (1, 777)) nums = torch.randn(1, 777) # train on a lot of data above loss = model(ids, nums) loss.backward() # then generate start_ids = torch.randint(0, 4, (1, 1)) start_nums = torch.randn(1, 1) ids_out, num_out, is_number_mask = model.generate(start_ids, start_nums, 17) # (1, 17), (1, 17), (1, 17) # discrete, continuous, mask for discrete / continuous </code></pre> <h2>Citations</h2> <pre><code class="language-bibtex">@misc{vaswani2017attention, title = {Attention Is All You Need}, author = {Ashish Vaswani and Noam Shazeer and Niki Parmar and Jakob Uszkoreit and Llion Jones and Aidan N. Gomez and Lukasz Kaiser and Illia Polosukhin}, year = {2017}, eprint = {1706.03762}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@article{DBLP:journals/corr/abs-1907-01470, author = {Sainbayar Sukhbaatar and Edouard Grave and Guillaume Lample and Herv{\'{e}} J{\'{e}}gou and Armand Joulin}, title = {Augmenting Self-attention with Persistent Memory}, journal = {CoRR}, volume = {abs/1907.01470}, year = {2019}, url = {http://arxiv.org/abs/1907.01470} } </code></pre> <pre><code class="language-bibtex">@article{1910.05895, author = {Toan Q. Nguyen and Julian Salazar}, title = {Transformers without Tears: Improving the Normalization of Self-Attention}, year = {2019}, eprint = {arXiv:1910.05895}, doi = {10.5281/zenodo.3525484}, } </code></pre> <pre><code class="language-bibtex">@misc{shazeer2020glu, title = {GLU Variants Improve Transformer}, author = {Noam Shazeer}, year = {2020}, url = {https://arxiv.org/abs/2002.05202} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Zoph2022STMoEDS, title = {ST-MoE: Designing Stable and Transferable Sparse Expert Models}, author = {Barret Zoph and Irwan Bello and Sameer Kumar and Nan Du and Yanping Huang and Jeff Dean and Noam M. Shazeer and William Fedus}, year = {2022} } </code></pre> <pre><code class="language-bibtex">@misc{bhojanapalli2020lowrank, title = {Low-Rank Bottleneck in Multi-head Attention Models}, author = {Srinadh Bhojanapalli and Chulhee Yun and Ankit Singh Rawat and Sashank J. Reddi and Sanjiv Kumar}, year = {2020}, eprint = {2002.07028} } </code></pre> <pre><code class="language-bibtex">@misc{burtsev2020memory, title = {Memory Transformer}, author = {Mikhail S. Burtsev and Grigory V. Sapunov}, year = {2020}, eprint = {2006.11527}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{zhao2019explicit, title = {Explicit Sparse Transformer: Concentrated Attention Through Explicit Selection}, author = {Guangxiang Zhao and Junyang Lin and Zhiyuan Zhang and Xuancheng Ren and Qi Su and Xu Sun}, year = {2019}, eprint = {1912.11637}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{correia2019adaptively, title = {Adaptively Sparse Transformers}, author = {Gonçalo M. Correia and Vlad Niculae and André F. T. Martins}, year = {2019}, eprint = {1909.00015}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{shazeer2020talkingheads, title = {Talking-Heads Attention}, author = {Noam Shazeer and Zhenzhong Lan and Youlong Cheng and Nan Ding and Le Hou}, year = {2020}, eprint = {2003.02436}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{press2020improving, title = {Improving Transformer Models by Reordering their Sublayers}, author = {Ofir Press and Noah A. Smith and Omer Levy}, year = {2020}, eprint = {1911.03864}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{lu2019understanding, title = {Understanding and Improving Transformer From a Multi-Particle Dynamic System Point of View}, author = {Yiping Lu and Zhuohan Li and Di He and Zhiqing Sun and Bin Dong and Tao Qin and Liwei Wang and Tie-Yan Liu}, year = {2019}, eprint = {1906.02762}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{ke2020rethinking, title = {Rethinking Positional Encoding in Language Pre-training}, author = {Guolin Ke and Di He and Tie-Yan Liu}, year = {2020}, eprint = {2006.15595}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{dosovitskiy2020image, title = {An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale}, author = {Alexey Dosovitskiy and Lucas Beyer and Alexander Kolesnikov and Dirk Weissenborn and Xiaohua Zhai and Thomas Unterthiner and Mostafa Dehghani and Matthias Minderer and Georg Heigold and Sylvain Gelly and Jakob Uszkoreit and Neil Houlsby}, year = {2020}, eprint = {2010.11929}, archivePrefix = {arXiv}, primaryClass = {cs.CV} } </code></pre> <pre><code class="language-bibtex">@misc{huang2019attention, title = {Attention on Attention for Image Captioning}, author = {Lun Huang and Wenmin Wang and Jie Chen and Xiao-Yong Wei}, year = {2019}, eprint = {1908.06954}, archivePrefix = {arXiv}, primaryClass = {cs.CV} } </code></pre> <pre><code class="language-bibtex">@misc{raffel2020exploring, title = {Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer}, author = {Colin Raffel and Noam Shazeer and Adam Roberts and Katherine Lee and Sharan Narang and Michael Matena and Yanqi Zhou and Wei Li and Peter J. Liu}, year = {2020}, eprint = {1910.10683}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@inproceedings{martins-etal-2020-sparse, title = "Sparse Text Generation", author = "Martins, Pedro Henrique and Marinho, Zita and Martins, Andr{\'e} F. T.", booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP)", month = nov, year = "2020", address = "Online", publisher = "Association for Computational Linguistics", url = "https://www.aclweb.org/anthology/2020.emnlp-main.348" } </code></pre> <pre><code class="language-bibtex">@misc{he2020realformer, title = {RealFormer: Transformer Likes Residual Attention}, author = {Ruining He and Anirudh Ravula and Bhargav Kanagal and Joshua Ainslie}, year = {2020}, eprint = {2012.11747}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{carion2020endtoend, title = {End-to-End Object Detection with Transformers}, author = {Nicolas Carion and Francisco Massa and Gabriel Synnaeve and Nicolas Usunier and Alexander Kirillov and Sergey Zagoruyko}, year = {2020}, eprint = {2005.12872}, archivePrefix = {arXiv}, primaryClass = {cs.CV} } </code></pre> <pre><code class="language-bibtex">@misc{press2021ALiBi, title = {Train Short, Test Long: Attention with Linear Biases Enable Input Length Extrapolation}, author = {Ofir Press and Noah A. Smith and Mike Lewis}, year = {2021}, url = {https://ofir.io/train_short_test_long.pdf} } </code></pre> <pre><code class="language-bibtex">@misc{parisotto2019stabilizing, title = {Stabilizing Transformers for Reinforcement Learning}, author = {Emilio Parisotto and H. Francis Song and Jack W. Rae and Razvan Pascanu and Caglar Gulcehre and Siddhant M. Jayakumar and Max Jaderberg and Raphael Lopez Kaufman and Aidan Clark and Seb Noury and Matthew M. Botvinick and Nicolas Heess and Raia Hadsell}, year = {2019}, eprint = {1910.06764}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{narang2021transformer, title = {Do Transformer Modifications Transfer Across Implementations and Applications?}, author = {Sharan Narang and Hyung Won Chung and Yi Tay and William Fedus and Thibault Fevry and Michael Matena and Karishma Malkan and Noah Fiedel and Noam Shazeer and Zhenzhong Lan and Yanqi Zhou and Wei Li and Nan Ding and Jake Marcus and Adam Roberts and Colin Raffel}, year = {2021}, eprint = {2102.11972}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{zhang2019root, title = {Root Mean Square Layer Normalization}, author = {Biao Zhang and Rico Sennrich}, year = {2019}, eprint = {1910.07467}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Qin2023ScalingTT, title = {Scaling TransNormer to 175 Billion Parameters}, author = {Zhen Qin and Dong Li and Weigao Sun and Weixuan Sun and Xuyang Shen and Xiaodong Han and Yunshen Wei and Baohong Lv and Fei Yuan and Xiao Luo and Y. Qiao and Yiran Zhong}, year = {2023}, url = {https://api.semanticscholar.org/CorpusID:260203124} } </code></pre> <pre><code class="language-bibtex">@misc{su2021roformer, title = {RoFormer: Enhanced Transformer with Rotary Position Embedding}, author = {Jianlin Su and Yu Lu and Shengfeng Pan and Bo Wen and Yunfeng Liu}, year = {2021}, eprint = {2104.09864}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Chen2023ExtendingCW, title = {Extending Context Window of Large Language Models via Positional Interpolation}, author = {Shouyuan Chen and Sherman Wong and Liangjian Chen and Yuandong Tian}, year = {2023} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Sun2022ALT, title = {A Length-Extrapolatable Transformer}, author = {Yutao Sun and Li Dong and Barun Patra and Shuming Ma and Shaohan Huang and Alon Benhaim and Vishrav Chaudhary and Xia Song and Furu Wei}, year = {2022} } </code></pre> <pre><code class="language-bibtex">@Article{AlphaFold2021, author = {Jumper, John and Evans, Richard and Pritzel, Alexander and Green, Tim and Figurnov, Michael and Ronneberger, Olaf and Tunyasuvunakool, Kathryn and Bates, Russ and {\v{Z}}{\'\i}dek, Augustin and Potapenko, Anna and Bridgland, Alex and Meyer, Clemens and Kohl, Simon A A and Ballard, Andrew J and Cowie, Andrew and Romera-Paredes, Bernardino and Nikolov, Stanislav and Jain, Rishub and Adler, Jonas and Back, Trevor and Petersen, Stig and Reiman, David and Clancy, Ellen and Zielinski, Michal and Steinegger, Martin and Pacholska, Michalina and Berghammer, Tamas and Bodenstein, Sebastian and Silver, David and Vinyals, Oriol and Senior, Andrew W and Kavukcuoglu, Koray and Kohli, Pushmeet and Hassabis, Demis}, journal = {Nature}, title = {Highly accurate protein structure prediction with {AlphaFold}}, year = {2021}, doi = {10.1038/s41586-021-03819-2}, note = {(Accelerated article preview)}, } </code></pre> <pre><code class="language-bibtex">@software{peng_bo_2021_5196578, author = {PENG Bo}, title = {BlinkDL/RWKV-LM: 0.01}, month = {aug}, year = {2021}, publisher = {Zenodo}, version = {0.01}, doi = {10.5281/zenodo.5196578}, url = {https://doi.org/10.5281/zenodo.5196578} } </code></pre> <pre><code class="language-bibtex">@misc{csordás2021devil, title = {The Devil is in the Detail: Simple Tricks Improve Systematic Generalization of Transformers}, author = {Róbert Csordás and Kazuki Irie and Jürgen Schmidhuber}, year = {2021}, eprint = {2108.12284}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{so2021primer, title = {Primer: Searching for Efficient Transformers for Language Modeling}, author = {David R. So and Wojciech Mańke and Hanxiao Liu and Zihang Dai and Noam Shazeer and Quoc V. Le}, year = {2021}, eprint = {2109.08668}, archivePrefix = {arXiv}, primaryClass = {cs.LG} } </code></pre> <pre><code class="language-bibtex">@misc{ding2021erniedoc, title = {ERNIE-Doc: A Retrospective Long-Document Modeling Transformer}, author = {Siyu Ding and Junyuan Shang and Shuohuan Wang and Yu Sun and Hao Tian and Hua Wu and Haifeng Wang}, year = {2021}, eprint = {2012.15688}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{ding2021cogview, title = {CogView: Mastering Text-to-Image Generation via Transformers}, author = {Ming Ding and Zhuoyi Yang and Wenyi Hong and Wendi Zheng and Chang Zhou and Da Yin and Junyang Lin and Xu Zou and Zhou Shao and Hongxia Yang and Jie Tang}, year = {2021}, eprint = {2105.13290}, archivePrefix = {arXiv}, primaryClass = {cs.CV} } </code></pre> <pre><code class="language-bibtex">@inproceedings{anonymous2022normformer, title = {NormFormer: Improved Transformer Pretraining with Extra Normalization}, author = {Anonymous}, booktitle = {Submitted to The Tenth International Conference on Learning Representations }, year = {2022}, url = {https://openreview.net/forum?id=GMYWzWztDx5}, note = {under review} } </code></pre> <pre><code class="language-bibtex">@misc{henry2020querykey, title = {Query-Key Normalization for Transformers}, author = {Alex Henry and Prudhvi Raj Dachapally and Shubham Pawar and Yuxuan Chen}, year = {2020}, eprint = {2010.04245}, archivePrefix = {arXiv}, primaryClass = {cs.CL} } </code></pre> <pre><code class="language-bibtex">@misc{liu2021swin, title = {Swin Transformer V2: Scaling Up Capacity and Resolution}, author = {Ze Liu and Han Hu and Yutong Lin and Zhuliang Yao and Zhenda Xie and Yixuan Wei and Jia Ning and Yue Cao and Zheng Zhang and Li Dong and Furu Wei and Baining Guo}, year = {2021}, eprint = {2111.09883}, archivePrefix = {arXiv}, primaryClass = {cs.CV} } </code></pre> <pre><code class="language-bibtex">@article{Haviv2022TransformerLM, title = {Transformer Language Models without Positional Encodings Still Learn Positional Information}, author = {Adi Haviv and Ori Ram and Ofir Press and Peter Izsak and Omer Levy}, journal = {ArXiv}, year = {2022}, volume = {abs/2203.16634} } </code></pre> <pre><code class="language-bibtex">@article{chowdhery2022PaLM, title = {PaLM: Scaling Language Modeling with Pathways}, author = {Chowdhery, Aakanksha et al}, year = {2022} } </code></pre> <pre><code class="language-bibtex">@article{Shazeer2019FastTD, title = {Fast Transformer Decoding: One Write-Head is All You Need}, author = {Noam M. Shazeer}, journal = {ArXiv}, year = {2019}, volume = {abs/1911.02150} } </code></pre> <pre><code class="language-bibtex">@article{Ainslie2023GQATG, title = {GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints}, author = {Joshua Ainslie and James Lee-Thorp and Michiel de Jong and Yury Zemlyanskiy and Federico Lebr'on and Sumit K. Sanghai}, journal = {ArXiv}, year = {2023}, volume = {abs/2305.13245}, url = {https://api.semanticscholar.org/CorpusID:258833177} } </code></pre> <pre><code class="language-bibtex">@misc{schlag2020enhancing, title = {Enhancing the Transformer with explicit relational encoding for math problem solving}, author = {Imanol Schlag and Paul Smolensky and Roland Fernandez and Nebojsa Jojic and J{\"u}rgen Schmidhuber and Jianfeng Gao}, year = {2020}, url = {https://openreview.net/forum?id=B1xfElrKPr} } </code></pre> <pre><code class="language-bibtex">@article{Liu2022FCMFC, title = {FCM: Forgetful Causal Masking Makes Causal Language Models Better Zero-Shot Learners}, author = {Hao Liu and Xinyang Geng and Lisa Lee and Igor Mordatch and Sergey Levine and Sharan Narang and P. Abbeel}, journal = {ArXiv}, year = {2022}, volume = {abs/2210.13432} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Huang2016DeepNW, title = {Deep Networks with Stochastic Depth}, author = {Gao Huang and Yu Sun and Zhuang Liu and Daniel Sedra and Kilian Q. Weinberger}, booktitle = {European Conference on Computer Vision}, year = {2016} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Hua2022TransformerQI, title = {Transformer Quality in Linear Time}, author = {Weizhe Hua and Zihang Dai and Hanxiao Liu and Quoc V. Le}, booktitle = {International Conference on Machine Learning}, year = {2022} } </code></pre> <pre><code class="language-bibtex">@article{Chang2022MaskGITMG, title = {MaskGIT: Masked Generative Image Transformer}, author = {Huiwen Chang and Han Zhang and Lu Jiang and Ce Liu and William T. Freeman}, journal = {2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, year = {2022}, pages = {11305-11315} } </code></pre> <pre><code class="language-bibtex">@article{Lezama2022ImprovedMI, title = {Improved Masked Image Generation with Token-Critic}, author = {Jos{\'e} Lezama and Huiwen Chang and Lu Jiang and Irfan Essa}, journal = {ArXiv}, year = {2022}, volume = {abs/2209.04439} } </code></pre> <pre><code class="language-bibtex">@misc{https://doi.org/10.48550/arxiv.2302.01327, doi = {10.48550/ARXIV.2302.01327}, url = {https://arxiv.org/abs/2302.01327}, author = {Kumar, Manoj and Dehghani, Mostafa and Houlsby, Neil}, title = {Dual PatchNorm}, publisher = {arXiv}, year = {2023}, copyright = {Creative Commons Attribution 4.0 International} } </code></pre> <pre><code class="language-bibtex">@inproceedings{dao2022flashattention, title = {Flash{A}ttention: Fast and Memory-Efficient Exact Attention with {IO}-Awareness}, author = {Dao, Tri and Fu, Daniel Y. and Ermon, Stefano and Rudra, Atri and R{\'e}, Christopher}, booktitle = {Advances in Neural Information Processing Systems}, year = {2022} } </code></pre> <pre><code class="language-bibtex">@article{Xie2023ResiDualTW, title = {ResiDual: Transformer with Dual Residual Connections}, author = {Shufang Xie and Huishuai Zhang and Junliang Guo and Xu Tan and Jiang Bian and Hany Hassan Awadalla and Arul Menezes and Tao Qin and Rui Yan}, journal = {ArXiv}, year = {2023}, volume = {abs/2304.14802} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Dehghani2023ScalingVT, title = {Scaling Vision Transformers to 22 Billion Parameters}, author = {Mostafa Dehghani and Josip Djolonga and Basil Mustafa and Piotr Padlewski and Jonathan Heek and Justin Gilmer and Andreas Steiner and Mathilde Caron and Robert Geirhos and Ibrahim M. Alabdulmohsin and Rodolphe Jenatton and Lucas Beyer and Michael Tschannen and Anurag Arnab and Xiao Wang and Carlos Riquelme and Matthias Minderer and Joan Puigcerver and Utku Evci and Manoj Kumar and Sjoerd van Steenkiste and Gamaleldin F. Elsayed and Aravindh Mahendran and Fisher Yu and Avital Oliver and Fantine Huot and Jasmijn Bastings and Mark Collier and Alexey A. Gritsenko and Vighnesh Birodkar and Cristina Nader Vasconcelos and Yi Tay and Thomas Mensink and Alexander Kolesnikov and Filip Paveti'c and Dustin Tran and Thomas Kipf and Mario Luvci'c and Xiaohua Zhai and Daniel Keysers and Jeremiah Harmsen and Neil Houlsby}, year = {2023} } </code></pre> <pre><code class="language-bibtex">@article{Beyer2022BetterPV, title = {Better plain ViT baselines for ImageNet-1k}, author = {Lucas Beyer and Xiaohua Zhai and Alexander Kolesnikov}, journal = {ArXiv}, year = {2022}, volume = {abs/2205.01580} } </code></pre> <pre><code class="language-bibtex">@article{Kazemnejad2023TheIO, title = {The Impact of Positional Encoding on Length Generalization in Transformers}, author = {Amirhossein Kazemnejad and Inkit Padhi and Karthikeyan Natesan Ramamurthy and Payel Das and Siva Reddy}, journal = {ArXiv}, year = {2023}, volume = {abs/2305.19466} } </code></pre> <pre><code class="language-bibtex">@misc{bloc97-2023 title = {NTK-Aware Scaled RoPE allows LLaMA models to have extended (8k+) context size without any fine-tuning and minimal perplexity degradation.}, author = {/u/bloc97}, url = {https://www.reddit.com/r/LocalLLaMA/comments/14lz7j5/ntkaware_scaled_rope_allows_llama_models_to_have/} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Zoph2022STMoEDS, title = {ST-MoE: Designing Stable and Transferable Sparse Expert Models}, author = {Barret Zoph and Irwan Bello and Sameer Kumar and Nan Du and Yanping Huang and Jeff Dean and Noam M. Shazeer and William Fedus}, year = {2022} } </code></pre> <pre><code class="language-bibtex">@article{Lan2019ALBERTAL, title = {ALBERT: A Lite BERT for Self-supervised Learning of Language Representations}, author = {Zhenzhong Lan and Mingda Chen and Sebastian Goodman and Kevin Gimpel and Piyush Sharma and Radu Soricut}, journal = {ArXiv}, year = {2019}, volume = {abs/1909.11942}, url = {https://api.semanticscholar.org/CorpusID:202888986} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Li2022ContrastiveDO, title = {Contrastive Decoding: Open-ended Text Generation as Optimization}, author = {Xiang Lisa Li and Ari Holtzman and Daniel Fried and Percy Liang and Jason Eisner and Tatsunori Hashimoto and Luke Zettlemoyer and Mike Lewis}, booktitle = {Annual Meeting of the Association for Computational Linguistics}, year = {2022}, url = {https://api.semanticscholar.org/CorpusID:253157949} } </code></pre> <pre><code class="language-bibtex">@inproceedings{OBrien2023ContrastiveDI, title = {Contrastive Decoding Improves Reasoning in Large Language Models}, author = {Sean O'Brien and Mike Lewis}, year = {2023}, url = {https://api.semanticscholar.org/CorpusID:261884427} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Darcet2023VisionTN, title = {Vision Transformers Need Registers}, author = {Timoth'ee Darcet and Maxime Oquab and Julien Mairal and Piotr Bojanowski}, year = {2023}, url = {https://api.semanticscholar.org/CorpusID:263134283} } </code></pre> <pre><code class="language-bibtex">@article{Bondarenko2023QuantizableTR, title = {Quantizable Transformers: Removing Outliers by Helping Attention Heads Do Nothing}, author = {Yelysei Bondarenko and Markus Nagel and Tijmen Blankevoort}, journal = {ArXiv}, year = {2023}, volume = {abs/2306.12929}, url = {https://api.semanticscholar.org/CorpusID:259224568} } </code></pre> <pre><code class="language-bibtex">@inproceedings{Golkar2023xValAC, title = {xVal: A Continuous Number Encoding for Large Language Models}, author = {Siavash Golkar and Mariel Pettee and Michael Eickenberg and Alberto Bietti and M. Cranmer and G{\'e}raud Krawezik and Francois Lanusse and Michael McCabe and Ruben Ohana and Liam Parker and Bruno R{\'e}galdo-Saint Blancard and Tiberiu Teşileanu and Kyunghyun Cho and Shirley Ho}, year = {2023}, url = {https://api.semanticscholar.org/CorpusID:263622222} } </code></pre> <pre><code class="language-bibtex">@article{Wang2022DeepNetST, title = {DeepNet: Scaling Transformers to 1, 000 Layers}, author = {Hongyu Wang and Shuming Ma and Li Dong and Shaohan Huang and Dongdong Zhang and Furu Wei}, journal = {ArXiv}, year = {2022}, volume = {abs/2203.00555}, url = {https://api.semanticscholar.org/CorpusID:247187905} } </code></pre> <pre><code class="language-bibtex">@article{Rafailov2023DirectPO, title = {Direct Preference Optimization: Your Language Model is Secretly a Reward Model}, author = {Rafael Rafailov and Archit Sharma and Eric Mitchell and Stefano Ermon and Christopher D. Manning and Chelsea Finn}, journal = {ArXiv}, year = {2023}, volume = {abs/2305.18290}, url = {https://api.semanticscholar.org/CorpusID:258959321} } </code></pre> <pre><code class="language-bibtex">@misc{xAI2024Grok, author = {xAI}, title = {Grok}, year = {2024}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {\url{https://github.com/xai-org/grok-1}}, } </code></pre> <pre><code class="language-bibtex">@inproceedings{Golovneva2024ContextualPE, title = {Contextual Position Encoding: Learning to Count What's Important}, author = {Olga Golovneva and Tianlu Wang and Jason Weston and Sainbayar Sukhbaatar}, year = {2024}, url = {https://api.semanticscholar.org/CorpusID:270094992} } </code></pre> <pre><code class="language-bibtex">@article{Peebles2022ScalableDM, title = {Scalable Diffusion Models with Transformers}, author = {William S. Peebles and Saining Xie}, journal = {2023 IEEE/CVF International Conference on Computer Vision (ICCV)}, year = {2022}, pages = {4172-4182}, url = {https://api.semanticscholar.org/CorpusID:254854389} } </code></pre> <pre><code class="language-bibtex">@misc{Rubin2024, author = {Ohad Rubin}, url = {https://medium.com/@ohadrubin/exploring-weight-decay-in-layer-normalization-challenges-and-a-reparameterization-solution-ad4d12c24950} } </code></pre> <pre><code class="language-bibtex">@article{Mesnard2024GemmaOM, title = {Gemma: Open Models Based on Gemini Research and Technology}, author = {Gemma Team Thomas Mesnard and Cassidy Hardin and Robert Dadashi and Surya Bhupatiraju and Shreya Pathak and L. Sifre and Morgane Riviere and Mihir Kale and J Christopher Love and Pouya Dehghani Tafti and L'eonard Hussenot and Aakanksha Chowdhery and Adam Roberts and Aditya Barua and Alex Botev and Alex Castro-Ros and Ambrose Slone and Am'elie H'eliou and Andrea Tacchetti and Anna Bulanova and Antonia Paterson and Beth Tsai and Bobak Shahriari and Charline Le Lan and Christopher A. Choquette-Choo and Cl'ement Crepy and Daniel Cer and Daphne Ippolito and David Reid and Elena Buchatskaya and Eric Ni and Eric Noland and Geng Yan and George Tucker and George-Christian Muraru and Grigory Rozhdestvenskiy and Henryk Michalewski and Ian Tenney and Ivan Grishchenko and Jacob Austin and James Keeling and Jane Labanowski and Jean-Baptiste Lespiau and Jeff Stanway and Jenny Brennan and Jeremy Chen and Johan Ferret and Justin Chiu and Justin Mao-Jones and Katherine Lee and Kathy Yu and Katie Millican and Lars Lowe Sjoesund and Lisa Lee and Lucas Dixon and Machel Reid and Maciej Mikula and Mateo Wirth and Michael Sharman and Nikolai Chinaev and Nithum Thain and Olivier Bachem and Oscar Chang and Oscar Wahltinez and Paige Bailey and Paul Michel and Petko Yotov and Pier Giuseppe Sessa and Rahma Chaabouni and Ramona Comanescu and Reena Jana and Rohan Anil and Ross McIlroy and Ruibo Liu and Ryan Mullins and Samuel L Smith and Sebastian Borgeaud and Sertan Girgin and Sholto Douglas and Shree Pandya and Siamak Shakeri and Soham De and Ted Klimenko and Tom Hennigan and Vladimir Feinberg and Wojciech Stokowiec and Yu-hui Chen and Zafarali Ahmed and Zhitao Gong and Tris Brian Warkentin and Ludovic Peran and Minh Giang and Cl'ement Farabet and Oriol Vinyals and Jeffrey Dean and Koray Kavukcuoglu and Demis Hassabis and Zoubin Ghahramani and Douglas Eck and Joelle Barral and Fernando Pereira and Eli Collins and Armand Joulin and Noah Fiedel and Evan Senter and Alek Andreev and Kathleen Kenealy}, journal = {ArXiv}, year = {2024}, volume = {abs/2403.08295}, url = {https://api.semanticscholar.org/CorpusID:268379206} } </code></pre> <p><em>solve intelligence... then use that to solve everything else.</em> - Demis Hassabis</p> - - - pytorch/torchchat - 2024-08-02T01:34:58Z - tag:github.com,2024-08-02:/pytorch/torchchat - - <p>Run PyTorch LLMs locally on servers, desktop and mobile</p><hr><h1>Chat with LLMs Everywhere</h1> <p>torchchat is a small codebase showcasing the ability to run large language models (LLMs) seamlessly. With torchchat, you can run LLMs using Python, within your own (C/C++) application (desktop or server) and on iOS and Android.</p> <h2>What can you do with torchchat?</h2> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#running-via-pytorch--python">Run models via PyTorch / Python</a> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#chat">Chat</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#generate">Generate</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#browser">Run chat in the Browser</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#desktopserver-execution">Run models on desktop/server without python</a> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#aoti-aot-inductor">Use AOT Inductor for faster execution</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#running-native-using-our-c-runner">Running in c++ using the runner</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#mobile-execution">Run models on mobile</a> <ul> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#deploy-and-run-on-ios">Deploy and run on iOS</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#deploy-and-run-on-android">Deploy and run on Android</a></li> </ul> </li> <li><a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#eval">Evaluate a model</a></li> </ul> <h2>Highlights</h2> <ul> <li>Command line interaction with popular LLMs such as Llama 3, Llama 2, Stories, Mistral and more</li> <li>PyTorch-native execution with performance</li> <li>Supports popular hardware and OS <ul> <li>Linux (x86)</li> <li>Mac OS (M1/M2/M3)</li> <li>Android (Devices that support XNNPACK)</li> <li>iOS 17+ (iPhone 13 Pro+)</li> </ul> </li> <li>Multiple data types including: float32, float16, bfloat16</li> <li>Multiple quantization schemes</li> <li>Multiple execution modes including: Python (Eager, Compile) or Native (AOT Inductor (AOTI), ExecuTorch)</li> </ul> <h2>Installation</h2> <p>The following steps require that you have <a href="https://www.python.org/downloads/release/python-3100/">Python 3.10</a> installed.</p> <pre><code class="language-bash"># get the code git clone https://github.com/pytorch/torchchat.git cd torchchat # set up a virtual environment python3 -m venv .venv source .venv/bin/activate # install dependencies ./install_requirements.sh </code></pre> <h2>Commands</h2> <p>The interfaces of torchchat are leveraged through <strong>Python Commands</strong> and <strong>Native Runners</strong>. While the Python Commands are enumerable in the --help menu, the latter are explored in their respective sections.</p> <pre><code class="language-bash">python3 torchchat.py --help </code></pre> <pre><code class="language-bash"># Output usage: torchchat [-h] {chat,browser,generate,export,eval,download,list,remove,where,server} ... positional arguments: {chat,browser,generate,export,eval,download,list,remove,where,server} The specific command to run chat Chat interactively with a model via the CLI generate Generate responses from a model given a prompt browser Chat interactively with a model in a locally hosted browser export Export a model artifact to AOT Inductor or ExecuTorch download Download model artifacts list List all supported models remove Remove downloaded model artifacts where Return directory containing downloaded model artifacts server [WIP] Starts a locally hosted REST server for model interaction eval Evaluate a model via lm-eval options: -h, --help show this help message and exit </code></pre> <p><strong>Python Inference</strong> (chat, generate, browser, server)</p> <ul> <li>These commands represent different flavors of performing model inference in a Python enviroment.</li> <li>Models are constructed either from CLI args or from loading exported artifacts.</li> </ul> <p><strong>Exporting</strong> (export)</p> <ul> <li>This command generates model artifacts that are consumed by Python Inference or Native Runners.</li> <li>More information is provided in the <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#aoti-aot-inductor">AOT Inductor</a> and <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#export-for-mobile">ExecuTorch</a> sections.</li> </ul> <p><strong>Inventory Management</strong> (download, list, remove, where)</p> <ul> <li>These commands are used to manage and download models.</li> <li>More information is provided in the <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#download-weights">Download Weights</a> section.</li> </ul> <p><strong>Evaluation</strong> (eval)</p> <ul> <li>This command test model fidelity via EleutherAI's <a href="https://github.com/EleutherAI/lm-evaluation-harness">lm_evaluation_harness</a>.</li> <li>More information is provided in the <a href="https://github.com/pytorch/torchchat?tab=readme-ov-file#eval">Evaluation</a> section.</li> </ul> <h2>Download Weights</h2> <p>Most models use Hugging Face as the distribution channel, so you will need to create a Hugging Face account. Create a Hugging Face user access token <a href="https://huggingface.co/docs/hub/en/security-tokens">as documented here</a> with the <code>write</code> role.</p> <p>Log into Hugging Face:</p> <pre><code>huggingface-cli login </code></pre> <p>Once this is done, torchchat will be able to download model artifacts from Hugging Face.</p> <pre><code>python3 torchchat.py download llama3.1 </code></pre> <blockquote> <p>[!NOTE] This command may prompt you to request access to Llama 3 via Hugging Face, if you do not already have access. Simply follow the prompts and re-run the command when access is granted.*</p> </blockquote> <details> <summary>Additional Model Inventory Management Commands</summary> <h3>List</h3> <p>This subcommands shows the available models</p> <pre><code class="language-bash">python3 torchchat.py list </code></pre> <h3>Where</h3> <p>This subcommands shows location of a particular model.</p> <pre><code class="language-bash">python3 torchchat.py list </code></pre> <p>This is useful in scripts when you do not want to hard-code paths</p> <h3>Remove</h3> <p>This subcommands removes the specified model</p> <pre><code class="language-bash">python3 torchchat.py remove llama3.1 </code></pre> <p>More information about these commands can be found by adding the <code>--help</code> option.</p> </details> <h2>Running via PyTorch / Python</h2> <p>The simplest way to run a model in PyTorch is via <a href="https://pytorch.org/blog/optimizing-production-pytorch-performance-with-graph-transformations/">eager execution</a>. This is the default execution mode for both PyTorch and torchchat. It performs inference without creating exporting artifacts or using a separate runner.</p> <p>The model used for inference can also be configured and tailored to specific needs (compilation, quantization, etc.). See the <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/model_customization.md">customization guide</a> for the options supported by torchchat.</p> <blockquote> <p>[!TIP] For more information about these commands, please refer to the <code>--help</code> menu.</p> </blockquote> <h3>Chat</h3> <p>This mode allows you to chat with an LLM in an interactive fashion.</p> <pre><code class="language-bash">python3 torchchat.py chat llama3.1 </code></pre> <h3>Generate</h3> <p>This mode generates text based on an input prompt.</p> <pre><code class="language-bash">python3 torchchat.py generate llama3.1 --prompt "write me a story about a boy and his bear" </code></pre> <h3>Browser</h3> <p>This mode allows you to chat with the model using a UI in your browser Running the command automatically open a tab in your browser.</p> <pre><code>streamlit run torchchat.py -- browser llama3.1 </code></pre> <h3>Server</h3> <p><strong>Note: This feature is still a work in progress and not all endpoints are working</strong></p> <details> <summary>This mode gives a REST API that matches the OpenAI API spec for interacting with a model</summary> <p>To test out the REST API, <strong>you'll need 2 terminals</strong>: one to host the server, and one to send the request.</p> <p>In one terminal, start the server</p> <pre><code class="language-bash">python3 torchchat.py server llama3.1 </code></pre> <p>In another terminal, query the server using <code>curl</code>. Depending on the model configuration, this query might take a few minutes to respond.</p> <p>Setting <code>stream</code> to "true" in the request emits a response in chunks. Currently, this response is plaintext and will not be formatted to the OpenAI API specification. If <code>stream</code> is unset or not "true", then the client will await the full response from the server.</p> <p><strong>Example Input + Output</strong></p> <pre><code>curl http://127.0.0.1:5000/chat \ -H "Content-Type: application/json" \ -d '{ "model": "llama3.1", "stream": "true", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] }' </code></pre> <pre><code>{"response":" I'm a software developer with a passion for building innovative and user-friendly applications. I have experience in developing web and mobile applications using various technologies such as Java, Python, and JavaScript. I'm always looking for new challenges and opportunities to learn and grow as a developer.\n\nIn my free time, I enjoy reading books on computer science and programming, as well as experimenting with new technologies and techniques. I'm also interested in machine learning and artificial intelligence, and I'm always looking for ways to apply these concepts to real-world problems.\n\nI'm excited to be a part of the developer community and to have the opportunity to share my knowledge and experience with others. I'm always happy to help with any questions or problems you may have, and I'm looking forward to learning from you as well.\n\nThank you for visiting my profile! I hope you find my information helpful and interesting. If you have any questions or would like to discuss any topics, please feel free to reach out to me. I"} </code></pre> </details> <h2>Desktop/Server Execution</h2> <h3>AOTI (AOT Inductor)</h3> <p><a href="https://pytorch.org/blog/pytorch2-2/">AOTI</a> compiles models before execution for faster inference. The process creates a <a href="https://en.wikipedia.org/wiki/Shared_library">DSO</a> model (represented by a file with extension <code>.so</code>) that is then loaded for inference. This can be done with both Python and C++ enviroments.</p> <p>The following example exports and executes the Llama3.1 8B Instruct model. The first command compiles and performs the actual export.</p> <pre><code>python3 torchchat.py export llama3.1 --output-dso-path exportedModels/llama3.1.so </code></pre> <blockquote> <p>[!NOTE] If your machine has cuda add this flag for performance <code>--quantize config/data/cuda.json</code> when exporting.</p> </blockquote> <p>For more details on quantization and what settings to use for your use case visit our <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/model_customization.md">customization guide</a>.</p> <h3>Run in a Python Enviroment</h3> <p>To run in a python enviroment, use the generate subcommand like before, but include the dso file.</p> <pre><code>python3 torchchat.py generate llama3.1 --dso-path exportedModels/llama3.1.so --prompt "Hello my name is" </code></pre> <p><strong>Note:</strong> Depending on which accelerator is used to generate the .dso file, the command may need the device specified: <code>--device (cuda | cpu)</code>.</p> <h3>Run using our C++ Runner</h3> <p>To run in a C++ enviroment, we need to build the runner binary.</p> <pre><code class="language-bash">scripts/build_native.sh aoti </code></pre> <p>Then run the compiled executable, with the exported DSO from earlier.</p> <pre><code class="language-bash">cmake-out/aoti_run exportedModels/llama3.1.so -z `python3 torchchat.py where llama3.1`/tokenizer.model -l 3 -i "Once upon a time" </code></pre> <p><strong>Note:</strong> Depending on which accelerator is used to generate the .dso file, the runner may need the device specified: <code>-d (CUDA | CPU)</code>.</p> <h2>Mobile Execution</h2> <p><a href="https://github.com/pytorch/executorch">ExecuTorch</a> enables you to optimize your model for execution on a mobile or embedded device.</p> <h3>Set Up ExecuTorch</h3> <p>Before running any commands in torchchat that require ExecuTorch, you must first install ExecuTorch.</p> <p>To install ExecuTorch, run the following commands. This will download the ExecuTorch repo to ./et-build/src and install various ExecuTorch libraries to ./et-build/install.</p> <blockquote> <p>[!IMPORTANT] The following commands should be run from the torchchat root directory.</p> </blockquote> <pre><code>export TORCHCHAT_ROOT=${PWD} ./scripts/install_et.sh </code></pre> <h3>Export for mobile</h3> <p>Similar to AOTI, to deploy onto device, we first export the PTE artifact, then we load the artifact for inference.</p> <p>The following example uses the Llama3.1 8B Instruct model.</p> <pre><code># Export python3 torchchat.py export llama3.1 --quantize config/data/mobile.json --output-pte-path llama3.1.pte </code></pre> <blockquote> <p>[!NOTE] We use <code>--quantize config/data/mobile.json</code> to quantize the llama3.1 model to reduce model size and improve performance for on-device use cases.</p> </blockquote> <p>For more details on quantization and what settings to use for your use case visit our <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/model_customization.md">customization guide</a>.</p> <h3>Deploy and run on Desktop</h3> <p>While ExecuTorch does not focus on desktop inference, it is capable of doing so. This is handy for testing out PTE models without sending them to a physical device.</p> <p>Specifically there are 2 ways of doing so: Pure Python and via a Runner</p> <details> <summary>Deploying via Python</summary> <pre><code># Execute python3 torchchat.py generate llama3.1 --device cpu --pte-path llama3.1.pte --prompt "Hello my name is" </code></pre> </details> <details> <summary>Deploying via a Runner</summary> <p>Build the runner</p> <pre><code class="language-bash">scripts/build_native.sh et </code></pre> <p>Execute using the runner</p> <pre><code class="language-bash">cmake-out/et_run llama3.1.pte -z `python3 torchchat.py where llama3.1`/tokenizer.model -l 3 -i "Once upon a time" </code></pre> </details> <h3>Deploy and run on iOS</h3> <p>The following assumes you've completed the steps for <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#set-up-executorch">Setting up ExecuTorch</a>.</p> <details> <summary>Deploying with Xcode</summary> <h4>Requirements</h4> <ul> <li><a href="https://apps.apple.com/us/app/xcode/id497799835?mt=12/">Xcode</a> 15.0 or later</li> <li><a href="https://cmake.org/download/">Cmake</a> 3.19 or later <ul> <li>Download and open the macOS <code>.dmg</code> installer and move the Cmake app to <code>/Applications</code> folder.</li> <li>Install Cmake command line tools: <code>sudo /Applications/CMake.app/Contents/bin/cmake-gui --install</code></li> </ul> </li> <li>A development provisioning profile with the <a href="https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_kernel_increased-memory-limit"><code>increased-memory-limit</code></a> entitlement.</li> </ul> <h4>Steps</h4> <ol> <li> <p>Open the Xcode project:</p> <pre><code class="language-bash">open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeproj </code></pre> <blockquote> <p>Note: If you're running into any issues related to package dependencies, close Xcode, clean some of the caches and/or the build products, and open the Xcode project again:</p> <pre><code class="language-bash">rm -rf \ ~/Library/org.swift.swiftpm \ ~/Library/Caches/org.swift.swiftpm \ ~/Library/Caches/com.apple.dt.Xcode \ ~/Library/Developer/Xcode/DerivedData </code></pre> </blockquote> </li> <li> <p>Click the Play button to launch the app in the Simulator.</p> </li> <li> <p>To run on a device, ensure you have it set up for development and a provisioning profile with the <code>increased-memory-limit</code> entitlement. Update the app's bundle identifier to match your provisioning profile with the required capability.</p> </li> <li> <p>After successfully launching the app, copy the exported ExecuTorch model (<code>.pte</code>) and tokenizer (<code>.model</code>) files to the iLLaMA folder. You can find the model file called <code>llama3.1.pte</code> in the current <code>torchchat</code> directory and the tokenizer file at <code>$(python3 torchchat.py where llama3.1)/tokenizer.model</code> path.</p> <ul> <li><strong>For the Simulator:</strong> Drag and drop both files onto the Simulator window and save them in the <code>On My iPhone &gt; iLLaMA</code> folder.</li> <li><strong>For a device:</strong> Open a separate Finder window, navigate to the Files tab, drag and drop both files into the iLLaMA folder, and wait for the copying to finish.</li> </ul> </li> <li> <p>Follow the app's UI guidelines to select the model and tokenizer files from the local filesystem and issue a prompt.</p> </li> </ol> <p><em>Click the image below to see it in action!</em></p> <p align="center"> <a href="https://pytorch.org/executorch/main/_static/img/llama_ios_app.mp4"> <img src="https://pytorch.org/executorch/main/_static/img/llama_ios_app.png" width="600" alt="iOS app running a LlaMA model"> </a> </p> </details> <h3>Deploy and run on Android</h3> <p>The following assumes you've completed the steps for <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/#set-up-executorch">Setting up ExecuTorch</a>.</p> <details> <summary>Approach 1 (Recommended): Android Studio</summary> <h4>Requirements</h4> <ul> <li>Android Studio</li> <li><a href="https://developer.android.com/build/jdks">Java 17</a></li> <li><a href="https://developer.android.com/about/versions/14/setup-sdk">Android SDK 34</a></li> <li><a href="https://developer.android.com/tools/adb">adb</a></li> </ul> <h4>Steps</h4> <ol> <li> <p>Download the AAR file, which contains the Java library and corresponding JNI library, to build and run the app.</p> <ul> <li><a href="https://ossci-android.s3.amazonaws.com/executorch/main/executorch-llama-tiktoken-rc3-0719.aar">executorch-llama-tiktoken-rc3-0719.aar</a> (SHASUM: c3e5d2a97708f033c2b1839a89f12f737e3bbbef)</li> </ul> </li> <li> <p>Rename the downloaded AAR file to <code>executorch.aar</code> and move the file to <code>android/torchchat/app/libs/</code>. You may need to create directory <code>android/torchchat/app/libs/</code> if it does not exist.</p> </li> <li> <p>Push the model and tokenizer file to your device. You can find the model file called <code>llama3.1.pte</code> in the current <code>torchchat</code> directory and the tokenizer file at <code>$(python3 torchchat.py where llama3.1)/tokenizer.model</code> path.</p> <pre><code>adb shell mkdir -p /data/local/tmp/llama adb push &lt;model.pte&gt; /data/local/tmp/llama adb push &lt;tokenizer.model or tokenizer.bin&gt; /data/local/tmp/llama </code></pre> </li> <li> <p>Use Android Studio to open the torchchat app skeleton, located at <code>android/torchchat</code>.</p> </li> <li> <p>Click the Play button (^R) to launch it to emulator/device.</p> <ul> <li>We recommend using a device with at least 12GB RAM and 20GB storage.</li> <li>If using an emulated device, refer to <a href="https://stackoverflow.com/questions/45517553/cant-change-the-ram-size-in-avd-manager-android-studio">this post</a> on how to set the RAM.</li> </ul> </li> <li> <p>Follow the app's UI guidelines to pick the model and tokenizer files from the local filesystem. Then issue a prompt.</p> </li> </ol> <p><strong>Note:</strong> The AAR file listed in Step 1 has the tiktoken tokenizer, which is used for Llama 3. To tweak or use a custom tokenizer and runtime, modify the ExecuTorch code and use <a href="https://github.com/pytorch/executorch/raw/main/build/build_android_llm_demo.sh">this script</a> to build the AAR library. For convenience, we also provide an AAR for sentencepiece tokenizer (e.g. Llama 2): <a href="https://ossci-android.s3.amazonaws.com/executorch/main/executorch-llama-bpe-rc3-0719.aar">executorch-llama-bpe-rc3-0719.aar</a> (SHASUM: d5fe81d9a4700c36b50ae322e6bf34882134edb0)</p> <p align="center"> <img src="https://pytorch.org/executorch/main/_static/img/android_llama_app.png" width="600" alt="Android app running a LlaMA model"> </p> </details> <details> <summary>Approach 2: E2E Script</summary> <p>Alternatively, you can run <code>scripts/android_example.sh</code> which sets up Java, Android SDK Manager, Android SDK, Android emulator (if no physical device is found), builds the app, and launches it for you. It can be used if you don't have a GUI.</p> <pre><code>export TORCHCHAT_ROOT=$(pwd) export USE_TIKTOKEN=ON # Set this only for tiktoken tokenizer sh scripts/android_example.sh </code></pre> </details> <h2>Eval</h2> <p><strong>Note: This feature is still a work in progress and not all features are working</strong></p> <p>Uses the lm_eval library to evaluate model accuracy on a variety of tasks. Defaults to wikitext and can be manually controlled using the tasks and limit args. See <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/docs/evaluation.md">Evaluation</a></p> <p><strong>Examples</strong></p> <p>Eager mode:</p> <pre><code>python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5 </code></pre> <p>To test the perplexity for a lowered or quantized model, pass it in the same way you would to generate:</p> <pre><code>python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5 </code></pre> <h2>Models</h2> <p>The following models are supported by torchchat and have associated aliases.</p> <table> <thead> <tr> <th>Model</th> <th>Mobile Friendly</th> <th>Notes</th> </tr> </thead> <tbody> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct">meta-llama/Meta-Llama-3.1-8B-Instruct</a></td> <td>✅</td> <td>Tuned for <code>chat</code> . Alias to <code>llama3.1</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3.1-8B">meta-llama/Meta-Llama-3.1-8B</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>llama3.1-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct">meta-llama/Meta-Llama-3-8B-Instruct</a></td> <td>✅</td> <td>Tuned for <code>chat</code> . Alias to <code>llama3</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B">meta-llama/Meta-Llama-3-8B</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>llama3-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-7b-chat-hf">meta-llama/Llama-2-7b-chat-hf</a></td> <td>✅</td> <td>Tuned for <code>chat</code>. Alias to <code>llama2</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-13b-chat-hf">meta-llama/Llama-2-13b-chat-hf</a></td> <td></td> <td>Tuned for <code>chat</code>. Alias to <code>llama2-13b-chat</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-70b-chat-hf">meta-llama/Llama-2-70b-chat-hf</a></td> <td></td> <td>Tuned for <code>chat</code>. Alias to <code>llama2-70b-chat</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/Llama-2-7b-hf">meta-llama/Llama-2-7b-hf</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>llama2-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/CodeLlama-7b-Python-hf">meta-llama/CodeLlama-7b-Python-hf</a></td> <td>✅</td> <td>Tuned for Python and <code>generate</code>. Alias to <code>codellama</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/meta-llama/CodeLlama-34b-Python-hf">meta-llama/CodeLlama-34b-Python-hf</a></td> <td>✅</td> <td>Tuned for Python and <code>generate</code>. Alias to <code>codellama-34b</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/mistralai/Mistral-7B-v0.1">mistralai/Mistral-7B-v0.1</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>mistral-7b-v01-base</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1">mistralai/Mistral-7B-Instruct-v0.1</a></td> <td>✅</td> <td>Tuned for <code>chat</code>. Alias to <code>mistral-7b-v01-instruct</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2">mistralai/Mistral-7B-Instruct-v0.2</a></td> <td>✅</td> <td>Tuned for <code>chat</code>. Alias to <code>mistral</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/karpathy/tinyllamas/tree/main">tinyllamas/stories15M</a></td> <td>✅</td> <td>Toy model for <code>generate</code>. Alias to <code>stories15M</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/karpathy/tinyllamas/tree/main">tinyllamas/stories42M</a></td> <td>✅</td> <td>Toy model for <code>generate</code>. Alias to <code>stories42M</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/karpathy/tinyllamas/tree/main">tinyllamas/stories110M</a></td> <td>✅</td> <td>Toy model for <code>generate</code>. Alias to <code>stories110M</code>.</td> </tr> <tr> <td><a href="https://huggingface.co/openlm-research/open_llama_7b">openlm-research/open_llama_7b</a></td> <td>✅</td> <td>Best for <code>generate</code>. Alias to <code>open-llama</code>.</td> </tr> </tbody> </table> <p>While we describe how to use torchchat using the popular llama3 model, you can perform the example commands with any of these models.</p> <h2>Design Principles</h2> <p>torchchat embodies PyTorch’s design philosophy <a href="https://pytorch.org/docs/stable/community/design.html">details</a>, especially "usability over everything else".</p> <h3>Native PyTorch</h3> <p>torchchat is a native-PyTorch library. While we provide integrations with the surrounding ecosystem (eg: Hugging Face models, etc), all of the core functionality is written in PyTorch.</p> <h3>Simplicity and Extensibility</h3> <p>torchchat is designed to be easy to understand, use and extend.</p> <ul> <li>Composition over implementation inheritance - layers of inheritance for code re-use makes the code hard to read and extend</li> <li>No training frameworks - explicitly outlining the training logic makes it easy to extend for custom use cases</li> <li>Code duplication is preferred over unnecessary abstractions</li> <li>Modular building blocks over monolithic components</li> </ul> <h3>Correctness</h3> <p>torchchat provides well-tested components with a high-bar on correctness. We provide</p> <ul> <li>Extensive unit-tests to ensure things operate as they should</li> </ul> <h2>Community Contributions</h2> <p>We really value our community and the contributions made by our wonderful users. We'll use this section to call out some of these contributions! If you'd like to help out as well, please see the <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/CONTRIBUTING.md">CONTRIBUTING</a> guide.</p> <h2>Troubleshooting</h2> <p><strong>CERTIFICATE_VERIFY_FAILED</strong> Run <code>pip install --upgrade certifi</code>.</p> <p><strong>Access to model is restricted and you are not in the authorized list</strong> Some models require an additional step to access. Follow the link provided in the error to get access.</p> <p><strong>Installing ET Fails</strong> If <code>./scripts/install_et.sh</code> fails with an error like <code>Building wheel for executorch (pyproject.toml) did not run successfully</code> It's possible that it's linking to an older version of pytorch installed some other way like via homebrew. You can break the link by uninstalling other versions such as <code>brew uninstall pytorch</code> Note: You may break something that depends on this, so be aware.</p> <h2>Filing Issues</h2> <p>Please include the exact command you ran and the output of that command. Also, run this script and include the output saved to <code>system_info.txt</code> so that we can better debug your issue.</p> <pre><code>(echo "Operating System Information"; uname -a; echo ""; cat /etc/os-release; echo ""; echo "Python Version"; python --version || python3 --version; echo ""; echo "PIP Version"; pip --version || pip3 --version; echo ""; echo "Installed Packages"; pip freeze || pip3 freeze; echo ""; echo "PyTorch Version"; python -c "import torch; print(torch.__version__)" || python3 -c "import torch; print(torch.__version__)"; echo ""; echo "Collection Complete") &gt; system_info.txt </code></pre> <h2>Disclaimer</h2> <p>The torchchat Repository Content is provided without any guarantees about performance or compatibility. In particular, torchchat makes available model architectures written in Python for PyTorch that may not perform in the same manner or meet the same standards as the original versions of those models. When using the torchchat Repository Content, including any model architectures, you are solely responsible for determining the appropriateness of using or redistributing the torchchat Repository Content and assume any risks associated with your use of the torchchat Repository Content or any models, outputs, or results, both alone and in combination with any other technologies. Additionally, you may have other legal obligations that govern your use of other content, such as the terms of service for third-party models, weights, data, or other technologies, and you are solely responsible for complying with all such obligations.</p> <h2>Acknowledgements</h2> <p>Thank you to the community for all the awesome libraries and tools you've built around local LLM inference.</p> <ul> <li> <p>Georgi Gerganov and his <a href="https://github.com/ggerganov/ggml">GGML</a> project shining a spotlight on community-based enablement and inspiring so many other projects.</p> </li> <li> <p>Andrej Karpathy and his <a href="https://github.com/karpathy/llama2.c">llama2.c</a> project. So many great (and simple!) ideas in llama2.c that we have directly adopted (both ideas and code) from his repo. You can never go wrong by following Andrej's work.</p> </li> <li> <p>Michael Gschwind, Bert Maher, Scott Wolchok, Bin Bao, Chen Yang, Huamin Li and Mu-Chu Li who built the first version of nanogpt (<code>DSOGPT</code>) with AOT Inductor proving that AOTI can be used to build efficient LLMs, and DSOs are a viable distribution format for models. <a href="https://github.com/karpathy/nanoGPT">nanoGPT</a>.</p> </li> <li> <p>Bert Maher and his <a href="https://github.com/bertmaher/llama2.so">llama2.so</a>, which built on Andrej's llama2.c and on DSOGPT to close the loop on Llama models with AOTInductor.</p> </li> <li> <p>Christian Puhrsch, Horace He, Joe Isaacson and many more for their many contributions in Accelerating GenAI models in the <em>"Anything, Fast!"</em> pytorch.org blogs, and, in particular, Horace He for <a href="https://github.com/pytorch-labs/gpt-fast">GPT, Fast!</a>, which we have directly adopted (both ideas and code) from his repo.</p> </li> </ul> <h2>License</h2> <p>torchchat is released under the <a href="https://raw.githubusercontent.com/pytorch/torchchat/main/LICENSE">BSD 3 license</a>. (Additional code in this distribution is covered by the MIT and Apache Open Source licenses.) However you may have other legal obligations that govern your use of content, such as the terms of service for third-party models.</p> - - - pytorch/torchtitan - 2024-08-02T01:34:58Z - tag:github.com,2024-08-02:/pytorch/torchtitan - - <p>A native PyTorch Library for large model training</p><hr><p><a href="https://github.com/pytorch/torchtitan/actions/workflows/integration_test_4gpu.yaml?query=branch%3Amain"><img src="https://github.com/pytorch/torchtitan/actions/workflows/integration_test_4gpu.yaml/badge.svg?branch=main" alt="4 GPU Integration Test"></a> <a href="https://github.com/pytorch/torchtitan/actions/workflows/integration_test_8gpu.yaml?query=branch%3Amain"><img src="https://github.com/pytorch/torchtitan/actions/workflows/integration_test_8gpu.yaml/badge.svg?branch=main" alt="8 GPU Integration Test"></a></p> <h1>torchtitan</h1> <p><code>torchtitan</code> is currently in a pre-release state and under extensive development.</p> <p><code>torchtitan</code> is a proof-of-concept for Large-scale LLM training using native PyTorch. It is (and will continue to be) a repo to showcase PyTorch's latest distributed training features in a clean, minimal codebase. torchtitan is complementary to and not a replacement for any of the great large-scale LLM training codebases such as Megatron, Megablocks, LLM Foundry, Deepspeed, etc. Instead, we hope that the features showcased in torchtitan will be adopted by these codebases quickly. torchtitan is unlikely to ever grow a large community around it.</p> <p>Our guiding principles when building <code>torchtitan</code>:</p> <ul> <li>Designed to be easy to understand, use and extend for different training purposes.</li> <li>Minimal changes to the model code when applying 1D, 2D, or (soon) 3D Parallel.</li> <li>Modular components instead of a monolithic codebase.</li> <li>Get started in minutes, not hours!</li> </ul> <h3>Intro video - learn more about torchtitan in under 4 mins:</h3> <p><a href="https://youtu.be/ee5DOEqD35I?si=_B94PbVv0V5ZnNKE" title="Welcome to torchtitan!"><img src="https://raw.githubusercontent.com/pytorch/torchtitan/main/assets/images/titan_play_video.png" alt="Welcome to torchtitan!"></a></p> <h3>Dive into the code</h3> <p>You may want to see how the model is defined or how parallelism techniques are applied. For a guided tour, see these files first:</p> <ul> <li><a href="https://github.com/pytorch/torchtitan/raw/main/train.py">train.py</a> - the main training loop and high-level setup code</li> <li><a href="https://github.com/pytorch/torchtitan/raw/main/torchtitan/parallelisms/parallelize_llama.py">torchtitan/parallelisms/parallelize_llama.py</a> - helpers for applying Data / Tensor / Pipeline Parallelisms to the model</li> <li><a href="https://github.com/pytorch/torchtitan/raw/main/torchtitan/checkpoint.py">torchtitan/checkpoint.py</a> - utils for saving/loading distributed checkpoints</li> <li><a href="https://github.com/pytorch/torchtitan/raw/main/torchtitan/models/llama/model.py">torchtitan/models/llama/model.py</a> - the Llama model definition (shared for Llama2 and Llama3 variants)</li> </ul> <h2>Pre-Release Updates:</h2> <h4>(4/25/2024): <code>torchtitan</code> is now public but in a pre-release state and under development.</h4> <p>Currently we showcase pre-training <strong>Llama 3 and Llama 2</strong> LLMs of various sizes from scratch. <code>torchtitan</code> is tested and verified with the PyTorch nightly version <code>torch-2.4.0.dev20240412</code>. (We recommend latest PyTorch nightly).</p> <h3>Key features available</h3> <ol> <li><a href="https://raw.githubusercontent.com/pytorch/torchtitan/main/docs/fsdp.md">FSDP2 with per param sharding</a></li> <li><a href="https://pytorch.org/docs/stable/distributed.tensor.parallel.html">Tensor Parallel</a></li> <li>Selective layer and operator activation checkpointing</li> <li>Distributed checkpointing</li> <li>2 datasets pre-configured (45K - 144M)</li> <li>GPU usage, MFU, tokens per second and more displayed via TensorBoard</li> <li>Learning rate scheduler, meta init, Optional Fused RMSNorm</li> <li>All options easily configured via <a href="https://raw.githubusercontent.com/pytorch/torchtitan/main/train_configs/">toml files</a></li> <li><a href="https://raw.githubusercontent.com/pytorch/torchtitan/main/docs/checkpoint.md">Interoperable checkpoints</a> which can be loaded directly into <a href="https://github.com/pytorch/torchtune"><code>torchtune</code></a> for fine tuning</li> </ol> <p>We report our <a href="https://raw.githubusercontent.com/pytorch/torchtitan/main/docs/performance.md">Performance</a> verified on 64 A100 GPUs</p> <h3>Coming soon</h3> <ol> <li>Async checkpointing</li> <li>FP8 support</li> <li>Context Parallel</li> <li>3D Pipeline Parallel</li> <li><code>torch.compile</code> support</li> <li>Scalable data loading solution</li> </ol> <h2>Installation</h2> <pre><code class="language-bash">git clone https://github.com/pytorch/torchtitan cd torchtitan pip install -r requirements.txt pip3 install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu121 # or cu118 pip3 install --pre torchdata --index-url https://download.pytorch.org/whl/nightly </code></pre> <h3>Downloading a tokenizer</h3> <p><code>torchtitan</code> currently supports training Llama 3 (8B, 70B), and Llama 2 (7B, 13B, 70B) out of the box. To get started training these models, we need to download a tokenizer.model. Follow the instructions on the official <a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B">meta-llama</a> repository to ensure you have access to the Llama model weights.</p> <p>Once you have confirmed access, you can run the following command to download the Llama 3 / Llama 2 tokenizer to your local machine.</p> <pre><code class="language-bash"># Get your HF token from https://huggingface.co/settings/tokens # llama3 or 3.1 tokenizer.model python torchtitan/datasets/download_tokenizer.py --repo_id meta-llama/Meta-Llama-3-8B --tokenizer_path "original" --hf_token=... # llama2 tokenizer.model python torchtitan/datasets/download_tokenizer.py --repo_id meta-llama/Llama-2-13b-hf --hf_token=... </code></pre> <h3>Start a training run</h3> <p>Llama 3 8B model locally on 8 GPUs</p> <pre><code class="language-bash">CONFIG_FILE="./train_configs/llama3_8b.toml" ./run_llama_train.sh </code></pre> <h2>TensorBoard</h2> <p>To visualize TensorBoard metrics of models trained on a remote server via a local web browser:</p> <ol> <li> <p>Make sure <code>metrics.enable_tensorboard</code> option is set to true in model training (either from a .toml file or from CLI).</p> </li> <li> <p>Set up SSH tunneling, by running the following from local CLI</p> </li> </ol> <pre><code>ssh -L 6006:127.0.0.1:6006 [username]@[hostname] </code></pre> <ol start="3"> <li>Inside the SSH tunnel that logged into the remote server, go to the torchtitan repo, and start the TensorBoard backend</li> </ol> <pre><code>tensorboard --logdir=./outputs/tb </code></pre> <ol start="4"> <li>In the local web browser, go to the URL it provides OR to <a href="http://localhost:6006/">http://localhost:6006/</a>.</li> </ol> <h2>Multi-Node Training</h2> <p>For training on ParallelCluster/Slurm type configurations, you can use the <code>multinode_trainer.slurm</code> file to submit your sbatch job.</p> <p>To get started adjust the number of nodes and GPUs</p> <pre><code>#SBATCH --ntasks=2 #SBATCH --nodes=2 </code></pre> <p>Then start a run where <code>nnodes</code> is your total node count, matching the sbatch node count above.</p> <pre><code>srun torchrun --nnodes 2 </code></pre> <p>If your gpu count per node is not 8, adjust:</p> <p><code>--nproc_per_node</code></p> <p>in the torchrun command and</p> <p><code>#SBATCH --gpus-per-task</code></p> <p>in the SBATCH command section.</p> <h2>License</h2> <p>This code is made available under <a href="https://raw.githubusercontent.com/pytorch/torchtitan/main/LICENSE">BSD 3 license</a>. However you may have other legal obligations that govern your use of other content, such as the terms of service for third-party models, data, etc.</p> - \ No newline at end of file diff --git a/q%23/daily/index.xml b/q%23/daily/index.xml index 73359cee284..2e07d743a3f 100644 --- a/q%23/daily/index.xml +++ b/q%23/daily/index.xml @@ -1,7 +1,7 @@ GitHub Q# Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:02Z + 2024-08-03T01:35:26Z Daily Trending of Q# in GitHub \ No newline at end of file diff --git a/q/daily/index.xml b/q/daily/index.xml index d5fefadbfdb..96954f82d78 100644 --- a/q/daily/index.xml +++ b/q/daily/index.xml @@ -1,7 +1,7 @@ GitHub q Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:02Z + 2024-08-03T01:35:26Z Daily Trending of q in GitHub \ No newline at end of file diff --git a/qmake/daily/index.xml b/qmake/daily/index.xml index 0d3d7961eee..569103cc449 100644 --- a/qmake/daily/index.xml +++ b/qmake/daily/index.xml @@ -1,7 +1,7 @@ GitHub QMake Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:02Z + 2024-08-03T01:35:27Z Daily Trending of QMake in GitHub \ No newline at end of file diff --git a/qml/daily/index.xml b/qml/daily/index.xml index 0ac4b1bf7b4..a332223c648 100644 --- a/qml/daily/index.xml +++ b/qml/daily/index.xml @@ -1,7 +1,7 @@ GitHub QML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:02Z + 2024-08-03T01:35:27Z Daily Trending of QML in GitHub \ No newline at end of file diff --git a/qt-script/daily/index.xml b/qt-script/daily/index.xml index b029a1f7269..747918b5d2f 100644 --- a/qt-script/daily/index.xml +++ b/qt-script/daily/index.xml @@ -1,7 +1,7 @@ GitHub Qt Script Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:04Z + 2024-08-03T01:35:28Z Daily Trending of Qt Script in GitHub \ No newline at end of file diff --git a/quake/daily/index.xml b/quake/daily/index.xml index 36c2a8858e8..7aed3855063 100644 --- a/quake/daily/index.xml +++ b/quake/daily/index.xml @@ -1,7 +1,7 @@ GitHub Quake Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:03Z + 2024-08-03T01:35:28Z Daily Trending of Quake in GitHub \ No newline at end of file diff --git a/r/daily/index.xml b/r/daily/index.xml index 60e086ef07a..50dcd410539 100644 --- a/r/daily/index.xml +++ b/r/daily/index.xml @@ -1,7 +1,7 @@ GitHub R Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:05Z + 2024-08-03T01:35:30Z Daily Trending of R in GitHub \ No newline at end of file diff --git a/racket/daily/index.xml b/racket/daily/index.xml index bddeaff822d..20a998e6a60 100644 --- a/racket/daily/index.xml +++ b/racket/daily/index.xml @@ -1,14 +1,7 @@ GitHub Racket Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:04Z + 2024-08-03T01:35:28Z Daily Trending of Racket in GitHub - - videolang/video - 2024-08-02T01:35:04Z - tag:github.com,2024-08-02:/videolang/video - - <p>Source Code for Video language.</p><hr> - \ No newline at end of file diff --git a/ragel/daily/index.xml b/ragel/daily/index.xml index 9fa2fe18240..7f7ab45cd1f 100644 --- a/ragel/daily/index.xml +++ b/ragel/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ragel Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:07Z + 2024-08-03T01:35:32Z Daily Trending of Ragel in GitHub \ No newline at end of file diff --git a/raku/daily/index.xml b/raku/daily/index.xml index 523249d9f07..93292972cbf 100644 --- a/raku/daily/index.xml +++ b/raku/daily/index.xml @@ -1,7 +1,7 @@ GitHub Raku Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:07Z + 2024-08-03T01:35:32Z Daily Trending of Raku in GitHub \ No newline at end of file diff --git a/raml/daily/index.xml b/raml/daily/index.xml index 951762e7d02..a25fccba7d0 100644 --- a/raml/daily/index.xml +++ b/raml/daily/index.xml @@ -1,7 +1,7 @@ GitHub RAML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:08Z + 2024-08-03T01:35:32Z Daily Trending of RAML in GitHub \ No newline at end of file diff --git a/rascal/daily/index.xml b/rascal/daily/index.xml index ebc98fccc5f..22e4374899b 100644 --- a/rascal/daily/index.xml +++ b/rascal/daily/index.xml @@ -1,7 +1,7 @@ GitHub Rascal Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:07Z + 2024-08-03T01:35:33Z Daily Trending of Rascal in GitHub \ No newline at end of file diff --git a/raw-token-data/daily/index.xml b/raw-token-data/daily/index.xml index c10f8196aaf..8147d46827a 100644 --- a/raw-token-data/daily/index.xml +++ b/raw-token-data/daily/index.xml @@ -1,7 +1,7 @@ GitHub Raw token data Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:08Z + 2024-08-03T01:35:34Z Daily Trending of Raw token data in GitHub \ No newline at end of file diff --git a/rdoc/daily/index.xml b/rdoc/daily/index.xml index 79e276cb6a5..b90f3af6135 100644 --- a/rdoc/daily/index.xml +++ b/rdoc/daily/index.xml @@ -1,7 +1,7 @@ GitHub RDoc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:08Z + 2024-08-03T01:35:34Z Daily Trending of RDoc in GitHub \ No newline at end of file diff --git a/readline-config/daily/index.xml b/readline-config/daily/index.xml index b67f56b0272..cf967a8c335 100644 --- a/readline-config/daily/index.xml +++ b/readline-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub Readline Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:09Z + 2024-08-03T01:35:33Z Daily Trending of Readline Config in GitHub \ No newline at end of file diff --git a/realbasic/daily/index.xml b/realbasic/daily/index.xml index 1b423dd53c5..b7a38a3ecaa 100644 --- a/realbasic/daily/index.xml +++ b/realbasic/daily/index.xml @@ -1,7 +1,7 @@ GitHub REALbasic Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:10Z + 2024-08-03T01:35:35Z Daily Trending of REALbasic in GitHub \ No newline at end of file diff --git a/reason/daily/index.xml b/reason/daily/index.xml index e83e61d121a..76e34c4539c 100644 --- a/reason/daily/index.xml +++ b/reason/daily/index.xml @@ -1,7 +1,7 @@ GitHub Reason Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:10Z + 2024-08-03T01:35:35Z Daily Trending of Reason in GitHub \ No newline at end of file diff --git a/rebol/daily/index.xml b/rebol/daily/index.xml index 38aa7e881b5..2617f792607 100644 --- a/rebol/daily/index.xml +++ b/rebol/daily/index.xml @@ -1,7 +1,7 @@ GitHub Rebol Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:10Z + 2024-08-03T01:35:35Z Daily Trending of Rebol in GitHub \ No newline at end of file diff --git a/record-jar/daily/index.xml b/record-jar/daily/index.xml index da3390070fb..7320681edda 100644 --- a/record-jar/daily/index.xml +++ b/record-jar/daily/index.xml @@ -1,7 +1,7 @@ GitHub Record Jar Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:11Z + 2024-08-03T01:35:36Z Daily Trending of Record Jar in GitHub \ No newline at end of file diff --git a/red/daily/index.xml b/red/daily/index.xml index 885489a493c..5d5164e65e8 100644 --- a/red/daily/index.xml +++ b/red/daily/index.xml @@ -1,7 +1,7 @@ GitHub Red Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:11Z + 2024-08-03T01:35:37Z Daily Trending of Red in GitHub \ No newline at end of file diff --git a/redcode/daily/index.xml b/redcode/daily/index.xml index cdb97f355c2..702c3c04f22 100644 --- a/redcode/daily/index.xml +++ b/redcode/daily/index.xml @@ -1,7 +1,7 @@ GitHub Redcode Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:12Z + 2024-08-03T01:35:36Z Daily Trending of Redcode in GitHub \ No newline at end of file diff --git a/redirect-rules/daily/index.xml b/redirect-rules/daily/index.xml index 6efd8de67ec..c4b50db7731 100644 --- a/redirect-rules/daily/index.xml +++ b/redirect-rules/daily/index.xml @@ -1,7 +1,7 @@ GitHub Redirect Rules Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:12Z + 2024-08-03T01:35:37Z Daily Trending of Redirect Rules in GitHub \ No newline at end of file diff --git a/regular-expression/daily/index.xml b/regular-expression/daily/index.xml index 95353eb8248..79adb0b7ee8 100644 --- a/regular-expression/daily/index.xml +++ b/regular-expression/daily/index.xml @@ -1,7 +1,7 @@ GitHub Regular Expression Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:13Z + 2024-08-03T01:35:38Z Daily Trending of Regular Expression in GitHub \ No newline at end of file diff --git a/ren'py/daily/index.xml b/ren'py/daily/index.xml index f1c3f261971..a2eba9b7605 100644 --- a/ren'py/daily/index.xml +++ b/ren'py/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ren'Py Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:13Z + 2024-08-03T01:35:39Z Daily Trending of Ren'Py in GitHub \ No newline at end of file diff --git a/renderscript/daily/index.xml b/renderscript/daily/index.xml index 9248d0031c0..6e97887cd69 100644 --- a/renderscript/daily/index.xml +++ b/renderscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub RenderScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:13Z + 2024-08-03T01:35:38Z Daily Trending of RenderScript in GitHub \ No newline at end of file diff --git a/rescript/daily/index.xml b/rescript/daily/index.xml index 3a2931f2a90..0834a53c555 100644 --- a/rescript/daily/index.xml +++ b/rescript/daily/index.xml @@ -1,7 +1,7 @@ GitHub ReScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:13Z + 2024-08-03T01:35:38Z Daily Trending of ReScript in GitHub \ No newline at end of file diff --git a/restructuredtext/daily/index.xml b/restructuredtext/daily/index.xml index 91419b5643c..5627d0b1169 100644 --- a/restructuredtext/daily/index.xml +++ b/restructuredtext/daily/index.xml @@ -1,7 +1,7 @@ GitHub reStructuredText Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:15Z + 2024-08-03T01:35:40Z Daily Trending of reStructuredText in GitHub \ No newline at end of file diff --git a/rexx/daily/index.xml b/rexx/daily/index.xml index d7bf4544c46..bc65a078147 100644 --- a/rexx/daily/index.xml +++ b/rexx/daily/index.xml @@ -1,7 +1,7 @@ GitHub REXX Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:14Z + 2024-08-03T01:35:39Z Daily Trending of REXX in GitHub \ No newline at end of file diff --git a/ring/daily/index.xml b/ring/daily/index.xml index 970d0998ab7..73a3cce0cae 100644 --- a/ring/daily/index.xml +++ b/ring/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ring Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:16Z + 2024-08-03T01:35:50Z Daily Trending of Ring in GitHub \ No newline at end of file diff --git a/riot/daily/index.xml b/riot/daily/index.xml index edcc1eedb47..8753797a0ff 100644 --- a/riot/daily/index.xml +++ b/riot/daily/index.xml @@ -1,7 +1,7 @@ GitHub Riot Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:16Z + 2024-08-03T01:35:51Z Daily Trending of Riot in GitHub \ No newline at end of file diff --git a/rmarkdown/daily/index.xml b/rmarkdown/daily/index.xml index ab393a0f2b3..551d3a15684 100644 --- a/rmarkdown/daily/index.xml +++ b/rmarkdown/daily/index.xml @@ -1,7 +1,7 @@ GitHub RMarkdown Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:16Z + 2024-08-03T01:35:51Z Daily Trending of RMarkdown in GitHub \ No newline at end of file diff --git a/robotframework/daily/index.xml b/robotframework/daily/index.xml index 521d706e61f..5011c351f1f 100644 --- a/robotframework/daily/index.xml +++ b/robotframework/daily/index.xml @@ -1,7 +1,7 @@ GitHub RobotFramework Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:17Z + 2024-08-03T01:35:51Z Daily Trending of RobotFramework in GitHub \ No newline at end of file diff --git a/robots.txt/daily/index.xml b/robots.txt/daily/index.xml index 7b8dee7e23c..ce6da6ce67c 100644 --- a/robots.txt/daily/index.xml +++ b/robots.txt/daily/index.xml @@ -1,7 +1,7 @@ GitHub robots.txt Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:18Z + 2024-08-03T01:35:52Z Daily Trending of robots.txt in GitHub \ No newline at end of file diff --git a/roff-manpage/daily/index.xml b/roff-manpage/daily/index.xml index 4cdf1672d6d..88d39d6c6da 100644 --- a/roff-manpage/daily/index.xml +++ b/roff-manpage/daily/index.xml @@ -1,7 +1,7 @@ GitHub Roff Manpage Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:18Z + 2024-08-03T01:35:52Z Daily Trending of Roff Manpage in GitHub \ No newline at end of file diff --git a/roff/daily/index.xml b/roff/daily/index.xml index 5fe744a5b68..f0606ac2927 100644 --- a/roff/daily/index.xml +++ b/roff/daily/index.xml @@ -1,7 +1,7 @@ GitHub Roff Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:18Z + 2024-08-03T01:35:53Z Daily Trending of Roff in GitHub \ No newline at end of file diff --git a/rouge/daily/index.xml b/rouge/daily/index.xml index 613a5d89c31..da2b0073bb6 100644 --- a/rouge/daily/index.xml +++ b/rouge/daily/index.xml @@ -1,7 +1,7 @@ GitHub Rouge Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:19Z + 2024-08-03T01:35:54Z Daily Trending of Rouge in GitHub \ No newline at end of file diff --git a/rpc/daily/index.xml b/rpc/daily/index.xml index 70bd0c80c3a..ccccf89719d 100644 --- a/rpc/daily/index.xml +++ b/rpc/daily/index.xml @@ -1,7 +1,7 @@ GitHub RPC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:19Z + 2024-08-03T01:35:54Z Daily Trending of RPC in GitHub \ No newline at end of file diff --git a/rpgle/daily/index.xml b/rpgle/daily/index.xml index 13a735c0b84..5668b6ee743 100644 --- a/rpgle/daily/index.xml +++ b/rpgle/daily/index.xml @@ -1,7 +1,7 @@ GitHub RPGLE Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:19Z + 2024-08-03T01:35:53Z Daily Trending of RPGLE in GitHub \ No newline at end of file diff --git a/rpm-spec/daily/index.xml b/rpm-spec/daily/index.xml index e8f6c7c9a06..a8cdf85c899 100644 --- a/rpm-spec/daily/index.xml +++ b/rpm-spec/daily/index.xml @@ -1,7 +1,7 @@ GitHub RPM Spec Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:21Z + 2024-08-03T01:35:55Z Daily Trending of RPM Spec in GitHub \ No newline at end of file diff --git a/ruby/daily/index.xml b/ruby/daily/index.xml index 3cde7a0efe0..3e59cd67159 100644 --- a/ruby/daily/index.xml +++ b/ruby/daily/index.xml @@ -1,7 +1,7 @@ GitHub Ruby Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:27Z + 2024-08-03T01:36:00Z Daily Trending of Ruby in GitHub \ No newline at end of file diff --git a/runoff/daily/index.xml b/runoff/daily/index.xml index a08ce3a60d6..e4def86990f 100644 --- a/runoff/daily/index.xml +++ b/runoff/daily/index.xml @@ -1,7 +1,7 @@ GitHub RUNOFF Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:20Z + 2024-08-03T01:35:55Z Daily Trending of RUNOFF in GitHub \ No newline at end of file diff --git a/rust/daily/index.xml b/rust/daily/index.xml index b2a654f540c..0f705353838 100644 --- a/rust/daily/index.xml +++ b/rust/daily/index.xml @@ -1,14 +1,7 @@ GitHub Rust Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:22Z + 2024-08-03T01:35:57Z Daily Trending of Rust in GitHub - - hickory-dns/hickory-dns - 2024-08-02T01:35:22Z - tag:github.com,2024-08-02:/hickory-dns/hickory-dns - - <p>A Rust based DNS client, server, and resolver</p><hr><p><a href="https://www.whatrustisit.com"><img src="https://img.shields.io/badge/minimum%20rustc-1.70-green?logo=rust" alt="minimum rustc: 1.70"></a> <a href="https://github.com/hickory-dns/hickory-dns/actions?query=workflow%3Atest"><img src="https://github.com/hickory-dns/hickory-dns/workflows/test/badge.svg?branch=main" alt="Build Status"></a> <a href="https://codecov.io/gh/hickory-dns/hickory-dns"><img src="https://codecov.io/gh/hickory-dns/hickory-dns/branch/main/graph/badge.svg?sanitize=true" alt="codecov"></a> <a href="https://raw.githubusercontent.com/hickory-dns/hickory-dns/main/LICENSE-MIT"><img src="https://img.shields.io/badge/license-MIT-blue.svg?sanitize=true" alt="License: MIT"></a> <a href="https://raw.githubusercontent.com/hickory-dns/hickory-dns/main/LICENSE-APACHE"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg?sanitize=true" alt="License: Apache 2.0"></a> <a href="https://discord.gg/89nxE4n"><img src="https://img.shields.io/discord/590067103822774272.svg?sanitize=true" alt="Discord"></a></p> <div class="oranda-hide"> <p><img src="https://raw.githubusercontent.com/hickory-dns/hickory-dns/main/logo.png" alt="Hickory DNS"></p> <h1>Hickory DNS</h1> </div> <p>A Rust based DNS client, server, and Resolver, built to be safe and secure from the ground up.</p> <p>This repo consists of multiple crates:</p> <table> <thead> <tr> <th>Library</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><strong>Hickory DNS</strong></td> <td><a href="https://crates.io/crates/hickory-dns"><img src="https://img.shields.io/crates/v/hickory-dns.svg?sanitize=true" alt=""></a> Binaries for running a DNS authoritative server.</td> </tr> <tr> <td><strong>Proto</strong></td> <td><a href="https://crates.io/crates/hickory-proto"><img src="https://img.shields.io/crates/v/hickory-proto.svg?sanitize=true" alt=""></a> <a href="https://docs.rs/hickory-proto"><img src="https://docs.rs/hickory-proto/badge.svg?sanitize=true" alt="hickory-proto"></a> Raw DNS library, exposes an unstable API and only for use by the other Hickory DNS libraries, not intended for end-user use.</td> </tr> <tr> <td><strong>Client</strong></td> <td><a href="https://crates.io/crates/hickory-client"><img src="https://img.shields.io/crates/v/hickory-client.svg?sanitize=true" alt=""></a> <a href="https://docs.rs/hickory-client"><img src="https://docs.rs/hickory-client/badge.svg?sanitize=true" alt="hickory-client"></a> Used for sending <code>query</code>, <code>update</code>, and <code>notify</code> messages directly to a DNS server.</td> </tr> <tr> <td><strong>Server</strong></td> <td><a href="https://crates.io/crates/hickory-server"><img src="https://img.shields.io/crates/v/hickory-server.svg?sanitize=true" alt=""></a> <a href="https://docs.rs/hickory-server"><img src="https://docs.rs/hickory-server/badge.svg?sanitize=true" alt="hickory-server"></a> Use to host DNS records, this also has a <code>hickory-dns</code> binary for running in a daemon form.</td> </tr> <tr> <td><strong>Resolver</strong></td> <td><a href="https://crates.io/crates/hickory-resolver"><img src="https://img.shields.io/crates/v/hickory-resolver.svg?sanitize=true" alt=""></a> <a href="https://docs.rs/hickory-resolver"><img src="https://docs.rs/hickory-resolver/badge.svg?sanitize=true" alt="hickory-resolver"></a> Utilizes the client library to perform DNS resolution. Can be used in place of the standard OS resolution facilities.</td> </tr> </tbody> </table> <p><strong>NOTICE</strong> This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the <a href="https://github.com/hickory-dns/hickory-dns">https://github.com/hickory-dns/hickory-dns</a> organization and repo.</p> <h1>Goals</h1> <ul> <li>Build a safe and secure DNS server and client with modern features.</li> <li>No panics, all code is guarded</li> <li>Use only safe Rust, and avoid all panics with proper Error handling</li> <li>Use only stable Rust</li> <li>Protect against DDOS attacks (to a degree)</li> <li>Support options for Global Load Balancing functions</li> <li>Make it dead simple to operate</li> </ul> <h1>Status</h1> <h2>Resolver</h2> <p>The Hickory DNS Resolver is a native Rust implementation for stub resolution in Rust applications. The Resolver supports many common query patterns, all of which can be configured when creating the Resolver. It is capable of using system configuration on Unix and Windows. On Windows there is a known issue that relates to a large set of interfaces being registered for use, so might require ignoring the system configuration.</p> <p>The Resolver will properly follow CNAME chains as well as SRV record lookups. There is a long term plan to make the Resolver capable of fully recursive queries, but that's not currently possible.</p> <h2>Client</h2> <p>The Hickory DNS Client is intended to be used for operating against a DNS server directly. It can be used for verifying records or updating records for servers that support SIG0 and dynamic update. The Client is also capable of validating DNSSEC. As of now NSEC3 validation is not yet supported, though NSEC is. There are two interfaces that can be used, the async/await compatible AsyncClient and a blocking Client for ease of use. Today, Tokio is required for the executor Runtime.</p> <h3>Unique client side implementations</h3> <p>These are standards supported by the DNS protocol. The client implements them as high level interfaces, which is a bit more rare.</p> <table> <thead> <tr> <th>Feature</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/struct.SyncDnssecClient.html">SyncDnssecClient</a></td> <td>DNSSEC validation</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.create">create</a></td> <td>atomic create of a record, with authenticated request</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.append">append</a></td> <td>verify existence of a record and append to it</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.compare_and_swap">compare_and_swap</a></td> <td>atomic (depends on server) compare and swap</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_by_rdata">delete_by_rdata</a></td> <td>delete a specific record</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_rrset">delete_rrset</a></td> <td>delete an entire record set</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_all">delete_all</a></td> <td>delete all records sets with a given name</td> </tr> <tr> <td><a href="https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.notify">notify</a></td> <td>notify server that it should reload a zone</td> </tr> </tbody> </table> <h2>Server</h2> <p>The server code is complete, the daemon supports IPv4 and IPv6, UDP and TCP. There currently is no way to limit TCP and AXFR operations, so it is still not recommended to put into production as TCP can be used to DOS the service. Zone file parsing is complete and supported. There is currently no forking option, and the server is not yet threaded (although it is implemented with async IO, so threading may not be a huge benefit). There is still a lot of work to do before a server can be trusted with this externally. Running it behind a firewall on a private network would be safe.</p> <p>Zone signing support is complete, to insert a key store a pem encoded rsa file in the same directory as the initial zone file with the <code>.key</code> suffix. <em>Note</em>: this must be only readable by the current user. If one is not present one will be created and written to the correct location. This also acts as the initial key for dynamic update SIG(0) validation. To get the public key, the <code>DNSKEY</code> record for the zone can be queried. This is needed to provide to other upstream servers to create the <code>DS</code> key. Dynamic DNS is also complete, if enabled, a journal file will be stored next to the zone file with the <code>jrnl</code> suffix. <em>Note</em>: if the key is changed or updated, it is currently the operators responsibility to remove the only public key from the zone, this allows for the <code>DNSKEY</code> to exist for some unspecified period of time during key rotation. Rotating the key currently is not available online and requires a restart of the server process.</p> <h3>DNS-over-TLS and DNS-over-HTTPS on the Server</h3> <p>Support of TLS on the Server is managed through a pkcs12 der file. The documentation is captured in the example test config file, <a href="https://github.com/hickory-dns/hickory-dns/raw/main/tests/test-data/test_configs/example.toml">example.toml</a>. A registered certificate to the server can be pinned to the Client with the <code>add_ca()</code> method. Alternatively, as the client uses the rust-native-tls library, it should work with certificate signed by any standard CA.</p> <h2>DNS-over-TLS and DNS-over-HTTPS</h2> <p>DoT and DoH are supported. This is accomplished through the use of one of <code>native-tls</code>, <code>openssl</code>, or <code>rustls</code> (only <code>rustls</code> is currently supported for DoH). The Resolver requires valid DoT or DoH resolvers being registered in order to be used.</p> <p>To use with the <code>Client</code>, the <code>TlsClientConnection</code> or <code>HttpsClientConnection</code> should be used. Similarly, to use with the tokio <code>AsyncClient</code> the <code>TlsClientStream</code> or <code>HttpsClientStream</code> should be used. ClientAuth, mTLS, is currently not supported, there are some issues still being worked on. TLS is useful for Server authentication and connection privacy.</p> <p>To enable DoT one of the features <code>dns-over-native-tls</code>, <code>dns-over-openssl</code>, or <code>dns-over-rustls</code> must be enabled, <code>dns-over-https-rustls</code> is used for DoH.</p> <h2>DNSSEC status</h2> <p>Currently the root key is hardcoded into the system. This gives validation of DNSKEY and DS records back to the root. NSEC is implemented, but not NSEC3. Because caching is not yet enabled, it has been noticed that some DNS servers appear to rate limit the connections, validating RRSIG records back to the root can require a significant number of additional queries for those records.</p> <p>Zones will be automatically resigned on any record updates via dynamic DNS. To enable DNSSEC, one of the features <code>dnssec-openssl</code> or <code>dnssec-ring</code> must be enabled.</p> <h2>RFCs implemented</h2> <ul> <li><a href="https://tools.ietf.org/html/rfc8499">RFC 8499</a>: No more master/slave, in honor of <a href="https://en.wikipedia.org/wiki/Juneteenth">Juneteenth</a></li> </ul> <h3>Basic operations</h3> <ul> <li><a href="https://tools.ietf.org/html/rfc1035">RFC 1035</a>: Base DNS spec (see the Resolver for caching)</li> <li><a href="https://tools.ietf.org/html/rfc2308">RFC 2308</a>: Negative Caching of DNS Queries (see the Resolver)</li> <li><a href="https://tools.ietf.org/html/rfc2782">RFC 2782</a>: Service location</li> <li><a href="https://tools.ietf.org/html/rfc3596">RFC 3596</a>: IPv6</li> <li><a href="https://tools.ietf.org/html/rfc6891">RFC 6891</a>: Extension Mechanisms for DNS</li> <li><a href="https://tools.ietf.org/html/rfc6761">RFC 6761</a>: Special-Use Domain Names (resolver)</li> <li><a href="https://tools.ietf.org/html/rfc6762">RFC 6762</a>: mDNS Multicast DNS (experimental feature: <code>mdns</code>)</li> <li><a href="https://tools.ietf.org/html/rfc6763">RFC 6763</a>: DNS-SD Service Discovery (experimental feature: <code>mdns</code>)</li> <li><a href="https://tools.ietf.org/html/draft-ietf-dnsop-aname-02">RFC ANAME</a>: Address-specific DNS aliases (<code>ANAME</code>)</li> </ul> <h3>Update operations</h3> <ul> <li><a href="https://tools.ietf.org/html/rfc2136">RFC 2136</a>: Dynamic Update</li> <li><a href="https://tools.ietf.org/html/rfc7477">RFC 7477</a>: Child-to-Parent Synchronization in DNS</li> </ul> <h3>Secure DNS operations</h3> <ul> <li><a href="https://datatracker.ietf.org/doc/html/rfc2931">RFC 2931</a>: SIG(0)</li> <li><a href="https://tools.ietf.org/html/rfc3007">RFC 3007</a>: Secure Dynamic Update</li> <li><a href="https://tools.ietf.org/html/rfc4034">RFC 4034</a>: DNSSEC Resource Records</li> <li><a href="https://tools.ietf.org/html/rfc4035">RFC 4035</a>: Protocol Modifications for DNSSEC</li> <li><a href="https://tools.ietf.org/html/rfc4509">RFC 4509</a>: SHA-256 in DNSSEC Delegation Signer</li> <li><a href="https://tools.ietf.org/html/rfc5702">RFC 5702</a>: SHA-2 Algorithms with RSA in DNSKEY and RRSIG for DNSSEC</li> <li><a href="https://tools.ietf.org/html/rfc6844">RFC 6844</a>: DNS Certification Authority Authorization (CAA) Resource Record</li> <li><a href="https://tools.ietf.org/html/rfc6698">RFC 6698</a>: The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA</li> <li><a href="https://tools.ietf.org/html/rfc6840">RFC 6840</a>: Clarifications and Implementation Notes for DNSSEC</li> <li><a href="https://tools.ietf.org/html/rfc6844">RFC 6844</a>: DNS Certification Authority Authorization Resource Record</li> <li><a href="https://tools.ietf.org/html/rfc6944">RFC 6944</a>: DNSKEY Algorithm Implementation Status</li> <li><a href="https://tools.ietf.org/html/rfc6975">RFC 6975</a>: Signaling Cryptographic Algorithm Understanding</li> <li><a href="https://tools.ietf.org/html/rfc7858">RFC 7858</a>: DNS over TLS (feature: <code>dns-over-rustls</code>, <code>dns-over-native-tls</code>, or <code>dns-over-openssl</code>)</li> <li><a href="https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-14">RFC DoH</a>: DNS over HTTPS, DoH (feature: <code>dns-over-https-rustls</code>)</li> </ul> <h2>RFCs in progress or not yet implemented</h2> <h3>Basic operations</h3> <ul> <li><a href="https://tools.ietf.org/html/rfc2317">RFC 2317</a>: Classless IN-ADDR.ARPA delegation</li> </ul> <h3>Update operations</h3> <ul> <li><a href="https://tools.ietf.org/html/rfc1995">RFC 1995</a>: Incremental Zone Transfer</li> <li><a href="https://tools.ietf.org/html/rfc1996">RFC 1996</a>: Notify secondaries of update</li> <li><a href="https://tools.ietf.org/html/draft-sekar-dns-ul-01">Update Leases</a>: Dynamic DNS Update Leases</li> <li><a href="https://tools.ietf.org/html/draft-sekar-dns-llq-01">Long-Lived Queries</a>: Notify with bells</li> </ul> <h3>Secure DNS operations</h3> <ul> <li><a href="https://tools.ietf.org/html/rfc5155">RFC 5155</a>: DNSSEC Hashed Authenticated Denial of Existence</li> <li><a href="https://dnscrypt.org">DNSCrypt</a>: Trusted DNS queries</li> <li><a href="https://tools.ietf.org/html/draft-ietf-dane-smime-09">S/MIME</a>: Domain Names For S/MIME</li> </ul> <h1>Usage</h1> <p>This assumes that you have <a href="https://www.rust-lang.org">Rust</a> stable installed. These presume that the hickory-dns repos have already been synced to the local system:</p> <pre><code>git clone https://github.com/hickory-dns/hickory-dns.git cd hickory-dns </code></pre> <h2>Prerequisites</h2> <h3>Minimum Rust Version</h3> <ul> <li>The current minimum rustc version for this project is <code>1.70</code></li> <li>OpenSSL development libraries (optional in client and resolver, min version 1.0.2)</li> </ul> <h3>Mac OS X: using homebrew</h3> <pre><code> brew install openssl export OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include export OPENSSL_LIB_DIR=`brew --prefix openssl`/lib </code></pre> <h3>Debian-based (includes Ubuntu &amp; Raspbian): using apt-get</h3> <pre><code> # note for openssl that a minimum version of 1.0.2 is required for TLS, # if this is an issue, TLS can be disabled (on the client), see below. $ apt-get install openssl $ apt-get install libssl-dev pkg-config </code></pre> <h2>Testing</h2> <p>Hickory DNS uses <code>just</code> for build workflow management. While running <code>cargo test</code> at the project root will work, this is not exhaustive. Install <code>just</code> with <code>cargo install just</code>. A few of the <code>just</code> recipes require <a href="https://github.com/pksunkara/cargo-workspaces"><code>cargo-workspaces</code></a> to be installed, a plugin to optimize the workflow around cargo workspaces. Install the plugin with <code>cargo install cargo-workspaces</code>.</p> <ul> <li> <p>Default tests</p> <p>These are good for running on local systems. They will create sockets for local tests, but will not attempt to access remote systems. Tests can also be run from the crate directory, i.e. <code>client</code> or <code>server</code> and <code>cargo test</code></p> </li> </ul> <pre><code class="language-shell">just default </code></pre> <ul> <li> <p>Default feature tests</p> <p>Hickory DNS has many features, to quickly test with them or without, there are three targets supported, <code>default</code>, <code>no-default-features</code>, <code>all-features</code>:</p> </li> </ul> <pre><code class="language-shell">just all-features </code></pre> <ul> <li> <p>Individual feature tests</p> <p>Hickory DNS has many features, each individual feature can be tested in dependently, see individual crates for all their features, here is a not necessarily up to date list: <code>dns-over-rustls</code>, <code>dns-over-https-rustls</code>, <code>dns-over-native-tls</code>, <code>dns-over-openssl</code>, <code>dns-dnssec-openssl</code>, <code>dns-dnssec-openssl</code>, <code>dns-dnssec-ring</code>, <code>mdns</code>. Each feature can be tested with itself as the task target for <code>just</code>:</p> </li> </ul> <pre><code class="language-shell">just dns-over-https-rustls </code></pre> <ul> <li> <p>Benchmarks</p> <p>Waiting on benchmarks to stabilize in mainline Rust.</p> </li> </ul> <h2>Building</h2> <ul> <li>Production build, from the <code>hickory-dns</code> base dir, to get all features, just pass the <code>--all-features</code> flag.</li> </ul> <pre><code class="language-shell">cargo build --release -p hickory-dns </code></pre> <h2>Running</h2> <p>Warning: Hickory DNS is still under development, running in production is not recommended. The server is currently only single-threaded, it is non-blocking so this should allow it to work with most internal loads.</p> <ul> <li>Verify the version</li> </ul> <pre><code class="language-shell">./target/release/hickory-dns --version </code></pre> <ul> <li>Get help</li> </ul> <pre><code class="language-shell">./target/release/hickory-dns --help </code></pre> <ul> <li>Launch <code>hickory-dns</code> server with test config</li> </ul> <p>You may want not passing the <code>-p</code> parameter will run on default DNS ports. For the tls features, there are also port options for those, see <code>hickory-dns --help</code></p> <pre><code class="language-shell">./target/release/hickory-dns -c ./tests/test-data/test_configs/example.toml -z ./tests/test-data/test_configs/ -p 24141 </code></pre> <ul> <li>Query the just launched server with <code>dig</code></li> </ul> <pre><code class="language-shell">dig @127.0.0.1 -p 24141 www.example.com </code></pre> <h2>Using the hickory-resolver CLI</h2> <p>Available in <code>0.20</code></p> <pre><code class="language-shell">cargo install --bin resolve hickory-util </code></pre> <p>Or from source, in the hickory-dns directory</p> <pre><code class="language-shell">cargo install --bin resolve --path util </code></pre> <p>example:</p> <pre><code class="language-shell">$ resolve www.example.com. Querying for www.example.com. A from udp:8.8.8.8:53, tcp:8.8.8.8:53, udp:8.8.4.4:53, tcp:8.8.4.4:53, udp:[2001:4860:4860::8888]:53, tcp:[2001:4860:4860::8888]:53, udp:[2001:4860:4860::8844]:53, tcp:[2001:4860:4860::8844]:53 Success for query name: www.example.com. type: A class: IN www.example.com. 21063 IN A 93.184.215.14 </code></pre> <h2>Using as a dependency and custom features</h2> <p>The Client has a few features which can be disabled for different reasons when embedding in other software.</p> <ul> <li> <p><code>dnssec-openssl</code> It is a default feature, so default-features will need to be set to false (this will disable all other default features in hickory-dns). Until there are other crypto libraries supported, this will also disable DNSSEC validation. The functions will still exist, but will always return errors on validation. The below example line will disable all default features and enable OpenSSL, remove <code>"openssl"</code> to remove the dependency on OpenSSL.</p> </li> <li> <p><code>dnssec-ring</code> Ring support can be used for RSA and ED25519 DNSSEC validation.</p> </li> <li> <p><code>dns-over-native-tls</code> Uses <code>native-tls</code> for DNS-over-TLS implementation, only supported in client and resolver, not server.</p> </li> <li> <p><code>dns-over-openssl</code> Uses <code>openssl</code> for DNS-over-TLS implementation supported in server and client, resolver does not have default CA chains.</p> </li> <li> <p><code>dns-over-rustls</code> Uses <code>rustls</code> for DNS-over-TLS implementation, only supported in client and resolver, not server. This is the best option where a pure Rust toolchain is desired. Supported in client, resolver, and server.</p> </li> <li> <p><code>dns-over-https-rustls</code> Uses <code>rustls</code> for DNS-over-HTTPS (and DNS-over-TLS will be enabled) implementation, only supported in client, resolver, and server. This is the best option where a pure Rust toolchain is desired.</p> </li> <li> <p><code>mdns</code> <em>EXPERIMENTAL</em> Enables the experimental mDNS features as well as DNS-SD. This currently has known issues.</p> </li> </ul> <p>Using custom features in dependencies:</p> <pre><code>[dependencies] ... hickory-dns = { version = "*", default-features = false, features = ["dnssec-openssl"] } </code></pre> <p>Using custom features during build:</p> <pre><code class="language-console">$&gt; cargo build --release --features dns-over-rustls ... </code></pre> <h2>FAQ</h2> <ul> <li> <p>Why are you building another DNS server?</p> <pre><code>Because of all the security advisories out there for BIND. </code></pre> <p>Using Rust semantics it should be possible to develop a high performance and safe DNS Server that is more resilient to attacks.</p> </li> <li> <p>What is the MSRV (minimum stable Rust version) policy?</p> <pre><code>Hickory DNS will work to support backward compatibility with three Rust versions. </code></pre> <p>For example, if <code>1.50</code> is the current release, then the MSRV will be <code>1.47</code>. The version is only increased as necessary, so it's possible that the MSRV is older than this policy states. Additionally, the MSRV is only supported for the <code>no-default-features</code> build due to it being an intractable issue of trying to enforce this policy on dependencies.</p> </li> </ul> <h2>Community</h2> <p>For live discussions beyond this repository, please see this <a href="https://discord.gg/89nxE4n">Discord</a>.</p> <h2>License</h2> <p>Licensed under either of</p> <ul> <li>Apache License, Version 2.0, (<a href="https://raw.githubusercontent.com/hickory-dns/hickory-dns/main/LICENSE-APACHE">LICENSE-APACHE</a> or <a href="https://www.apache.org/licenses/LICENSE-2.0">https://www.apache.org/licenses/LICENSE-2.0</a>)</li> <li>MIT license (<a href="https://raw.githubusercontent.com/hickory-dns/hickory-dns/main/LICENSE-MIT">LICENSE-MIT</a> or <a href="https://opensource.org/licenses/MIT">https://opensource.org/licenses/MIT</a>)</li> </ul> <p>at your option.</p> <h3>Contribution</h3> <p>Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.</p> - \ No newline at end of file diff --git a/sage/daily/index.xml b/sage/daily/index.xml index 8c6bfb8c803..f725c78be9d 100644 --- a/sage/daily/index.xml +++ b/sage/daily/index.xml @@ -1,7 +1,7 @@ GitHub Sage Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:33Z + 2024-08-03T01:36:05Z Daily Trending of Sage in GitHub \ No newline at end of file diff --git a/saltstack/daily/index.xml b/saltstack/daily/index.xml index 026a7b731bc..4add8312a27 100644 --- a/saltstack/daily/index.xml +++ b/saltstack/daily/index.xml @@ -1,7 +1,7 @@ GitHub SaltStack Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:32Z + 2024-08-03T01:36:04Z Daily Trending of SaltStack in GitHub \ No newline at end of file diff --git a/sas/daily/index.xml b/sas/daily/index.xml index 8c4dabd39cf..a6cfe6cee94 100644 --- a/sas/daily/index.xml +++ b/sas/daily/index.xml @@ -1,7 +1,7 @@ GitHub SAS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:33Z + 2024-08-03T01:36:05Z Daily Trending of SAS in GitHub \ No newline at end of file diff --git a/sass/daily/index.xml b/sass/daily/index.xml index 08ecd947963..7ec4d2ab03d 100644 --- a/sass/daily/index.xml +++ b/sass/daily/index.xml @@ -1,7 +1,7 @@ GitHub Sass Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:33Z + 2024-08-03T01:36:05Z Daily Trending of Sass in GitHub \ No newline at end of file diff --git a/scala/daily/index.xml b/scala/daily/index.xml index 72a495bf40b..94cebfc9c27 100644 --- a/scala/daily/index.xml +++ b/scala/daily/index.xml @@ -1,7 +1,7 @@ GitHub Scala Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:36Z + 2024-08-03T01:36:08Z Daily Trending of Scala in GitHub \ No newline at end of file diff --git a/scaml/daily/index.xml b/scaml/daily/index.xml index 068a8274d3f..48bfd16c484 100644 --- a/scaml/daily/index.xml +++ b/scaml/daily/index.xml @@ -1,7 +1,7 @@ GitHub Scaml Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:34Z + 2024-08-03T01:36:06Z Daily Trending of Scaml in GitHub \ No newline at end of file diff --git a/scheme/daily/index.xml b/scheme/daily/index.xml index 5c23b1653bb..81ef81229ce 100644 --- a/scheme/daily/index.xml +++ b/scheme/daily/index.xml @@ -1,7 +1,7 @@ GitHub Scheme Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:34Z + 2024-08-03T01:36:07Z Daily Trending of Scheme in GitHub \ No newline at end of file diff --git a/scilab/daily/index.xml b/scilab/daily/index.xml index b292228018b..e2af0565361 100644 --- a/scilab/daily/index.xml +++ b/scilab/daily/index.xml @@ -1,7 +1,7 @@ GitHub Scilab Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:40Z + 2024-08-03T01:36:11Z Daily Trending of Scilab in GitHub \ No newline at end of file diff --git a/scss/daily/index.xml b/scss/daily/index.xml index 823c401f9b2..4c495145eb0 100644 --- a/scss/daily/index.xml +++ b/scss/daily/index.xml @@ -1,14 +1,7 @@ GitHub SCSS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:41Z + 2024-08-03T01:36:13Z Daily Trending of SCSS in GitHub - - zhang-wangz/LeetCodeRating - 2024-08-02T01:35:41Z - tag:github.com,2024-08-02:/zhang-wangz/LeetCodeRating - - <p>一款对应力扣的浏览器油猴插件| TamperMonkey | Chrome</p><hr> - \ No newline at end of file diff --git a/sed/daily/index.xml b/sed/daily/index.xml index fb73944358b..785037f2775 100644 --- a/sed/daily/index.xml +++ b/sed/daily/index.xml @@ -1,7 +1,7 @@ GitHub sed Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:39Z + 2024-08-03T01:36:12Z Daily Trending of sed in GitHub \ No newline at end of file diff --git a/self/daily/index.xml b/self/daily/index.xml index c611aef64b0..98a5befcab4 100644 --- a/self/daily/index.xml +++ b/self/daily/index.xml @@ -1,7 +1,7 @@ GitHub Self Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:40Z + 2024-08-03T01:36:12Z Daily Trending of Self in GitHub \ No newline at end of file diff --git a/selinux-policy/daily/index.xml b/selinux-policy/daily/index.xml index a9fa46d1ea1..212a0fca4bf 100644 --- a/selinux-policy/daily/index.xml +++ b/selinux-policy/daily/index.xml @@ -1,7 +1,7 @@ GitHub SELinux Policy Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:42Z + 2024-08-03T01:36:14Z Daily Trending of SELinux Policy in GitHub \ No newline at end of file diff --git a/shaderlab/daily/index.xml b/shaderlab/daily/index.xml index f034903bee3..3ca157a127d 100644 --- a/shaderlab/daily/index.xml +++ b/shaderlab/daily/index.xml @@ -1,7 +1,7 @@ GitHub ShaderLab Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:42Z + 2024-08-03T01:36:14Z Daily Trending of ShaderLab in GitHub \ No newline at end of file diff --git a/shell/daily/index.xml b/shell/daily/index.xml index ea75b3dae9d..faa62def79e 100644 --- a/shell/daily/index.xml +++ b/shell/daily/index.xml @@ -1,7 +1,21 @@ GitHub Shell Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:44Z + 2024-08-03T01:36:15Z Daily Trending of Shell in GitHub + + qzeleza/kvas + 2024-08-03T01:36:15Z + tag:github.com,2024-08-03:/qzeleza/kvas + + <p>vpn и shadowsocks клиент для роутеров keenetic</p><hr><p><img src="https://img.shields.io/github/stars/qzeleza/kvas?color=orange" alt="GitHub Repo stars"> <img src="https://img.shields.io/github/issues-closed/qzeleza/kvas?color=success" alt="GitHub closed issues"> <img src="https://img.shields.io/github/last-commit/qzeleza/kvas" alt="GitHub last commit"> <img src="https://img.shields.io/github/commit-activity/y/qzeleza/kvas" alt="GitHub commit activity"> <img src="https://img.shields.io/github/languages/top/qzeleza/kvas" alt="GitHub top language"> <img src="https://img.shields.io/github/languages/code-size/qzeleza/kvas" alt="GitHub code size in bytes"></p> <h1><a href="https://forum.keenetic.com/topic/14415-%D0%BF%D1%80%D0%BE%D0%B1%D1%83%D0%B5%D0%BC-%D0%BA%D0%B2%D0%B0%D1%81-shadowsocks-%D0%B8-%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5-vpn-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B">КВАС</a> - защита ваших подключений</h1> <hr> <h4>Внимание!</h4> <p>Открыта <a href="https://t.me/kvas_pro">группа в Телеграмм</a> с целью оперативного обмена информацией по проекту.</p> <hr> <h3>VPN и SHADOWSOCKS клиент для <a href="https://keenetic.ru/ru/">роутеров Keenetic</a></h3> <h4>Пакет представляет собой обвязку или интерфейс командной строки для защиты Вашего соединения при обращении к определенным доменам.</h4> <h4>В пакете реализуется связка: <strong>ipset</strong> + один из вариантов связки DNS сервера:</h4> <ul> <li><strong>dnsmasq (с поддержкой wildcard)</strong> + <strong>dnscrypt-proxy2</strong> + блокировщик рекламы <strong>adblock</strong> или</li> <li><strong>AdGuardHome</strong> (уже всключает в себя и шифрование <strong>DNS</strong> трафика и блокировщик рекламы).</li> </ul> <blockquote> <p>В связи с использованием в пакете утилиты dnsmasq с <strong>wildcard</strong>, можно работать с любыми доменными именами третьего и выше уровней. Т.е. в белый список достаточно добавить *<strong>domen.com</strong> и маршрутизация трафика будет идти как к <strong>sub1.domen.com</strong>, так и к любому другому поддоменному имени типа <strong>subN.domen.com</strong>.</p> </blockquote> <h2>Возможности</h2> <ol> <li><strong>Квас</strong> работает на всех платформах произведенных <strong>Keenetic</strong> устройств, ввиду легковесности задействованных пакетов: <strong>mips, mipsel, aarch64</strong>.</li> <li><strong>Квас</strong> использует <strong>dnsmasq</strong>, <em><strong>с поддержкой регулярных выражений</strong></em>, а это в свою очередь дает одно, но большое преимущество: можно работать с соцсетями и прочими высоко-нагруженными сайтами, добавив лишь корневые домены по этим сайтам.</li> <li><strong>Квас</strong> позволяет <strong>отображать статус/отключать/включать</strong> блокировку рекламы (модуль <strong>adblock</strong> + <strong>dnsmasq</strong>);</li> <li><strong>Квас</strong> позволяет <strong>отображать статус/отключать/включать</strong> шифрование <strong>DNS</strong> (пакет <strong>dnscrypt-proxy2</strong>);</li> <li><strong>Квас</strong> позволяет тестировать и выводить отладочную информацию по всем элементам связки <strong>ipset + ( dnsmasq + dnscrypt-proxy2 ) | AdGuardHome</strong></li> <li><strong>Квас</strong> позволяет подключить <strong>AdGuardHome</strong> в качестве <strong>DNS</strong> сервера, вместо связки <strong>dnsmasq + dnscrypt-proxy2 + adblock</strong>. 7<strong>Квас</strong> позволяет оперировать со списком исключений при блокировки рекламы, добавляет и удаляет домены в этом списке.</li> </ol> <h2>Установка пакета</h2> <ol> <li>Зайдите в <strong>entware</strong> своего роутера и введите команду <code>curl -sOfL http://kvas.zeleza.ru/install &amp;&amp; sh install</code>.</li> <li>Далее, следуйте инструкциям на экране.</li> <li>Подробности читайте <a href="https://github.com/qzeleza/kvas/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0">здесь</a></li> </ol> <h2>Используемые в проекте продукты</h2> <ul> <li>Для проведения тестов, в проекте используется пакет <a href="https://github.com/bats-core/bats-core/raw/master/LICENSE.md">BATS</a> от нескольких <a href="https://github.com/bats-core/bats-core/raw/master/AUTHORS">АВТОРОВ</a>.</li> </ul> <h2>Помощь проекту</h2> <p>Помочь можно переводом средств на <a href="https://yoomoney.ru/to/4100117756734493">этот кошелек ЮМани</a>.</p> <h2>Документация по проекту</h2> <ul> <li><a href="https://github.com/qzeleza/kvas/wiki">Перейти по cсылке</a>.</li> </ul> <h2>Каталог всех версий проекта</h2> <ul> <li><a href="https://github.com/qzeleza/kvas/tree/main/ipk">Перейти по cсылке</a></li> </ul> <h2>История "Звезд"</h2> <p><a href="https://star-history.com/#qzeleza/kvas&amp;Timeline"><img src="https://api.star-history.com/svg?repos=qzeleza/kvas&amp;type=Timeline" alt="Star History Chart"></a></p> <hr> + + + QwenLM/Qwen2 + 2024-08-03T01:36:15Z + tag:github.com,2024-08-03:/QwenLM/Qwen2 + + <p>Qwen2 is the large language model series developed by Qwen team, Alibaba Cloud.</p><hr><h1>Qwen2</h1> <p align="center"> <img src="https://qianwen-res.oss-accelerate-overseas.aliyuncs.com/logo_qwen2.png" width="400"> </p> <p> </p> <p align="center"> 🤗 <a href="https://huggingface.co/Qwen">Hugging Face</a>&nbsp;&nbsp; | &nbsp;&nbsp;🤖 <a href="https://modelscope.cn/organization/qwen">ModelScope</a>&nbsp;&nbsp; | &nbsp;&nbsp; 📑 <a href="https://arxiv.org/abs/2407.10671">Paper</a> &nbsp;&nbsp; | &nbsp;&nbsp; 📑 <a href="https://qwenlm.github.io/blog/qwen2/">Blog</a> &nbsp;&nbsp; | &nbsp;&nbsp;📖 <a href="https://qwen.readthedocs.io/">Documentation</a> <br> 🖥️ <a href="https://huggingface.co/spaces/Qwen/Qwen2-72B-Instruct">Demo</a>&nbsp;&nbsp; | &nbsp;&nbsp;💬 <a href="https://github.com/QwenLM/Qwen/raw/main/assets/wechat.png">WeChat (微信)</a>&nbsp;&nbsp; | &nbsp;&nbsp;🫨 <a href="https://discord.gg/CV4E9rpNSD">Discord</a>&nbsp;&nbsp; </p> <p>Visit our Hugging Face or ModelScope organization (click links above), search checkpoints with names starting with <code>Qwen2-</code> or visit the <a href="https://huggingface.co/collections/Qwen/qwen2-6659360b33528ced941e557f">Qwen2 collection</a>, and you will find all you need! Enjoy!</p> <p>To learn more about Qwen2, feel free to read our documentation [<a href="https://qwen.readthedocs.io/en/latest/">EN</a>|<a href="https://qwen.readthedocs.io/zh-cn/latest/">ZH</a>]. Our documentation consists of the following sections:</p> <ul> <li>Quickstart: the basic usages and demonstrations;</li> <li>Inference: the guidance for the inference with transformers, including batch inference, streaming, etc.;</li> <li>Run Locally: the instructions for running LLM locally on CPU and GPU, with frameworks like <code>llama.cpp</code> and <code>Ollama</code>;</li> <li>Deployment: the demonstration of how to deploy Qwen for large-scale inference with frameworks like <code>vLLM</code>, <code>TGI</code>, etc.;</li> <li>Quantization: the practice of quantizing LLMs with GPTQ, AWQ, as well as the guidance for how to make high-quality quantized GGUF files;</li> <li>Training: the instructions for post-training, including SFT and RLHF (TODO) with frameworks like Axolotl, LLaMA-Factory, etc.</li> <li>Framework: the usage of Qwen with frameworks for application, e.g., RAG, Agent, etc.</li> <li>Benchmark: the statistics about inference speed and memory footprint.</li> </ul> <h2>Introduction</h2> <p>After months of efforts, we are pleased to announce the evolution from Qwen1.5 to Qwen2. This time, we bring to you:</p> <ul> <li>Pretrained and instruction-tuned models of 5 sizes, including Qwen2-0.5B, Qwen2-1.5B, Qwen2-7B, Qwen2-57B-A14B, and <strong>Qwen2-72B</strong>;</li> <li>Having been trained on data in <strong>27</strong> additional languages besides English and Chinese;</li> <li>State-of-the-art performance in a large number of benchmark evaluations;</li> <li>Significantly improved performance in coding and mathematics;</li> <li>Extended context length support up to <strong>128K</strong> tokens with Qwen2-7B-Instruct and Qwen2-72B-Instruct.</li> </ul> <h2>News</h2> <ul> <li>2024.06.06: We released the Qwen2 series. Check our <a href="https://qwenlm.github.io/blog/qwen2/">blog</a>!</li> <li>2024.03.28: We released the first MoE model of Qwen: Qwen1.5-MoE-A2.7B! Temporarily, only HF transformers and vLLM support the model. We will soon add the support of llama.cpp, mlx-lm, etc. Check our <a href="https://qwenlm.github.io/blog/qwen-moe/">blog</a> for more information!</li> <li>2024.02.05: We released the Qwen1.5 series.</li> </ul> <h2>Performance</h2> <p>Detailed evaluation results are reported in this <a href="https://qwenlm.github.io/blog/qwen2/"> 📑 blog</a>.</p> <h2>Requirements</h2> <ul> <li><code>transformers&gt;=4.40.0</code> for Qwen2 dense and MoE models. The latest version is recommended.</li> </ul> <blockquote> <p>[!Warning]</p> <div align="center"> <b> 🚨 This is a must because `transformers` integrated Qwen2 codes since `4.37.0` and Qwen2Moe code since `4.40.0`. </b> </div> </blockquote> <p>For requirements on GPU memory and the respective throughput, see results <a href="https://qwen.readthedocs.io/en/latest/benchmark/speed_benchmark.html">here</a>.</p> <h2>Quickstart</h2> <h3>🤗 Hugging Face Transformers</h3> <p>Here we show a code snippet to show you how to use the chat model with <code>transformers</code>:</p> <pre><code class="language-python">from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "Qwen/Qwen2-7B-Instruct" device = "cuda" # the device to load the model onto model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype="auto", device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained(model_name) prompt = "Give me a short introduction to large language model." messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt").to(device) generated_ids = model.generate( **model_inputs, max_new_tokens=512 ) generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] </code></pre> <p>For quantized models, we advise you to use the GPTQ and AWQ correspondents, namely <code>Qwen2-7B-Instruct-GPTQ-Int8</code>, <code>Qwen2-7B-Instruct-AWQ</code>.</p> <h3>🤖 ModelScope</h3> <p>We strongly advise users especially those in mainland China to use ModelScope. <code>snapshot_download</code> can help you solve issues concerning downloading checkpoints.</p> <h3>💻 Run locally</h3> <h4>Ollama</h4> <blockquote> <p>[!Warning] You need <code>ollama&gt;=0.1.42</code>.</p> </blockquote> <blockquote> <p>[!NOTE]</p> <div align="center"> Ollama provides an <a href="https://github.com/ollama/ollama/raw/main/docs/openai.md">OpenAI-compatible API</a>, which however does NOT support <b>function calling</b>. For tool use capabilities, consider using <a href="https://github.com/QwenLM/Qwen-Agent">Qwen-Agent</a>, which offers a wrapper for function calling over the API. </div> </blockquote> <p>After <a href="https://github.com/ollama/ollama/raw/main/README.md">installing ollama</a>, you can initiate the ollama service with the following command:</p> <pre><code class="language-shell">ollama serve # You need to keep this service running whenever you are using ollama </code></pre> <p>To pull a model checkpoint and run the model, use the <code>ollama run</code> command. You can specify a model size by adding a suffix to <code>qwen2</code>, such as <code>:0.5b</code>, <code>:1.5b</code>, <code>:7b</code>, or <code>:72b</code>:</p> <pre><code class="language-shell">ollama run qwen2:7b # To exit, type "/bye" and press ENTER </code></pre> <p>You can also access the ollama service via its OpenAI-compatible API. Please note that you need to (1) keep <code>ollama serve</code> running while using the API, and (2) execute <code>ollama run qwen2:7b</code> before utilizing this API to ensure that the model checkpoint is prepared.</p> <pre><code class="language-py">from openai import OpenAI client = OpenAI( base_url='http://localhost:11434/v1/', api_key='ollama', # required but ignored ) chat_completion = client.chat.completions.create( messages=[ { 'role': 'user', 'content': 'Say this is a test', } ], model='qwen2:7b', ) </code></pre> <p>For additional details, please visit <a href="https://ollama.ai/">ollama.ai</a>.</p> <h4>llama.cpp</h4> <blockquote> <p>[!Warning] You need <code>llama.cpp&gt;=b3370</code>.</p> </blockquote> <p>Download our provided GGUF files or create them by yourself, and you can directly use them with the latest <a href="https://github.com/ggerganov/llama.cpp"><code>llama.cpp</code></a> with a one-line command:</p> <pre><code class="language-shell">./llama-cli -m &lt;path-to-file&gt; -n 512 -co -i -if -f prompts/chat-with-qwen.txt --in-prefix "&lt;|im_start|&gt;user\n" --in-suffix "&lt;|im_end|&gt;\n&lt;|im_start|&gt;assistant\n" </code></pre> <h4>MLX-LM</h4> <p>If you are running on Apple Silicon, we have also provided checkpoints compatible with <a href="https://github.com/ml-explore/mlx-examples/raw/main/llms/README.md"><code>mlx-lm</code></a>. Look for models ending with MLX on HuggingFace Hub, like <a href="https://huggingface.co/Qwen/Qwen2-7B-Instruct-MLX">Qwen2-7B-Instruct-MLX</a>.</p> <h4>LMStudio</h4> <p>Qwen2 has already been supported by <a href="https://lmstudio.ai/">lmstudio.ai</a>. You can directly use LMStudio with our GGUF files.</p> <h4>OpenVINO</h4> <p>Qwen2 has already been supported by <a href="https://github.com/openvinotoolkit">OpenVINO toolkit</a>. You can install and run this <a href="https://github.com/OpenVINO-dev-contest/Qwen2.openvino">chatbot example</a> with Intel CPU, integrated GPU or discrete GPU.</p> <h2>Web UI</h2> <h4>Text generation web UI</h4> <p>You can directly use <a href="https://github.com/oobabooga/text-generation-webui"><code>text-generation-webui</code></a> for creating a web UI demo. If you use GGUF, remember to install the latest wheel of <code>llama.cpp</code> with the support of Qwen2.</p> <h4>llamafile</h4> <p>Clone <a href="https://github.com/Mozilla-Ocho/llamafile"><code>llamafile</code></a>, run source install, and then create your own llamafile with the GGUF file following the guide <a href="https://github.com/Mozilla-Ocho/llamafile?tab=readme-ov-file#creating-llamafiles">here</a>. You are able to run one line of command, say <code>./qwen.llamafile</code>, to create a demo.</p> <h2>Deployment</h2> <p>Qwen2 is supported by multiple inference frameworks. Here we demonstrate the usage of <code>vLLM</code> and <code>SGLang</code>.</p> <blockquote> <p>[!Warning]</p> <div align="center"> The OpenAI-compatible APIs provided by vLLM and SGLang currently do NOT support <b>function calling</b>. For tool use capabilities, <a href="https://github.com/QwenLM/Qwen-Agent">Qwen-Agent</a> provides a wrapper around these APIs to support function calling. </div> </blockquote> <h3>vLLM</h3> <p>We advise you to use <code>vLLM&gt;=0.4.0</code> to build OpenAI-compatible API service. Start the server with a chat model, e.g. <code>Qwen2-7B-Instruct</code>:</p> <pre><code class="language-shell">python -m vllm.entrypoints.openai.api_server --served-model-name Qwen2-7B-Instruct --model Qwen/Qwen2-7B-Instruct </code></pre> <p>Then use the chat API as demonstrated below:</p> <pre><code class="language-shell">curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen2-7B-Instruct", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Tell me something about large language models."} ] }' </code></pre> <pre><code class="language-python">from openai import OpenAI # Set OpenAI's API key and API base to use vLLM's API server. openai_api_key = "EMPTY" openai_api_base = "http://localhost:8000/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) chat_response = client.chat.completions.create( model="Qwen2-7B-Instruct", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Tell me something about large language models."}, ] ) print("Chat response:", chat_response) </code></pre> <h3>SGLang</h3> <blockquote> <p>[!NOTE]</p> <div align="center"> SGLang now does NOT support the <b>Qwen2MoeForCausalLM</b> architecture, thus making <b>Qwen2-57B-A14B</b> incompatible. </div> </blockquote> <p>Please install <code>SGLang</code> from source. Similar to <code>vLLM</code>, you need to launch a server and use OpenAI-compatible API service. Start the server first:</p> <pre><code class="language-shell">python -m sglang.launch_server --model-path Qwen/Qwen2-7B-Instruct --port 30000 </code></pre> <p>You can use it in Python as shown below:</p> <pre><code class="language-python">from sglang import function, system, user, assistant, gen, set_default_backend, RuntimeEndpoint @function def multi_turn_question(s, question_1, question_2): s += system("You are a helpful assistant.") s += user(question_1) s += assistant(gen("answer_1", max_tokens=256)) s += user(question_2) s += assistant(gen("answer_2", max_tokens=256)) set_default_backend(RuntimeEndpoint("http://localhost:30000")) state = multi_turn_question.run( question_1="What is the capital of China?", question_2="List two local attractions.", ) for m in state.messages(): print(m["role"], ":", m["content"]) print(state["answer_1"]) </code></pre> <h2>Finetuning</h2> <p>We advise you to use training frameworks, including <a href="https://github.com/OpenAccess-AI-Collective/axolotl">Axolotl</a>, <a href="https://github.com/hiyouga/LLaMA-Factory">Llama-Factory</a>, <a href="https://github.com/modelscope/swift">Swift</a>, etc., to finetune your models with SFT, DPO, PPO, etc.</p> <h2>🐳 Docker</h2> <p>To simplify the deployment process, we provide docker images with pre-built environments: <a href="https://hub.docker.com/r/qwenllm/qwen">qwenllm/qwen</a>. You only need to install the driver and download model files to launch demos and finetune the model.</p> <pre><code class="language-bash">docker run --gpus all --ipc=host --network=host --rm --name qwen2 -it qwenllm/qwen:2-cu121 bash </code></pre> <h2>License Agreement</h2> <p>Check the license of each model inside its HF repo. It is NOT necessary for you to submit a request for commercial usage.</p> <h2>Citation</h2> <p>If you find our work helpful, feel free to give us a cite.</p> <pre><code>@article{qwen2, title={Qwen2 Technical Report}, author={An Yang and Baosong Yang and Binyuan Hui and Bo Zheng and Bowen Yu and Chang Zhou and Chengpeng Li and Chengyuan Li and Dayiheng Liu and Fei Huang and Guanting Dong and Haoran Wei and Huan Lin and Jialong Tang and Jialin Wang and Jian Yang and Jianhong Tu and Jianwei Zhang and Jianxin Ma and Jin Xu and Jingren Zhou and Jinze Bai and Jinzheng He and Junyang Lin and Kai Dang and Keming Lu and Keqin Chen and Kexin Yang and Mei Li and Mingfeng Xue and Na Ni and Pei Zhang and Peng Wang and Ru Peng and Rui Men and Ruize Gao and Runji Lin and Shijie Wang and Shuai Bai and Sinan Tan and Tianhang Zhu and Tianhao Li and Tianyu Liu and Wenbin Ge and Xiaodong Deng and Xiaohuan Zhou and Xingzhang Ren and Xinyu Zhang and Xipin Wei and Xuancheng Ren and Yang Fan and Yang Yao and Yichang Zhang and Yu Wan and Yunfei Chu and Yuqiong Liu and Zeyu Cui and Zhenru Zhang and Zhihao Fan}, journal={arXiv preprint arXiv:2407.10671}, year={2024} } </code></pre> <h2>Contact Us</h2> <p>If you are interested to leave a message to either our research team or product team, join our <a href="https://discord.gg/z3GAxXZ9Ce">Discord</a> or <a href="https://raw.githubusercontent.com/QwenLM/Qwen2/main/assets/wechat.png">WeChat groups</a>!</p> + \ No newline at end of file diff --git a/shellcheck-config/daily/index.xml b/shellcheck-config/daily/index.xml index 4dcf6ada525..d279d40f168 100644 --- a/shellcheck-config/daily/index.xml +++ b/shellcheck-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub ShellCheck Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:42Z + 2024-08-03T01:36:13Z Daily Trending of ShellCheck Config in GitHub \ No newline at end of file diff --git a/shellsession/daily/index.xml b/shellsession/daily/index.xml index 864a9da5fcf..5599b525f1b 100644 --- a/shellsession/daily/index.xml +++ b/shellsession/daily/index.xml @@ -1,7 +1,7 @@ GitHub ShellSession Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:49Z + 2024-08-03T01:36:23Z Daily Trending of ShellSession in GitHub \ No newline at end of file diff --git a/shen/daily/index.xml b/shen/daily/index.xml index 1d2cc7a648d..7765e99c829 100644 --- a/shen/daily/index.xml +++ b/shen/daily/index.xml @@ -1,7 +1,7 @@ GitHub Shen Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:48Z + 2024-08-03T01:36:23Z Daily Trending of Shen in GitHub \ No newline at end of file diff --git a/sieve/daily/index.xml b/sieve/daily/index.xml index ddc674d6966..c5a12137126 100644 --- a/sieve/daily/index.xml +++ b/sieve/daily/index.xml @@ -1,7 +1,7 @@ GitHub Sieve Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:49Z + 2024-08-03T01:36:22Z Daily Trending of Sieve in GitHub \ No newline at end of file diff --git a/singularity/daily/index.xml b/singularity/daily/index.xml index 8050e835c4b..77846460ecc 100644 --- a/singularity/daily/index.xml +++ b/singularity/daily/index.xml @@ -1,7 +1,7 @@ GitHub Singularity Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:50Z + 2024-08-03T01:36:24Z Daily Trending of Singularity in GitHub \ No newline at end of file diff --git a/slash/daily/index.xml b/slash/daily/index.xml index f9f181b539f..fab39ad0b19 100644 --- a/slash/daily/index.xml +++ b/slash/daily/index.xml @@ -1,7 +1,7 @@ GitHub Slash Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:51Z + 2024-08-03T01:36:24Z Daily Trending of Slash in GitHub \ No newline at end of file diff --git a/slice/daily/index.xml b/slice/daily/index.xml index 1a9d15b48c3..1728386e4a2 100644 --- a/slice/daily/index.xml +++ b/slice/daily/index.xml @@ -1,7 +1,7 @@ GitHub Slice Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:50Z + 2024-08-03T01:36:24Z Daily Trending of Slice in GitHub \ No newline at end of file diff --git a/slim/daily/index.xml b/slim/daily/index.xml index 6bcd8eea91d..ffae77352cb 100644 --- a/slim/daily/index.xml +++ b/slim/daily/index.xml @@ -1,7 +1,7 @@ GitHub Slim Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:50Z + 2024-08-03T01:36:24Z Daily Trending of Slim in GitHub \ No newline at end of file diff --git a/smali/daily/index.xml b/smali/daily/index.xml index 3424901d175..b9fc1091329 100644 --- a/smali/daily/index.xml +++ b/smali/daily/index.xml @@ -1,7 +1,7 @@ GitHub Smali Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:52Z + 2024-08-03T01:36:25Z Daily Trending of Smali in GitHub \ No newline at end of file diff --git a/smalltalk/daily/index.xml b/smalltalk/daily/index.xml index 452719ce2d2..1e5066064b0 100644 --- a/smalltalk/daily/index.xml +++ b/smalltalk/daily/index.xml @@ -1,7 +1,7 @@ GitHub Smalltalk Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:52Z + 2024-08-03T01:36:26Z Daily Trending of Smalltalk in GitHub \ No newline at end of file diff --git a/smarty/daily/index.xml b/smarty/daily/index.xml index 0f9d0aa8be4..17568a920ee 100644 --- a/smarty/daily/index.xml +++ b/smarty/daily/index.xml @@ -1,7 +1,7 @@ GitHub Smarty Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:52Z + 2024-08-03T01:36:26Z Daily Trending of Smarty in GitHub \ No newline at end of file diff --git a/smpl/daily/index.xml b/smpl/daily/index.xml index 6a70c99f076..9b454fdd9d0 100644 --- a/smpl/daily/index.xml +++ b/smpl/daily/index.xml @@ -1,7 +1,7 @@ GitHub SmPL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:53Z + 2024-08-03T01:36:27Z Daily Trending of SmPL in GitHub \ No newline at end of file diff --git a/smt/daily/index.xml b/smt/daily/index.xml index 243fceb4cd6..efa9a02f962 100644 --- a/smt/daily/index.xml +++ b/smt/daily/index.xml @@ -1,7 +1,7 @@ GitHub SMT Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:54Z + 2024-08-03T01:36:28Z Daily Trending of SMT in GitHub \ No newline at end of file diff --git a/solidity/daily/index.xml b/solidity/daily/index.xml index 2624d07cdf7..c3f3b19a930 100644 --- a/solidity/daily/index.xml +++ b/solidity/daily/index.xml @@ -1,7 +1,7 @@ GitHub Solidity Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:56Z + 2024-08-03T01:36:31Z Daily Trending of Solidity in GitHub \ No newline at end of file diff --git a/soong/daily/index.xml b/soong/daily/index.xml index cedf9bb7d22..f4f4a00a404 100644 --- a/soong/daily/index.xml +++ b/soong/daily/index.xml @@ -1,7 +1,7 @@ GitHub Soong Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:55Z + 2024-08-03T01:36:28Z Daily Trending of Soong in GitHub \ No newline at end of file diff --git a/sourcepawn/daily/index.xml b/sourcepawn/daily/index.xml index 02fd1e230bb..0b6751a2cd0 100644 --- a/sourcepawn/daily/index.xml +++ b/sourcepawn/daily/index.xml @@ -1,7 +1,7 @@ GitHub SourcePawn Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:55Z + 2024-08-03T01:36:29Z Daily Trending of SourcePawn in GitHub \ No newline at end of file diff --git a/sparql/daily/index.xml b/sparql/daily/index.xml index e361c6e8936..b304d055f50 100644 --- a/sparql/daily/index.xml +++ b/sparql/daily/index.xml @@ -1,7 +1,7 @@ GitHub SPARQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:54Z + 2024-08-03T01:36:29Z Daily Trending of SPARQL in GitHub \ No newline at end of file diff --git a/spline-font-database/daily/index.xml b/spline-font-database/daily/index.xml index cd7c347100d..c239b6919be 100644 --- a/spline-font-database/daily/index.xml +++ b/spline-font-database/daily/index.xml @@ -1,7 +1,7 @@ GitHub Spline Font Database Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:56Z + 2024-08-03T01:36:31Z Daily Trending of Spline Font Database in GitHub \ No newline at end of file diff --git a/sqf/daily/index.xml b/sqf/daily/index.xml index 067407ccc0b..460665181da 100644 --- a/sqf/daily/index.xml +++ b/sqf/daily/index.xml @@ -1,7 +1,7 @@ GitHub SQF Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:57Z + 2024-08-03T01:36:32Z Daily Trending of SQF in GitHub \ No newline at end of file diff --git a/sql/daily/index.xml b/sql/daily/index.xml index 135a98d9f1c..1b33d8e3e1b 100644 --- a/sql/daily/index.xml +++ b/sql/daily/index.xml @@ -1,7 +1,7 @@ GitHub SQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:57Z + 2024-08-03T01:36:32Z Daily Trending of SQL in GitHub \ No newline at end of file diff --git a/sqlpl/daily/index.xml b/sqlpl/daily/index.xml index 31932ef4617..58047ffcbd3 100644 --- a/sqlpl/daily/index.xml +++ b/sqlpl/daily/index.xml @@ -1,7 +1,7 @@ GitHub SQLPL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:57Z + 2024-08-03T01:36:31Z Daily Trending of SQLPL in GitHub \ No newline at end of file diff --git a/squirrel/daily/index.xml b/squirrel/daily/index.xml index c9a8744bcc2..c284a0735b0 100644 --- a/squirrel/daily/index.xml +++ b/squirrel/daily/index.xml @@ -1,7 +1,7 @@ GitHub Squirrel Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:59Z + 2024-08-03T01:36:33Z Daily Trending of Squirrel in GitHub \ No newline at end of file diff --git a/srecode-template/daily/index.xml b/srecode-template/daily/index.xml index 45062ae61ac..b6c9484dabb 100644 --- a/srecode-template/daily/index.xml +++ b/srecode-template/daily/index.xml @@ -1,7 +1,7 @@ GitHub SRecode Template Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:58Z + 2024-08-03T01:36:33Z Daily Trending of SRecode Template in GitHub \ No newline at end of file diff --git a/ssh-config/daily/index.xml b/ssh-config/daily/index.xml index 0ba9c5e9be3..69a5bd928f6 100644 --- a/ssh-config/daily/index.xml +++ b/ssh-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub SSH Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:58Z + 2024-08-03T01:36:33Z Daily Trending of SSH Config in GitHub \ No newline at end of file diff --git a/stan/daily/index.xml b/stan/daily/index.xml index 2076b8cde65..9aadb818022 100644 --- a/stan/daily/index.xml +++ b/stan/daily/index.xml @@ -1,7 +1,7 @@ GitHub Stan Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:58Z + 2024-08-03T01:36:34Z Daily Trending of Stan in GitHub \ No newline at end of file diff --git a/standard-ml/daily/index.xml b/standard-ml/daily/index.xml index f10aa5ac1f9..1291f10c8ce 100644 --- a/standard-ml/daily/index.xml +++ b/standard-ml/daily/index.xml @@ -1,7 +1,7 @@ GitHub Standard ML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:00Z + 2024-08-03T01:36:35Z Daily Trending of Standard ML in GitHub \ No newline at end of file diff --git a/starlark/daily/index.xml b/starlark/daily/index.xml index c05ea05cdf4..ccd75b74ce7 100644 --- a/starlark/daily/index.xml +++ b/starlark/daily/index.xml @@ -1,7 +1,7 @@ GitHub Starlark Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:01Z + 2024-08-03T01:36:36Z Daily Trending of Starlark in GitHub \ No newline at end of file diff --git a/stata/daily/index.xml b/stata/daily/index.xml index afb5d6d4324..8adac5526eb 100644 --- a/stata/daily/index.xml +++ b/stata/daily/index.xml @@ -1,7 +1,7 @@ GitHub Stata Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:35:59Z + 2024-08-03T01:36:34Z Daily Trending of Stata in GitHub \ No newline at end of file diff --git a/ston/daily/index.xml b/ston/daily/index.xml index c702cca85f9..75d51fc62e0 100644 --- a/ston/daily/index.xml +++ b/ston/daily/index.xml @@ -1,7 +1,7 @@ GitHub STON Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:01Z + 2024-08-03T01:36:37Z Daily Trending of STON in GitHub \ No newline at end of file diff --git a/stringtemplate/daily/index.xml b/stringtemplate/daily/index.xml index 989e87987f1..70b4ad04261 100644 --- a/stringtemplate/daily/index.xml +++ b/stringtemplate/daily/index.xml @@ -1,7 +1,7 @@ GitHub StringTemplate Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:02Z + 2024-08-03T01:36:37Z Daily Trending of StringTemplate in GitHub \ No newline at end of file diff --git a/stylus/daily/index.xml b/stylus/daily/index.xml index 64b5b44bfd6..748eec0fac1 100644 --- a/stylus/daily/index.xml +++ b/stylus/daily/index.xml @@ -1,7 +1,7 @@ GitHub Stylus Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:02Z + 2024-08-03T01:36:38Z Daily Trending of Stylus in GitHub \ No newline at end of file diff --git a/subrip-text/daily/index.xml b/subrip-text/daily/index.xml index d9d445768db..6b0fa2301f1 100644 --- a/subrip-text/daily/index.xml +++ b/subrip-text/daily/index.xml @@ -1,7 +1,7 @@ GitHub SubRip Text Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:03Z + 2024-08-03T01:36:39Z Daily Trending of SubRip Text in GitHub \ No newline at end of file diff --git a/sugarss/daily/index.xml b/sugarss/daily/index.xml index 4558e911859..06c1cd1635b 100644 --- a/sugarss/daily/index.xml +++ b/sugarss/daily/index.xml @@ -1,7 +1,7 @@ GitHub SugarSS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:03Z + 2024-08-03T01:36:39Z Daily Trending of SugarSS in GitHub \ No newline at end of file diff --git a/supercollider/daily/index.xml b/supercollider/daily/index.xml index 9eba7b83d9d..3fdf229c553 100644 --- a/supercollider/daily/index.xml +++ b/supercollider/daily/index.xml @@ -1,7 +1,7 @@ GitHub SuperCollider Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:03Z + 2024-08-03T01:36:39Z Daily Trending of SuperCollider in GitHub \ No newline at end of file diff --git a/svelte/daily/index.xml b/svelte/daily/index.xml index 03e237b09d3..940183d4acb 100644 --- a/svelte/daily/index.xml +++ b/svelte/daily/index.xml @@ -1,7 +1,7 @@ GitHub Svelte Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:04Z + 2024-08-03T01:36:40Z Daily Trending of Svelte in GitHub \ No newline at end of file diff --git a/svg/daily/index.xml b/svg/daily/index.xml index e97031cda6d..ef99cfdc9fc 100644 --- a/svg/daily/index.xml +++ b/svg/daily/index.xml @@ -1,7 +1,7 @@ GitHub SVG Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:06Z + 2024-08-03T01:36:43Z Daily Trending of SVG in GitHub \ No newline at end of file diff --git a/swift/daily/index.xml b/swift/daily/index.xml index 1758ed18c4a..9dc1b9bf82e 100644 --- a/swift/daily/index.xml +++ b/swift/daily/index.xml @@ -1,14 +1,7 @@ GitHub Swift Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:07Z + 2024-08-03T01:36:43Z Daily Trending of Swift in GitHub - - swiftlang/swift-markdown - 2024-08-02T01:36:07Z - tag:github.com,2024-08-02:/swiftlang/swift-markdown - - <p>A Swift package for parsing, building, editing, and analyzing Markdown documents.</p><hr><h1>Swift Markdown</h1> <p>Swift <code>Markdown</code> is a Swift package for parsing, building, editing, and analyzing Markdown documents.</p> <p>The parser is powered by GitHub-flavored Markdown's <a href="https://github.com/github/cmark-gfm">cmark-gfm</a> implementation, so it follows the spec closely. As the needs of the community change, the effective dialect implemented by this library may change.</p> <p>The markup tree provided by this package is comprised of immutable/persistent, thread-safe, copy-on-write value types that only copy substructure that has changed. Other examples of the main strategy behind this library can be seen in <a href="https://github.com/swiftlang/swift-syntax">SwiftSyntax</a>.</p> <h2>Getting Started Using Markup</h2> <p>In your <code>Package.swift</code> Swift Package Manager manifest, add the following dependency to your <code>dependencies</code> argument:</p> <pre><code class="language-swift">.package(url: "https://github.com/apple/swift-markdown.git", branch: "main"), </code></pre> <p>Add the dependency to any targets you've declared in your manifest:</p> <pre><code class="language-swift">.target( name: "MyTarget", dependencies: [ .product(name: "Markdown", package: "swift-markdown"), ] ), </code></pre> <p>To parse a document, use <code>Document(parsing:)</code>, supplying a <code>String</code> or <code>URL</code>:</p> <pre><code class="language-swift">import Markdown let source = "This is a markup *document*." let document = Document(parsing: source) print(document.debugDescription()) // Document // └─ Paragraph // ├─ Text "This is a markup " // ├─ Emphasis // │ └─ Text "document" // └─ Text "." </code></pre> <p>Please see Swift <code>Markdown</code>'s <a href="https://swiftlang.github.io/swift-markdown/documentation/markdown/">documentation site</a> for more detailed information about the library.</p> <h2>Contributing to Swift Markdown</h2> <p>Please see the <a href="https://swift.org/contributing/#contributing-code">contributing guide</a> for more information.</p> <h3>Submitting a Bug Report</h3> <p>Swift Markdown tracks all bug reports with <a href="https://github.com/apple/swift-markdown/issues">GitHub Issues</a>. You can use the "Swift-Markdown" component for issues and feature requests specific to Swift Markdown. When you submit a bug report we ask that you follow the Swift <a href="https://swift.org/contributing/#reporting-bugs">Bug Reporting</a> guidelines and provide as many details as possible.</p> <h3>Submitting a Feature Request</h3> <p>For feature requests, please feel free to file a <a href="https://github.com/apple/swift-markdown/issues/new">GitHub issue</a> or start a discussion on the <a href="https://forums.swift.org/c/development/swift-docc">Swift Forums</a>.</p> <p>Don't hesitate to submit a feature request if you see a way Swift Markdown can be improved to better meet your needs.</p> <!-- Copyright (c) 2021-2023 Apple Inc and the Swift Project authors. All Rights Reserved. --> - \ No newline at end of file diff --git a/swig/daily/index.xml b/swig/daily/index.xml index a209e0c90ce..bbac2d5099c 100644 --- a/swig/daily/index.xml +++ b/swig/daily/index.xml @@ -1,7 +1,7 @@ GitHub SWIG Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:12Z + 2024-08-03T01:36:48Z Daily Trending of SWIG in GitHub \ No newline at end of file diff --git a/systemverilog/daily/index.xml b/systemverilog/daily/index.xml index 343a8cb0993..ce80f930f76 100644 --- a/systemverilog/daily/index.xml +++ b/systemverilog/daily/index.xml @@ -1,7 +1,7 @@ GitHub SystemVerilog Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:13Z + 2024-08-03T01:36:49Z Daily Trending of SystemVerilog in GitHub \ No newline at end of file diff --git a/talon/daily/index.xml b/talon/daily/index.xml index 78b0bd70879..bec4a2f8efb 100644 --- a/talon/daily/index.xml +++ b/talon/daily/index.xml @@ -1,7 +1,7 @@ GitHub Talon Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:13Z + 2024-08-03T01:36:49Z Daily Trending of Talon in GitHub \ No newline at end of file diff --git a/tcl/daily/index.xml b/tcl/daily/index.xml index 0d5dc0c950f..bdc49adbc30 100644 --- a/tcl/daily/index.xml +++ b/tcl/daily/index.xml @@ -1,7 +1,7 @@ GitHub Tcl Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:12Z + 2024-08-03T01:36:49Z Daily Trending of Tcl in GitHub \ No newline at end of file diff --git a/tcsh/daily/index.xml b/tcsh/daily/index.xml index c300a0eb5ac..70b45414e09 100644 --- a/tcsh/daily/index.xml +++ b/tcsh/daily/index.xml @@ -1,7 +1,7 @@ GitHub Tcsh Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:14Z + 2024-08-03T01:36:50Z Daily Trending of Tcsh in GitHub \ No newline at end of file diff --git a/tea/daily/index.xml b/tea/daily/index.xml index 3886e722589..cd971c303b3 100644 --- a/tea/daily/index.xml +++ b/tea/daily/index.xml @@ -1,7 +1,7 @@ GitHub Tea Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:14Z + 2024-08-03T01:36:51Z Daily Trending of Tea in GitHub \ No newline at end of file diff --git a/terra/daily/index.xml b/terra/daily/index.xml index 9de82297779..6c6aac27d71 100644 --- a/terra/daily/index.xml +++ b/terra/daily/index.xml @@ -1,7 +1,7 @@ GitHub Terra Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:15Z + 2024-08-03T01:36:51Z Daily Trending of Terra in GitHub \ No newline at end of file diff --git a/tex/daily/index.xml b/tex/daily/index.xml index d94f0eaaa79..568c7d95a65 100644 --- a/tex/daily/index.xml +++ b/tex/daily/index.xml @@ -1,7 +1,7 @@ GitHub TeX Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:17Z + 2024-08-03T01:36:53Z Daily Trending of TeX in GitHub \ No newline at end of file diff --git a/texinfo/daily/index.xml b/texinfo/daily/index.xml index 5113a632e80..f634e7157d1 100644 --- a/texinfo/daily/index.xml +++ b/texinfo/daily/index.xml @@ -1,7 +1,7 @@ GitHub Texinfo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:15Z + 2024-08-03T01:36:52Z Daily Trending of Texinfo in GitHub \ No newline at end of file diff --git a/text/daily/index.xml b/text/daily/index.xml index e05f603adb6..cca31852ff1 100644 --- a/text/daily/index.xml +++ b/text/daily/index.xml @@ -1,7 +1,7 @@ GitHub Text Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:16Z + 2024-08-03T01:36:52Z Daily Trending of Text in GitHub \ No newline at end of file diff --git a/textile/daily/index.xml b/textile/daily/index.xml index a2ec6680b70..bc55e731696 100644 --- a/textile/daily/index.xml +++ b/textile/daily/index.xml @@ -1,7 +1,7 @@ GitHub Textile Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:19Z + 2024-08-03T01:36:57Z Daily Trending of Textile in GitHub \ No newline at end of file diff --git a/textmate-properties/daily/index.xml b/textmate-properties/daily/index.xml index e5cc26a9393..0697cf7c7f9 100644 --- a/textmate-properties/daily/index.xml +++ b/textmate-properties/daily/index.xml @@ -1,7 +1,7 @@ GitHub TextMate Properties Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:20Z + 2024-08-03T01:36:57Z Daily Trending of TextMate Properties in GitHub \ No newline at end of file diff --git a/thrift/daily/index.xml b/thrift/daily/index.xml index b09dab5043d..b910edc8433 100644 --- a/thrift/daily/index.xml +++ b/thrift/daily/index.xml @@ -1,7 +1,7 @@ GitHub Thrift Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:20Z + 2024-08-03T01:36:57Z Daily Trending of Thrift in GitHub \ No newline at end of file diff --git a/ti-program/daily/index.xml b/ti-program/daily/index.xml index 893d8b3705a..ed39d7c7751 100644 --- a/ti-program/daily/index.xml +++ b/ti-program/daily/index.xml @@ -1,7 +1,7 @@ GitHub TI Program Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:20Z + 2024-08-03T01:36:57Z Daily Trending of TI Program in GitHub \ No newline at end of file diff --git a/tla/daily/index.xml b/tla/daily/index.xml index c39f7a5ac16..33a97bbc616 100644 --- a/tla/daily/index.xml +++ b/tla/daily/index.xml @@ -1,7 +1,7 @@ GitHub TLA Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:22Z + 2024-08-03T01:36:59Z Daily Trending of TLA in GitHub \ No newline at end of file diff --git a/toml/daily/index.xml b/toml/daily/index.xml index 1af0a652d55..3e460ff99bf 100644 --- a/toml/daily/index.xml +++ b/toml/daily/index.xml @@ -1,7 +1,7 @@ GitHub TOML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:21Z + 2024-08-03T01:36:58Z Daily Trending of TOML in GitHub \ No newline at end of file diff --git a/tsql/daily/index.xml b/tsql/daily/index.xml index a764fb2f845..391039579fb 100644 --- a/tsql/daily/index.xml +++ b/tsql/daily/index.xml @@ -1,7 +1,7 @@ GitHub TSQL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:23Z + 2024-08-03T01:37:01Z Daily Trending of TSQL in GitHub \ No newline at end of file diff --git a/tsv/daily/index.xml b/tsv/daily/index.xml index e4bbfc7f638..105bda4d9db 100644 --- a/tsv/daily/index.xml +++ b/tsv/daily/index.xml @@ -1,7 +1,7 @@ GitHub TSV Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:22Z + 2024-08-03T01:37:00Z Daily Trending of TSV in GitHub \ No newline at end of file diff --git a/tsx/daily/index.xml b/tsx/daily/index.xml index 277a556aacb..025bf162397 100644 --- a/tsx/daily/index.xml +++ b/tsx/daily/index.xml @@ -1,7 +1,7 @@ GitHub TSX Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:23Z + 2024-08-03T01:37:00Z Daily Trending of TSX in GitHub \ No newline at end of file diff --git a/turing/daily/index.xml b/turing/daily/index.xml index bafb4bfb1e6..b20dd6e3d94 100644 --- a/turing/daily/index.xml +++ b/turing/daily/index.xml @@ -1,7 +1,7 @@ GitHub Turing Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:23Z + 2024-08-03T01:37:00Z Daily Trending of Turing in GitHub \ No newline at end of file diff --git a/turtle/daily/index.xml b/turtle/daily/index.xml index b699acb7797..2fa1263c3f0 100644 --- a/turtle/daily/index.xml +++ b/turtle/daily/index.xml @@ -1,7 +1,7 @@ GitHub Turtle Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:24Z + 2024-08-03T01:37:01Z Daily Trending of Turtle in GitHub \ No newline at end of file diff --git a/twig/daily/index.xml b/twig/daily/index.xml index 002afb8d81b..8ef3a1696d7 100644 --- a/twig/daily/index.xml +++ b/twig/daily/index.xml @@ -1,7 +1,7 @@ GitHub Twig Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:25Z + 2024-08-03T01:37:02Z Daily Trending of Twig in GitHub \ No newline at end of file diff --git a/txl/daily/index.xml b/txl/daily/index.xml index 93ec56aab17..c9d412a7044 100644 --- a/txl/daily/index.xml +++ b/txl/daily/index.xml @@ -1,7 +1,7 @@ GitHub TXL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:24Z + 2024-08-03T01:37:01Z Daily Trending of TXL in GitHub \ No newline at end of file diff --git a/type-language/daily/index.xml b/type-language/daily/index.xml index b85fe00393f..cf928a8e077 100644 --- a/type-language/daily/index.xml +++ b/type-language/daily/index.xml @@ -1,7 +1,7 @@ GitHub Type Language Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:24Z + 2024-08-03T01:37:02Z Daily Trending of Type Language in GitHub \ No newline at end of file diff --git a/typescript/daily/index.xml b/typescript/daily/index.xml index f86cdf3e82d..c10b9a2d91d 100644 --- a/typescript/daily/index.xml +++ b/typescript/daily/index.xml @@ -1,28 +1,7 @@ GitHub TypeScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:27Z + 2024-08-03T01:37:05Z Daily Trending of TypeScript in GitHub - - ssoready/ssoready - 2024-08-02T01:36:27Z - tag:github.com,2024-08-02:/ssoready/ssoready - - <p>Open-source dev tools for enterprise SSO. Ship SAML support this afternoon.</p><hr><p align="center"> <img src="https://github.com/ucarion/documentation/raw/main/Frame%2024%20(2).png?raw=true#gh-light-mode-only"> <img src="https://github.com/ucarion/documentation/raw/main/Frame%2025%20(2).png?raw=true#gh-dark-mode-only"> </p> <h1>SSOReady</h1> <p>We're building dev tools for implementing Enterprise SSO. You can use SSOReady to add SAML support to your product this afternoon, for free, forever. You can think of us as an open source alternative to products like Auth0 or WorkOS.</p> <ul> <li>MIT-Licensed</li> <li>Self-hosted, or free at <a href="https://app.ssoready.com">app.ssoready.com</a></li> <li>Keeps you in control of your users database</li> <li><a href="https://ssoready.com/docs">Well-documented</a>, straightforward implementation</li> <li><a href="https://github.com/ssoready/ssoready-python">Python</a> and <a href="https://github.com/ssoready/ssoready-typescript">TypeScript/Node.js</a> SDKs, more in development</li> </ul> <h2>Documentation</h2> <p>For full documentation, check out <a href="https://ssoready.com/docs">https://ssoready.com/docs</a>.</p> <p>At a super high level, all it takes to add SAML to your product is to:</p> <ol> <li>Sign up on <a href="https://app.ssoready.com">app.ssoready.com</a> for free</li> <li>From your login page, call the <code>getRedirectUrl</code> endpoint when you want a user to sign in with SAML</li> <li>Your user gets redirected back to a callback page you choose, e.g. <code>your-app.com/ssoready-callback?saml_access_code=...</code>. You call <code>redeemSamlAccessCode</code> with the <code>saml_access_code</code> and log them in.</li> </ol> <p>Calling the <code>getRedirectUrl</code> endpoint looks like this in TypeScript:</p> <pre><code class="language-typescript">// this is how you implement a "Sign in with SSO" button const { redirectUrl } = await ssoready.saml.getSamlRedirectUrl({ // the ID of the organization/workspace/team (whatever you call it) // you want to log the user into organizationExternalId: "..." }); // redirect the user to `redirectUrl`... </code></pre> <p>And <code>redeemSamlAccessCode</code> looks like this:</p> <pre><code class="language-typescript">// this goes in your handler for POST /ssoready-callback const { email, organizationExternalId } = await ssoready.saml.redeemSamlAccessCode({ samlAccessCode: "saml_access_code_..." }); // log the user in as `email` inside `organizationExternalId`... </code></pre> <p>Check out <a href="https://ssoready.com/docs">the quickstart</a> for the details spelled out more concretely. The whole point of this project is to make enterprise SSO super obvious and easy.</p> <h2>Philosophy</h2> <p>We believe everyone that sells software to businesses should support enterprise SSO. It's a huge security win for your customers.</p> <p>The biggest problem with enterprise SSO is that it's way too confusing. Most open-source SAML libraries are underdocumented messes. Every time I've tried to implement SAML, I was constantly looking for someone to just tell me what in the <em>world</em> I was supposed to concretely do.</p> <p>We believe that more people will implement enterprise SSO if you make it obvious and secure by default. We are obsessed with giving every developer clarity and security here.</p> <p>Also, we believe randomly pumping up prices on security software like this is totally unacceptable. MIT-licensing the software gives you insurance against us ever doing that. Do whatever you want with the code. Fork us if we ever misbehave.</p> <h2>Reporting problems</h2> <p>Please feel welcome to use <a href="https://github.com/ssoready/ssoready/issues">GitHub issues</a> or reach out directly at <a href="mailto:founders@ssoready.com">founders@ssoready.com</a>. We want to know about any bugs you encounter, any features you'd like to request, or any questions you need answered.</p> <p>We take security <em>extremely</em> seriously. If you become aware of any potential vulnerabilities, <strong>please contact us immediately using <a href="mailto:security-contact@ssoready.com">security-contact@ssoready.com</a></strong>. You will receive a response laying out next steps within 24 hours; in most cases, you should expect an immediate response. Do not open a GitHub issue. Do not post on any forums. If you feel unsure about whether something matters, know that we will be very grateful even for a false alarm.</p> - - - vue-mini/vue-mini - 2024-08-02T01:36:27Z - tag:github.com,2024-08-02:/vue-mini/vue-mini - - <p>基于 Vue 3 的小程序框架。简单,强大,高性能。</p><hr><p align="center"><a href="https://vuemini.org" target="_blank" rel="noopener noreferrer"><img width="100" src="https://vuemini.org/logo.png" alt="Vue Mini logo"></a></p> <p align="center"> <a href="https://github.com/vue-mini/vue-mini/actions"><img src="https://github.com/vue-mini/vue-mini/workflows/CI/badge.svg?sanitize=true" alt="Actions Status"></a> <a href="https://codecov.io/gh/vue-mini/vue-mini"><img src="https://img.shields.io/codecov/c/github/vue-mini/vue-mini.svg?sanitize=true" alt="Coverage Status"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/npm/l/@vue-mini/core.svg?sanitize=true" alt="License"></a> </p> <h1 align="center">Vue Mini</h1> <p>Vue Mini 是一个基于 Vue 3 的小程序框架,它简单,强大,高性能。 你可以使用 Vue 3 的响应式数据 + 组合式 API 开发小程序,从此开发小程序也将是一种享受。</p> <h2>开始</h2> <p>请访问 <a href="https://vuemini.org">vuemini.org</a> 并跟随文档指引。</p> <h2>介绍</h2> <p>请观看我在 VueConf 2024 的分享:<a href="https://www.bilibili.com/video/BV1J4421D7ja/">《Vue Mini:不妥协的小程序框架》</a></p> <h2>性能</h2> <p>Vue Mini 拥有媲美小程序原生框架的极致性能,详情请查看 <a href="https://github.com/yangmingshan/mp-framework-benchmark">Benchmark</a>。</p> <h2>赞助</h2> <p>Vue Mini 从诞生之初到现在一直是我的个人项目,背后没有任何公司支持。你的资金支持将有助于 Vue Mini 更加长远健康的发展。<a href="https://vuemini.org/guide/sponsor.html#%E5%A6%82%E4%BD%95%E8%B5%9E%E5%8A%A9">如何赞助?</a></p> <h2>案例</h2> <p>Vue Mini 已经被很多公司和团队应用在了生产环境,其中不乏大厂,如网易。下列是一些使用 Vue Mini 开发的小程序,也欢迎<a href="https://github.com/vue-mini/vue-mini/issues/59">提交你的小程序</a>。</p> <!-- prettier-ignore --> <table> <thead> <tr> <th></th> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td><img width="1604" alt="网易游戏印象" src="https://vuemini.org/cases/1.jpg"><p align="center">网易游戏印象</p></td> <td><img width="1604" alt="妙邻社区" src="https://vuemini.org/cases/2.jpg"><p align="center">妙邻社区</p></td> <td><img width="1604" alt="字多" src="https://vuemini.org/cases/3.jpg"><p align="center">字多</p></td> </tr> </tbody> </table> <h2>许可证</h2> <p><a href="https://opensource.org/licenses/MIT">MIT</a></p> <p>Copyright (c) 2019-present Yang Mingshan</p> - - - asyncapi/website - 2024-08-02T01:36:27Z - tag:github.com,2024-08-02:/asyncapi/website - - <p>AsyncAPI specification website</p><hr><p><a href="https://www.asyncapi.com"><img src="https://raw.githubusercontent.com/asyncapi/website/master/public/img/logos/github-repobanner-website.png" alt="AsyncAPI Banner and Logo"></a></p> <hr> <br> <p align="center"> <a href="https://github.com/asyncapi/website/graphs/contributors" alt="AsyncAPI GitHub website contributors"> <img src="https://img.shields.io/github/contributors/asyncapi/website?color=orange"> </a> <a href="https://github.com/asyncapi/website/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22" alt="Good First AsyncAPI issue"> <img src="https://img.shields.io/github/issues/asyncapi/website/good%20first%20issue.svg?color=%23DDDD00"> </a> <a href="https://asyncapi.slack.com/" alt="AsyncAPI Slack"> <img src="https://img.shields.io/badge/Slack-AsyncAPI-@website.svg?logo=slack&amp;color=yellow"> </a> <a href="https://app.netlify.com/sites/asyncapi-website/deploys"> <img src="https://api.netlify.com/api/v1/badges/b2137407-b765-46c4-95b5-a72d9b1592ab/deploy-status"> </a> <a href="https://github.com/asyncapi/website" alt="AsyncAPI Apache License"> <img src="https://img.shields.io/github/license/asyncapi/website.svg?sanitize=true"> </a> </p> <h2>Overview</h2> <p>This repository contains the sources of AsyncAPI website:</p> <ul> <li>It's powered by <a href="https://nextjs.org/">Next.js</a>,</li> <li>It uses <a href="https://tailwindcss.com/">Tailwind</a> CSS framework,</li> <li>It's build and deployed with <a href="https://www.netlify.com/">Netlify</a>,</li> <li>It uses <a href="https://storybook.js.org/">Storybook</a> as a frontend workshop and for dociuenting UI components.</li> </ul> <h2>Requirements</h2> <p>Use the following tools to set up the project:</p> <ul> <li><a href="https://nodejs.org/">Node.js</a> v20.12.0+</li> <li><a href="https://www.npmjs.com/">npm</a> v10.5.0+</li> </ul> <h2>Run locally</h2> <ol> <li> <p>Fork the repository by clicking on <code>Fork</code> option on top right of the main repository.</p> </li> <li> <p>Open Command Prompt on your local computer.</p> </li> <li> <p>Clone the forked repository by adding your own GitHub username in place of <code>&lt;username&gt;</code>. For multiple contributions it is recommended to have <a href="https://github.com/asyncapi/community/raw/master/git-workflow.md">proper configuration of forked repo</a>.</p> </li> </ol> <pre><code class="language-bash"> git clone https://github.com/&lt;username&gt;/website/ </code></pre> <ol start="4"> <li>Navigate to the website directory.</li> </ol> <pre><code class="language-bash"> cd website </code></pre> <ol start="5"> <li>Install all website dependencies.</li> </ol> <pre><code class="language-bash"> npm install </code></pre> <ol start="6"> <li>Run the website locally.</li> </ol> <pre><code class="language-bash"> npm run dev </code></pre> <ol start="7"> <li> <p>Access the live development server at <a href="http://localhost:3000">localhost:3000</a>.</p> </li> <li> <p>To run the storybook locally:</p> </li> </ol> <pre><code class="language-bash"> npm run dev:storybook </code></pre> <ol start="9"> <li>Access the live storybook development server at <a href="http://localhost:6006">localhost:6006</a>.</li> </ol> <h2>Compose new blog post</h2> <p>To bootstrap a new post, run this command:</p> <pre><code class="language-bash"> npm run write:blog </code></pre> <p>Follow the interactive prompt to generate a post with pre-filled front matter.</p> <h3>Spin up Gitpod codespace</h3> <p>In order to prepare and spin up a Gitpod dev environment for our project, we configured our workspace through a <a href="https://raw.githubusercontent.com/asyncapi/website/master/.gitpod.yml">.gitpod.yml</a> file.</p> <p>To spin up a Gitpod codespace, go to <a href="http://gitpod.io/#https://github.com/asyncapi/website">http://gitpod.io/#https://github.com/asyncapi/website</a>.</p> <h3>Build</h3> <ol> <li>To build a production-ready website, run the following command:</li> </ol> <pre><code class="language-bash">npm run build </code></pre> <p>Generated files of the website go to the <code>.next</code> folder.</p> <ol start="2"> <li>To build the production-ready storybook, run the following command:</li> </ol> <pre><code class="language-bash">npm run build:storybook </code></pre> <p>Generated files of the storybook go to the <code>storybook-static</code> folder.</p> <h3>Run locally using Docker</h3> <h4>Prerequisites:</h4> <ul> <li><a href="https://docs.docker.com/get-docker/">install Docker</a></li> </ul> <p>After cloning repository to your local, perform the following steps from the root of the repository.</p> <h4>Steps:</h4> <ol> <li>Build the Docker image: <pre><code class="language-bash">docker build -t asyncapi-website .` </code></pre> </li> <li>Start the container: <pre><code class="language-bash">docker run --rm -it -v "$PWD":/async -p 3000:3000 asyncapi-website </code></pre> </li> </ol> <p>Now you're running AsyncAPI website in a development mode. Container is mapped with your local copy of the website. Whenever you make changes to the code, the website will refresh and changes visible in localhost:3000.</p> <h2>Lint the code</h2> <p>To lint the code, run the following command:</p> <pre><code>npm run lint </code></pre> <p>To fix the linting issues, run the following command:</p> <pre><code>npm run lint:fix </code></pre> <p>To lint the mdx files, run the following command:</p> <pre><code>npm run lint:mdx </code></pre> <h2>Start the production server</h2> <p>To build and run a production-ready website, run the following command:</p> <pre><code>npm run build &amp;&amp; npm run start </code></pre> <p>Generated files of the website go in the <code>.next</code> folder.</p> <h2>Start the netlify production server</h2> <p>Start a local development server for the build tool using the configuration and environment variables set for local development with the Netlify CLI:</p> <pre><code>netlify dev </code></pre> <p>To start the server using the configuration and environment variables set for <code>dev</code> or <code>all</code> deploy contexts, run the following command:</p> <pre><code>netlify dev --context production </code></pre> <h2>Updating information about project finance</h2> <p>AsyncAPI Financial Summary page aims to provide transparency and clarity regarding the organization's financial activities. It serves as a platform to showcase how donations are accepted, different sponsorship options, and how the generated funds are utilized.</p> <h3>How to update information</h3> <ul> <li> <p>YAML files must be stored in the <code>config/finance</code> directory.</p> </li> <li> <p>Create separate folders for each year under <code>config/finance</code>, such as <code>config/finance/2023</code>. Inside each year's folder, include two YAML files: <code>Expenses.yml</code> and <code>ExpensesLink.yml</code>.</p> </li> <li> <p>In <code>Expenses.yml</code>, record expenses for each month, specifying the <code>Category</code> and <code>Amount</code>.</p> </li> <li> <p>In <code>ExpensesLink.yml</code>, provide discussion links related to expense categories.</p> </li> <li> <p>When a new year begins, create a corresponding folder for that year under <code>config/finance</code> and place the YAML files inside the folder for that specific year. For example, create a folder named <code>config/finance/2024</code> for the year 2024 and <code>config/finance/2025</code> for the year 2025. Place the YAML file for each respective year inside its designated folder.</p> </li> <li> <p>Modify the years within the <code>scripts/finance/index.js</code> , <code>lib/getUniqueCategories.js</code> and <code>components/FinancialSummary/BarChartComponent.js</code> to handle data for different years effectively.</p> </li> </ul> <h2>Case studies</h2> <h3>Overview</h3> <p>A case study is a special document that any end-user company can provide. An end-user company is a company that uses AsyncAPI to solve technical challenges. A case study is not a document where a vendor company can describe how they build their commercial AsyncAPI-based product. On the other hand, it is completely fine if a case study of some end-user mentions some commercial tools that helped them to work with AsyncAPI or event-driven architecture. An example of such a case can be a case study from an end-user where at some point, Confluent Schema Registry is mentioned in an explanation about schemas and runtime message validation.</p> <h3>How to add a case study</h3> <p>A case study is documented in the form of a YAML file. Anyone can open a pull request with a new case study.</p> <ul> <li>YAML file must be located in <code>config/casestudies</code>.</li> <li>To make it easier for you to create such a YAML file you can use: <ul> <li><a href="https://raw.githubusercontent.com/asyncapi/website/master/scripts/casestudies/casestudy_template.yml">Template YAML with comments explaining every section</a></li> <li><a href="https://raw.githubusercontent.com/asyncapi/website/master/scripts/casestudies/schema.json">JSON Schema that describes all YAML fields</a></li> </ul> </li> <li>All additional files for the case study, like complete AsyncAPI document examples, should be located in the <code>public/resources/casestudies</code> directory.</li> <li>Company logo and other images that will be rendered in the website should be located in <code>public/img/casestudies</code>.</li> </ul> <p>Once you collect all information and create a case study, open a pull request. It must be authored or at least approved by a representative of the given company. Such a representative is probably already a contact person mentioned in the case study.</p> <p>A case study becomes publicly available right after merging and rebuilding the website.</p> <h2>JSON Schema definitions</h2> <p>All AsyncAPI JSON Schema definition files are being served within the <code>/definitions/&lt;file&gt;</code> path. The content is being served from GH, in particular from <a href="https://github.com/asyncapi/spec-json-schemas/tree/master/schemas">https://github.com/asyncapi/spec-json-schemas/tree/master/schemas</a>. This is possible thanks to the following:</p> <ol> <li>A <a href="https://docs.netlify.com/routing/redirects/rewrites-proxies/">Netlify Rewrite rule</a> located in the <a href="https://raw.githubusercontent.com/asyncapi/website/master/netlify.toml">netlify.toml</a> file, which acts as proxy for all requests to the <code>/definitions/&lt;file&gt;</code> path, serving the content from GH without having an HTTP redirect.</li> <li>A <a href="https://docs.netlify.com/netlify-labs/experimental-features/edge-functions/">Netlify Edge Function</a> that modifies the <code>Content-Type</code> header of the rewrite response to become <code>application/schema+json</code>. This lets tooling, such as <a href="https://json-schema.hyperjump.io">Hyperjump</a>, to fetch the schemas directly from their URL.<br> Please find a flowchart explaining the flow this edge function should accomplish:</li> </ol> <pre><code class="language-mermaid">flowchart TD Request(Request) --&gt;schema-related{Is it requesting Schemas?} schema-related --&gt;|No| req_no_schemas[Let the original request go through] req_no_schemas --&gt; Response(Response) schema-related --&gt;|Yes| req_schemas[Fetch from GitHub] req_schemas--&gt;req_json{Was requesting a .json file?} req_json --&gt;|No| Response(Response) req_json --&gt;|Yes| response_status{Response Status?} response_status --&gt;|2xx| response_ok[OK] response_status --&gt;|304| response_cached[Not Modified] response_status --&gt;|Any other| response_ko response_ok --&gt; set_headers[Set Response Content-Type header to application/schema+json] set_headers --&gt; send_metric_success[Send success metric] response_cached -- cached:true --&gt; send_metric_success response_ko --&gt; send_metric_error[Send error metric] send_metric_success -- file served from raw GH --&gt; Response(Response) send_metric_error --the errored response --&gt; Response(Response) </code></pre> <h2>Project structure</h2> <p>This repository has the following structure:</p> <!-- If you make any changes in the project structure, remember to update it. --> <pre><code class="language-text"> ├── .github # Definitions of GitHub workflows, pull request and issue templates ├── assets # Various assets | ├── docs # Documentation assets | | fragments # Docuentations for CLI installation and contribution. ├── components # Various generic components such as "Button", "Figure", etc. ├── config # Transformed static data to display on the pages such as blog posts etc. ├── context # Various React's contexts used in website ├── locales # Translations for the website ├── markdown # Markdown files for the website ├── about # Markdown files for the /about page ├── blog # Markdown files for the blog posts ├── docs # Markdown files for the /docs/* pages ├── netlify # Contains Netlify serverless functions to run on Netlify ├── pages # Website's pages source. It includes raw markdown files and React page templates. │ ├── about # Raw blog for /about page │ ├── blog # Blog posts │ ├── docs # Blog for /docs/* pages │ └── tools # Various pages to describe tools ├── public # Data for site metadata and static blog such as images ├── scripts # Scripts used in the build and dev processes ├── styles # Various CSS files ├── templates # Various template markdown files ├── types # Various typeScript types used in the website ├── utils # Various JS code for preparing static data to render in pages ├── next.config.mjs # Next.js configuration file ├── README.md # Project's README file ├── tailwind.config.js # TailwindCSS configuration file └── tsconfig.json # TypeScript configuration file </code></pre> <h2>Connect with AsyncAPI Community</h2> <p align="left"> <a href="https://asyncapi.slack.com/" alt="AsyncAPI Slack"> <img src="https://img.shields.io/badge/Slack-AsyncAPI-@website.svg?logo=slack&amp;color=yellow"> </a> <a href="https://twitter.com/asyncapispec" target="_blank"> <img src="https://img.shields.io/badge/asyncapi-%23gray.svg?style=flat&amp;logo=X&amp;label=Twitter&amp;labelColor=rgb(86%2C86%2C86)" alt="AsyncAPI Twitter"> </a> <a href="https://www.linkedin.com/company/asyncapi" target="_blank"> <img src="https://img.shields.io/badge/asyncapi-%230077B5.svg?logo=linkedin&amp;logoColor=white&amp;label=LinkedIn&amp;labelColor=rgb(86%2C86%2C86)&amp;style=flat" alt="AsyncAPI LinkedIn"> </a> <a href="https://www.youtube.com/c/asyncapi" target="_blank"> <img src="https://img.shields.io/badge/YouTube-AsyncAPI-red?style=flat&amp;logo=youtube&amp;logoColor=white" alt="YouTube"> </a> <a href="https://www.twitch.tv/asyncapi" target="_blank"> <img src="https://img.shields.io/badge/asyncapi-%23833fe6?style=flat&amp;logo=twitch&amp;label=Twitch&amp;logoColor=white" alt="AsyncAPI Twitch"> </a> </p> <h2>AsyncAPI Contributors ✨</h2> <p>Thanks goes to these wonderful people (<a href="https://allcontributors.org/docs/en/emoji-key">emoji key</a>):</p> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="http://www.fmvilas.com/"><img src="https://avatars.githubusercontent.com/u/242119?v=4?s=100" width="100px;" alt="Fran Méndez"><br><sub><b>Fran Méndez</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=fmvilas" title="Code">💻</a> <a href="https://github.com/asyncapi/website/commits?author=fmvilas" title="Documentation">📖</a> <a href="https://github.com/asyncapi/website/issues?q=author%3Afmvilas" title="Bug reports">🐛</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-fmvilas" title="Design">🎨</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#maintenance-fmvilas" title="Maintenance">🚧</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#infra-fmvilas" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#ideas-fmvilas" title="Ideas, Planning, &amp; Feedback">🤔</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Afmvilas" title="Reviewed Pull Requests">👀</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-fmvilas" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://dev.to/derberg"><img src="https://avatars.githubusercontent.com/u/6995927?v=4?s=100" width="100px;" alt="Lukasz Gornicki"><br><sub><b>Lukasz Gornicki</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=derberg" title="Code">💻</a> <a href="https://github.com/asyncapi/website/commits?author=derberg" title="Documentation">📖</a> <a href="https://github.com/asyncapi/website/issues?q=author%3Aderberg" title="Bug reports">🐛</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-derberg" title="Design">🎨</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#maintenance-derberg" title="Maintenance">🚧</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#infra-derberg" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#ideas-derberg" title="Ideas, Planning, &amp; Feedback">🤔</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Aderberg" title="Reviewed Pull Requests">👀</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-derberg" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/magicmatatjahu"><img src="https://avatars.githubusercontent.com/u/20404945?v=4?s=100" width="100px;" alt="Maciej Urbańczyk"><br><sub><b>Maciej Urbańczyk</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=magicmatatjahu" title="Code">💻</a> <a href="https://github.com/asyncapi/website/commits?author=magicmatatjahu" title="Documentation">📖</a> <a href="https://github.com/asyncapi/website/issues?q=author%3Amagicmatatjahu" title="Bug reports">🐛</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-magicmatatjahu" title="Design">🎨</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#maintenance-magicmatatjahu" title="Maintenance">🚧</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#infra-magicmatatjahu" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#ideas-magicmatatjahu" title="Ideas, Planning, &amp; Feedback">🤔</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Amagicmatatjahu" title="Reviewed Pull Requests">👀</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-magicmatatjahu" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/alequetzalli"><img src="https://avatars.githubusercontent.com/u/19964402?v=4?s=100" width="100px;" alt="Alejandra Quetzalli "><br><sub><b>Alejandra Quetzalli </b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=alequetzalli" title="Documentation">📖</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Aalequetzalli" title="Reviewed Pull Requests">👀</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#talk-alequetzalli" title="Talks">📢</a></td> <td align="center" valign="top" width="14.28%"><a href="https://aayushmau5.github.io/"><img src="https://avatars.githubusercontent.com/u/54525741?v=4?s=100" width="100px;" alt="Aayush Kumar Sahu"><br><sub><b>Aayush Kumar Sahu</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=aayushmau5" title="Code">💻</a> <a href="https://github.com/asyncapi/website/issues?q=author%3Aaayushmau5" title="Bug reports">🐛</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-aayushmau5" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://boyney.io/"><img src="https://avatars.githubusercontent.com/u/3268013?v=4?s=100" width="100px;" alt="David Boyne"><br><sub><b>David Boyne</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=boyney123" title="Code">💻</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-boyney123" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jessemenning"><img src="https://avatars.githubusercontent.com/u/62108913?v=4?s=100" width="100px;" alt="Jesse Menning"><br><sub><b>Jesse Menning</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-jessemenning" title="Blogposts">📝</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://dedouss.is/"><img src="https://avatars.githubusercontent.com/u/24495755?v=4?s=100" width="100px;" alt="Dimitrios Dedoussis"><br><sub><b>Dimitrios Dedoussis</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-dedoussis" title="Blogposts">📝</a></td> <td align="center" valign="top" width="14.28%"><a href="https://linkedin.com/in/jonaslagoni/"><img src="https://avatars.githubusercontent.com/u/13396189?v=4?s=100" width="100px;" alt="Jonas Lagoni"><br><sub><b>Jonas Lagoni</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-jonaslagoni" title="Blogposts">📝</a> <a href="https://github.com/asyncapi/website/commits?author=jonaslagoni" title="Code">💻</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Ajonaslagoni" title="Reviewed Pull Requests">👀</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/smoya"><img src="https://avatars.githubusercontent.com/u/1083296?v=4?s=100" width="100px;" alt="Sergio Moya"><br><sub><b>Sergio Moya</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=smoya" title="Code">💻</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-smoya" title="Blogposts">📝</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Asmoya" title="Reviewed Pull Requests">👀</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/bodograumann"><img src="https://avatars.githubusercontent.com/u/1223583?v=4?s=100" width="100px;" alt="Bodo Graumann"><br><sub><b>Bodo Graumann</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=bodograumann" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://damilolarandolph.com"><img src="https://avatars.githubusercontent.com/u/43427949?v=4?s=100" width="100px;" alt="Damilola Randolph"><br><sub><b>Damilola Randolph</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=damilolarandolph" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Barbanio"><img src="https://avatars.githubusercontent.com/u/77982319?v=4?s=100" width="100px;" alt="Barbanio González"><br><sub><b>Barbanio González</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#blog-Barbanio" title="Blogposts">📝</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#ideas-Barbanio" title="Ideas, Planning, &amp; Feedback">🤔</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/hkaur008"><img src="https://avatars.githubusercontent.com/u/56452820?v=4?s=100" width="100px;" alt="Hargun Kaur"><br><sub><b>Hargun Kaur</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=hkaur008" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ceich"><img src="https://avatars.githubusercontent.com/u/38611?v=4?s=100" width="100px;" alt="Chris Eich"><br><sub><b>Chris Eich</b></sub></a><br><a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Aceich" title="Reviewed Pull Requests">👀</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/hpatoio"><img src="https://avatars.githubusercontent.com/u/249948?v=4?s=100" width="100px;" alt="Simone Fumagalli"><br><sub><b>Simone Fumagalli</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=hpatoio" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://melissaturco.com"><img src="https://avatars.githubusercontent.com/u/60163079?v=4?s=100" width="100px;" alt="Missy Turco"><br><sub><b>Missy Turco</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=mcturco" title="Code">💻</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-mcturco" title="Design">🎨</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#ideas-mcturco" title="Ideas, Planning, &amp; Feedback">🤔</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Amcturco" title="Reviewed Pull Requests">👀</a></td> <td align="center" valign="top" width="14.28%"><a href="https://ritik307.github.io/portfolio/"><img src="https://avatars.githubusercontent.com/u/22374829?v=4?s=100" width="100px;" alt="Ritik Rawal"><br><sub><b>Ritik Rawal</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=ritik307" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/akshatnema"><img src="https://avatars.githubusercontent.com/u/76521428?v=4?s=100" width="100px;" alt="Akshat Nema"><br><sub><b>Akshat Nema</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=akshatnema" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://bolt04.github.io/react-ultimate-resume/"><img src="https://avatars.githubusercontent.com/u/18630253?v=4?s=100" width="100px;" alt="David Pereira"><br><sub><b>David Pereira</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=BOLT04" title="Code">💻</a> <a href="https://github.com/asyncapi/website/commits?author=BOLT04" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/ron-debajyoti"><img src="https://avatars.githubusercontent.com/u/22571664?v=4?s=100" width="100px;" alt="Debajyoti Halder"><br><sub><b>Debajyoti Halder</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=ron-debajyoti" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="http://juanarce.me"><img src="https://avatars.githubusercontent.com/u/30204147?v=4?s=100" width="100px;" alt="Juan A."><br><sub><b>Juan A.</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=jaas666" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/luphieanza"><img src="https://avatars.githubusercontent.com/u/20577131?v=4?s=100" width="100px;" alt="Muhammad Rafly Andrianza"><br><sub><b>Muhammad Rafly Andrianza</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=luphieanza" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Harish-b-03"><img src="https://avatars.githubusercontent.com/u/69810789?v=4?s=100" width="100px;" alt="Harish"><br><sub><b>Harish</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Harish-b-03" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/paulgoldsmith"><img src="https://avatars.githubusercontent.com/u/471550?v=4?s=100" width="100px;" alt="Paul Goldsmith"><br><sub><b>Paul Goldsmith</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=paulgoldsmith" title="Code">💻</a> <a href="https://github.com/asyncapi/website/issues?q=author%3Apaulgoldsmith" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.twitter.com/dulemartins"><img src="https://avatars.githubusercontent.com/u/33032530?v=4?s=100" width="100px;" alt="Tabah Baridule"><br><sub><b>Tabah Baridule</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Dule-mart" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://starlightknown.github.io/"><img src="https://avatars.githubusercontent.com/u/74637789?v=4?s=100" width="100px;" alt="Karuna Tata"><br><sub><b>Karuna Tata</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#a11y-starlightknown" title="Accessibility">️️️️♿️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/nibble0101"><img src="https://avatars.githubusercontent.com/u/52580190?v=4?s=100" width="100px;" alt="Joseph Mawa"><br><sub><b>Joseph Mawa</b></sub></a><br><a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Anibble0101" title="Reviewed Pull Requests">👀</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/aeworxet"><img src="https://avatars.githubusercontent.com/u/16149591?v=4?s=100" width="100px;" alt="Viacheslav Turovskyi"><br><sub><b>Viacheslav Turovskyi</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=aeworxet" title="Documentation">📖</a> <a href="https://github.com/asyncapi/website/commits?author=aeworxet" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/helen-kosova/"><img src="https://avatars.githubusercontent.com/u/8576823?v=4?s=100" width="100px;" alt="Helen Kosova"><br><sub><b>Helen Kosova</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=hkosova" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://linktr.ee/thulieblack"><img src="https://avatars.githubusercontent.com/u/66913810?v=4?s=100" width="100px;" alt="V Thulisile Sibanda"><br><sub><b>V Thulisile Sibanda</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=thulieblack" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/manavdesai27"><img src="https://avatars.githubusercontent.com/u/74018438?v=4?s=100" width="100px;" alt="Manav Desai"><br><sub><b>Manav Desai</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=manavdesai27" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="http://www.toukir.co"><img src="https://avatars.githubusercontent.com/u/88899011?v=4?s=100" width="100px;" alt="Mohd Toukir Khan"><br><sub><b>Mohd Toukir Khan</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=toukirkhan" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://annysah.hashnode.dev"><img src="https://avatars.githubusercontent.com/u/52763841?v=4?s=100" width="100px;" alt="Anisat Akinbani"><br><sub><b>Anisat Akinbani</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Annysah" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sambhavgupta0705"><img src="https://avatars.githubusercontent.com/u/81870866?v=4?s=100" width="100px;" alt="sambhavgupta0705"><br><sub><b>sambhavgupta0705</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=sambhavgupta0705" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Ankitchaudharyy"><img src="https://avatars.githubusercontent.com/u/46367738?v=4?s=100" width="100px;" alt="Ankit Chaudhary"><br><sub><b>Ankit Chaudhary</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Ankitchaudharyy" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Amzani"><img src="https://avatars.githubusercontent.com/u/554438?v=4?s=100" width="100px;" alt="samz"><br><sub><b>samz</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Amzani" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://bhaswatiroy.github.io/Bhaswati-Roy-Portfolio/"><img src="https://avatars.githubusercontent.com/u/78029145?v=4?s=100" width="100px;" alt="Bhaswati Roy "><br><sub><b>Bhaswati Roy </b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=BhaswatiRoy" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.behance.net/muibudeenaisha"><img src="https://avatars.githubusercontent.com/u/105395613?v=4?s=100" width="100px;" alt="AISHAT MUIBUDEEN"><br><sub><b>AISHAT MUIBUDEEN</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#design-Mayaleeeee" title="Design">🎨</a></td> <td align="center" valign="top" width="14.28%"><a href="https://nawedali.tech"><img src="https://avatars.githubusercontent.com/u/83456083?v=4?s=100" width="100px;" alt="Nawed Ali"><br><sub><b>Nawed Ali</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=nawed2611" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.blessingolaleye.xyz/"><img src="https://avatars.githubusercontent.com/u/70102539?v=4?s=100" width="100px;" alt="Olaleye Blessing"><br><sub><b>Olaleye Blessing</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Olaleye-Blessing" title="Code">💻</a> <a href="https://raw.githubusercontent.com/asyncapi/website/master/#a11y-Olaleye-Blessing" title="Accessibility">️️️️♿️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/niranjan-kurhade"><img src="https://avatars.githubusercontent.com/u/97905637?v=4?s=100" width="100px;" alt="niranjan-kurhade"><br><sub><b>niranjan-kurhade</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=niranjan-kurhade" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://linkfree.eddiehub.io/rukundob451"><img src="https://avatars.githubusercontent.com/u/67878128?v=4?s=100" width="100px;" alt="Benjamin Rukundo"><br><sub><b>Benjamin Rukundo</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=rukundob451" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/tthijm"><img src="https://avatars.githubusercontent.com/u/59415467?v=4?s=100" width="100px;" alt="tthijm"><br><sub><b>tthijm</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#infra-tthijm" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td> <td align="center" valign="top" width="14.28%"><a href="http://cynthiapeter.com"><img src="https://avatars.githubusercontent.com/u/33583060?v=4?s=100" width="100px;" alt="Cynthia Peter"><br><sub><b>Cynthia Peter</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=CynthiaPeter" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://florence-njeri.github.io/NjeriPortfolio"><img src="https://avatars.githubusercontent.com/u/40742916?v=4?s=100" width="100px;" alt="Florence Njeri"><br><sub><b>Florence Njeri</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Florence-Njeri" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://ansh.live"><img src="https://avatars.githubusercontent.com/u/94157520?v=4?s=100" width="100px;" alt="Ansh Goyal"><br><sub><b>Ansh Goyal</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=anshgoyalevil" title="Code">💻</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3Aanshgoyalevil" title="Reviewed Pull Requests">👀</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/SumantxD"><img src="https://avatars.githubusercontent.com/u/65810424?v=4?s=100" width="100px;" alt="Sumant.xD"><br><sub><b>Sumant.xD</b></sub></a><br><a href="https://raw.githubusercontent.com/asyncapi/website/master/#infra-SumantxD" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td> <td align="center" valign="top" width="14.28%"><a href="http://shrianshagarwal.in"><img src="https://avatars.githubusercontent.com/u/41548480?v=4?s=100" width="100px;" alt="Shriansh Agarwal"><br><sub><b>Shriansh Agarwal</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Shriansh2002" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/reachaadrika"><img src="https://avatars.githubusercontent.com/u/64789514?v=4?s=100" width="100px;" alt="Aadrika Bhargava"><br><sub><b>Aadrika Bhargava</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=reachaadrika" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/vishvamsinh28"><img src="https://avatars.githubusercontent.com/u/90895835?v=4?s=100" width="100px;" alt="Vishvamsinh Vaghela"><br><sub><b>Vishvamsinh Vaghela</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=vishvamsinh28" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/AnimeshKumar923"><img src="https://avatars.githubusercontent.com/u/99868037?v=4?s=100" width="100px;" alt="Animesh Kumar"><br><sub><b>Animesh Kumar</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=AnimeshKumar923" title="Documentation">📖</a> <a href="https://github.com/asyncapi/website/pulls?q=is%3Apr+reviewed-by%3AAnimeshKumar923" title="Reviewed Pull Requests">👀</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/captain-Akshay"><img src="https://avatars.githubusercontent.com/u/59491379?v=4?s=100" width="100px;" alt="Akshay Sharma"><br><sub><b>Akshay Sharma</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=captain-Akshay" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://web-yuvrxj-afk.vercel.app/"><img src="https://avatars.githubusercontent.com/u/63532070?v=4?s=100" width="100px;" alt="Yuvraj Singh Sisodiya"><br><sub><b>Yuvraj Singh Sisodiya</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=yuvrxj-afk" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Shiva953"><img src="https://avatars.githubusercontent.com/u/120790871?v=4?s=100" width="100px;" alt="Neutron"><br><sub><b>Neutron</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=Shiva953" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/sagarkori143"><img src="https://avatars.githubusercontent.com/u/129517558?v=4?s=100" width="100px;" alt="Sagar Kori"><br><sub><b>Sagar Kori</b></sub></a><br><a href="https://github.com/asyncapi/website/commits?author=sagarkori143" title="Documentation">📖</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END --> <p>This project follows the <a href="https://github.com/all-contributors/all-contributors">all-contributors</a> specification. Contributions of any kind welcome!</p> - \ No newline at end of file diff --git a/unified-parallel-c/daily/index.xml b/unified-parallel-c/daily/index.xml index 2c30692c602..1d65b0acc71 100644 --- a/unified-parallel-c/daily/index.xml +++ b/unified-parallel-c/daily/index.xml @@ -1,7 +1,7 @@ GitHub Unified Parallel C Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:25Z + 2024-08-03T01:37:03Z Daily Trending of Unified Parallel C in GitHub \ No newline at end of file diff --git a/unity3d-asset/daily/index.xml b/unity3d-asset/daily/index.xml index 86004871bbf..1cd0b41642d 100644 --- a/unity3d-asset/daily/index.xml +++ b/unity3d-asset/daily/index.xml @@ -1,7 +1,7 @@ GitHub Unity3D Asset Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:26Z + 2024-08-03T01:37:03Z Daily Trending of Unity3D Asset in GitHub \ No newline at end of file diff --git a/unix-assembly/daily/index.xml b/unix-assembly/daily/index.xml index 54580157267..8dd5a2f5fd8 100644 --- a/unix-assembly/daily/index.xml +++ b/unix-assembly/daily/index.xml @@ -1,7 +1,7 @@ GitHub Unix Assembly Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:30Z + 2024-08-03T01:37:08Z Daily Trending of Unix Assembly in GitHub \ No newline at end of file diff --git a/unknown/daily/index.xml b/unknown/daily/index.xml new file mode 100644 index 00000000000..df523c48500 --- /dev/null +++ b/unknown/daily/index.xml @@ -0,0 +1,7 @@ + + GitHub Unknown languages Daily Trending + http://mshibanami.github.io/GitHubTrendingRSS + 2024-08-03T01:27:54Z + Daily Trending of Unknown languages in GitHub + + \ No newline at end of file diff --git a/uno/daily/index.xml b/uno/daily/index.xml index 05fa08a66fb..73ff40bdac6 100644 --- a/uno/daily/index.xml +++ b/uno/daily/index.xml @@ -1,7 +1,7 @@ GitHub Uno Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:31Z + 2024-08-03T01:37:08Z Daily Trending of Uno in GitHub \ No newline at end of file diff --git a/unrealscript/daily/index.xml b/unrealscript/daily/index.xml index 66d9f966134..bb91b4cc41f 100644 --- a/unrealscript/daily/index.xml +++ b/unrealscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub UnrealScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:30Z + 2024-08-03T01:37:07Z Daily Trending of UnrealScript in GitHub \ No newline at end of file diff --git a/urweb/daily/index.xml b/urweb/daily/index.xml index 7c312944e38..ab2969f9517 100644 --- a/urweb/daily/index.xml +++ b/urweb/daily/index.xml @@ -1,7 +1,7 @@ GitHub UrWeb Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:30Z + 2024-08-03T01:37:07Z Daily Trending of UrWeb in GitHub \ No newline at end of file diff --git a/v/daily/index.xml b/v/daily/index.xml index 327a714c9a4..be7710190e9 100644 --- a/v/daily/index.xml +++ b/v/daily/index.xml @@ -1,7 +1,7 @@ GitHub V Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:34Z + 2024-08-03T01:37:10Z Daily Trending of V in GitHub \ No newline at end of file diff --git a/vala/daily/index.xml b/vala/daily/index.xml index 92e3b11109b..d099dc3d2e8 100644 --- a/vala/daily/index.xml +++ b/vala/daily/index.xml @@ -1,7 +1,7 @@ GitHub Vala Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:32Z + 2024-08-03T01:37:09Z Daily Trending of Vala in GitHub \ No newline at end of file diff --git a/valve-data-format/daily/index.xml b/valve-data-format/daily/index.xml index 3cf62c7cc3f..9b706f3240a 100644 --- a/valve-data-format/daily/index.xml +++ b/valve-data-format/daily/index.xml @@ -1,7 +1,7 @@ GitHub Valve Data Format Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:32Z + 2024-08-03T01:37:09Z Daily Trending of Valve Data Format in GitHub \ No newline at end of file diff --git a/vba/daily/index.xml b/vba/daily/index.xml index 5b123d8faf7..bddb1d3ea7d 100644 --- a/vba/daily/index.xml +++ b/vba/daily/index.xml @@ -1,7 +1,7 @@ GitHub VBA Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:31Z + 2024-08-03T01:37:09Z Daily Trending of VBA in GitHub \ No newline at end of file diff --git a/vbscript/daily/index.xml b/vbscript/daily/index.xml index b414b4003f9..877f1288ade 100644 --- a/vbscript/daily/index.xml +++ b/vbscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub VBScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:35Z + 2024-08-03T01:37:11Z Daily Trending of VBScript in GitHub \ No newline at end of file diff --git a/vcl/daily/index.xml b/vcl/daily/index.xml index ffa1270e91b..c14d9ded76a 100644 --- a/vcl/daily/index.xml +++ b/vcl/daily/index.xml @@ -1,7 +1,7 @@ GitHub VCL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:35Z + 2024-08-03T01:37:10Z Daily Trending of VCL in GitHub \ No newline at end of file diff --git a/verilog/daily/index.xml b/verilog/daily/index.xml index dc9d17401a5..0bfd6c8457e 100644 --- a/verilog/daily/index.xml +++ b/verilog/daily/index.xml @@ -1,7 +1,7 @@ GitHub Verilog Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:36Z + 2024-08-03T01:37:11Z Daily Trending of Verilog in GitHub \ No newline at end of file diff --git a/vhdl/daily/index.xml b/vhdl/daily/index.xml index 0184ad8819a..567d41fa042 100644 --- a/vhdl/daily/index.xml +++ b/vhdl/daily/index.xml @@ -1,7 +1,7 @@ GitHub VHDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:37Z + 2024-08-03T01:37:12Z Daily Trending of VHDL in GitHub \ No newline at end of file diff --git a/vim-help-file/daily/index.xml b/vim-help-file/daily/index.xml index 1dab3599529..691fc5fcac0 100644 --- a/vim-help-file/daily/index.xml +++ b/vim-help-file/daily/index.xml @@ -1,7 +1,7 @@ GitHub Vim Help File Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:37Z + 2024-08-03T01:37:12Z Daily Trending of Vim Help File in GitHub \ No newline at end of file diff --git a/vim-script/daily/index.xml b/vim-script/daily/index.xml index e73f50d9f33..a250b0086af 100644 --- a/vim-script/daily/index.xml +++ b/vim-script/daily/index.xml @@ -1,7 +1,7 @@ GitHub Vim Script Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:38Z + 2024-08-03T01:37:14Z Daily Trending of Vim Script in GitHub \ No newline at end of file diff --git a/vim-snippet/daily/index.xml b/vim-snippet/daily/index.xml index 49b94069ba7..86173d78908 100644 --- a/vim-snippet/daily/index.xml +++ b/vim-snippet/daily/index.xml @@ -1,7 +1,7 @@ GitHub Vim Snippet Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:37Z + 2024-08-03T01:37:13Z Daily Trending of Vim Snippet in GitHub \ No newline at end of file diff --git a/visual-basic-.net/daily/index.xml b/visual-basic-.net/daily/index.xml index fabe43249dc..dec94bd0586 100644 --- a/visual-basic-.net/daily/index.xml +++ b/visual-basic-.net/daily/index.xml @@ -1,7 +1,7 @@ GitHub Visual Basic .NET Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:39Z + 2024-08-03T01:37:15Z Daily Trending of Visual Basic .NET in GitHub \ No newline at end of file diff --git a/volt/daily/index.xml b/volt/daily/index.xml index 1c4e3bac9c6..b9ddcd602b4 100644 --- a/volt/daily/index.xml +++ b/volt/daily/index.xml @@ -1,7 +1,7 @@ GitHub Volt Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:39Z + 2024-08-03T01:37:15Z Daily Trending of Volt in GitHub \ No newline at end of file diff --git a/vue/daily/index.xml b/vue/daily/index.xml index 524f5c66428..d93682b4d1c 100644 --- a/vue/daily/index.xml +++ b/vue/daily/index.xml @@ -1,7 +1,7 @@ GitHub Vue Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:40Z + 2024-08-03T01:37:16Z Daily Trending of Vue in GitHub \ No newline at end of file diff --git a/vyper/daily/index.xml b/vyper/daily/index.xml index db551f462ab..6b8ed199dc1 100644 --- a/vyper/daily/index.xml +++ b/vyper/daily/index.xml @@ -1,7 +1,7 @@ GitHub Vyper Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:41Z + 2024-08-03T01:37:17Z Daily Trending of Vyper in GitHub \ No newline at end of file diff --git a/wavefront-material/daily/index.xml b/wavefront-material/daily/index.xml index 75acca94c5b..b9843a2df64 100644 --- a/wavefront-material/daily/index.xml +++ b/wavefront-material/daily/index.xml @@ -1,7 +1,7 @@ GitHub Wavefront Material Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:41Z + 2024-08-03T01:37:17Z Daily Trending of Wavefront Material in GitHub \ No newline at end of file diff --git a/wavefront-object/daily/index.xml b/wavefront-object/daily/index.xml index 1b4f722b761..71a41ac7619 100644 --- a/wavefront-object/daily/index.xml +++ b/wavefront-object/daily/index.xml @@ -1,7 +1,7 @@ GitHub Wavefront Object Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:41Z + 2024-08-03T01:37:18Z Daily Trending of Wavefront Object in GitHub \ No newline at end of file diff --git a/wdl/daily/index.xml b/wdl/daily/index.xml index d410960ebb1..e549a0bc39d 100644 --- a/wdl/daily/index.xml +++ b/wdl/daily/index.xml @@ -1,7 +1,7 @@ GitHub WDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:41Z + 2024-08-03T01:37:17Z Daily Trending of WDL in GitHub \ No newline at end of file diff --git a/web-ontology-language/daily/index.xml b/web-ontology-language/daily/index.xml index 466d20b1914..3abf0bcd337 100644 --- a/web-ontology-language/daily/index.xml +++ b/web-ontology-language/daily/index.xml @@ -1,7 +1,7 @@ GitHub Web Ontology Language Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:42Z + 2024-08-03T01:37:18Z Daily Trending of Web Ontology Language in GitHub \ No newline at end of file diff --git a/webassembly/daily/index.xml b/webassembly/daily/index.xml index bb795b7a248..d32b9f6c819 100644 --- a/webassembly/daily/index.xml +++ b/webassembly/daily/index.xml @@ -1,7 +1,7 @@ GitHub WebAssembly Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:43Z + 2024-08-03T01:37:19Z Daily Trending of WebAssembly in GitHub \ No newline at end of file diff --git a/webidl/daily/index.xml b/webidl/daily/index.xml index f567fa13af2..51df86ce06d 100644 --- a/webidl/daily/index.xml +++ b/webidl/daily/index.xml @@ -1,7 +1,7 @@ GitHub WebIDL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:42Z + 2024-08-03T01:37:18Z Daily Trending of WebIDL in GitHub \ No newline at end of file diff --git a/webvtt/daily/index.xml b/webvtt/daily/index.xml index 459a999ea9b..3c980970e4a 100644 --- a/webvtt/daily/index.xml +++ b/webvtt/daily/index.xml @@ -1,7 +1,7 @@ GitHub WebVTT Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:44Z + 2024-08-03T01:37:21Z Daily Trending of WebVTT in GitHub \ No newline at end of file diff --git a/wget-config/daily/index.xml b/wget-config/daily/index.xml index e23645baea2..4939dd7bb0f 100644 --- a/wget-config/daily/index.xml +++ b/wget-config/daily/index.xml @@ -1,7 +1,7 @@ GitHub Wget Config Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:44Z + 2024-08-03T01:37:20Z Daily Trending of Wget Config in GitHub \ No newline at end of file diff --git a/wikitext/daily/index.xml b/wikitext/daily/index.xml index 1e334fd2b74..f5ff8b7a04d 100644 --- a/wikitext/daily/index.xml +++ b/wikitext/daily/index.xml @@ -1,7 +1,7 @@ GitHub Wikitext Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:33:47Z + 2024-08-03T01:34:08Z Daily Trending of Wikitext in GitHub \ No newline at end of file diff --git a/windows-registry-entries/daily/index.xml b/windows-registry-entries/daily/index.xml index eb95e4f0960..b9bc6184b2d 100644 --- a/windows-registry-entries/daily/index.xml +++ b/windows-registry-entries/daily/index.xml @@ -1,7 +1,7 @@ GitHub Windows Registry Entries Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:46Z + 2024-08-03T01:37:22Z Daily Trending of Windows Registry Entries in GitHub \ No newline at end of file diff --git a/wisp/daily/index.xml b/wisp/daily/index.xml index 3d55834362b..efddf05726d 100644 --- a/wisp/daily/index.xml +++ b/wisp/daily/index.xml @@ -1,7 +1,7 @@ GitHub wisp Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:45Z + 2024-08-03T01:37:22Z Daily Trending of wisp in GitHub \ No newline at end of file diff --git a/witcher-script/daily/index.xml b/witcher-script/daily/index.xml index f39538eeec5..66898dd3b80 100644 --- a/witcher-script/daily/index.xml +++ b/witcher-script/daily/index.xml @@ -1,7 +1,7 @@ GitHub Witcher Script Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:46Z + 2024-08-03T01:37:21Z Daily Trending of Witcher Script in GitHub \ No newline at end of file diff --git a/wollok/daily/index.xml b/wollok/daily/index.xml index 58bc55444f2..98d2bdfca86 100644 --- a/wollok/daily/index.xml +++ b/wollok/daily/index.xml @@ -1,7 +1,7 @@ GitHub Wollok Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:47Z + 2024-08-03T01:37:24Z Daily Trending of Wollok in GitHub \ No newline at end of file diff --git a/world-of-warcraft-addon-data/daily/index.xml b/world-of-warcraft-addon-data/daily/index.xml index 6c01c474ed8..04de202833e 100644 --- a/world-of-warcraft-addon-data/daily/index.xml +++ b/world-of-warcraft-addon-data/daily/index.xml @@ -1,7 +1,7 @@ GitHub World of Warcraft Addon Data Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:46Z + 2024-08-03T01:37:23Z Daily Trending of World of Warcraft Addon Data in GitHub \ No newline at end of file diff --git a/x-bitmap/daily/index.xml b/x-bitmap/daily/index.xml index 3b3836d6679..b279545b7c6 100644 --- a/x-bitmap/daily/index.xml +++ b/x-bitmap/daily/index.xml @@ -1,7 +1,7 @@ GitHub X BitMap Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:47Z + 2024-08-03T01:37:23Z Daily Trending of X BitMap in GitHub \ No newline at end of file diff --git a/x-font-directory-index/daily/index.xml b/x-font-directory-index/daily/index.xml index 9f0c14ee8d3..8708dd3f2fc 100644 --- a/x-font-directory-index/daily/index.xml +++ b/x-font-directory-index/daily/index.xml @@ -1,7 +1,7 @@ GitHub X Font Directory Index Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:48Z + 2024-08-03T01:37:25Z Daily Trending of X Font Directory Index in GitHub \ No newline at end of file diff --git a/x-pixmap/daily/index.xml b/x-pixmap/daily/index.xml index 6de4d55106d..25fa19e7ff3 100644 --- a/x-pixmap/daily/index.xml +++ b/x-pixmap/daily/index.xml @@ -1,7 +1,7 @@ GitHub X PixMap Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:49Z + 2024-08-03T01:37:24Z Daily Trending of X PixMap in GitHub \ No newline at end of file diff --git a/x10/daily/index.xml b/x10/daily/index.xml index fada599f414..5fa21ed0536 100644 --- a/x10/daily/index.xml +++ b/x10/daily/index.xml @@ -1,7 +1,7 @@ GitHub X10 Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:48Z + 2024-08-03T01:37:25Z Daily Trending of X10 in GitHub \ No newline at end of file diff --git a/xbase/daily/index.xml b/xbase/daily/index.xml index 0fd60aa5a92..b238ae51a29 100644 --- a/xbase/daily/index.xml +++ b/xbase/daily/index.xml @@ -1,7 +1,7 @@ GitHub xBase Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:48Z + 2024-08-03T01:37:24Z Daily Trending of xBase in GitHub \ No newline at end of file diff --git a/xc/daily/index.xml b/xc/daily/index.xml index 9a483386ee9..10b2712f06f 100644 --- a/xc/daily/index.xml +++ b/xc/daily/index.xml @@ -1,7 +1,7 @@ GitHub XC Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:50Z + 2024-08-03T01:37:26Z Daily Trending of XC in GitHub \ No newline at end of file diff --git a/xcompose/daily/index.xml b/xcompose/daily/index.xml index ac9e12ee2c8..5e2ecbce92a 100644 --- a/xcompose/daily/index.xml +++ b/xcompose/daily/index.xml @@ -1,7 +1,7 @@ GitHub XCompose Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:49Z + 2024-08-03T01:37:26Z Daily Trending of XCompose in GitHub \ No newline at end of file diff --git a/xml-property-list/daily/index.xml b/xml-property-list/daily/index.xml index 7e06d057f10..cd13e6cea14 100644 --- a/xml-property-list/daily/index.xml +++ b/xml-property-list/daily/index.xml @@ -1,7 +1,7 @@ GitHub XML Property List Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:50Z + 2024-08-03T01:37:26Z Daily Trending of XML Property List in GitHub \ No newline at end of file diff --git a/xml/daily/index.xml b/xml/daily/index.xml index 93e3e92c79e..7dd7753bf1d 100644 --- a/xml/daily/index.xml +++ b/xml/daily/index.xml @@ -1,7 +1,7 @@ GitHub XML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:50Z + 2024-08-03T01:37:27Z Daily Trending of XML in GitHub \ No newline at end of file diff --git a/xojo/daily/index.xml b/xojo/daily/index.xml index 9bccdd5dc73..d096ddd0914 100644 --- a/xojo/daily/index.xml +++ b/xojo/daily/index.xml @@ -1,7 +1,7 @@ GitHub Xojo Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:52Z + 2024-08-03T01:37:28Z Daily Trending of Xojo in GitHub \ No newline at end of file diff --git a/xonsh/daily/index.xml b/xonsh/daily/index.xml index 8d8a49ef92a..f644c16f97e 100644 --- a/xonsh/daily/index.xml +++ b/xonsh/daily/index.xml @@ -1,7 +1,7 @@ GitHub Xonsh Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:52Z + 2024-08-03T01:37:28Z Daily Trending of Xonsh in GitHub \ No newline at end of file diff --git a/xpages/daily/index.xml b/xpages/daily/index.xml index c89686a34e0..8b01c58b351 100644 --- a/xpages/daily/index.xml +++ b/xpages/daily/index.xml @@ -1,7 +1,7 @@ GitHub XPages Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:52Z + 2024-08-03T01:37:28Z Daily Trending of XPages in GitHub \ No newline at end of file diff --git a/xproc/daily/index.xml b/xproc/daily/index.xml index 232d09ecd21..25a3e4a437a 100644 --- a/xproc/daily/index.xml +++ b/xproc/daily/index.xml @@ -1,7 +1,7 @@ GitHub XProc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:52Z + 2024-08-03T01:37:27Z Daily Trending of XProc in GitHub \ No newline at end of file diff --git a/xquery/daily/index.xml b/xquery/daily/index.xml index d8a8cf1f3fe..0394184d67b 100644 --- a/xquery/daily/index.xml +++ b/xquery/daily/index.xml @@ -1,7 +1,7 @@ GitHub XQuery Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:53Z + 2024-08-03T01:37:29Z Daily Trending of XQuery in GitHub \ No newline at end of file diff --git a/xs/daily/index.xml b/xs/daily/index.xml index 51f9607a462..cfe8bbdee3d 100644 --- a/xs/daily/index.xml +++ b/xs/daily/index.xml @@ -1,7 +1,7 @@ GitHub XS Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:53Z + 2024-08-03T01:37:29Z Daily Trending of XS in GitHub \ No newline at end of file diff --git a/xslt/daily/index.xml b/xslt/daily/index.xml index 21dc077298d..1bf5e3d4290 100644 --- a/xslt/daily/index.xml +++ b/xslt/daily/index.xml @@ -1,7 +1,7 @@ GitHub XSLT Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:54Z + 2024-08-03T01:37:30Z Daily Trending of XSLT in GitHub \ No newline at end of file diff --git a/xtend/daily/index.xml b/xtend/daily/index.xml index 23fca524654..bb37c62f2bc 100644 --- a/xtend/daily/index.xml +++ b/xtend/daily/index.xml @@ -1,7 +1,7 @@ GitHub Xtend Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:54Z + 2024-08-03T01:37:29Z Daily Trending of Xtend in GitHub \ No newline at end of file diff --git a/yacc/daily/index.xml b/yacc/daily/index.xml index 18f10f220ba..95d103ce800 100644 --- a/yacc/daily/index.xml +++ b/yacc/daily/index.xml @@ -1,7 +1,7 @@ GitHub Yacc Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:55Z + 2024-08-03T01:37:31Z Daily Trending of Yacc in GitHub \ No newline at end of file diff --git a/yaml/daily/index.xml b/yaml/daily/index.xml index ee49be148c3..4f3d2b1dd43 100644 --- a/yaml/daily/index.xml +++ b/yaml/daily/index.xml @@ -1,7 +1,7 @@ GitHub YAML Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:56Z + 2024-08-03T01:37:32Z Daily Trending of YAML in GitHub \ No newline at end of file diff --git a/yang/daily/index.xml b/yang/daily/index.xml index d20c3d93a9a..d8278827481 100644 --- a/yang/daily/index.xml +++ b/yang/daily/index.xml @@ -1,7 +1,7 @@ GitHub YANG Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:55Z + 2024-08-03T01:37:31Z Daily Trending of YANG in GitHub \ No newline at end of file diff --git a/yara/daily/index.xml b/yara/daily/index.xml index 1977c97816a..757c3c19ac5 100644 --- a/yara/daily/index.xml +++ b/yara/daily/index.xml @@ -1,7 +1,7 @@ GitHub YARA Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:56Z + 2024-08-03T01:37:31Z Daily Trending of YARA in GitHub \ No newline at end of file diff --git a/yasnippet/daily/index.xml b/yasnippet/daily/index.xml index 518eb0d7857..dabd66c4c5d 100644 --- a/yasnippet/daily/index.xml +++ b/yasnippet/daily/index.xml @@ -1,7 +1,7 @@ GitHub YASnippet Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:57Z + 2024-08-03T01:37:33Z Daily Trending of YASnippet in GitHub \ No newline at end of file diff --git a/zap/daily/index.xml b/zap/daily/index.xml index f5281831fc6..a3977add53b 100644 --- a/zap/daily/index.xml +++ b/zap/daily/index.xml @@ -1,7 +1,7 @@ GitHub ZAP Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:57Z + 2024-08-03T01:37:33Z Daily Trending of ZAP in GitHub \ No newline at end of file diff --git a/zeek/daily/index.xml b/zeek/daily/index.xml index c79b32e17eb..57857a572e9 100644 --- a/zeek/daily/index.xml +++ b/zeek/daily/index.xml @@ -1,7 +1,7 @@ GitHub Zeek Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:28:07Z + 2024-08-03T01:28:23Z Daily Trending of Zeek in GitHub \ No newline at end of file diff --git a/zenscript/daily/index.xml b/zenscript/daily/index.xml index cc27d48abcc..c80748ff29d 100644 --- a/zenscript/daily/index.xml +++ b/zenscript/daily/index.xml @@ -1,7 +1,7 @@ GitHub ZenScript Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:57Z + 2024-08-03T01:37:33Z Daily Trending of ZenScript in GitHub \ No newline at end of file diff --git a/zephir/daily/index.xml b/zephir/daily/index.xml index 2a875736dd6..7f8f717f19b 100644 --- a/zephir/daily/index.xml +++ b/zephir/daily/index.xml @@ -1,7 +1,7 @@ GitHub Zephir Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:59Z + 2024-08-03T01:37:34Z Daily Trending of Zephir in GitHub \ No newline at end of file diff --git a/zig/daily/index.xml b/zig/daily/index.xml index e9d9d94f652..f4f9a4e79c8 100644 --- a/zig/daily/index.xml +++ b/zig/daily/index.xml @@ -1,7 +1,7 @@ GitHub Zig Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:59Z + 2024-08-03T01:37:35Z Daily Trending of Zig in GitHub \ No newline at end of file diff --git a/zil/daily/index.xml b/zil/daily/index.xml index a6c0aca36cc..2dee8d80853 100644 --- a/zil/daily/index.xml +++ b/zil/daily/index.xml @@ -1,7 +1,7 @@ GitHub ZIL Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:58Z + 2024-08-03T01:37:34Z Daily Trending of ZIL in GitHub \ No newline at end of file diff --git a/zimpl/daily/index.xml b/zimpl/daily/index.xml index 25c0e05fbdc..b87d9e61f20 100644 --- a/zimpl/daily/index.xml +++ b/zimpl/daily/index.xml @@ -1,7 +1,7 @@ GitHub Zimpl Daily Trending http://mshibanami.github.io/GitHubTrendingRSS - 2024-08-02T01:36:59Z + 2024-08-03T01:37:35Z Daily Trending of Zimpl in GitHub \ No newline at end of file