videoplayback
بسم الله، خلونا نشوف lecture 5، الـ lecture 5 بشكل أساسي بتتكلم عن الـ Bluetooth. والـ Bluetooth دي من التطبيقات اللي موجودة في الـ Personal Area Network يعني.
السلام عليكم، هنتكلم النهاردة عن Lecture 4، سوري، المرة اللي فاتت اتكلمنا كنا بدأنا نتكلم عن الـ Networks والـ Communication اللي بيحصل في الـ Networks المختلفة، اتكلمنا عن الـ Wi-Fi في الـ Local Area Network
تمام، فهنبدأ نشوف عندنا إيه. زي ما خلينا نفتكر الـ Personal Area Network، هي بتشير لـ personal devices، هي typically بتوصل في خلال range معين في meters، ممكن 10 meters. والأمثلة عليها خدنا الـ infrared والـ radio
النهاردة هنبدأ، دي هتكون الـ Session عن الـ Personal Area Network والـ Communications اللي بيحصل فيها، تمام؟ زي ما كنا عارفين إحنا قلنا إن إحنا عندنا في أربع أنواع من الـ Network: Personal Area Network ودي قلنا اللي هي.
و الـ . الـ هو اللي هيكون ضوء على النمط. تمام؟ الـ هو زي ما احنا عارفين دايماً احنا نتكلم عن وي يعمل باكس بشانج من خلال الـ .
يعني Personal هي كـ Reference لـ Personal devices اللي هي القريبة جداً، أجهزة قريبة جداً، Maximum few meters زي مثلاً 5 meters أو 10 meters. بعد كدا اتكلمنا عن الـ Local Area Network زي البيت أو الشركة أياً كان لمبنى كامل. الـ Wide Area Network دي ممكن بتغطي مثلاً مدينة معينة، دولة
High frequency waves. تمام، في عندنا زي ما إحنا wanted a short range، لازم يكون short range عشان كده لما بنمشي مثلاً بعيد عن التليفون أو السماعة الـ connection بيفصل. Low power wireless link، الـ power بتاعها قليل، could connect devices without consuming as much power as Wi-Fi. طبعاً هي أقل complexity كتير أوي من الـ Wi-Fi، بتوصل الـ device وبستهلك حاجات أقل لوقت أطول.
الـ Global Area Network زي الـ Satellite أو الحاجات اللي هي بقى بـ Cover الـ Globe، تمام؟ في سؤال مهم جداً لازم نسأله لنفسنا كنا يعني عملنا Refer للموضوع ده في الـ Lectures اللي فاتت، اللي هو ليه في Waves بتعدي مثلاً من الـ Objects أو الحوائط..
الـ Wi-Fi فيه processing أكتر، فيه حاجات complex أكتر يعني. تمام، في واحد بقى، جه واحد اسمه... الـ history موجود في الـ lecture أكتر يعني لو حد عايز يـ explore الـ history أكتر. لكن في الآخر كان في حد اسمه Hartsen، طوّر system بيستخدم الـ 2.4 GHz ISM band.
.بتعدي من الحواجز مثلاً، وWaves لأ. ليه لما بحط... ما إحنا قلنا المايـ... أحط مثلاً طبق في الميكرويف، الأكل بيسخن بس الطبق ما بيسخنش؟ ليه؟ ما هي الميكرويف ده بيطلع إيه؟ بيطلع Microwave اللي هي الـ Microwave.
which is globally free to use and apply to frequency having a spread spectrum. تمام? يعني هوال stablish  يعني فيsystem  الاخر او طبعا. وهنتكلم يعني frequency having spread spectrum ديت اه كمان شوية. طيب. في منه نوعين.
فـ ليه ده بيحصل؟ بسبب إن ده بيعتمد على (يعني ممكن نعلي الـ Level شوية) بيعتمد كدا على حركة الجزيئات في الـ Object ده. لو الـ Object ده بـ Interact بنفس الـ Frequency مع الـ Waves اللي جاية...
زي الراديو، الـ Bluetooth Classic دايماً شغال، دايماً الـ wave شغالة، دايماً الـ connection شغال لحد ما أنا أفصله. لأن في continuous data شغالة، ممكن كمان يكون في محطوط في جهاز معين دايماً بيلقط signals من أجهزة تانية، فهو شغال علطول. فده هيكون الـ Classic
يقدر إنه، ويقدر إنه يكلم الـ Waves دي، هيعملها Absorb، هيعملها Absorption، هيمتصها يعني، تمام؟ لكن لو هو بـ Interact معاها بس ما يقدرش، لكن مثلاً Frequency مختلفة، ساعتها بيعملها Reflection ومش بيخلي، مش بيمتص الـ Wave دي ويخليها
مش دايماً شغال أو مش دايماً established، وده بيكون active أكتر، بيستهلك energy أكبر يعني. ده عندي منه two versions، اللي هما 1 و3، وبيستخدم devices اللي هي محتاجة continuous streaming أو في continuous data ما بين الـ two devices.
ده بسبب إن في Waves ممكن تعدي من الأجسام مثلاً الخشبية، Waves ما تعديش من الحائط، فزي الضوء مثلاً ما بيعديش من الحائط، يعني لو أوضة مقفولة ضلمة فمفيش ضوء هيدخلها.
زي مثلاً لو بتسمع حاجة، ففي حاجة دايماً شغالة، ففي data دايماً بتتنقل. فهو مناسب للأجهزة اللي فيها continuous transfer للـ data وفيها short range data و audio streaming. إحنا قلنا خلاص الـ short range دي معانا لأن الـ Bluetooth بيدعم أصلاً الـ short range. و (high power consumption)
أوكي، تعالوا نتكلم عن الـ Personal Area Network، قلنا الـ Personal Area Network ثانية واحدة... تمام
وبعدين الـ radio بيبقى always on. علطول الـ wave شغالة، وعلطول الـ connection شغال لحد ما أنا أفصله، تمام؟ لأن فيه continuous data شغالة، وممكن كمان يكون محطوط في جهاز معين دايماً بيلقط signals من أجهزة تانية فهو شغال علطول. فده هيكون classic يعني.
خلينا نتكلم عن الـ Wave Propagation. طيب، زي ما قلنا إن في Waves ممكن تُمتص وWaves يحصلها Reflection وهكذا، الـ Radio waves مثلاً من الـ Waves اللي هي الـ Walls... يعني هي ضعيفة ولكن
تمام، هو عنده 79 channel (RF channel)، تمام؟ وكل الـ width بتاعها 1 ميجابايت. والـ Discover بـ 32 قناة. يعني إيه Discover؟ يعني القنوات اللي بيخليها مفتوحة لو حد تاني بيدور على Connection عشان يكتشفوا إن فيه قناة مفتوحة، فـ 32 بيخليهم متاحين للـ Discover والباقي بيبقى في نقل الداتا.
الحوائط ممكن تعدي، فهي إيه بتعدي أهو. طيب الmicrowave هي بتبقى بتعتمد على إيه؟ بتعتمد على الـ vibrate بتاع الـ objects والكلام ده، بتـ interact يعني عن طريقها، وبعد كدا هي شكل الامتصاص بتاعها بيكون إنها بتولد..
تمام، هو up to 50 meters، تمام؟ وبيستخدم الـ peer-to-peer topology. يعني إيه؟ يعني بينقل الداتا من جهاز لجهاز، جهازين بس يعني. High developer cost، ده بيكلف أعلى من الـ low energy، اللي هو النوع التاني بتاع الbleutooth
حرارة ولكن ما بيحصلهاش.. ما بتعديش من الحوائط، ما بيحصلهاش absorption في الحوائط أو في الـ blog يعني مش بتمتص. تمام؟ الـ visible light، الـ visible light بيـ interact إزاي؟ عن طريق electrons في الـ atoms اللي هي الذرات، وبيحصل له الـ main interaction يا بتُمتص يا بتـ scatter
وممكن في بعض الأحيان فيه حاجات تانية أرخص ممكن تكلف 10 دولار. تمام؟ ده اللي هو 20 ألف أو 30 ألف يعني.. رقم كبير. تمام، هنشوف بعد كده إزاي الـ Low Energy فرقت قد إيه في التكاليف دي.
"مش بتمتص تمام، فدلوقتي هي بتمتص من الحائط؟ لأ. جميل، الـ X-ray بقى، الـ X-ray بتعدي من الحوائط تمام، through الحوائط وكمان الـ skin الجلد بتاعنا، ده السبب اللي إحنا بنستخدمها علشانه بنعمل لما تروح تعمل أشعة أو كلام ده فبينصور العظم إزاي؟ فلازم تكون signals أو waves هي بتعدي.
طيب نيجي بقى عند الـ... طيب كل حاجة أكيد ليها استخدامات. إيه شكل الـ communication في الـ... شكل الـ Network اللي بتكون موجودة، الـ communication network؟ طيب الـ communication network فيه شكلين من الـ Network: يا إما.
بتعدي.. بتعدي من خلالنا، تمام؟ دي حاجة. أصل إحنا بنتعرض يعني لو ركزنا إحنا بنتعرض لـ waves كتير، قلنا حاجات زي الـ devices اللي بتبقى حوالينا زي الـ routers زي أياً كان مثلاً الميكروويف، كل الحاجات دي بتطلع signals، إحنا مش بنتأثر بالـ signals دي ممكن تبقى هي
يكون أنا عندي حاجة اسمها Piconet Network. الـ Piconet دي إني بيبقى عندي جهاز واحد هو اللي بيكون الـ Master وبنسميه "M"، والجهاز ده بيكنكت بقى مع أجهزة تانية. هما بس اللي Connected معاه، والأجهزة التانية دي بيبقى اسمها Slaves
هي طاقة بـ Reflect وفي نفس الوقت مش بـ Pass تمام؟ بنسبة كبيرة يعني. طيب نيجي عند الـ Microwave.. أوكي دي نفس الحكاية لما اتكلمنا عنها إن ليه إحنا مش بـ Cook زي الحاجات اللي بتدخل في الـ Microwave.
تمام، بيبقى في ال دي (Network) أنا بيبقى عندي واحد Master بس، والـ Master ده بيكنكت بحد أقصى لحد 7 Slaves. سبعة Slaves، أوكيه؟ بياخد لحد 7 Slaves، جهازين أو أكتر... تمام. طيب الـ 7 Slaves دول هل في نفس الوقت كلهم بينقلوا الداتا؟ لا، هو بينظم مبيبقاش فيه Collision. يعني من مميزاته أصلاً إنه مفيش Collision عشان كده هو بـ assign
تمام، الـ Microwave ovens بـ Use hundreds of watts، Highly concentrated energy trapped in metal box تمام؟ والـ WiFi routers كمان Tiny amounts of power، فبالتالي الحاجات دي الـ Power level بيعتمد على قوة التأثير علينا إحنا كبشر
(Specific time) لكل واحد. كل واحد بيبقى عنده وقت والوقت ده  (non-overlapping) مع أي Slave تاني. وعنده إنه ممكن يخلي لحد 255 جهاز Slave يكونوا Inactive. يعني هو بس حاجزهم وهما مش شغالين، ولما يحتاج بيخليهم Active ويكنكت عليهم. لكن أقصى عدد Active هو سبعة
دي point مش موجودة بشكل direct في الـ lecture بس هي كاستنتاج لطيف من.. وكانت الدكتورة برضو أشارت ليها من موضوع الـ waves ده. تمام؟ نيجي بقى عند الفرق ما بين الـ 2.4 GHZ والـ 5 GHZ  اللي بقالهم معانا كتير جداً زي ما اتكلمنا إن إحنا.
Active سبعة، والـ Active سبعة بيعملهم جدول (Schedule) بقى. النوع التاني من الـ Network هو الـ Scatternet. الـ Scatternet الفرق بينها وبين الـ Piconet إنها أكتر.. يعني ممكن تكون أكتر من Piconet واحدة. الميزة فيها إني ممكن يكون عندي أكتر من Master
الـ 2.4 GHZ بتعدي.. بتعدي، فcover منطقة كبيرة، الcoverage بتاعها عالي. الـ 5 GHZ هي fast بس الcoverage بتاعها قليل، ده بسبب إيه؟ قلنا إن ده راجع للـ wavelength والـ amplitude والـ properties التانية بتاعتها، تلاقي هنا الـ wavelength بتاعة الـ 2.4 GHZ .
طيب الحاجة دي ممكن نحتاجها ليه؟ هي شكلها عامل إزاي مثلاً؟ أنا عندي هنا Master، وفي هنا أنا عندي مثلاً Piconet تانية. تمام، فبدل ما يكون عندي Piconet تانية
12.5  لكن هنا الضعف حرفياً، فهنا ديت الـ throughput بتاعها أعلى لكن الcoverage بتاعها أقل، وده كمان الـ interference بتاعها أقل. هنا الـ interference بتاعها عالي، هنا بتـ كفرج الـ long range اللي هي الـ indoor مثلاً ممكن مبنى أو الشقة يعني مثلاً أنت لو قاعد في أوضة تانية الtelephone هيلقط wi-fi عادي وهيشغل wi-fi
ممكن دي أو واحدة من دول مثلاً تشترك إنها تبقى Slave مع دي. هي Slave هنا، فممكن تشترك وتبقى دي ودي Master و Slave تمام؟ فبالتالي ممكن دي تشتغل كـ... ثانية واحدة مش دي.. نرجع تاني
لكن ديت الـ short range بتاعها زي الbleutooth، لو بتـ connect على device تاني عن طريق الbleutoothورحت مكان بعيد شوية أو رحت الأوضة التانية مثلاً فهو خلاص هيـ.. ممكن يقطع الـ connection أصلاً. تمام؟ فهي قلنا اتكلمنا عن الـ Personal Area Network، من أمثلة الـ Personal Area Network اللي هنتكلم عليهم النهارده.
أنا عندي مثلاً network هنا، آدي الـ Master وآدي كده devices، ففي واحدة بقى من الـ Masters بتضحي وبـ act كـ Master وكـ slave في نفس الوقت، زي مثلاً دي.
هما الـ Infra.. الـ Infrared تمام؟ اللي هو الـ Wireless Communication، والـ RFID اللي هي Radio Frequency Identification والـ NFC اللي هي Near Field Communication. طيب نيجي عند الـ Infrared، الـ Infrared.
بتروح تـ interact مع دي، تمام فـ الـ Master دي شايفة إن دي slave وهي Master بالنسبة للأجهزة التانية اللي عندها. ده ليه؟ ليه ممكن أحتاج حاجة زي كدة؟ زي ما قلنا إن الـ range بتاعي أقصى حاجة أقصى حاجة ممكن توصل ليها هي 50 متر، فأنا عايز range أكبر.
هي Light تمام؟ الفكرة إن الـ Light ده هو مش زي الـ Visible Light عادي، هو بيكون الـ Wavelength بتاعه أكبر، هو عبارة عن Electromagnetic Radiation ولكن الـ Wave.. Electromagnetic Wave يعني ولكن الـ Length بتاعها الـ Wavelength بيكون بتاعها أكبر، بنستخدمها في الـ Short Range Communication.
فبالتالي هبدأ أجيب node من هنا اللي بتـ act كـ Master وأخليها slave وأوصلها مع range تاني، ممكن مثلاً كده أمد المساحة بتاعتي لـ 80 متر، ممكن هي بقى تبقى مسؤولة الـ point دي تبقى مسؤولة بقى إنها تنقل الـ data من الـ devices دي للـ Master ده، لو حد مثلاً من الـ device ده عايز يكلم الـ Master ده.
زي مثلاً لو.. يعني عارفين لما بوجه مثلاً Light معين للتليفزيون فبيغير القناة أو بيعلي ويوطي أياً كان، فدي ممكن تكون Example، زي مثلاً Two Devices بـ Interact مع بعض واحد بـ Receive الـ Signal يعني ممكن نشوف الـ Lecture Example، واحد بالـ Infrared Light بـ Send الـ Light وواحد بـ Receive.
تمام، ده كده الـ Piconet والـ Scatternet. أوكي، هنقفله. نيجي بقى لإزاي الحاجات دي بتـ communicate جوه مع بعضها، من ضمن الـ communication models الموجودة.
جميل؟ يطلع يعني واحد يستقبل. طيب الـ Frequency Range بتاعها من 300 لـ 400 THz والـ Bandwidth بتاعها قليل، معنى إن الـ Bandwidth بتاعها قليل يعني إيه؟ الـ Bandwidth قليل يعني نسبة الـ Data اللي بتتنقل قليلة أوي أو هو بينقل أصلاً Data قليلة جداً
واللي بيستخدمه by default بيستخدم الـ classic، يعني أنا لو مثلاً عايز أستخدم الـ classic عندي مثلاً في device فهلاقيه by default هو الـ frequency hopping spread spectrum. ده بيكون عبارة عن إيه؟ طيب، هو الفكرة بتاعته إنه عايز يتجنب الـ communication problems زي الـ interference.
يعني ممكن مثلاً ينقل.. يعني إحنا مثلاً لما بندوس على Remote فأنا بعلي فأنا بـ Send Signal مثلاً زي رقم، هو رقم واحد أو Data صغيرة جداً. طيب بتـ Send الـ Signal فبتعتبر Line to Line of Sight Communication ما بين حاجتين بس واحد بـ Send وواحد بـ Receive
والـ interception والـ hacking والكلام ده، فهو عايز يتجنب الـ interference وعايز يتجنب في نفس الوقت الـ hacking. تمام، لو أنا دايماً هفضل على channel واحدة، زي إن أنا مثلاً هكلم الـ device اللي هو الـ Master ده على channel 5، فلو الـ hacker عرف إن أنا خلاص بتكلم على channel 5، فخلاص هو هيدخل على channel 5 وهيشوف الـ data اللي مبعوتة.
بـ Receive، اسمها Line of Sight Communication تمام؟ هي الفكرة إن أنا بـ Send حاجة صغيرة جداً كمان هي علشان سريعة جداً من 300 GHz لـ 400 THz دي يعني 400 THz رقم كبير جداً Fast أوي سريع جداً لدرجة إن ممكن ميبقاش عايزة تعمل Modulation أصلاً مفيش Time إنها تعمل Modulation فبالتالي أنا عايزة Data قليلة أوي علشان تلحق تتنقل أو تلحق تواكب الـ Process دي يعني.
أو أياً كان سواء بقى audio سواء streaming أياً كان الـ data إيه، لكن فكرة الـ frequency hopping spread spectrum دي عملت حاجة؛ إن أنا مش بفضل ثابت في channel واحدة، لأ ده أنا بتحرك من channel للتانية تمام.
فبسبب ده إن الـ Data مش Encrypted فهي مش Secure ولكن هي يعني في أغلب الحالات هي لا داعي إنها تكون Secure يعني. كمان هي Short Range فلو حد عايز يـ Hack فلازم يكون قريب منها جداً فمحدش هيقدر يـ Hack بالسهولة دي يعني. Not Encrypted وDifficult to Hack علشان الـ Restrict Requirement فور Line of Sight.
كل شوية بتعمل hopping من مكان للتاني على حسب الـ unit of time اللي هي فيه دلوقتي، وعلى حسب المفروض هتروح أنهي channel. زي مثلاً هي في رقم 2 والله المفروض تروح channel 3، في رقم 4 المفروض تروح channel 7 وهكذا. طب إزاي عرفت إنها المفروض تروح لـ channel 7؟ هنا بقى بيجي دور function اسمها الـ pseudo random generator بتـ generate رقام عشوائية.
لازم تكون قريب جداً، بينها وLine of Sight عادي نفس الـ Line اللي بتطلع منه الـ Infrared Light. Okay؟ ده كدا الـ Infrared خلاص تمام. خلونا نكمل على نيجي بقا عند الـ RFID ده من أهم حاجات النهاردة.
للـ channel دي، يعني أنا عندي مثلاً 80 channel فبدي الـ 80 للـ function دي بتطلع لي رقم random وأخلي الـ device يـ connect على الـ channel الـ random التانية دي، زي مثلاً كل دقيقة كل دقيقتين كل 5 ثواني أياً كان، تمام. فهي بتبث radio signals عن طريق التغيير السريع للـ carrier frequency بين ترددات كتير ضمن spectrum كبير
يلا نخش بقا في أهم الـ Applications الموجودة يعني على موضوع الـ Waves والكلام ده، اللي هو الـ RFID وبعد كدا هنيجي للـ NFC بقا. طيب الـ RFID ده عبارة عن إيه؟ خلونا نقول يعني ممكن نشوف ده فين وبعد كدا نوضح بقا إيه اللي بيحصل
تمام، كل شوية بيغير الـ frequency بتاعه، الـ frequency اللي هـ... يعني مثلاً هو في range من الـ frequency فهو بيغير الـ range يعني اللي هيـ connect عليه. طيب، في الـ synchronization، إيه موضوع الـ synchronization ده؟ دلوقتي أنا كـ Master و slave، تو devices، device 1 و device 2 أياً كان
بنشوف ده إزاي زي مثلاً الحاجات اللي هي لما تيجي تـ Scan حاجة بس مش Barcode، هي مش Barcode ولكن هو بيبقى زي مثلاً أنت لما تيجي تـ Scan أو تدفع مثلاً فبتبص التليفون كدا علشان يـ Scan الـ..
فالجهاز الأول خلاص قرر إن ده ميعاده إنه خلاص يعمل hopping، ف (generate) رقم. طيب الجهاز التاني المفروض برضه يعمل hopping، الاتنين هما الاتنين يروحوا يعملوا hopping على نفس ال (channel) عشان يعرفوا يتكلموا تاني، فبالتالي يبقى فيه (synchronization) ما بين الاتنين، نفس الـ pseudo random generator function تبقى موجودة عند الtwo device.
الـ Scan مثلاً البطاقة بتاعتك أياً كان عشان تاخد الـ Data أو الكلام ده. فالفكرة إن بنـ Scan بس مش Barcode. تعالى نشوف مثلاً في هنا Examples أهي، زي الميدالية مثلاً دي بتـ Scan عشان نشوف الـ Information بتاع الـ دي حاجة منتشرة أوي نتشوف الـ Information بتاع الـ...
تمام، ويبدأ الـ master يـ determine الـ parameters اللي على أساسها هيحدد القناة اللي جاية إيه. تمام؟ سواء الـ parameter ده الوقت دلوقتي، الـ clock اللي هو فيها، الـ input say بيستخدم كمان حاجة اسمها الـ device address، الـ device address ده بيكون unique number، الـ Bluetooth device address بيكون رقم فريد لكل قناة فبالتالي بيطلعله..
الحيوان مثلاً، حاجات زي الملابس، الـ Stock، الحاجات اللي في المخزن أياً كان، لكن هي مش Barcode. ليه مش Barcode؟ الـ Barcode فرق، هي Image. الـ Image أنا باخدها وهي بطريقة معينة ببدا أحلل الـ Image دي عشان أشوف هي شايلة Data إيه. لكن ده مش Image، دي Wave
الـ random generator يحاكي يعني. تمام؟ الـ slave synchronization بيحصل عن طريق الـ learning، الـ slave بقى هيـ synchronize إنه يعرف الـ timing والـ parameters اللي على أساسها الـ master حدد الـ channel وهيـ generate وهيروح للـ channel hopping برضه. تمام؟ معنى كده..
ممكن نقول إن هي طريقة للـ Communication، هي الفرق إن هي بتكون أسرع من الـ Barcode. تمام؟ بسبب إن هي بتختلف الـ Frequencies بتاعتها، يعني أنا مش لازم أكون قريبة أوي، ممكن كمان أكون بعيدة شوية وتلقط الـ Signal مثلاً. أنتوا عارفين الأجهزة اللي هي بتكون مثلاً في الشارع فهي عايزة تعمل Detect لحاجة معينة لما تقرب منها أو مثلاً تـ Collect information.
إنه يعني... لو تشوفوا بيعمل hopping كل شوية. هل معنى كده إنه مش هيحصل overlap (تداخل) خالص؟ لأ، هيحصل overlap، ممكن، هو إحنا بنقلل على قد ما نقدر بس ممكن في حالات نادرة جداً يحصل overlap. عشان نحسن الموضوع ده، فيه communication model جديد اسمه adaptive frequency hopping، الفكرة بقى في ده.
أهم حاجة تقرب منها تبقى ثابتة في مكانها فبالتالي هي مش لازم تقرب جداً. يعني يكون الـ Frequency بتاعتها عالية شوية فتقدر تاخد الـ Data دي. تمام؟ الـ Application والـ Access control لو بعمل Access بحاجة، الـ Inventory management مثلاً في الـ Retail. تمام؟ في عندي تلات أنواع من الـ Frequencies في الـ RFID.
إنه بيعمل إيه؟ زي ما بنقول إنه بيراقب القناة. تمام؟ الـ master بيراقب  (signal quality)، الـ packet errors أو (interference statistics) على الـ 79 channel. هو بيراقب الـ 79 قناة ويشوف لو فيه تداخل حصل في أنهي قناة، فيه error حصل، فيه أي حاجة حصلت في القناة دي، ي (mark) على القناة إنها  (not available).
الـ Radio Frequency Identification في تلات أنواع: الـ Low Frequency، الـ High Frequency، الـ Ultra Frequency. الـ Low Frequency ممكن نشوفها إزاي؟ مثلاً لو هتحط البطاقة بتاعتك وهتـ Scan بالتليفون تطلع مثلاً الـ Information. أو مثلاً الـ ID بتاعة لو حد داخل في مكان فبيـ Scan عشان ياخد منه الـ ID بتاعه
إنها بقت مينفعش أي حد يعمل hopping عليها أو حد يبدأ يـ connect عليها. تمام؟ يبدأ أهو يعمل بعد كده يراقب وبعد كده يعمل bitmask للقناة رقم 79 بيعملهم mask، طب ده أكيد بعد ما يعملهم mask هو محتاج يعرف الـ mask بتاعها الـ bits بتاعتها واحد مثلاً ولا زيرو
تمام؟ الـ High Frequency دي بتستخدم للـ Smart cards والـ Badges. في عندي بقى الـ Ultra High Frequency، دي للـ Longer range applications زي في الـ Inventory tracking. يعني ممكن مثلاً البضائع تعدي ويكون في جهاز ثابت (Fixed device) مثلاً مش لازم تكون قريبة جداً والجهاز الثابت ده بيـ..
فهيخزنهم عنده في map. تمام؟ وبعد كده لما ييجي يـ generate الـ next frequency، الـ next channel اللي المفروض يعمل hopping عليها، الـ function دي بقى هتاخد الـ map، تاخد في اعتبارها الـ map عشان لما تطلع random generator متطلعش رقم من الحاجات اللي بقت.
...Detect الـ ID أو الـ Information بتاعتها. Okay، فالفكرة إن كل واحدة الـ Range بتاعها قد إيه. تقدر تعمل Coverage من مساحة قد إيه. تمام؟ الـ Data transfer عادةً بيكون Low وده كافي للـ Identification والـ Tracking. تمام؟ الـ Data transfer برضه، يعني ممكن نقول الـ Bandwidth أو ممكن نقول الـ Throughput مثلاً، هو Low برضه.
طلّع الحاجات اللي مثلاً بـ 1 بس مش الحاجات اللي بـ 0، سِيء الحاجات اللي بـ 0 فبالتالي تعمل skip للـ channels اللي مينفعش نعمل hopping عليها. بعد كده بقى الـ slave برضه عشان ما هو الـ slave عنده نفس الـ generate function فياخد الـ parameters وعشان يعمل synchronization ويطلع بيبعتله برضه الـ map
ليه Low؟ لأن أنا مش بعمل Transfer لـ Data كتير برضه. فكرة... إن الـ Infrared هي مش Encrypted عشان هي Low. لكن أنا هنا لو رحت... إحنا عندنا برضه هنا هي Low، بس أنا لو رحت للـ High، للـ Ultra High Frequency أو لو في..
اللي فيها الـ bitmasks بتاعة الـ channels عشان يـ generate القناة اللي المفروض يروحلها يعني. تمام؟ ده كده الـ adaptive frequency. طيب تعالوا نروح للـ... دلوقتي إحنا خدنا إيه؟ الـ classic خلاص خلصنا الـ classic، تعالوا نروح للـ low energy.
يعني مثلاً لو حطيت Data زيادة فهي ممكن تكون Encrypted. فهي لو في حالة مثلاً Scan الـ ID بس فهي ممكن تكون Not encrypted. وفي حالات تانية مثلاً في الـ High level أو الـ Ultra مثلاً، بتكون Encrypted. تمام؟ في عندي Two types من الـ RFID.
الـ Low energy، اختصارهم كانوا عايزين إيه؟ زي ما شفنا، التكلفة (cost) عالية جداً في حاجات بيوصل سعرها لـ 20,000 dollar فالموضوع مش efficient  وهما ممكن يبقوا محتاجينها في حاجات بسيطة. ده هيخلي فيه مثلاً صعوبة إنهم يطبقوها في scale صغير، في أجهزة صغيرة زي ما إحنا شايفين يعني الساعات، لو هي بتكلف السعر ده فهي مش هتتحط في الساعة، لازم نشوف حاجة.
الـ Two types دولات هما إيه؟ الـ Active والـ Passive. يعني إيه Active؟ من المعنى، الـ Active معناها إن إحنا هنعرف إن هي هتفضل Active، يعني مش هتنام. إن هي مثلاً هتـ Send الـ Signal بشكل مستمر. تمام؟ ده بسبب إيه؟ بسبب إن هي بيبقى عندها Battery، فالـ Battery دي بتديها الـ Energy اللازمة إن هي تـ Send الـ Signal دي. يعني مش محتاجة أعمل لها.
تmatch الـ efficiency اللي إحنا عايزينها، مش محتاجة efficiency كتير، وفي نفس الوقت ممعنديش streaming data، فبالتالي عملوا الـ Low Energy، التايب (type) التاني ده، ده بيقلل إيه؟ هو الهدف بتاعه إنه يـ reduce الـ power consumption، فبالتالي أنا مش محتاجة power كتير، بيقلل الـ cost، تمام؟
Activation مثلاً. الـ RF signals ممكن يلقطها الـ RFID reader في نطاق الـ Tag's broadcast range. ده معناه إيه؟ معظم الـ Tags نطاق الـ Broadcast بتاعها... الـ Tag دي بتعبر عن الـ Source اللي جاي منه الـ RF signal.
دي دي أهم حاجتين بيفرقوا عن الـ classic: الـ performance بتاعته، الـ lower power consumption، more efficient radio usage، بيستخدم الـ radio signals بشكل efficient on time، يعني معناها في الوقت اللي هو محتاجه بس. فبالتالي هو
تمام، فمثلاً هي مش هتفضل... يعني Active مش معناها إنها Online طول الوقت. هي ممكن تعمل Broadcast على Certain intervals. مثلاً كل دقيقة بتبث Signal معينة عليها Data معينة، ويبدأ الـ RFID reader ده لو هو ضمن الـ Range اللي بيسمح له إنه يقرأ الـ Signal دي، بيلقط الـ Range.
Say إن مثلاً بيعمل advertising كل 3 دقائق إنه شغال، أو بيعمل advertising إنه مثلاً عايز يـ connect دلوقتي عشان يبعت data وهيفصل تاني. فبالتالي ده مش بيستخدم power كتير، فالبطارية بتقعد أكتر يعني
عندنا الـ Active RFID، وده بيوضح الفرق بينها وبين الـ Barcode. الـ Barcode لازم أقرب وأعمل Scan والكلام ده، لكن في الـ Active لو أنا موجود في الـ Broadcast field، في الـ Range بتاع الـ Broadcast ده، فأنا هاخد الـ Signal. طيب الـ Passive؟ الـ Passive ما عندهاش Power Resource. وكمان الـ Passive هي حاجة زي الـ Slice أو حاجة تكون صغيرة جداً
maximum data range to megabytes أو نقول to megabytes تمام الchannels عنده 40 channel ويستخدم منهم بس هو بيستخدم هنقولها تاني جاد دمه هو بيستخدم من الـ 40 دول بيستخدم 3 بس للـ Advertising
دي صورة ليها. ده شكل الـ Active، وده شكل الـ Passive RFID. الـ Passive بيكون عبارة عن حاجة زي Small chip صغيرة جداً، وكمان في حاجة اسمها Antenna
يعني إيه advertising؟ عشان يقول إنه عايز يـ connect أو عشان يـ search على connection device. الerang بتاعها، الrang eبتاعها هي ممكن الrange بتاعها بيوصل إنه ساعات بيكون أحسن من الـ classic، بيوصل إنه up to 1 kilometer، لكن الـ classic الـ maximum..
الـ Antenna دي عبارة عن إيه؟ هي بتولد Electromagnetic field. فمن الـ Electromagnetic field... الـ Emitter اللي بيقرأ الـ Field ده اللي هو الـ Reader، بيبدأ وبعدين الـ Tag
50 meter ، تمام؟ فالrang بتاعه أحسن. بـ support الـ peer-to-peer، وبـ support الـ many-to-one، وبـ support الـ one-to-many، وبـ support الـ many-to-many. يعني مش بس device واحد اللي ممكن يـ connect، ممكن أكونكت زي على أكتر من... يـ connect من one-to-many، من واحد لـ slaves..
لما يقرب لها الـ Reader، الـ Electromagnetic field بيولد Energy علشان يبعت الـ Signal. فممكن نقول إنها ما عندهاش Internal power source وبتكون Powered by the reader. هي بتتكون من Antenna و Small chip للـ Processing والـ Memory. طريقة العمل إن الـ Emitter والـ Tag بيكونوا Coupled via an electromagnetic field.
تمام، الcost بتاعته قلّت بكتير، maximum maximum cost ممكن توصل... أو مش max... يعني الموجود دلوقتي إن الcost ممكن توصل 10 dollar، وفي ساعات ممكن تبقى بس 1 dollar  أو 2 dollar يعني. فالنوع ده من الـ.
تمام، والـ Electromagnetic field ده هو اللي هيولد الـ Energy اللازمة لنقل الـ Power دي. الـ Tag بتستخدم الـ Induced current ده للـ Power. الـ Limitations: الـ Inductive coupling عبر الهواء Very inefficient، مما بيؤدي لـ Limited reading range جداً، وبيتأثر بـ External factors.
الbluetooth هو مناسب أكتر للساعات، مناسب أكتر للأجهزة اللي هي السماعات مثلاً (السماعات كانت تانية بس أياً كان)، هو مناسب للحاجات اللي أنا مش محتاج أكون connected عليها أو ببعت عليها data دايماً. هو ممكن مثلاً لو أنا connected على الساعة فممكن الساعة عشان تبلغني إنها لسة connected مثلاً كل فترة معينة تبعت signal إنها لسة connected وترجع مثلاً
تمام,كدة الفرق بين الـ Active والـ Passive: الـ Active بتبث Broadcast كل فترة معينة، بتكون شغالة ومش محتاجة... عندها Power resource ومش محتاجة Activation. لكن الـ Passive بيتعمل لها Activation عن طريق الـ Reader. الـ Reader بيتفاعل مع الـ Electromagnetic field اللي موجود في الـ Passive.
يفصل تاني. تمام؟ دلوقتي هتكلم عن الـ communication model، إزاي بقى بيحصل الـ connection ودور الأجهزة والكلام ده، الـ roles: فأنا عندي دورين من الأجهزة: Peripheral. الـ Peripheral ده اللي هو إيه؟ ده الـ small device، ده الـ sensor، ده الساعة، ده الـ IoT device مثلاً، وهو بيعمل إيه؟ هو اللي بيعمل advertise لنفسه. تمام؟ يعني لما say لما بفتح الـ..
في الـ Tag بتاعتها. ده كدة الـ RFID. نيجي عند الـ NFC، أول حاجة نفهمها إنه Type من الـ RFID لكن فيه شوية Additional features
الbleutooth في الساعة فهي كدة بتعلن إن هي متاحة إن مثلاً الphone يعمل عليها connect، تمام؟ هي بتـ advertise نفسها على الـ 3 channels. تمام؟ وبعد كدة في ال (Central) بقى، السنترال ده الجهاز بقى اللي هو هي (connect) عليها هو اللي هيلقط إن هي دلوقتي مثلاً.
تمام، هي بتشتغل عند 13 MHz، والـ 13 MHz نلاحظ إنها في مستوى الـ High Frequency. هي في النص ما بين الـ Low والـ Ultra High. ده نوع الـ HF للـ RFID، وده هو الـ NFC. أساساً الـ Design معمول للـ Very close range communication
مفتوحة للconnection، فيبدأ يـconnect عليها، بيعمل scan للـ advertising peripherals ويبدأ يـinitiate الconnection مع الـ peripheral ده، اللي هو الـ central زي الmobile أو الtablet. الـ establishment بيحصل إزاي؟ أول حاجة الـ peripheral بيـadvertise على 3  (channels) اللي هما 37 و38 و39.
هي مصممة مخصوص للمساحات الصغيرة. بنشوف دي دايماً في الحاجات اللي فيها إن أنت لما بتروح تدفع مثلاً بتحط التليفون بتاعك بيعمل Scan لحاجة معينة فتدفع. تحط الـ Phone فياخد الـ Card information مثلاً عشان يدفع، فبنشوف الحاجات دي، هي Very safe.
37، وبعد كدة ا (packet) دي بيبدأ يـestablish باكت معينة فيها الdata بتاعته، هو مين، والـ ID بتاعته إيه، وإيه الحاجة اللي بيقدمها، زي مثلاً إنه يبعت data معينة أو (signal) معينة. بعد كدة الخطوة التانية، الـ central بقى هو اللي هيعمل scan دلوقتي، هيدور على أي حد بيعمل advertise
Secure تمام، عشان كدة إحنا بنستخدمها أغلب الحاجات في الـ Payment يعني الاستخدامات من ضمن الـ Application البارزة فيها. تمام؟ عشان فيها Data encryption طبعاً و Sophistication، يعني إيه Sophistication؟ إن هي بتعمل Process أكتر على الـ Data ومش بس
يعمل (connection)، هو بيدور على الـ 3 channels دول، تمام؟ هيبدأ يعمل يفتح connection ويبعت connection request للـ advertiser. أول ما الـ advertiser ده يقبل الconnection ، يبدأ بقى دلوقتي يديله شوية parameters، ال (packet) اللي فيها شوية parameters زي الـ connection interval، هو هيـconnect لمدة قد إيه.
كمان مش بس إن هي ممكن، ممكن تعمل Send و Receive. يعني الـ Phone ممكن يعمل Scan لحاجة ويعمل Receive وممكن يعمل Send مثلاً، ممكن يكون في Communication ما بين الاتنين لو ده يستدعي مثلاً في Tokens أو حاجة لما بتيجي تعمل Scan للـ Payment card.
الlatency، الـ slave latency دي مثلاً عدد الـ intervals اللي الـ peripheral ممكن ي (skip) عشان يوفر (power). يعني هو ممكن يفضل off لحد كام interval، لنفترض إني مش هبعت data من الـ interval رقم 3 لحد رقم 7، هو مش مضطر إنه يكون on في الفترة دي.
اوكي,الـ Application زي ما قلنا Digital wallets، الـ Smart posters مثلاً، دي تبقى حلوة أوي لو شركة فهي حاطة زي Logo كدة وأنت بتعمل Scan للـ Logo يفتح لك الـ Website. أو ممكن مثلاً تجيب NFC وتخليها مثلاً لما تعمل لها Scan بالـ Phone
ال (connection timeout)، اللي هو ال (maximum time) للـ communication قبل ال (disconnect). آخر حاجة بعتها وبعد كده disconnect، هيفضل مستني قد إيه لحد ما هو كمان يقفل الconnection. بعد كدة الـ peripheral بيحول لل data channel، خلاص بعد ما أخد الpacket دي وعرف المعلومات اللي محتاج يعرفها، هينقله بقى على data channelل غير 37، 38، 39 عشان يبعت الdata
تمام لما تعملها Scan بالـ Phone يشغل Wi-Fi، يشغل Bluetooth، يظبط المنبه هكذا. الـ Data types، في الـ Data types stored in NFC tag دي الـ Data type اللي أنا ممكن أخزنها، يعني ممكن أخزن Text.
ال (data communication) بتحصل إزاي؟ زي ما قلنا عنده 40 channel و 3 منهم advertise، بعد ما يعمل establish، الـ central والـ peripheral هيعملوا hopping على الـ 37 channel التانيين باستخدام ال (function). وكمان من مميزات الـ.
تفتح URL أو Site، الـ Contact Information مثلاً Number، Email address، Geolocation بتاع مكان معين، Wi-Fi، Bluetooth pairing information لو أنا عايزة أشغل Bluetooth مثلاً، لو أنا عايزة أعمل Launch application معينة زي لما أعمل Scan يفتح لي Application معينة، Payment information، دي أنواع الـ Data types اللي ممكن تكون موجودة.
ال (low energy) إنه بيستخدم الـ  model communication بتاعه، بيستخدم الـ adaptive frequency hopping، فدي برضه من المميزات بتاعته، وبالتالي مفيش collision ممكن يحصل عليه أبداً
الـ NFC uses in phones، الـ Phone اللي هي بتقرأ الـ NFC بـ Default في الـ Android والـ iPhone 14 فيما فوق يعني، دي بتعمل Read automatically. لكن الحاجات اللي قبل كدة ممكن تستدعي إننا ننزل Third party. لو أنا عايزة أعمل Write بقى للـ NFC tag وأكتب بقى الـ Script اللي هيحصل وأكتب إيه اللي هيحصل فبنستخدم Tools اسمها.
الـ slave latency allows a referral to skip number of intervals زي ما قلنا، الـ slave latency دي بتسمحله                skip number قد إيه من الـ intervals. نيجي بقى لجزء android، الandroid فيه كذا concept زي الـ functional programming وكمان الdatabase وإزاي ن (connect) على الdatabase
NFC Tools أو NXP TagWriter عشان أكتب عليها يعني. دي مقارنة بسيطة وفي ممكن حاجة نقولها هنا مثلاً الـ Cost إن الـ Cost بتاعة الـ NFC والـ RFID في الـ Passive.
الdatabase ، يعني إزاي الdata بتتخزن في الdatabase في أandroid . تمام؟ أول حاجة هو بيقولي إن دايماً أي حاجة بتكتب هي عبارة عن expression والـ expression ده ليه value، سواء كان statement، سواء كانت function، فالـ function دي بترجع value معينة، حتى لو الـ function دي مش بترجع value فهي عبارة عن حاجة اسمها unit أو kotlin.unit
أقل بكتير من الـ Cost بتاعة الـ NFC لأن هي حاجة صغيرة جداً، ده بالنسبة للـ NFC. لكن الـ Cost بتاعة الـ Active طبعاً أعلى، الـ Active عشان فيها Power source. فممكن لما تيجي تقارن ساعتها تقارن NFC بالـ Passive، بس الـ Passive ممكن يكون Not encrypted ممكن يكون Not secure لكن الـ NFC هو Secure أكتر
وفي الآخر هي data type، بتتحسب كأنها value، إن هي الـ data type اللي بتعبر عن anything doesn't have a meaning. تمام؟ فهي ممكن ترجع وممكن مترجعش حاجة، فهترجع الـ kotlin.unit دي. تمام، فهي كل حاجة عبارة عن expression
الـ Cost دي الـ Tags، دي سعر الـ Tags. الـ Readers هنا، الـ Readers هنا الـ Cost بتاعتها، زي لو بصينا في الـ Basic ولو بصينا هنا في الـ NFC reader هنلاقي الـ NFC reader الـ Cost بتاعته أقل بكتير، غالباً عن طريق إن أنا زي الـ Bluetooth أو USB أو أياً كان.
بعد كده عندنا الـ First class function. الـ First class function دي هي إيه؟ هي إن أنا ممكن أخزن في الـ variables وفي الـ data structure فنكشن (function). يعني function ممكن تتخزن في variable أو في data structure
تمام، وبالنسبة للـ Default فإن أغلب الموبايلات بتـ Support الموضوع ده، فممكن مش هتحتاج أصلاً. أوكي، كدة إحنا خلصنا الـ Lecture بتاعتنا، خلينا نشوف جزء الـ Java، الدكتورة منزلة Two files نقدر نبص عليهم، بس أنا هقول الحاجات اللي قالتها في المحاضرة وقالت إنها مهمة، بس هي قالت برضه بصوا على باقي الـ PDFs
Function، أو إن أنا كمان أبعتها لـ function تانية وساعتها الـ function التانية اللي بتاخد الـ function دي بيبقى اسمها higher order function، أو إن أنا أعملها return، أعمل الـ function دي return (لو first class) أعملها return من higher order function. تمام؟ أوكي، ممكن كمان أعمل create لـ built-in function باستخدام.
باقي الـ Two files هم دول، واحد فيه الـ OOP with Kotlin، والتاني فيه الـ Basic fundamentals عن Kotlin، المفروض نبص عليهم. أنا هراجع معاكم بس الحاجات اللي الدكتورة ركزت عليها.
مستخدمة، طب ده بيحصل إزاي؟ أو هي عبارة عن إيه؟ بنكتب اسم variable وبعد كده الـ expression بتاعي اللي هو بيعبر كأنه function. وبعد كده أبدأ أنادي الـ function دي، بعملها call أهو كأنها built-in function، بما إنها بتاخد data type واحد، والـ data type ده النوع بتاعه int.
ممكن تبصوا على الباقي برضه احتياطياً. نيجي عند حاجة الدكتورة نبهت عليها وهي الـ Type systems. الـ Type systems يعني إيه؟ أنا عندي نوعين من اللغات: Dynamically typed language و Statically typed language. هنشوف الفرق ده أوي لما نقرن بين الـ Python والـ C++
وبتعمل operation معينة وبترجع الـ variable ده over 2. تمام؟ فنوع الـ function ده اسمه.. أو عندي نوع من الـ function اسمه Lambda functions. الـ Lambda functions دي هي عبارة عن إيه؟ هي بـ create anonymous function، تمام؟ يعني الـ anonymous function دي حرفياً هي function أنا just بديها name في الـ scope بتاعي، هي anonymous بالنسبة لـ out of scope، say لو أنا بعرف الـ function دي جوة function تانية فـ.
في الـ Python أنا بكتب الـ Variable والـ Value بتاعته أياً كانت، وعادي بشتغل الكود كله عادي، وممكن الـ Value دي تكون String وأنا بتعامل معاها في الـ Function كأنها Integer مثلاً، ومش هيحصل Compile error ولا أي حاجة، لكن لما ييجي يـ Run هيحصل Exception لأن الـ Data type مختلفة.
فيبقى برة.. لو جيت في أي function فأنا مش.. برة الـ scope ده فأنا مش هشوفها. تمام؟ بعرفها إزاي؟ بنكتب الاسم اللي أنا عايزاه، وبعد كده الـ data type اللي هي بتاخده، وبعد كده الـ data type اللي هي بتعمله return. تمام؟ و say لو أنا كان data type واحد فأنا ممكن..
عندنا أنواع مختلفة، الـ Dynamic type يعني أنا بـ Detect الـ Type في الـ Runtime، لما الـ Application يـ Run، مش وقت الـ Compile ولا الـ Build، زي لغات الـ Python والـ JavaScript. أما الـ Static type، فأنا بديها Type معين، وأنا ملزمة خلال الكود بتاعي إن أي تعامل يكون Integer مثلاً أو String
مش شرط إن أنا أسمي الـ data type، يعني المفروض نسميه زي هنا مثلاً، لا أنا مش شرط إن أنا أسميه ممكن أعمله call بـ it. ونستخدم it، دي زي keyword كده بتعبر عن الـ data type أو الـ argument الوحيد، بتعبر عن الـ argument الوحيد اللي موجود عندي في الـ function. تمام؟ نيجي عند الـ Higher order function.
تمام، فدي طبعاً لو معملتش كدة هيديني Compile error. لكن في الـ Static type الموضوع بيكون Safe أكتر، وكمان حلو في الـ Debugging. لما ييجي مثلاً يحصل Exception وأحب أعرف هو جاي منين أو الـ Data دي جاية منين، هقدر أتوقعها لأني عارفة الـ Type وهعرف أتعامل لو الـ Data جت بشكل مختلف.
الـ Higher order function هو نوع من الـ functions بياخد function تانية كـ argument، أو بيـ return function. زي إن مثلاً.. فده بياخد function أهو، أنا حرفياً معرفة جوة function إن الـ function دي هي بتاخد string وبترجع string، فممكن أباصي
لأ هقدر أعمل عليها Validate لأني عارفة الـ Type بتاعها إيه. وفي حاجة اسمها Strong typed، غالباً بنشير للـ Strong type والـ Weak type. الـ Strong type هي اللي بيكون فيها Strict type rules بتـ Enforce في الـ Compile time.
الـ function. طيب إزاي بعمل ده؟ يعني say تعالوا نكتب مثلاً إن أنا عندي.. إن أنا عايزة أنادي الـ function دي، تمام؟ أنا دلوقتي عندي lambda function أهي، دي كدة مثلاً اللي هي بتاخد string.
الـ Rules دي لو ماتنفذتش مش هيحصل الـ Build أصلاً، زي الـ Java والـ C++ والـ Kotlin. الـ Weak type زي ما قلنا في الـ JavaScript، أنا ممكن أكتب Type مختلف أو أعمل Assign لـ Value مختلفة وأتعامل معاها كـ String أو Object مختلف خالص، فمش هيحصل Error في الـ Compile time لكن هيحصل في الـ Runtime. الفكرة إن لما يكون فيه Rules بتـ Enforce عند الـ Compile time دي بنسميها Strong type
وبترجع string، وأقوله إن الـ string ده والله هو الـ parameter الوحيد مثلاً "Hi". تمام؟ وبعد كده لو أنا عايزة أنادي الـ function دي
تمام? لكن اللي بنعمل لها Detect بس في الـ Runtime هي الـ Weak type. طبعاً الـ Kotlin هي Strong and statically typed language، وعندها Types، وبرضه عندها زي الـ C++ خاصية الـ Auto اللي هي في كوتلن اسمها Type inference.وAuto اللي هي
فمثلاً encode.. أبدأ أباصي ليها دي مثلاً أي حاجة، وأبدأ أديها الـ function بتاعتي، طب أعرفها إزاي إن الـ argument ده.. أنا كاتبة الكود ده، هكتب إزاي الـ function؟ هكتبها كده علشان..
الـ Var يعني دي موجودة هنا. الـ Var keyword بتستخدم للـ Type declaration، ممكن أعمل Declaration بالطريقة دي: أكتب اسم الـ Variable وبعدين Colon وبعدين الـ Data type بتاعتي. لو أنا عايزة أخليه يـ Detect الـ Type by default بكتب كلمة Var.
الـ Suspend function دي علشان الـ Compiler يعرف إن دي Function مش حاجة أنا بعملها Call، مش بعمل Call وعايزة نتيجة، لا ده أنا هـ Pass الـ Function دي بالـ Reference يعني، تمام؟ اللي هو الـ Colon Colon operator ده.
نيجي عند حاجة مهمة تانية اللي هي الـ Mutability، يعني إيه Mutability؟ يعني إيه أقول الـ Variable ده أو الـ Object ده هو Mutable أو Immutable؟ Immutable يعني غير قابل للتغيير، و Mutable يعني قابل للتغيير. Mutable يعني أنا ممكن أغيره بعد كدة، يعني معناه إنه مش Constant.
طيب الـ Higher function برضو، لو أنا عايزة Return function معينة. طيب، نيجي عند الداتا بيز، الداتا بيز باستخدام Android Room، عموماً إيه هي الـ Room Database؟ الـ Room Database هي Library بتخليني Communicate مع SQL.
لو أنا عايزة أعرف حاجة Constant بعرفها عن طريق Val بدل Var تمام، ودي ماقدرش إن أنا أغير الـ Value بتاعتها بعد كدة خالص. الفكرة هنا كمان إن... هل دي حاجة كويسة؟ هي حاجة كويسة إن هي بتخليني إني ماعرفش أغير، سي إن أنا لو هعمل Send للـ Data لمثلاً Application تاني فأنا مش عايزاه يغير في الـ Data دي
الـ SQLite تمام؟ database SQLite علشان أخزن بقى الdata بتاعتي، أعمل Retrieve للداتا، أقرأ data، أمسح data وهكذا. طيب هل هي database ذات نفسها؟ لأ، هي ممكن نقول إنها Layer، الـ Layer دي هي المسؤولة إنها تفتح الconnection، هي مسؤولة إنها تنفذ الـ Query جوه الdatabase  ذات نفسها، جوه الـ Database engine اللي هو مثلاً SQLite.
لكن هي ممكن تستهلك Memory كتير لأن أنا كل ما أعوز أغير في الـ Data مثلاً، أو يستدعي الأمر إننا لازم نغير، فبالتالي أنا مش هينفع أغير في نفس الـ Object، أنا لازم أعمل Object جديد فده ممكن يستهلك بس Memory أكتر يعني. نيجي عند حاجة تانية مهمة وهي الـ Null safety.
فالحاجة دي ممكن نسميها ORM، اللي هي Object-Relational Mapper، اللي هو بـ Map دلوقتي ما بين الـ Row في الdatabase والobject الموجود عندي في الcode بتاعي مثلاً بـ Kotlin. الobject الموجود عندي بيبقى ممكن Data types مختلفة مثلاً، أو Data type ممكن متكونش موجودة، فيبدأ يـ Map ما بين الاتنين ويحولهولي لـ Object في Kotlin بدل ما هو كان Row في الdatabase
الـ Null safety دي الفكرة إيه؟ الفكرة إن فيه Programs بتـ Handle الـ Nulls بشكل كويس أو Language بتـ Handle الـ Nulls بشكل كويس ولغات لأ. يعني لو أنت بتتعامل كـ Variable إنه عمره ما هيكون Null، إيه اللي هيحصل لو الـ User دخلك حاجة بـ Null؟ هل هو هيقبل ولا هيـ Crash أصلاً؟
فدي مهمة الـ Room Database، هي Compile-time verification SQL query. أنا الأول كنت المفروض أفتح الكونكشن Manual، وبعد كده ببعت الـ Query كـ String، فلو في أي Syntax error مش هعرف الـ Syntax error ده غير في الـ Runtime لما يجيلي Crash بقى. لا، ده لما بستخدم الـ Annotations والحاجات الـ Built-in الموجودة في الـ Room Database فبيخليني
سي إن الـ Program شغال وعلشان هو مثلاً داس Enter ونسي يكتب الاسم، فالبرنامج Crashed وفصل، ده طبعاً حاجة مش صح تمام. أوكي، تعالوا نشوف إزاي بيحصل ده، الـ Kotlin إزاي بتـ Handle الـ Nulls، لو أنا كتبت كدة..
أتاكد يعني الـ Query مظبوطة ولا لأ. طيب، في الـ Annotations دي اللي إحنا ممكن نستخدمها، و Streamline Database migration processes دي لو أنا مثلاً عايزة أزود Row جديد في الداتا... مش Row لا، لو نزود Column جديد مثلاً، أزود Data type تانية، أزود Attribute تاني في الداتا بيز، فبنعرف حاجة اسمها Migration اللي هو بـ Update الداتا بيز... بغير في الـ Schema اللي موجودة فبعمل..
ولو كتبت Null هيجيلي Compilation error تمام، لكن لو عملت Int علشان أقوله إن الـ Object اللي اسمه N length ده ممكن والله يبقى Null، ممكن يـ Assign ليه Null، ممكن يرجع من Function مثلاً مترجعش حاجة أو الـ Value تفشل إن أنا أحسبها فخلاص هيرجع Null، فبحط علامة الاستفهام دي علشان أـ Mark إنه Nullable.
update ,دي حاجة إحنا عندنا في الandroid في أهم تلات حاجات محتاجينها: أول حاجة الـ Entities، الـ Entities دي اللي هي بتعبر عن الـ Classes اللي موجودة عندي في Kotlin تمام؟ اللي هي هتكون الجداول اللي موجودة في الdatabase. والـ Data Access Objects، الobjects اللي أنا هبدأ أعرفها علشان أخد فيها الdata اللي راجعالي من الdatabase
Nullable اللي أنا ممكن يأخذ Null تمام. أنا لو هو Nullable بقى أنا لازم أعمل عليه Validate قبل ما أعمل عليه أي Operation، لازم أتأكد ده Null ولا لأ، لأن أنا معنى إنه Nullable يبقى أنا أتوقع إن الـ User ممكن يدخلي حاجة Null، طب لو Null خلاص لأ، أظهر له مثلاً Message إن لأ لازم تدخل الداتا.
وعندي الـ Main Database class، وده Class بيكون مسؤول عن العمليات والـ Data Access Objects والكلام ده. تمام؟ أول حاجة عندي الـ Entities، الـ Entities الـ Annotation بتاعها بيكون إيه؟ بيكون في الـ Entity إن ده بـ Mark إن الـ Class ده هو Entity، وبعد كده لو عايزة أـ Mark إن الـ Column ده هو الـ Primary key بتاعي بستخدم Primary key.
أوكي، ده الـ Assign برضه، فيه برضه نوع من الـ Design هنا لو أنا عايزة، زي إن الـ Val length ده إنه هنا بيقول له لو الـ Name ده -وبيحط له إنه ممكن يكون Null- لو هو مش Null فهو هيـ Assign ليه الـ Length، ممكن بالطريقة دي تمام
وده exampls  عليها، والـ Column Info دي مثلاً لو أنا عايزة Details زيادة أحطها في الـ Column زي ما مكتوب هنا مثلاً الـ Column Info الـ Name بيساوي Email Address، إن الـ Column ده في الdatabase هيكون الاسم بتاعه Email Address، لكن هو اسمه في Kotlin email.
لو الـ Name not equal Null خلاص دي الـ If statement يعني، ممكن بالـ Ternary operator، الـ Ternary operator دي إيه؟ دي الـ Condition بتاعتي تمام، لو الـ Condition true خلاص هيحط الـ Length، Otherwise لو الـ Condition false -يعني بعد علامة الاستفهام والـ Colon دي اللي هي ممكن نقول Else-
طيب خلونا نيجي للـ Relations، الـ Relations إزاي بقى بعرف إن... إحنا هنا بنتكلم مش يعني إيه Relation، إحنا هنا بنقول إزاي أعرف إن في ما بين اتنين Classes ريليشن في الداتا بيز. تمام؟ في عندنا هنا كمثال إن في Relation ما بين الـ Student والـ School، إن الـ School..
بيحط Zero تمام، ودي يعني كانت من الحاجات اللي ركزنا عليها برضه، ممكن تبصوا هنا برضه يعني دي ممكن تكون مهمة الـ Concepts بتاعتها عامة يعني، وبس كدة إحنا خلصنا الـ Lecture.
one-to-many relationship، الـ school عندها many students والـ student belong لـ school واحدة بس.. موجود في school واحدة بس تمام. فببدأ أعرف الـ parent class بتاعي عادي جداً، بعرف إن ده primary key والـ attributes اللي عندي وإن دي entity، وبعد كدا ببدأ define الـ student.
lecture 4
أنا خلاص كتبت الـ Student class، primary key، وكتبت الcolumn بتاعي، وكتبت الـ foreign key اللي هو الـ school id تمام. وعشان بقى أعمل configuration إن الـ class ده هو الـ child class، بنعمل.. نكتب زي class كده وببدأ أعرف فيه الـ table name، الـ parent.
الـ table name بتاعي اللي هو student، والـ students ده يعني اسم.. اسم الـ student في الداتابيز هو students تمام. وإن الـ foreign key بتاعه اسمه school id، وإن هو بيـ refer للـ school class، والـ school class في أنهي.. الـ school id بيشاور على أنهي كولوم؟ بيشاور على column اسمه id اللي هو الـ primary key بتاعي. ولما يتمسح..
لما يتمسح الـ parent، الـ foreign key cascade، يعني لما يتمسح الـ parent اللي هي الـ school، فالـ students هيتمسحوا. وأدي بقى الـ relationship آخر حاجة relationship class بـ define فيه إن أنا الـ school ببدأ آخد الـ school، ويعني إحنا كإن objectمثلاً اللي هو هيكون فيه الـ school وهيكون فيه لستة من الـ students كلهم والrelation بتاعتي إن أنا عندي.
الـ id اللي هو بتاع الـ school والـ foreign key اللي هو الـ school id تمام. تمام، دي إزاي بنـ configure relationship. نيجي عند الـ Data Access Object، الـ Data Access Object دي عبارة عن إيه؟ دي interface هي مسؤولة من خلالها إن أنا بقدر
objectt أعمل query، أرجع لستة من الـ schools تمام، أحدث أوبجيكت وهكذا. لو أنا عايز أعمل setup للdatabase وأدير الdatabase بتاعتي، ففي class عندنا مهم جداً اللي هو الـ AppDatabase، أو أياً كان اسم الclass، إيه هو الـ common اللي إحنا نسميه AppDatabase عشان نعرف إن ده الكلاس المسؤول عن الdatabase، وهنخلي الclass ده extend للـ RoomDatabase.
RoomDatabase بقى اللي هي الـ interface اللي هيبدأ يتعامل معاها من خلالها هيبدأ يـ inherit منها علشان يـ extend منها وينفذ الـ operations اللي هي أياً كان update، delete، والحاجات اللي بتتعامل مع الداتابيز دي تمام. المفروض بقى إن هو إيه.. هيعرف user جديد فيه عندي من داتابيز، إن أنا أعرفه إن الكلاس ده هو اللي هيكون مسؤول عن الداتابيز وأعرفه على الـ entities اللي موجودة user class.
تمام، الvesion بتاعه كام؟ دي الـ annotations الموجودة يعني. وبعد كدا ببدأ أعرف الobjects بتاعتي، أعرف الـ get functions، الـ update، الـ delete وهكذا. وعندنا الـ annotation أهي Volatile، Volatile دي معناها إيه؟ معناها إن لو الobject ده موجود في الdatabase، اللي هو الـ var instance.
في الdatabase  كإن إن أنا ميكونش thread ما بين multiple.. هو بيـ handle حتة الـ multi-threaded إزاي؟ Volatile معنى إن هو موجود في الcash تمام، ومعنى كدا إن مش أي حد ممكن يستخدمه يعني الobject ده موجود في الcash في الـ runtime.
تمام، فمش كل الـ students هتبقى شايفة نفس.. نفس الأوبجكت يعني. اوكي. and in the set كدا إحنا خلصنا lecture 5 الحمد لله