Skip to content

Commit caa05be

Browse files
Add RTL/LTR Markdown linter for mixed-direction text consistency and PR annotation (#11877)
* Add RTL/LTR Markdown linter for mixed-direction text consistency and PR annotation Introduce a Python-based linter (scripts/rtl_ltr_linter.py) to automatically detect and annotate issues related to mixed Right-To-Left (RTL) and Left-To-Right (LTR) text in Markdown files. The linter analyzes list items, book entries, and metadata for potential bidirectional text rendering problems, such as missing Unicode directionality markers (RLM/LRM) and improper handling of LTR keywords or symbols in RTL contexts. Key features: - Scans all Markdown files in the repository, with full logs saved as workflow artifacts. - Annotates only changed or added lines in pull requests, providing targeted feedback in the GitHub Actions Job Summary. - Detects common RTL/LTR issues, including: - Missing directionality markers after LTR keywords (e.g., "HTML") or symbols (e.g., "C#") in RTL text. - BIDI (bidirectional) mismatches that may affect text display. - Incorrect ordering of author names and metadata in RTL contexts. - Configurable via rtl_linter_config.yml for keywords, symbols, and severity levels. - Includes a GitHub Actions workflow (rtl-ltr-linter.yml) for automated checks on PRs. * Add test cases for RTL/LTR linter in English and Arabic book lists Add sample entries to free-programming-books-en.md and free-programming-books-ar.md to test the RTL/LTR Markdown linter. These test cases include various combinations of RTL and LTR text, keywords, symbols, and metadata to verify that the linter correctly detects directionality issues and outputs the expected logs and annotations. * Restore original book lists after RTL/LTR linter test cases Revert test entries in free-programming-books-en.md and free-programming-books-ar.md, restoring the original book lists. This commit removes temporary test data used for validating the RTL/LTR Markdown linter, preparing the repository for merging the PR with a clean state. No functional changes to the linter or configuration files; only test content has been removed. * Update RTL/LTR linter workflow and script: run only on RTL file changes or "RTL" label, fail only on errors The GitHub Actions workflow for the RTL/LTR Markdown linter now runs only if: - The PR modifies .md files related to RTL languages (ar, he, fa, ur), or - The PR has the "RTL" label. The linter script has been updated to fail the check only if errors are found on changed lines, not for warnings. * Only upload linter artifact if linter step runs Prevent warning about missing artifact by uploading the linter output log only if the linter step was executed (success or failure). This avoids unnecessary warnings when the linter is skipped because no RTL files were changed and no RTL label is present. * Test workflow: modify non-RTL markdown file Modified free-programming-books-en.md to verify that the RTL/LTR linter workflow does not run when only non-RTL markdown files are changed and the "RTL" label is not present. * Test workflow: modify RTL markdown file to trigger linter Modified free-programming-books-ar.md to verify that the RTL/LTR linter workflow runs as expected when an RTL markdown file is changed. * Fix RTL/LTR BIDI issues in some markdown files Applied directional markers (‎, ‏) and other formatting fixes to resolve BIDI (bidirectional text) errors and warnings reported by the linter in several .md files. * Fix workflow: upload linter log only if linter step has not been skipped Updated the workflow to upload the linter output artifact only when the linter step was actually executed (not skipped) * Add debug step to check linter outcome in workflow Added a debug step after the linter execution in the workflow to print the outcome and conclusion of the run_linter step. * Set continue-on-error for linter step to allow artifact upload and debug * Remove workflow debug step and update markdown file Removed the debug step from the RTL/LTR linter workflow and applied further changes to a markdown file. * Fix RTL/LTR BIDI issues in some markdown files Applied directional markers (‎, ‏) and other formatting fixes to resolve BIDI (bidirectional text) errors and warnings reported by the linter in several .md files. This commit is a second batch of corrections to improve RTL/LTR rendering and pass the linter checks. * Fix RTL/LTR BIDI issues in some markdown files Applied directional markers (‎, ‏) and other formatting fixes to resolve BIDI (bidirectional text) errors and warnings reported by the linter in several .md files. This commit is a third batch of corrections to improve RTL/LTR rendering and pass the linter checks. * Do not produce log file if no issues found Updated the linter script to avoid creating the log file when no issues, warnings, or notices are found. If no issues are detected, the script now prints a "::notice ::No issues found" * Always print annotation with number of errors and warnings found Updated the linter script to always print an annotation indicating how many errors and warnings were found, even if there are none. * Fix: always print summary annotation with number of issues found * Add a missing newline character at end of file free-courses-he.md * Update linter configuration and revert markdown files to pre-fix state Updated the organization of keywords and symbols in the linter configuration file. Reverted all markdown files to their original state prior to the fixes. * Update free-programming-books-he.md with fixes * Update free-programming-books-he.md with further fixes * Update free-programming-books-he.md with fixes * Update free-programming-books-fa_IR.md with fixes * Update free-programming-books-he.md with further fixes * Update free-programming-books-ar.md with fixes * Update free-programming-books-ar.md with further fixes * Update free-podcasts-screencasts-ar.md with fixes * Update free-podcasts-screencasts-fa_IR.md with fixes * Update free-courses-he.md with fixes * Update free-courses-he.md with further fixes * Update free-courses-fa_IR.md with fixes * Update free-courses-fa_IR.md with further fixes * Update free-courses-ar.md with fixes * Update free-courses-ar.md with further fixes * Update free-courses-ar.md with further fixes * Update free-courses-ur.md with fixes * Update some markdown files with further improvements * Fix alignment of nested lists in free-programming-books-fa_IR.md * Update CONTRIBUTING.md and CONTRIBUTING-it.md with RTL/LTR linter error fixing guidelines Added a section to CONTRIBUTING.md and CONTRIBUTING-it.md explaining how to fix RTL/LTR Markdown linter errors, including when to use ‏ and ‎ with practical examples for contributors working on files with mixed RTL and LTR text
1 parent 1be7c48 commit caa05be

14 files changed

+1425
-465
lines changed

.github/workflows/rtl-ltr-linter.yml

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: RTL/LTR Markdown Linter
2+
3+
on: [pull_request]
4+
5+
permissions:
6+
contents: read # Required to checkout the repository content
7+
8+
jobs:
9+
lint:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
# Checkout the repository code
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
17+
# Fetch the full history of 'main' for accurate git diff in PRs
18+
- name: Fetch all history for main
19+
run: git fetch --no-tags --prune --depth=50 origin main
20+
21+
# Set up the required Python version for the linter
22+
- name: Set up Python
23+
uses: actions/setup-python@v5
24+
with:
25+
python-version: '3.11' # Use a recent Python version for compatibility
26+
27+
# Install only the Python dependencies needed for the linter script
28+
- name: Install Python dependencies
29+
run: |
30+
pip install python-bidi PyYAML
31+
32+
# (Optional) List files for debugging purposes
33+
- name: List files in scripts directory and current path
34+
run: |
35+
echo "Current working directory:"
36+
pwd
37+
echo "Listing contents of scripts directory (if it exists at root):"
38+
ls -la scripts/ || echo "scripts/ directory not found at root or ls failed"
39+
40+
# Identify all changed Markdown files in the PR using tj-actions/changed-files
41+
- name: Get changed Markdown files
42+
id: changed_md_files
43+
uses: tj-actions/changed-files@v44
44+
with:
45+
files: |
46+
**/*.md
47+
48+
# Check if the PR has the "RTL" label
49+
- name: Check for RTL label
50+
id: rtl_label
51+
run: |
52+
gh pr view ${{ github.event.pull_request.number }} --json labels --jq '.labels[].name' | grep -q '^RTL$' && echo "has_labels=true" >> $GITHUB_OUTPUT || echo "has_labels=false" >> $GITHUB_OUTPUT
53+
env:
54+
GH_TOKEN: ${{ github.token }}
55+
56+
# Check if any changed file is in ar, he, fa, ur
57+
- name: Check for RTL language file changes
58+
id: rtl_lang_files
59+
run: |
60+
RTL_CHANGED=false
61+
for f in ${{ steps.changed_md_files.outputs.all_changed_files }}; do
62+
if [[ "$f" =~ (ar|he|fa|ur) ]]; then
63+
RTL_CHANGED=true
64+
break
65+
fi
66+
done
67+
echo "rtl_changed=$RTL_CHANGED" >> $GITHUB_OUTPUT
68+
69+
# Run the RTL/LTR Markdown linter:
70+
# - Scans all Markdown files for issues and writes a full log
71+
# - Prints GitHub Actions annotations only for issues on changed lines in changed files
72+
# - Fails the job if any error or warning is found on changed lines
73+
- name: Run RTL/LTR Markdown linter
74+
id: run_linter
75+
if: steps.rtl_label.outputs.has_labels == 'true' || steps.rtl_lang_files.outputs.rtl_changed == 'true'
76+
continue-on-error: true
77+
run: |
78+
echo "Scanning all specified paths for full log..."
79+
echo "Changed Markdown files for PR annotations: ${{ steps.changed_md_files.outputs.all_changed_files }}"
80+
81+
CHANGED_FILES_ARGS=""
82+
if [ "${{ steps.changed_md_files.outputs.all_changed_files_count }}" -gt 0 ]; then
83+
# Pass changed files to the script for PR annotation generation
84+
CHANGED_FILES_ARGS="--changed-files ${{ steps.changed_md_files.outputs.all_changed_files }}"
85+
fi
86+
87+
# Execute the linter.
88+
# Annotations for changed files will be printed to stdout by the script.
89+
# The script will also write a full log to 'rtl-linter-output.log'.
90+
# If the script exits with a non-zero code (error found), this step will fail.
91+
python3 scripts/rtl_ltr_linter.py books casts courses more ${CHANGED_FILES_ARGS} --log-file rtl-linter-output.log
92+
93+
# Upload the linter output log as a workflow artifact
94+
# Only if the linter step was executed (success or failure)
95+
- name: Upload linter output artifact
96+
if: steps.run_linter.conclusion == 'success' || steps.run_linter.conclusion == 'failure'
97+
uses: actions/upload-artifact@v4
98+
with:
99+
name: rtl-linter-output # Name of the artifact
100+
path: rtl-linter-output.log # Path to the output file
101+
if-no-files-found: ignore # Ignore if no files are found

books/free-programming-books-ar.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
* [احترف الأردوينو](https://www.ev-center.com/uploads/2/1/2/6/21261678/arduino.pdf) - Working Group‏ (PDF)
2626
* [اردوينو ببساطة](https://simplyarduino.com/%D9%83%D8%AA%D8%A7%D8%A8-%D8%A7%D8%B1%D8%AF%D9%88%D9%8A%D9%86%D9%88-%D8%A8%D8%A8%D8%B3%D8%A7%D8%B7%D8%A9/) - عبدالله علي عبدالله, Abdallah Ali Abdallah Elmasry‏ (PDF)
27-
* [AVR ببساطة: من تشغيل دايود ضوئي إلى أنظمة الوقت الحقيقي](https://github.com/abdallah-ali-abdallah/Simply-AVR-Book) - عبدالله علي عبدالله, Abdallah Ali Abdallah Elmasry‏ (ODT, PDF)
27+
* [AVR‏ ببساطة: من تشغيل دايود ضوئي إلى أنظمة الوقت الحقيقي](https://github.com/abdallah-ali-abdallah/Simply-AVR-Book) - عبدالله علي عبدالله, Abdallah Ali Abdallah Elmasry‏ (ODT, PDF‏)
2828

2929

3030
### Artificial Intelligence
@@ -34,7 +34,7 @@
3434

3535
### DB & DBMS
3636

37-
* [تصميم قواعد البيانات](https://academy.hsoub.com/files/26-تصميم-قواعد-البيانات/) - Adrienne Watt, Nelson Eng، ترجمة أيمن طارق وعلا عباس (PDF)
37+
* [تصميم قواعد البيانات](https://academy.hsoub.com/files/26-تصميم-قواعد-البيانات/) - Adrienne Watt, Nelson Eng‏، ترجمة أيمن طارق وعلا عباس‏ (PDF)
3838

3939

4040
### HTML and CSS
@@ -50,31 +50,31 @@
5050

5151
### JavaScript
5252

53-
* [تعلم JavaScript‏](https://itwadi.com/node/3002) - Cody Lindley, عبداللطيف ايمش (PDF)
54-
* [سلسلة تعلم Next.js بالعربية](https://blog.abdelhadi.org/learn-nextjs-in-arabic/) - Flavio Copes, عبدالهادي الأندلسي
53+
* [تعلم JavaScript‏](https://itwadi.com/node/3002) - Cody Lindley,‏ عبداللطيف ايمش‏ (PDF)
54+
* [سلسلة تعلم Next.js‏ بالعربية](https://blog.abdelhadi.org/learn-nextjs-in-arabic/) - Flavio Copes,‏ عبدالهادي الأندلسي
5555

5656

5757
#### Vue.js
5858

59-
* [أساسيات إطار العمل Vue.js](https://academy.hsoub.com/files/22-أساسيات-إطار-العمل-vuejs/) - حسام برهان (PDF)
59+
* [أساسيات إطار العمل Vue.js‏](https://academy.hsoub.com/files/22-أساسيات-إطار-العمل-vuejs/) - حسام برهان‏ (PDF)
6060

6161

6262
### Linux
6363

6464
* [أوبنتو ببساطة](https://www.simplyubuntu.com) - Ahmed AbouZaid‏ (PDF)
65-
* [دفتر مدير دبيان](https://ar.debian-handbook.info) - Raphaël Hertzog, Roland Mas, MUHAMMET SAİT Muhammet Sait‏ (PDF, HTML)
66-
* [دليل إدارة خواديم أوبنتو 14.04](https://academy.hsoub.com/files/10-دليل-إدارة-خواديم-أوبنتو/) - Ubuntu documentation team, Abdullatif Eymash‏ (PDF)
67-
* [سطر أوامر لينكس](https://itwadi.com/node/2765) - Willam E. Shotts Jr., ترجمة عبد اللطيف ايمش (PDF)
65+
* [دفتر مدير دبيان](https://ar.debian-handbook.info) - Raphaël Hertzog, Roland Mas, MUHAMMET SAİT Muhammet Sait‏ (PDF, HTML‏)
66+
* [دليل إدارة خواديم أوبنتو 14.04‏](https://academy.hsoub.com/files/10-دليل-إدارة-خواديم-أوبنتو/) - Ubuntu documentation team, Abdullatif Eymash‏ (PDF)
67+
* [سطر أوامر لينكس](https://itwadi.com/node/2765) - Willam E. Shotts Jr.‎, ترجمة عبد اللطيف ايمش‏ (PDF)
6868

6969

7070
### Open Source Software
7171

72-
* [دليل البرمجيات الحرة مفتوحة](https://www.freeopensourceguide.com) - أحمد م. أبوزيد (PDF)
72+
* [دليل البرمجيات الحرة مفتوحة](https://www.freeopensourceguide.com) - أحمد م. أبوزيد‏ (PDF)
7373

7474

7575
### Operating Systems
7676

77-
* [أنظمة التشغيل للمبرمجين](https://academy.hsoub.com/files/24-أنظمة-التشغيل-للمبرمجين/) - Allen B. Downey ,ترجمة علا عباس (PDF)
77+
* [أنظمة التشغيل للمبرمجين](https://academy.hsoub.com/files/24-أنظمة-التشغيل-للمبرمجين/) - Allen B. Downey,‏ ترجمة علا عباس‏ (PDF)
7878

7979

8080
### Python
@@ -100,12 +100,12 @@
100100

101101
### SQL
102102

103-
* [ملاحظات للعاملين بلغة SQL](https://academy.hsoub.com/files/16-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-sql/)
103+
* [ملاحظات للعاملين بلغة SQL‏](https://academy.hsoub.com/files/16-%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA-%D9%84%D9%84%D8%B9%D8%A7%D9%85%D9%84%D9%8A%D9%86-%D8%A8%D9%84%D8%BA%D8%A9-sql/)
104104

105105

106106
#### PostgreSQL
107107

108-
* [الدليل العملي إلى قواعد بيانات PostgreSQL‏](https://academy.hsoub.com/files/18-%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A-%D8%A5%D9%84%D9%89-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-postgresql/) - Craig Kerstiens، مصطفى عطا العايش (PDF)
108+
* [الدليل العملي إلى قواعد بيانات PostgreSQL‏](https://academy.hsoub.com/files/18-%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A-%D8%A5%D9%84%D9%89-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-postgresql/) - Craig Kerstiens،‏ مصطفى عطا العايش‏ (PDF)
109109
* [بوستجريسكل كتاب الوصفات](https://itwadi.com/PostgreSQL_Cookbook) - Chitij Chauhan‏ (PDF)
110110

111111

books/free-programming-books-fa_IR.md

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
<div dir="rtl" markdown="1">
2+
13
### فهرست
24

35
* [رایانش ابری](#%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D8%B4-%D8%A7%D8%A8%D8%B1%DB%8C)
@@ -8,9 +10,13 @@
810
* [LaTeX](#latex)
911
* [Linux](#linux)
1012
* [PHP](#php)
11-
* [Symfony](#symfony)
13+
<ul dir="rtl">
14+
<li><a href="#symfony">Symfony</a></li>
15+
</ul>
1216
* [Python](#python)
13-
* [Django](#django)
17+
<ul dir="rtl">
18+
<li><a href="#django">Django</a></li>
19+
</ul>
1420
* [R](#r)
1521

1622

@@ -26,14 +32,14 @@
2632

2733
### مهندسی نرم‌افزار
2834

29-
* [الگوهای طراحی](https://holosen.net/what-is-design-pattern/) - Hossein Badrnezhad *(نیاز به ثبت نام دارد)*
35+
* [الگوهای طراحی](https://holosen.net/what-is-design-pattern/) - Hossein Badrnezhad&rlm; *(نیاز به ثبت نام دارد)*
3036
* [الگوهای طراحی در برنامه‌نویسی شیء‌گرا](https://github.com/khajavi/Practical-Design-Patterns)
31-
* [ترجمه آزاد کتاب کد تمیز](https://codetamiz.vercel.app) - Robert C. Martin, et al.
37+
* [ترجمه آزاد کتاب کد تمیز](https://codetamiz.vercel.app) - Robert C. Martin, et al.&lrm;
3238

3339

3440
### HTML and CSS
3541

36-
* [یادگیری پیکربندی با CSS](http://fa.learnlayout.com)
42+
* [یادگیری پیکربندی با CSS&rlm;](http://fa.learnlayout.com)
3743

3844

3945
### Java
@@ -45,14 +51,14 @@
4551

4652
### JavaScript
4753

48-
* [جاوااسکریپت شیوا](http://eloquentjs.ir) - مارین هاوربک, مهران عفتی (HTML)
54+
* [جاوااسکریپت شیوا](http://eloquentjs.ir) - مارین هاوربک, مهران عفتی&rlm; (HTML)
4955
* [ریکت جی اس](https://github.com/reactjs/fa.reactjs.org)
5056
* [یادگیری اصولی جاوااسکریپت](https://github.com/Mariotek/BetterUnderstandingOfJavascript)
5157

5258

5359
### LaTeX
5460

55-
* [مقدمه‌ای نه چندان کوتاه بر LaTeX](http://www.ctan.org/tex-archive/info/lshort/persian)
61+
* [مقدمه‌ای نه چندان کوتاه بر LaTeX&rlm;](http://www.ctan.org/tex-archive/info/lshort/persian)
5662

5763

5864
### Linux
@@ -66,24 +72,27 @@
6672

6773
#### Symfony
6874

69-
* [سیمفونی ۵: سریع‌ترین مسیر](https://web.archive.org/web/20210122133755/https://symfony.com/doc/current/the-fast-track/fa/index.html) *(:card_file_box: archived)*
75+
* [سیمفونی ۵: سریع‌ترین مسیر&rlm;](https://web.archive.org/web/20210122133755/https://symfony.com/doc/current/the-fast-track/fa/index.html) - *(:card_file_box: archived)*
7076

7177

7278
### Python
7379

74-
* [پایتون به پارسی](https://python.coderz.ir) - سعید درویش (HTML)
75-
* [ترجمه آزاد کتاب Asyncio in Python](https://github.com/ftg-iran/aip-persian)
80+
* [پایتون به پارسی](https://python.coderz.ir) - سعید درویش&rlm; (HTML)
81+
* [ترجمه آزاد کتاب Asyncio in Python&rlm;](https://github.com/ftg-iran/aip-persian)
7682

7783

7884
#### Django
7985

80-
* [ترجمه آزاد کتاب Django Design Patterns and Best Practices](https://github.com/ftg-iran/ddpabp-persian)
86+
* [ترجمه آزاد کتاب Django Design Patterns and Best Practices&rlm;](https://github.com/ftg-iran/ddpabp-persian)
8187
* [کتاب جنگو برای حرفه‌ای‌ها](https://github.com/mthri/dfp-persian)
82-
* [کتاب جنگو برای API](https://github.com/ftg-iran/dfa-persian)
88+
* [کتاب جنگو برای API&rlm;](https://github.com/ftg-iran/dfa-persian)
8389

8490

8591
### R
8692

87-
* [تحلیل شبکه‌های اجتماعی در R](http://cran.r-project.org/doc/contrib/Raeesi-SNA_in_R_in_Farsi.pdf) (PDF)
88-
* [راهنمای زبان R](http://cran.r-project.org/doc/contrib/Mousavi-R-lang_in_Farsi.pdf) (PDF)
89-
* [مباحث ویژه در R](http://cran.r-project.org/doc/contrib/Mousavi-R_topics_in_Farsi.pdf) (PDF)
93+
* [تحلیل شبکه‌های اجتماعی در R&rlm;](http://cran.r-project.org/doc/contrib/Raeesi-SNA_in_R_in_Farsi.pdf) (PDF)
94+
* [راهنمای زبان R&rlm;](http://cran.r-project.org/doc/contrib/Mousavi-R-lang_in_Farsi.pdf) (PDF)
95+
* [مباحث ویژه در R&rlm;](http://cran.r-project.org/doc/contrib/Mousavi-R_topics_in_Farsi.pdf) (PDF)
96+
97+
98+
</div>

books/free-programming-books-he.md

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,51 @@
1+
<div dir="rtl" markdown="1">
2+
13
### Index
24

35
* [ללא תלות בשפה](#ללא-תלות-בשפה)
46
* [מערכות הפעלה](#מערכות-הפעלה)
57
* [רשתות](#רשתות)
68
* [Assembly](#assembly)
79
* [C](#c)
8-
* [C#](#csharp)
10+
* [C#&lrm;](#csharp)
911
* [Python](#python)
1012

1113

1214
### ללא תלות בשפה
1315

1416
#### מערכות הפעלה
1517

16-
* [מערכות הפעלה](https://data.cyber.org.il/os/os_book.pdf) – ברק גונן, המרכז לחינוך סייבר (PDF)
18+
* [מערכות הפעלה](https://data.cyber.org.il/os/os_book.pdf) – ברק גונן&rlm;, המרכז לחינוך סייבר&rlm; (PDF)
1719

1820

1921
#### רשתות
2022

21-
* [רשתות מחשבים](https://data.cyber.org.il/networks/networks.pdf) – עומר רוזנבוים, ברק גונן, שלומי הוד, המרכז לחינוך סייבר (PDF)
23+
* [רשתות מחשבים](https://data.cyber.org.il/networks/networks.pdf) – עומר רוזנבוים&rlm;, ברק גונן&rlm;, שלומי הוד&rlm;, המרכז לחינוך סייבר&rlm; (PDF)
2224

2325

2426
### Assembly
2527

26-
* [ארגון המחשב ושפת סף](https://data.cyber.org.il/assembly/assembly_book.pdf) – ברק גונן, המרכז לחינוך סייבר (PDF)
28+
* [ארגון המחשב ושפת סף](https://data.cyber.org.il/assembly/assembly_book.pdf) – ברק גונן&rlm;, המרכז לחינוך סייבר&rlm; (PDF)
2729

2830

29-
### C
31+
### C
3032

31-
* [ספר לימוד שפה עילית (שפת C)](https://moked.education.gov.il/MafmarFiles/C_LangIG_3Version.pdf) - מרק טסליצקי (PDF)
33+
* [ספר לימוד שפה עילית (שפת C&lrm;)](https://moked.education.gov.il/MafmarFiles/C_LangIG_3Version.pdf) מרק טסליצקי&rlm; (PDF)
3234

3335

34-
### <a id="csharp"></a>C\#
36+
### <a id="csharp"></a>C#&lrm;
3537

36-
* [מבוא לתכנות בסביבת האינטרנט בשפת C#](https://meyda.education.gov.il/files/free%20books/%D7%9E%D7%91%D7%95%D7%90%20%D7%9C%D7%AA%D7%9B%D7%A0%D7%95%D7%AA%20%D7%91%D7%A1%D7%91%D7%99%D7%91%D7%AA%20%D7%94%D7%90%D7%99%D7%A0%D7%98%D7%A8%D7%A0%D7%98%20090216.pdf) – מט״ח (PDF)
38+
* [מבוא לתכנות בסביבת האינטרנט בשפת C#&lrm;](https://meyda.education.gov.il/files/free%20books/%D7%9E%D7%91%D7%95%D7%90%20%D7%9C%D7%AA%D7%9B%D7%A0%D7%95%D7%AA%20%D7%91%D7%A1%D7%91%D7%99%D7%91%D7%AA%20%D7%94%D7%90%D7%99%D7%A0%D7%98%D7%A8%D7%A0%D7%98%20090216.pdf) – מט״ח&rlm; (PDF)
3739

3840

3941
### Deep-Learning
4042

41-
* [ספר על למידת מכונה ולמידה עמוקה](https://github.com/AvrahamRaviv/Deep-Learning-in-Hebrew) – אברהם רביב ומייק ארליסון
43+
* [ספר על למידת מכונה ולמידה עמוקה](https://github.com/AvrahamRaviv/Deep-Learning-in-Hebrew) – אברהם רביב&rlm; ומייק ארליסון&rlm;
4244

4345

4446
### Python
4547

46-
* [תכנות בשפת פייתון](https://data.cyber.org.il/python/python_book.pdf) – ברק גונן, המרכז לחינוך סייבר (PDF)
48+
* [תכנות בשפת פייתון](https://data.cyber.org.il/python/python_book.pdf) – ברק גונן&rlm;, המרכז לחינוך סייבר&rlm; (PDF)
49+
50+
51+
</div>

casts/free-podcasts-screencasts-ar.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1+
<div dir="rtl" markdown="1">
2+
13
### Index
24

35
* [Miscellaneous](#miscellaneous)
46

57

68
### Miscellaneous
79

8-
* [أخوك الكبير متولي](https://anchor.fm/metwally) - Ahmed Metwally (podcast)
9-
* [برمجة ستريم](https://youtube.com/playlist?list=PL0_C_32YKLpx7K88481CY3J21cw85oFCM) - Mohamed Abusrea (podcast)
10-
* [بودكاست](https://youtube.com/playlist?list=PLvGNfY-tFUN-mGlfovyGACjPVmkzAsQFJ) - Ghareeb Elshaikh (podcast)
11-
* [AskDeveloper Podcast](http://www.askdeveloper.com) - Mohamed Elsherif (podcast)
12-
* [Codezilla Codecast - بودكاست البرمجة](https://youtube.com/playlist?list=PLsqPSxnrsWLuE-O3IKIUWy6Hmelz3bMWy) - Islam Hesham (podcast)
13-
* [Essam Cafe - قهوة عصام](https://essamcafe.com) - Ahmed Essam (podcast)
14-
* [Nakerah Podcast](https://nakerah.net/podcast) - Nakerah Network (podcast)
15-
* [null++: بالعربي](https://nullplus.plus) - Mohamed Luay, Ahmad Alfy (podcast)
16-
* [Tech Podcast بالعربي](https://anchor.fm/ahmdelemam) - Ahmed Elemam (podcast)
17-
* [The Egyptian Guy](https://anchor.fm/refaie) - Mohamed Refaie (podcast)
18-
* [The Weekly Noob](https://theweeklynoob.netlify.app) - Nabil Tharwat (podcast)
19-
* [Untyped Podcast](https://logaretm.com/untyped/) - Abdelrahman Awad (podcast)
20-
10+
* [أخوك الكبير متولي](https://anchor.fm/metwally) - Ahmed Metwally&rlm; (podcast)
11+
* [برمجة ستريم](https://youtube.com/playlist?list=PL0_C_32YKLpx7K88481CY3J21cw85oFCM) - Mohamed Abusrea&rlm; (podcast)
12+
* [بودكاست](https://youtube.com/playlist?list=PLvGNfY-tFUN-mGlfovyGACjPVmkzAsQFJ) - Ghareeb Elshaikh&rlm; (podcast)
13+
* [AskDeveloper Podcast&rlm;](http://www.askdeveloper.com) - Mohamed Elsherif&rlm; (podcast)
14+
* [Codezilla Codecast -&rlm; بودكاست البرمجة](https://youtube.com/playlist?list=PLsqPSxnrsWLuE-O3IKIUWy6Hmelz3bMWy) - Islam Hesham&rlm; (podcast)
15+
* [Essam Cafe -&rlm; قهوة عصام](https://essamcafe.com) - Ahmed Essam&rlm; (podcast)
16+
* [Nakerah Podcast&rlm;](https://nakerah.net/podcast) - Nakerah Network&rlm; (podcast)
17+
* [null++:&lrm; بالعربي](https://nullplus.plus) - Mohamed Luay, Ahmad Alfy&rlm; (podcast)
18+
* [Tech Podcast&rlm; بالعربي](https://anchor.fm/ahmdelemam) - Ahmed Elemam&rlm; (podcast)
19+
* [The Egyptian Guy&rlm;](https://anchor.fm/refaie) - Mohamed Refaie&rlm; (podcast)
20+
* [The Weekly Noob&rlm;](https://theweeklynoob.netlify.app) - Nabil Tharwat&rlm; (podcast)
21+
* [Untyped Podcast&rlm;](https://logaretm.com/untyped/) - Abdelrahman Awad&rlm; (podcast)
22+
23+
24+
</div>

0 commit comments

Comments
 (0)