tag:blogger.com,1999:blog-56748795031262008882024-03-14T09:45:43.466-07:00Hussein NasserSoftware Engineer, Author
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.comBlogger411125tag:blogger.com,1999:blog-5674879503126200888.post-17981744915225723402022-11-04T13:34:00.000-07:002022-11-04T13:34:11.069-07:00YouTube Channel<a href="https://www.youtube.com/user/GISIGeometry">https://www.youtube.com/user/GISIGeometry</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipZcUPWWS1jzSZpnTdylvnKsvC0sqSt-NmuDo0mLZfpwriwGGJnOmy_XtfgrUTKmnQSgMax4aop01zoqYl7EZXOIC8DSRwC3qbTK258rnQpmIjq82jWxRruMJoCp4X6Tgk8Vxy_8w4gwR1/s1600/Copy+of+thon.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1102" data-original-width="735" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipZcUPWWS1jzSZpnTdylvnKsvC0sqSt-NmuDo0mLZfpwriwGGJnOmy_XtfgrUTKmnQSgMax4aop01zoqYl7EZXOIC8DSRwC3qbTK258rnQpmIjq82jWxRruMJoCp4X6Tgk8Vxy_8w4gwR1/s320/Copy+of+thon.png" width="213" /></a></div>
<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAIfZEHxxZOKsj7uGkuuycGVYACfxDj56WpsEfhORz3HFCdcy_SbgMBX12Uoam01_Ks2EL68MXDTs73W4QIAtFjUvCtwHgz-2JKYE8BF0S98nvNag8leQqb_1gfL0JlYhWtPmKF3EUrNLoHp99pFVfaq_6N-mw6mbrQvnVrmSXQy3X2mx3oZKb30y8Qg/s1600/Tcpip-2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAIfZEHxxZOKsj7uGkuuycGVYACfxDj56WpsEfhORz3HFCdcy_SbgMBX12Uoam01_Ks2EL68MXDTs73W4QIAtFjUvCtwHgz-2JKYE8BF0S98nvNag8leQqb_1gfL0JlYhWtPmKF3EUrNLoHp99pFVfaq_6N-mw6mbrQvnVrmSXQy3X2mx3oZKb30y8Qg/s320/Tcpip-2.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOxgY1lcgc1payQmCvipkfU4HLklNlf1715OZMdY1VzRxox67bArCukWp-S5PaDs4U06gVfNxO6ptRNof1cRVuWvR9Kdu1sUYGhAqxcqHGkaBAOC6XwJiE-Ho361tus2nFceWY6E-poZraY6FxryemHDTMIk3VbXFdqDVr3wM8Fff0_NNZuFERvpbTYQ/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOxgY1lcgc1payQmCvipkfU4HLklNlf1715OZMdY1VzRxox67bArCukWp-S5PaDs4U06gVfNxO6ptRNof1cRVuWvR9Kdu1sUYGhAqxcqHGkaBAOC6XwJiE-Ho361tus2nFceWY6E-poZraY6FxryemHDTMIk3VbXFdqDVr3wM8Fff0_NNZuFERvpbTYQ/s320/1.png" width="320" /></a></div><br /><div><br /></div>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-24426085658315377692021-05-06T12:23:00.001-07:002021-05-06T12:23:07.964-07:00Following an HTTP GET / through Switches, Routers, Gateways, and Proxies (Detailed Examples)<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://www.youtube.com/watch?v=98B6P_QAh68&list=PLQnljOFTspQUybacGRk1b_p13dgI-SmcZ&index=42" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="422" data-original-width="750" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirK58x0jyNMgU0mYzu8CCZ_1B1Q6yLv-L9ZqXCx64p0k9stqi4KB6O2pDT8Y_4Hc3LqzhHovhyphenhyphen3b7oijgLtt_MxaUfGOlXZrLsV5N83rWUyh6e77VmiuDJ6GDzA9MOrquXcxq_hG8EsDo4/w400-h225/router+%25284%2529.png" width="400" /></a></div><br /><p>In this networking <a href="https://www.youtube.com/watch?v=98B6P_QAh68&list=PLQnljOFTspQUybacGRk1b_p13dgI-SmcZ&index=42">video</a>, I’ll explain the difference between a gateway and a proxy but also illustrate the purpose behind routers and switches in the process. I’ll execute an HTTP GET request and follow its on-wire representation across multiple networks. Follow timestamps for the 3 examples I'll use. </p><p><br /></p><p><br /></p><p><br /></p>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-73867728450047857532020-12-04T07:34:00.006-08:002021-08-25T20:49:06.378-07:00Will AWS Babelfish Succeed in Moving Developers Away from SQL Server to Postgres?<p><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">In <a href="https://reinvent.awsevents.com/">AWS re-invent</a>, Amazon announced open-sourcing Babelfish for PostgreSQL, a SQL Server-compatible end-point for PostgreSQL to make PostgreSQL fluent in understanding communication from apps written for SQL Server. Let us discuss what is this technology and whether if it's gonna really move developers away from Microsoft SQL Server to Postgres</span></p><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">
Resources
</span><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">https://aws.amazon.com/blogs/opensource/want-more-postgresql-you-just-might-like-babelfish/</span><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">
</span><div><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">Watch the video here</span></div><div><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="300" src="https://www.youtube.com/embed/xvnY_tS-CtQ" width="470" youtube-src-id="xvnY_tS-CtQ"></iframe></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUAARuqVmjrT7UFsV1MlC6fQsZy34SMXVuLJAVt34DtR_dJi0i7Ta1RaZbZ0YeGPrsf-Hekl6unBWMMnB72AOkLyjIfQwSL4z7B0HkVKOvPrZGz0MxLmcz-gg2I4PfOgiAyneKDGP0UK2M/s750/nginx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="422" data-original-width="750" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUAARuqVmjrT7UFsV1MlC6fQsZy34SMXVuLJAVt34DtR_dJi0i7Ta1RaZbZ0YeGPrsf-Hekl6unBWMMnB72AOkLyjIfQwSL4z7B0HkVKOvPrZGz0MxLmcz-gg2I4PfOgiAyneKDGP0UK2M/s320/nginx.png" width="320" /></a></div><br /><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-65487273069364382682020-04-21T07:55:00.000-07:002020-04-21T07:55:15.461-07:00System Design and Backend Engineering Videos From Zero to Hero This collection of videos covers major system design concepts and fundamentals that every backend engineer needs to understand. This will help you in your design interviews. The videos are ordered in the way they should be consumed.<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLQnljOFTspQUNnO4p00ua_C5mKTfldiYT">Backend Engineering Playlist </a><br />
<br />
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-24652211179118764632020-03-11T19:18:00.001-07:002020-03-11T19:19:27.138-07:00SameSite Cookie Attribute Explained by Example (Strict, Lax, None & No SameSite)The recent version of Chrome has broke some workflows with samesite cookies. So a few weeks ago I made a video discussing the samesite Attribute change in chrome and how it is a great change that will end CSRF.<br />
<br />
It looks like Chrome 80 is officially out now and websites are broken or stuck in infinite loops. This is because Cookies without samesite Attribute are treated as samesite lax which means cookies will not be sent except if it is a GET request and top-level navigation clicking on a link
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/aUF2QCEudPo" width="480"></iframe>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-18035476007163584002020-02-29T18:49:00.007-08:002021-01-04T16:02:46.508-08:00gRPC Pros & Cons<span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">gRPC (gRPC Remote Procedure Calls) is an open source remote procedure call (RPC) system initially developed at Google in 2015. It uses HTTP/2 for transport, Protocol Buffers as the message format.
In this video I want to explore gRPC, go through examples, pros and cons of gRPC.
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Yw4rkaTc0f8/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Yw4rkaTc0f8?feature=player_embedded" width="320"></iframe></div>
<span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span>
<span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">
Client/ Server communication
- SOAP
- HTTP (REST)
- WebSockets
Client Libraries
gRPC
gRPC Demo
- todos
gRPC Pros and Cons
Pros
- Fast two/uni and request
- Unform
- One library to rule them all
- Progress feedback( long synchronous requests) drop pluggable wait...)
- cancel request
- All benefits of H2 and Protobuff
<b>Cons</b>
- schema based (not everyone wants schema)
- Thick client - limited languages - Proxies still don’t understand it
- Still young
- Error handling
- No native browser support
- Timeouts, circuit breaker just like any RPC (pub/sub rules in this case)
Can you create your own protocol?
- Spotify example with Hermes
Source Code
https://github.com/hnasr/javascript_playground/tree/master/grpc-demo
Timecode
Motivation - 4:30
-Client Server Communication 4:30
-THe problem with client libraries 8:40
- Why GRPc
gRPC - modes 16:40
- Unary - 17:20
- server streaming 17:40
- client streaming 18:30
- bidirectional 19:10
Coding : 19:40
Pros & Cons 57:00
Build own : 1:12:30
cards
00:30 H/2
7:00 graphQL
8:00 WebSockets
23:00 protobuff
Resources
https://grpc.io/docs/guides/
Haproxy grpc
https://www.haproxy.com/blog/haproxy-1-9-2-adds-grpc-support/
Nginx grpc
https://www.google.com/amp/s/www.nginx.com/blog/nginx-1-13-10-grpc/amp/
https://grpc.io/docs/guides/concepts/
🏭 Software Architecture Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQXNP6mQchJVP3S-3oKGEuw9
💾 Database Engineering Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQXjD0HOzN7P2tgzu7scWpl2
🛰 Network Engineering Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQUBSgBXilKhRMJ1ACqr7pTr
🏰 Load Balancing and Proxies Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQVMeBmWI2AhxULWEeo7AaMC
🐘 Postgres Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQWGrOqslniFlRcwxyY94cjj
🚢Docker
https://www.youtube.com/playlist?list=PLQnljOFTspQWsD-rakNw1C20c1JI8UR1r
🧮 Programming Pattern Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQV1emqxKbcP5esAf4zpqWpe
🛡 Web Security Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQU3YDMRSMvzflh_qXoz9zfv
🦠 HTTP Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQU6zO0drAYHFtkkyfNJw1IO
🐍 Python Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQU_M83ARz8mDdr4LThzkBKX
🔆 Javascript Videos
https://www.youtube.com/playlist?list=PLQnljOFTspQWab0g3W6ZaDM6_Buh20EWM
Stay Awesome,
Hussein</span><div><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div><div><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div><div><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div><div><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjA6N7t2OsWrDv1OTw6NscfHwFIzCCBNAeZ9g77N1Xg7emb5jEdKmpt52CqHmLhfwdEOQn7OUMma1eAnpaYd1luMUvEEcHHerhH_eJU5558lC1tbBLXG7CaDbqTUCSYSWEypS22qLCSWjE/s1050/db+%25281%2529.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1050" data-original-width="750" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjA6N7t2OsWrDv1OTw6NscfHwFIzCCBNAeZ9g77N1Xg7emb5jEdKmpt52CqHmLhfwdEOQn7OUMma1eAnpaYd1luMUvEEcHHerhH_eJU5558lC1tbBLXG7CaDbqTUCSYSWEypS22qLCSWjE/s320/db+%25281%2529.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyVxOfJ7YF0-TIHHVtE1rkJilrS4_tM19t6fUQ1LTt8vcRd8RUx_4dzgVdG8rbpyM9ne-_JtJJISfjZeyb64s_L9Ff-ae0r6To9lmA7Ui3W9_r_21gugeW4lHOzDGu1xFPCrdDcRRzp6NE/s370/database+engineering+udemy.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyVxOfJ7YF0-TIHHVtE1rkJilrS4_tM19t6fUQ1LTt8vcRd8RUx_4dzgVdG8rbpyM9ne-_JtJJISfjZeyb64s_L9Ff-ae0r6To9lmA7Ui3W9_r_21gugeW4lHOzDGu1xFPCrdDcRRzp6NE/s16000/database+engineering+udemy.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmYwjsfjhDnoILKjFTuCFBy6j1OQ_sup7gGVyLPC7yvX1f4_qc0bRtKEBTnzW18zzVFiy_OMXaZgR6gTtKBszvG2DorkRTrXFhqCNSRjAoczH4yr6neCGreDQYH6FUbXm-5602gBNDL0Kd/s370/database+engineering+udemy+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmYwjsfjhDnoILKjFTuCFBy6j1OQ_sup7gGVyLPC7yvX1f4_qc0bRtKEBTnzW18zzVFiy_OMXaZgR6gTtKBszvG2DorkRTrXFhqCNSRjAoczH4yr6neCGreDQYH6FUbXm-5602gBNDL0Kd/s16000/database+engineering+udemy+%25281%2529.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br /></span></div>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-69129137887491363952019-12-21T07:15:00.002-08:002020-10-05T17:36:14.297-07:00Database Engines Crash Course (MyISAM, Aria, InnoDB, XtraDB, LevelDB & RocksDB) Database Engines Crash Course (MyISAM, Aria, InnoDB, XtraDB, LevelDB & RocksDB)<br />
<br />
<span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;"><br class="Apple-interchange-newline" /></span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/K9Qd3UMHUQ4/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/K9Qd3UMHUQ4?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span color="rgba(0, 0, 0, 0.87)" face="Roboto, Noto, sans-serif" style="font-size: 15px; white-space: pre-wrap;">Database engines or storage engines or sometimes even called embedded databases is software library that a database management software uses to store data on disk and do CRUD (create update delete)
Embedded means move everything in one software no network client-server.
In this video I want to go through the few popular database engines, explain the differences between them and finally I want to spin up a database and change its engine and show the different features on each engine
Timecodes
What is a database Engine 3:00
myISAM 9:43
Aria 16:30
InnoDB 19:00
XtraDB 25:30
LevelDB 27:40
RocksDB 34:00
SQLite 38:11
BerkelyDB 42:00
Demo! 47:11
Cards
ACID 4:30
mysql/javascript 56:17
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6GaL6foOK9LI_AzBUom1Yg9A0IOXjbrI-pm6g2MSBvHErVPbyxkZ3IL84bKzVfpvGRSxn5lyQkAu9InBUkmGGOCJOXplBD7nvSG8l8clFL-jTtcahQscMo_wdmKF3DUeh2H1r4xv3MhnI/s350/db.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="350" data-original-width="250" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6GaL6foOK9LI_AzBUom1Yg9A0IOXjbrI-pm6g2MSBvHErVPbyxkZ3IL84bKzVfpvGRSxn5lyQkAu9InBUkmGGOCJOXplBD7nvSG8l8clFL-jTtcahQscMo_wdmKF3DUeh2H1r4xv3MhnI/s320/db.png" /></a></div><br />
Resources
https://youtu.be/V_C-T5S-w8g
https://mariadb.com/kb/en/library/changes-improvements-in-mariadb-102/
https://mariadb.com/kb/en/library/why-does-mariadb-102-use-innodb-instead-of-xtradb/
https://github.com/facebook/rocksdb/wiki/Features-Not-in-LevelDB
https://mariadb.com/kb/en/library/aria-storage-engine/
https://dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html
https://eng.uber.com/mysql-migration/
</span><br />
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-11384844125945890692019-11-02T19:06:00.001-07:002019-11-02T19:06:07.812-07:00Javascript by Example 3 hour free course<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="background-color: #f9f9f9; color: #0d0d0d; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;">This is a practical Javascript course by example, we will build a calculator from scratch in this course enjoy.
</span></div>
<div>
<span style="background-color: #f9f9f9; color: #0d0d0d; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></div>
<div>
<span style="background-color: #f9f9f9; color: #0d0d0d; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/qlhqcyB5Spo/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/qlhqcyB5Spo?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<br />
<span style="background-color: #f9f9f9; color: #0d0d0d; font-family: "roboto" , "noto" , sans-serif; font-size: 14px; white-space: pre-wrap;">Chapter 1
Title: Getting Started
Time Code: 5:00
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode01
Chapter 2
Title: Building User Interface
Time Code: 21:12
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode02
Chapter 3
Title: DOM, Events & Functions
Time Code: 50:30
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode03
Chapter 4
Title: Arrow Functions
Time Code: 1:28:05
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode04
Chapter 5
Title: Evaluate Expressions (eval)
Time Code: 1:44:44
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode05
Chapter 6
Title: Conditions
Time Code: 1:56:16
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode06
Chapter 7
Title: Running on Mobile
Time Code: 2:07:39
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode07
Chapter 8
Title: CSS, Arrays & Loops
Time Code: 2:20:55
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode08
Chapter 9
Title: Debugging
Time Code: 2:42:31
Source Code: https://github.com/hnasr/javascript-by-example/tree/L1-Episode09
Stay Awesome!
Hussein</span>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-83505243323598431682019-08-04T06:40:00.004-07:002019-08-04T06:40:54.574-07:00Layer 4 vs Layer 7 Load Balancing Pros and Cons<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; min-height: 14.0px}
li.li1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
ul.ul1 {list-style-type: hyphen}
</style>
<br />
<div class="p1">
Load balancing is the process of balancing incoming requests to multiple machines, processes or services. In this video, we will explain two types of load balancers, layer 4 and layer 7.<span class="Apple-converted-space"> You can watch the video or read the summary below.</span></div>
<div class="p2">
<br class="Apple-interchange-newline" /></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/aKMLgFVxZYk/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/aKMLgFVxZYk?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="p1">
<div class="p1">
<h4>
Layer 4 Load balancer (<a href="http://www.haproxy.org/">HAProxy</a>, <a href="https://docs.microsoft.com/en-us/windows-server/networking/technologies/network-load-balancing">NLB</a>)</h4>
</div>
<div class="p1">
</div>
Forwards packets based on basic rules, it only knows IP and PORT and perhaps latency of the target service.<span class="Apple-converted-space"> That is what is available at Layer 4/3. This load balancer doesn't look at the content so it doesn't know the protocol whether its HTTP or not, it doesn't know the URL or the path or the resource you are consuming or whether you are using GET or POST.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="p1">
<b>Pros</b></div>
<ul class="ul1">
<li class="li1">Great for simple packet-level load balancing</li>
<li class="li1">Fast and efficient doesn’t look at the data</li>
<li class="li1">More secure as it can't really look at your packets. So if it was compromised no one can look at the data.</li>
<li class="li1">Doesn't need to decrypt the content it merely forwards whatever content in it. </li>
<li class="li1">Uses NAT<span class="Apple-converted-space"> </span></li>
<li class="li1">One connection between client and server NATed so your load balancer can serve a maximum number of tcp connections = to (number of servers * max connections per server) </li>
</ul>
<div class="p1">
<b>Cons</b></div>
<ul class="ul1">
<li class="li1">Can't do smart load balancing based on the content, such as switch request based on the requested media type</li>
<li class="li1">Can't do real microservices with this type</li>
<li class="li1">Has to be sticky as it is a stateful protocol (all segments) once a connection is established it goes to one server at the backend. All packets flowing to this connection goes to one server. The next connection will pick another server based on the algorithm. </li>
</ul>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<div class="p1">
<h3>
Layer 7 (<a href="https://www.youtube.com/watch?v=4xGQS8Pv4io">Nginx</a> , <a href="http://www.haproxy.org/">HAProxy</a>)<span class="Apple-converted-space"> </span></h3>
</div>
<div class="p2">
<br /></div>
<div class="p1">
This type of proxy actually looks at the content and have more context, it knows you are visiting the /users resource so it may forward it to a different server. Essential and great for microservices, it knows the content is video:image and it can do compression. It can add its own headers so other proxies or load balancers can see that this has passed through a proxy. It can also cache, we can't really do caching on layer 4 because we have no clue whats in the packets.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p1">
But this is expensive because it has to decrypt and look and compute.</div>
<div class="p2">
<br /></div>
<div class="p2">
<b>Pros</b></div>
<ul class="ul1">
<li class="li1">Smart routing based on the URL (microservices) flexible<span class="Apple-converted-space"> </span></li>
<li class="li1">Provide caching</li>
</ul>
<div>
<span style="font-family: "helvetica neue";"><span style="font-size: 12px;"><b>Cons</b></span></span></div>
<ul class="ul1">
<li class="li1">Expensive need to decrypt</li>
<li class="li1">Security, you have to share your certificate with the load balancers. if an attacker compromised the load balancer they have access to all your data.</li>
<li class="li1">Proxy creates multiple connections (client to proxy/proxy to server)<span class="Apple-converted-space"> So you are bounded by the max TCP connection on your load balancer. Example if your load balancer supports 200 max TCP connections and you have 5 backend servers the load balancer servers each with 200 max connection. Your load balancer can only serve (concurrently) (200 - 5) clients. 5 connections are from the load balancer to each backend server and 195 available for clients. Where if that was a layer 4 load balancer you can server 200*5 connections.</span></li>
</ul>
<div>
<span style="font-family: "helvetica neue";"><span style="font-size: 12px;"><br /></span></span></div>
<div>
With all those cons we almost have to use Layer 7 load balancer because the benefits outway the cons, especially that we don't have resources constraints. </div>
<br />
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-54600516548572766082019-06-23T08:52:00.002-07:002019-06-23T08:52:33.775-07:00Transport Layer Secuirty - HTTP, HTTPS, TLS 1.2 and TLS 1.3<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #dca10d}
span.s1 {color: #dca10d}
span.s2 {font: 12.0px '.Apple Color Emoji UI'}
span.s3 {text-decoration: underline}
</style>
<br />
<div class="p1">
TLS which stands for transport layer security is a protocol for securing communication between client and server. Specifically for HTTPS. Thats what the S is stands for.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p1">
In this video, we will learn how insecure vanilla HTTP works, HTTPS, then we will learn how HTTPS is possible via the transport layer security and finally we will talk about the improvements in 1.3 that was published August 2018.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/AlE5X1NlHgg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/AlE5X1NlHgg?feature=player_embedded" width="480"></iframe></div>
<div class="p2">
<br /></div>
<h2>
Vanilla HTTP<span class="Apple-converted-space"> </span></h2>
<div class="p1">
Before we discuss TLS, HTTPS or anything else lets go through how HTTP request work. You can type in the browser <a href="http://www.google.com/"><span class="s1">www.husseinnasser.com</span></a> , the OSI magic kicks in, client figures out the IP address of <a href="http://google.com/"><span class="s1">h</span></a>usseinnasser<a href="http://google.com/"><span class="s1">.com</span></a> by calling the DNS which uses UDP. Then HTTP application layer makes a GET / request passes in the IP address and port 80 (default for insecure http). This creates an underlying TCP connection. GET / string among other stuff into the packet and send it over. TCP does its thing server receives GET / calls the appropriate process at the backend which could be just return index.html sets content type text/html and sends back big response for client. All of this obviously is plain text no encryption any kind and if you watched the OSI video we made you can tell that people can sniff/snoop packets and get packets they aren’t supposed to get</div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<h2>
HTTPS</h2>
<div class="p1">
Works by negotiating a symmetric key so they can both secure messages. Watch the video we did on encryption. Before we jump to GET request there must be a handshake <span class="s2">🤝</span> that must occur between the client and server. The tricky part is exchanging that key. Same thing as above except port is 443 instead of 80. Remember once we lose the TCP connection we will have to renegotiate the key. But beauty of this is HTTP is stateless so it remains working just fine.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<h2>
TLS 1.2 handshake <span class="s2">🤝</span><span class="Apple-converted-space"> </span></h2>
<div class="p1">
The original TLS handshake involves 4 roundtrips. A client hello which the client includes which encryption algorithms it supports (Both symmteric and asymmetric). The server receives the request then replies back with the server certificate which includes the server public key and also the encryptions that they will change to. The client receives the server hello, generates the premaster key, encrypts it with the server’s public key then send it over. The Server decrypts the message, gets the premaster generates the symmetric key finally tells the client that we are good to go.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<h2>
TLS 1.3<span class="Apple-converted-space"> </span>handshake <span class="s2">🤝</span><span class="Apple-converted-space"> </span></h2>
<div class="p1">
TLS 1.3 involves much shorter and much secure communication using only deffie hellman as key exchange and just two round trips.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<div class="p1">
Resources</div>
<div class="p3">
<a href="https://www.cloudflare.com/learning-resources/tls-1-3/">https://www.cloudflare.com/learning-resources/tls-1-3/</a></div>
<div class="p3">
<span class="s3"><a href="https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/">https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/</a></span></div>
<div class="p2">
<br /></div>
<div class="p2">
<span class="s3"></span><br /></div>
<div class="p2">
<span class="s3"></span><br /></div>
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-61455417131353542312019-06-15T18:47:00.002-07:002019-06-15T18:47:44.863-07:00Denial Of Service Attack ExplainedDOS attacks (denial of service) are type of attack on a server to prevent users from consuming a particular service, usually this is an HTTP web server. This could happen by either saturating the bandwidth of the pipe going to the server or by bringing the server down to its knees so it stops taking requests all together. In this video we will learn about 3 different types of DOS attacks and explain each one by example.<br />
<br />
<br />
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/4I7tPW8of2g/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/4I7tPW8of2g?feature=player_embedded" width="480"></iframe><br />
<br />
<h2>
Bandwidth based DOS</h2>
<h3>
Single DOS</h3>
Dos Sending Huge amount of data to a server with lower bandwidth from a client with higher bandwidth which ends up saturating the server pipe and queue up future requests, new requests will have to wait or perhaps denied service. Example, the attacker have 100mb/s bandwidth (upload) the server has 10Mb/s download. If the attacker starts sending 100 mb worth of data to the server, it will take it 1 second to leave the pipe. However, The server can only download 10 mb each second for processing because thats its bandwidth, so it needs 10 seconds to completely download that 100mb and process. In this 10 seconds the server is fully busy serving just 1 client. Other requests will not be able to even reach the server, they might get queued and they may never be executed. Thus denied service. It is important to know that the server must have an end point that actually accept such large data. Like upload file with no limit. Another example, is UDP where there is no connection.<br />
<br />
<h3>
Distributed DOS</h3>
Ddos this previous scenario is less likely since servers usually has much more bandwidth than a single computer. A common attack is to do a DOS in distributed manner. Assume a server with 1 Gb and client with 10 mb/s no matter how much data the client can send it can only send 10mb per second, and the server can go through them real quick. Example, the client sends 1GB, it will leave the client’s pipe into 100 (10mb) means the client will take 100 seconds just to upload all the data because it can only sends 10 mb each seconds. And the server is processing it so fast it each second and it will still have enough bandwidth to process other requests(1000-10). But imagine 100 users with 10 mb connection each, all coordinate to send 1 Gb worth of data to the server at the same time (critical that its in the same time) 100x10 each second they can send 1 Gb in total to the server, the server can only process 1 GB per second so the server will not be able to process any other requests because its bandwidth is saturated processing this 1 GB from different place. Make it 200 users and you just clogged the pipe.<br />
<br />
<br />
<h2>
Max connections based DOS</h2>
Another type of denial of service attack is by somehow force the server to reach its max connections. The web server usually sets a maximum number of tcp connections so that it doesn’t run out of memory. an attacker can perform a DOS attack to force the server to reach its max connection. once it does, it wont accept any more connections thus deny service of future requests. However it is not easy, web servers have good preventive measures to minimize unnecessary tcp connections. So you cannot just establish a connection and ghost the server. This isn’t your ex boyfriend. Server has good timeouts for connections that are idle, terminated or potentially harmful. However one possible attack is to establish a connection but send the data slowly so when the server tries to timeout it immediately reset the timeout and keep the connection alive! Assuming the max tcp connection is 200, Run your script 200 times and you just created 200 connections to the server so no new connection can connect.<br />
<br />
Servers do preventive measures to prevent alot of connections from the same client. In this case you wont be able to execute the 200 slow connections,<br />
Do this multiple times from different machines you reached the maximum.<br />
<br />
<h2>
Vulnerability based DOS</h2>
Another way to deny service is to destroy the server all together. If an attacker knows a zero day vulnerability, like say a buffer stack overflow that can be executed on an input that completely overflow the stack buffer and overwrite piece of memory to either terminate the process all together or even worse execute malicious code to gain control over the server.<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<div>
<br /></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com2tag:blogger.com,1999:blog-5674879503126200888.post-79985858134382520142019-05-26T20:04:00.001-07:002019-05-26T20:04:16.086-07:00When to use GET vs POST? (Caching vs Request size) GET and POST are the most popular http methods used on the web. Each carries its own differences and properties. It can confusing to get to choose when to use POST over GET. I made a video explaining my take on the differences, use cases and the benefits of using GET and POST. Check it out, here is a summary table.<br />
<div>
<br /></div>
<div>
</div>
<div>
<span id="docs-internal-guid-f162b5f8-7fff-2ea9-ebec-71d8673acee1"><table style="border-collapse: collapse; border: none;"><colgroup><col width="253px"></col><col width="253px"></col><col width="253px"></col></colgroup><tbody>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Property</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">GET</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">POST</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Body</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Data Request Limit</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes (2048 bytes)</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No limit</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Data Type</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Ascii only</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Any data</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Safe</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Idempotent</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Caching and Prefetching</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Bookmarkable</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No</span></div>
</td></tr>
<tr style="height: 40px;"><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Security?</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">No</span></div>
</td><td style="border-bottom: solid #9E9E9E 1px; border-left: solid #9E9E9E 1px; border-right: solid #9E9E9E 1px; border-top: solid #9E9E9E 1px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="font-family: "arial"; font-size: 14pt; vertical-align: baseline; white-space: pre-wrap;">Yes</span></div>
</td></tr>
</tbody></table>
</span></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Watch the video here </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/K8HJ6DN23zI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/K8HJ6DN23zI?feature=player_embedded" width="480"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: Times; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div>
<div style="margin: 0px;">
References</div>
<div style="margin: 0px;">
<a href="https://www.w3schools.com/tags/ref_httpmethods.asp">https://www.w3schools.com/tags/ref_httpmethods.asp</a></div>
<div style="margin: 0px;">
<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET">https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET</a></div>
<div style="margin: 0px;">
<br /></div>
</div>
</div>
<div>
<br /></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-85074059053294274232019-03-30T20:37:00.001-07:002019-03-30T20:37:24.871-07:00Sidecar pattern in Service Mesh (Explained by Example)<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">Sidecar Pattern is an architecture where two or more processes living in the same host can communicate with other via the loopback (localhost) essentially enabling interprocess communication. It is the foundation architecture on which service meshes such ad LinkerD and Envoy is built on.</span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;"> In this video, we will explain, how we do things the classical way and how the sidecar pattern works, the pros and cons. Sidecar pattern also enabled the service mesh such as linkerd and istio that make microservices even better. </span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">While sidecar pattern popularized in the containerized environment you can use it in the non-containerized environment as well. </span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">Pros </span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">* Decoupling thick libraries and references,. </span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">* Applications can evolve independently. </span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">* Polyglot - Each sidecar application can be written in its own language</span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">Cons</span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">* Latency </span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">* Complexity </span></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/zcJWvhzkPsw/0.jpg" src="https://www.youtube.com/embed/zcJWvhzkPsw?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 13.8px;">
<span style="font-size: 12pt;"></span><br /></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">Stay Awesome!</span></div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
</div>
<div style="font-family: Helvetica; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="font-size: 12pt;">Hussein</span></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-78549506685085522962019-01-12T14:00:00.003-08:002019-01-12T17:06:45.843-08:00To compute on the edge or on the cloud, that is the question. <div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-EtfJ0dJCisrGH0qJc_4Xs7zvE1JFHN3zIGxOHQFV4UkTfII0xCueLJi8iAOhZmTQOKN5TbG_x4Ae9KTb-YwK6htiPXmxcZibPJem7p4GisoitFcklfeQAXGb0lqU1GZFWPdNnG_GlErE/s1600/Copy+of+Copy+of+Copy+of+Copy+of+Before+you+are+ready.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1080" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-EtfJ0dJCisrGH0qJc_4Xs7zvE1JFHN3zIGxOHQFV4UkTfII0xCueLJi8iAOhZmTQOKN5TbG_x4Ae9KTb-YwK6htiPXmxcZibPJem7p4GisoitFcklfeQAXGb0lqU1GZFWPdNnG_GlErE/s320/Copy+of+Copy+of+Copy+of+Copy+of+Before+you+are+ready.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
It’s interesting. When I got my first computer in 1995, I was so excited to buy PC magazine and get a CD with a bunch of video games demo and trial software etc. what all the software had in common back then is they run completely independent from a server. Plug, install and Play. That comes with a limitation; Storage and compute. Developers have constrained to PC machines with limited resources and writing compute-heavy software was difficult because PCs can’t run them.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Slowly, software started to take a different shape when client-server architecture emerged. You will install the “client” piece software on your PC and the rest of the software lives on a server somewhere. This made developers offload the compute and storage to the server making the client code much “thinner”. This also allowed vendors to mass produce affordable client end-user hardware (laptops, pc, phones) since the compute required to run client software is minimum. This pattern is still dominant especially with the emergence of the cloud ☁️.<br />
<br />
In this day, client hardware is so much more powerful it is a waste to not utilize. That is why developers started to run compute jobs on the “edge” (another word for the client) to avoid the latency of sending a job to the cloud and wait for the result. This also served to be beneficial in case the edge network is intermittent.<br />
<br />
Will we eventually move back to running everything on the client? Will sending jobs to the Cloud becomes more expensive than executing it locally?<br />
<br />
It's interesting.<br />
<br />
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-20933887291385054042018-11-25T15:39:00.000-08:002018-11-25T15:41:24.864-08:00My New 2018 Video Course - Python on the Backend<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://www.udemy.com/python-on-the-back-end-for-beginners-http-server/?couponCode=PYBACK2018" style="margin-left: auto; margin-right: auto;" target="_blank"><img border="0" data-original-height="422" data-original-width="750" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv1EHR4TExWkwhyphenhyphenIeHfuvx8Iwz_Wdvk-xyUl-By5QowplhXP3JBC6mzgOWKbpo13vzSYQJTK1uW29fweqCyc-VXyqe2T90JgDqc2FOkGxB3RWkpWFdraFuggLMWTPhQqCpEYl7T7rBJVjT/s400/Copy+of+udemy-Learn+the+basics+of+Python+backend+development.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Click to check out the course 50% of for the holidays!</td></tr>
</tbody></table>
<br /><br />
Do you know Python and want to talk it to the next level? How about writing a website in Python, or an API so your fellow developers can consume in JSON over simple HTTP. With the boom of microservices and API, developers who are used to working with Python writing scripts can now take their knowledge to the backend. This course will teach you the basic of web servers, how to setup the Python Web server and write interesting cool applications on the backend.<br />
<br />
<h2>
What are the requirements?</h2>
Able to understand basic programming principles<br />
<br />
<h2>
What am I going to get from this course? </h2>
Build cool web applications and APIs for other clients to consume Developers will be able to serve a basic website with python Turn your python script into a web API<br />
<br />
<h2>
What is the target audience? </h2>
Beginners python developers who are interested in building HTTP web APIs in python<br />
<br />
<h3>
Check out the course 50% off for the Holiday's </h3>
<br />
<a data-saferedirecturl="https://www.google.com/url?q=https://www.udemy.com/python-on-the-back-end-for-beginners-http-server/?couponCode%3DPYBACK2018&source=gmail&ust=1543275289333000&usg=AFQjCNFtLo0N6QlWyPslidaRpjkbiMfKOg" href="https://www.udemy.com/python-on-the-back-end-for-beginners-http-server/?couponCode=PYBACK2018" style="background-color: white; color: #1155cc; font-family: Arial, Helvetica, sans-serif; font-size: small;" target="_blank">https://www.udemy.com/python-<wbr></wbr>on-the-back-end-for-beginners-<wbr></wbr>http-server/?couponCode=<wbr></wbr>PYBACK2018</a><br />
<br />
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com2tag:blogger.com,1999:blog-5674879503126200888.post-67832128964090790042018-11-18T11:41:00.000-08:002018-11-18T11:51:17.772-08:00My New Book for 2018 just published - Learn GIS Web Programming with ArcGIS Javascript API 4.9 and ArcGIS Online<div dir="ltr" style="line-height: 1.38; margin-bottom: 3pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 3pt; margin-top: 0pt;">
<span style="font-family: "arial"; font-size: 11pt; white-space: pre-wrap;"><br /></span></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://www.amazon.com/dp/B07KNHQ8NZ/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1542568174&sr=1-1" style="margin-left: auto; margin-right: auto;" target="_blank"><img alt="GIS Programming kindle book" border="0" data-original-height="1600" data-original-width="1003" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSh55ADrtIcgrj9PUiRXV2yBjAYvu0JQlR00SFJIzCReI-7Ye9JXJdzGDzJ5KqVsKPDI8KzAYf1F0L_qEb-MteyVq8ilUd-a0m6daUki3Y2g_mkWPT5UHus1BPrn8dGSVx3ATMQbA7oLoq/s400/KINDLE-1+%25281%2529.jpg" width="250" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">click on the image to purchase the ebook on Amazon</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<div class="p1">
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/q38IHVcBBFQ/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/q38IHVcBBFQ?feature=player_embedded" width="320"></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
<div class="p2">
In late 2012 I got an email from a book publisher author with a proposal to author a book. They have found me through my blog and linked a blog post I wrote back in 2009 on ArcGIS Server technology. I accepted their offer and wrote the book and 3 others that followed.</div>
<div class="p2">
<br /></div>
<div class="p2">
This makes me question, why did I write that original blog post? I didn’t know that one day a publisher will google that technology and find my post and make me an offer to write a book. I can’t remember why exactly I wrote that post but I knew that I was having fun doing it. Sharing my experience with the world through this writing always felt good to me.</div>
<div class="p2">
<br /></div>
<div class="p2">
In August 2017 I started a new series called Getting Started with ArcGIS Javascript API 4.x on YouTube. That series became really popular. The interaction on that series inspired me to write this book to discuss things I might have missed in that video series and to distill all my findings, knowledge into a book. So if you are new to the YouTube channel consider subscribing to check out more content over there https://www.youtube.com/igeometry</div>
<div class="p2">
<br /></div>
<div class="p2">
Today, I decided to re-live the experience of writing a book. However, no publisher is backing up this book. This book is written from the heart, full of joy, from me to you. It is a brain dump of what I think will be a very beneficial work for you guys.</div>
<div class="p2">
<br /></div>
<div class="p2">
As of the time of writing this preface, I did not pick a title of this book. And I’m feeling good about this. I know the topic and I can imagine how the book will look like. However, I feel that picking a title will force my thoughts through a narrow path and thus limit the potential of what this book could be. Obviously, if you are reading this that means I have already picked a title.</div>
<div class="p2">
<br /></div>
<div class="p2">
This book is about building web maps using Javascript technology. I picked Javascript because it is a resilient light-weight technology that can run on both the server and the client, mobile, IOT and supercomputer machines.<span class="Apple-converted-space"> </span></div>
<div class="p2">
<br /></div>
<div class="p2">
Traditional technology books discuss tools. “This is how to load a web map in a browser”. “This is how to query the rest endpoint”. “This is how to render a 3d map”. You get a catalog of tools and what they do. There is nothing wrong with this format. In fact, it is a good reference. However, you don’t get any context when reading such books to take action and build something. It is like learning what is a hammer, nail and screwdriver does but these tools are useless if no one shows you how to build a table using these tools.</div>
<div class="p2">
<br /></div>
<div class="p2">
I like to write my books by example, where I build an app and in the process explain the various tools I’m planning to use to build this app. Personally, I feel this is a better way of learning as it gives context.</div>
<div class="p3">
<br /></div>
<div class="p2">
I hope you enjoy this book.</div>
<div class="p2">
<br /></div>
<div class="p4">
<b>What are we building in this book ?</b></div>
<div class="p2">
We will be building a web mapping application from scratch. For tourists, we are building an app that helps users locate landmarks. The app shows the landmarks in a map such as libraries, cafes, restaurants schools and much more. It has a search capability to search for landmarks where they will be highlighted on the map. It also shows the nearby landmarks within specific miles from current location. So you can answer interesting questions such as show me all libraries within 100 feet of this coffee shop or are there any liquor stores within a mile from this school? I will be providing you with the sample data which I created myself, this data is not real it is just sample. All we need is to write the application. The app will run on both mobile and desktop.</div>
<div class="p2">
<br /></div>
<div class="p2">
Don’t worry if this seems like a lot. We will break down those functionalities into different chapters and slowly walk through each.</div>
<div class="p2">
<br /></div>
<div class="p4">
<b>Who this book is written for?</b></div>
<div class="p2">
Anyone interested in learning how to build a web mapping application. Basic programming knowledge is recommended but not required. I will explain all that is required as we go through the book.</div>
<div class="p2">
<br /></div>
<div class="p4">
<b>System Requirements</b></div>
<div class="p2">
I designed this book in a way so you don’t require a special or license to get started. I will be using a mac in this book but will include instructions for Windows and Linux. We will use ArcGIS Online free account to host our landmark data and ArcGIS Javascript API 4.x to write the web application. I will provide that data in GeoJSON format so we can upload it to ArcGIS Online.</div>
<div class="p2">
<br /></div>
<div class="p4">
<b>Software Requirements</b></div>
<div class="p2">
All you need on your machine is a text editor to write code and a web server to serve the static files. I will be using Node JS as a web server and Visual Studio Code as the text editor. We will take care of the download and installation of those two in chapter 1<a href="https://www.amazon.com/dp/B07KNHQ8NZ/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1542568174&sr=1-1"><span class="s1">.</span></a></div>
<div class="p5">
<a href="https://www.amazon.com/dp/B07KNHQ8NZ/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1542568174&sr=1-1"><br />
<span class="s2">Click here to checkout the book</span></a></div>
<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px 'Helvetica Neue'} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; min-height: 14.0px} p.p4 {margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px 'Helvetica Neue'} p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #dca10d} span.s1 {text-decoration: underline ; color: #dca10d} span.s2 {text-decoration: underline} </style>
<br />
<div class="p3">
<br /></div>
</div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-74407428805326689042018-11-03T19:30:00.000-07:002019-01-12T16:40:49.513-08:00What is State Transfer in REST architecture really mean?<br />
<h2>
Understanding State Transfer in REST<span class="Apple-converted-space"> </span></h2>
<div class="p1">
<br /></div>
<div class="p2">
One of the most critical properties of the REST Architecture (Representational State Transfer) is the protocol is stateless and the state gets transferred between the client and the server. I personally always found this to be confusing until I really learned architecture by actually using it. In this video, I will explain the state transfer in REST by example.<span class="Apple-converted-space"> </span></div>
<div class="p1">
<br /></div>
<div class="p2">
In a stateful architecture, the client makes a request to the server and the server “remembers” the client. The next request from the client will be retrieved from the state stored locally in the server. The pros of this are the server will pick up where they left off with each request, so request throughput is higher in stateful architecture. Another advantage of the client can send less data through the wire too. The cons of this architecture are if the server is down, the request cannot be fulfilled and the client is forced to disconnect and reconnect again to another server anyway and go through the entire process.</div>
<div class="p1">
<br /></div>
<div class="p2">
However, REST is a stateless architecture where every request is responsible to “bring” as much information about the client as possible for the server to reconstruct the state from scratch. This means that no matter what server the client hit, the request will always be fulfilled so you get higher availability. This is where the state transfer in REST came from. Disadvantages of this architecture is the client now sends more information through the wire, thus your application consumes more bandwidth as a result, this is less of an issue with the introduction of protocol buffers and HTTP2. Another disadvantage is the throughput goes down since each request has to wait for the state to “replay” and get constructed.<span class="Apple-converted-space"> </span></div>
<div class="p1">
<br /></div>
<div class="p2">
Hope you guys enjoy the video</div>
<div class="p2">
Check out the other content of this channel</div>
<div class="p2">
<br /></div>
<div class="p2">
<br /></div>
<div class="p1">
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/EKCM1oQQrCM/0.jpg" src="https://www.youtube.com/embed/EKCM1oQQrCM?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br /></div>
<div class="p3">
<br /></div>
<div class="p3">
For more software engineering videos click this link <a href="http://www.husseinnasser.com/softwareengineering">www.husseinnasser.com/softwareengineering</a></div>
<div class="p1">
<br /></div>
<div class="p2">
Hussein Nasser</div>
<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; min-height: 14.0px} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #dca10d} </style>
<br />
<div class="p1">
<br /></div>
<div class="p1">
<br /></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-4074480022701165312018-10-25T21:24:00.003-07:002018-10-25T21:25:19.034-07:00Announcing my Podcast<h3 class="post-title entry-title" itemprop="name" style="background-color: white; color: #666666; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; font-size: 22px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: normal; line-height: normal; margin: 0.75em 0px 0px; position: relative;">
Podcast</h3>
<div class="post-header" style="background-color: white; color: #666666; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; font-size: 10.8px; line-height: 1.6; margin: 0px 0px 1.5em;">
<div class="post-header-line-1">
</div>
</div>
<div class="post-body entry-content" id="post-body-4947175863814032655" itemprop="description articleBody" style="background-color: white; color: #666666; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; font-size: 13.2px; line-height: 1.4; position: relative; width: 546px;">
If you are interested in GIS and Software Engineering, you will enjoy my podcast. Check it out! </div>
<div class="post-body entry-content" id="post-body-4947175863814032655" itemprop="description articleBody" style="background-color: white; color: #666666; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; font-size: 13.2px; line-height: 1.4; position: relative; width: 546px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://husseinnasser.com/podcast" target="_blank"><img border="0" data-original-height="1080" data-original-width="1080" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiInTIyEoYo9J8uvv9mV_QMWqaccU6XhuO-MFRnksftROGE4Hh5r0Jk_qIQOXoeCFnJNFjcHHfaqZuLgR4FfhzfNUBV4wEs4dVbBtozbDWu8hyphenhyphencTrR_XwST18Ta4Sl36bxJNAXhC1xcE9E/s400/_twitter-podcast.png" width="400" /></a></div>
<div class="post-body entry-content" id="post-body-4947175863814032655" itemprop="description articleBody" style="background-color: white; color: #666666; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; font-size: 13.2px; line-height: 1.4; position: relative; width: 546px;">
<br /></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-76850707518743745282018-10-06T07:21:00.001-07:002018-10-06T07:24:37.147-07:00Product Architect vs Solutions Architect<span style="background-color: white; color: #111111; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;">In this episode of </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/results?search_query=%23softwaretalk" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">#softwaretalk</a><span style="background-color: white; color: #111111; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;">, we discuss the differences between the software product architect and a solutions architect. We start by defining the difference between a software product and a solution. Then we discuss the responsibilities of product architect vs solution architect. <br /><br />
If you are interested to be a solution or product architect or engineer you came to the right place. <br /><br />
Cheers<br />
Hussein</span><br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/IViXt1mpYX4" width="480"></iframe></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-55904861840359722152018-10-05T11:39:00.000-07:002018-10-05T11:39:11.888-07:00Reverse Engineering Twitter<span style="background-color: white; color: #111111; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;">This is our r</span>everse engineering<span style="background-color: white; color: #111111; font-family: "roboto" , "arial" , sans-serif; font-size: 14px; white-space: pre-wrap;"> series where we pick a mainstream app and try to understand how the developers built it, how the APIs are designed on the backend and how the front-end user experience is designed for performance, efficiency and business decisions. We can become better software engineers by learning how the likes of Google, Facebook, and Twitter are building APIs and user experiences. Obviously, I might make a mistake here and there but that is part of the fun!
In this episode, we try to reverse engineer the Twitter feed. We discuss how the IOS Twitter App is doing efficient thumbnail caching and insane client queuing of tweets, likes and retweets actions. Enjoy! </span><br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/igwG2_su-C0/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/igwG2_su-C0?feature=player_embedded" width="480"></iframe></div>
<br />
Enjoy!<br />
HusseinHussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com1tag:blogger.com,1999:blog-5674879503126200888.post-28607576537633418142018-10-04T11:37:00.006-07:002018-10-04T11:37:53.403-07:00#Geodatabase Talk - Episode 9 - SDE (Spatial Database Engine)<span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">The </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/results?search_query=%23geodatabase" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">#geodatabase</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"> is a technology developed by </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/results?search_query=%23Esri" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">#Esri</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"> that abstracts the underlying storage medium into another layer. By doing that you get interesting functionalities like domains, feature classes, tables, feature datasets across multiple databases from file based to enterprise RDBMS like Oracle, PostgreSQL, SQLServer DB2 etc.
The communication between the client and the enterprise geodatabase is done through the spatial database engine. We explain that layer in this episode.
</span><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/8HPXF0DQLFs/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/8HPXF0DQLFs?feature=player_embedded" width="480"></iframe></div>
<br />
<br />
<span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">Boost your GIS knowledge by grabbing my books
———————————————————————
- [x] Learning ArcGIS Geodatabase </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FcsQdCX" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/csQdCX</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Administering ArcGIS for Server </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FzvYCRg" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/zvYCRg</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] ArcGIS By Example </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FyJKSqB" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/yJKSqB</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Building Web Applications with ArcGIS </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FbrgKUJ" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/brgKUJ</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
Watch my top GIS videos
————————————
- [x] Support IGeometry on paypal: </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FwZ8hSh" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/wZ8hSh</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Full ArcGIS Javascript API Series Playlist </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=http%3A%2F%2Fbit.ly%2F2zf7G80" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">http://bit.ly/2zf7G80</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Full Multi-User Geodatabase Playlist </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FnSgYnM" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/nSgYnM</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Full ArcGIS Pro 2.x Playlist </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2F2j4NoZ" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/2j4NoZ</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Full ArcGIS By Example (C#) [Phonatech] Playlist </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FFwdrHa" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/FwdrHa</a><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">
- [x] Full ArcGIS Server Playlist </span><a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/redirect?redir_token=oW7d1i_2VPaYpwKOXv2z2GY-TW98MTUzODc2NDU5N0AxNTM4Njc4MTk3&event=video_description&v=8HPXF0DQLFs&q=https%3A%2F%2Fgoo.gl%2FnkfM6Q" rel="nofollow" spellcheck="false" style="background-color: white; cursor: pointer; display: inline-block; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-decoration-line: none; white-space: pre-wrap;">https://goo.gl/nkfM6Q</a><br />
<br />
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-3334589234004865502018-10-01T11:59:00.000-07:002018-10-01T11:59:00.354-07:00Is Coding Easy?<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
<span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;">Welcome to the first episode of <a href="https://www.husseinnasser.com/2018/09/how-to-become-better-software-engineer.html">software engineering talk</a>. This series we pick a topic and casually talk about it. In today’s episode, we try to answer the question is Coding easy? </span></div>
<span style="background-color: white; text-align: start;"><div style="text-align: left;">
<span style="color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></div>
<div style="color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: justify; white-space: pre-wrap;">
Intro: <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=0s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">0:00</a></div>
</span><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;"><div style="text-align: justify;">
Easy vs. Simple <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=200s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">3:20</a></div>
</span><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;"><div style="text-align: justify;">
Building a profile page example: <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=235s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">3:55</a></div>
</span><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;"><div style="text-align: justify;">
Database Level challenges: <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=360s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">6:00</a></div>
</span><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;"><div style="text-align: justify;">
Database Indexes: <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=480s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">8:00</a></div>
</span><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;"><div style="text-align: justify;">
SELECT * FROM: <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=535s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">8:55</a></div>
</span><span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: start; white-space: pre-wrap;"><div style="text-align: justify;">
Be Empathic of all software actors: <a class="yt-simple-endpoint style-scope yt-formatted-string" href="https://www.youtube.com/watch?v=iuynM_7vrd8&t=620s" spellcheck="false" style="cursor: pointer; display: inline-block; text-decoration-line: none;">10:20</a></div>
</span><span style="background-color: white; text-align: start;"><div style="text-align: justify;">
<span style="color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></div>
<div style="color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: justify; white-space: pre-wrap;">
Cheers!</div>
<div style="color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: justify; white-space: pre-wrap;">
Hussein Nasser</div>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/iuynM_7vrd8/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/iuynM_7vrd8?feature=player_embedded" width="480"></iframe></div>
<div style="text-align: justify;">
<br /></div>
Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-56728345014074467702018-09-30T11:57:00.003-07:002018-09-30T11:57:44.077-07:00How to become a Better Software Engineer?There is no secret, no magic potion, no pill or book or a “new” programming language that will make you a better software engineer. To be a better software engineer you have to write more software. Write silly software, write fart software, write stupid software, write bad performant software. Write enough software to give the edge to be better than other software engineers and software developers.<br />
<br />
Enjoy the video!<br />
<br />
Hussein<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/1T2xcarK5TU/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/1T2xcarK5TU?feature=player_embedded" width="480"></iframe></div>
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-52832574863154130942018-09-09T08:51:00.001-07:002018-09-09T08:51:11.617-07:00MIME sniffing (Explained by Example)<span style="background-color: white; color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">Any content that is served through HTTP web “should” include meta data about its type. This is so the browser/client knows what to do with it, if the content type header is an image it will preview it, if it is HTML it will render it and execute any javascript code. <br />
<br />
Content type however is optional and web masters sometimes don’t set it, which leave the browsers wondering about the content type it is consuming. So browsers started consuming the actual content and parse it in order to detect the type. <br />
<br />
However, this caused security concerns that we explain in this video! So to prevent sniffing, web servers can return X-Content-Type-Options: nosniff which opts out browsers from sniffing the content.<br />
<br />
Media types: </span><span style="color: #111111; font-family: Roboto, Arial, sans-serif;"><span style="font-size: 14px; white-space: pre-wrap;"><a href="https://en.wikipedia.org/wiki/Media_type#Common_examples">https://en.wikipedia.org/wiki/Media_type#Common_examples</a></span></span><br /><br />
<span style="color: #111111; font-family: Roboto, Arial, sans-serif;"><span style="font-size: 14px; white-space: pre-wrap;"><br /></span></span><br />
<span style="color: #111111; font-family: Roboto, Arial, sans-serif;"><span style="font-size: 14px; white-space: pre-wrap;"><br /></span></span><br />
<br /><br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/eq6R6dxRuiU" width="480"></iframe>Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0tag:blogger.com,1999:blog-5674879503126200888.post-72722310038451783642018-09-06T20:54:00.003-07:002018-09-06T20:54:34.832-07:00Administering ArcGIS for Server by Hussein Nasser<div style="background-color: white; color: #494949; font-family: "ubuntu" , sans-serif; font-size: 14px; margin-bottom: 1.2em; margin-top: 0.6em; padding: 0px;">
<div class="separator" style="clear: both; color: black; font-family: Times; font-size: medium; text-align: center;">
<br class="Apple-interchange-newline" /></div>
<div class="separator" style="clear: both; color: black; font-family: Times; font-size: medium; text-align: center;">
<a href="https://www.packtpub.com/networking-and-servers/administering-arcgis-server"><img border="0" data-original-height="617" data-original-width="500" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnwmmxry9_pvRYu27Lj9HrB365p_g0Kn_3KC2Nr09aUfQCZOG2F1FDZkHsZOUdJSaJnCGXUnD71CIqXupep5y_7ryxqymu4rPy_8JhnHroDrkLwvCLP9KmV7AXGFv-GV3FvRhhuA3lusjg/s320/7364EN+Administering+ArcGIS+for+Server+10.2_cov.jpg" width="259" /></a></div>
<div style="color: black; font-family: Times; font-size: medium;">
<br /></div>
<div class="separator" style="clear: both; color: black; font-family: Times; font-size: medium; text-align: center;">
<a href="https://www.packtpub.com/networking-and-servers/administering-arcgis-server"><img alt=" Buy ArcGIS by Example" border="0" data-original-height="398" data-original-width="886" height="89" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHUfaM7AJrSdU9nAfXI9cB0g5tUMUF9kyfDTrdG38n-iTSW89gcEsZ9U-Q_xBeEJGdXx7Pb9A08p6TWvYVYI76cSaIUgz4dCcS9QLodx4vDgWYYbG0BAA0Tke-1yksjvKTEJQn-fUBPjsm/s200/Screen+Shot+2018-09-06+at+8.31.00+PM.png" width="200" /></a></div>
<div class="separator" style="clear: both; color: black; font-family: Times; font-size: medium; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; color: black; font-family: Times; font-size: medium; text-align: center;">
<br /></div>
<br />
ArcGIS for Server is a new technology that has been developed to bring geographically-enabled information from multiple sources into one single platform and make it available for sharing services. Server supports many types of services, and the beauty of this technology is that it has an edge over other products, as the source of information can be directly plugged into Server without the need to change or migrate the existing infrastructure.</div>
<div style="background-color: white; color: #494949; font-family: "ubuntu" , sans-serif; font-size: 14px; margin-bottom: 1.2em; margin-top: 0.6em; padding: 0px;">
Administering ArcGIS for Server teaches you the mechanics of ArcGIS for Server, equipping you with the skills to not only install and configure Server, but to do it efficiently to achieve effective results. You will also learn how to plan, analyze, design, and finally publish and consume GIS services from various platforms including mobile and tablets.</div>
<div style="background-color: white; color: #494949; font-family: "ubuntu" , sans-serif; font-size: 14px; margin-bottom: 1.2em; margin-top: 0.6em; padding: 0px;">
We start by installing Server and authoring and consuming GIS services. We then move on to planning services before showing you how to optimize, secure, and debug them.</div>
<div style="background-color: white; color: #494949; font-family: "ubuntu" , sans-serif; font-size: 14px; margin-bottom: 1.2em; margin-top: 0.6em; padding: 0px;">
One of the hot topics in this book is the optimizing of GIS services, which will help you manage resources efficiently. You will also learn how to apply multiple security mechanisms on ArcGIS for Server and safely expose the services to the public in a secure manner.</div>
<div style="background-color: white; color: #494949; font-family: "ubuntu" , sans-serif; font-size: 14px; margin-bottom: 1.2em; margin-top: 0.6em; padding: 0px;">
Administering ArcGIS for Server will help you prepare a robust Server infrastructure for your organization.<br />
<br />
Thank you guys for buying my book! Enjoy it and check out <a href="https://www.youtube.com/igeometry">my 200+ free video tutorials on IGeometry YouTube channel. </a></div>
<br />
<br />
<br />
<br />
<br />
<br />Hussein Nasserhttp://www.blogger.com/profile/18310476423554125845noreply@blogger.com0